caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Does LablTk have a future?
@ 2005-08-28 15:38 Matt Gushee
       [not found] ` <aefe758210f7fa0b9846b0ea4278cf3a@rouaix.org>
  2005-08-29 22:33 ` Jon Harrop
  0 siblings, 2 replies; 68+ messages in thread
From: Matt Gushee @ 2005-08-28 15:38 UTC (permalink / raw)
  To: caml-list

Hello, list members--

I've been thinking about GUI toolkits lately, and particularly Tk. I 
know there are a lot of people who believe Tk is dead, or should die. 
Personally, I'm not so sure. If you look at the features of Tk 8.5, and 
the development roadmap for future versions--perhaps it's too little, 
too late--but it is clear that the core Tcl/Tk developers are far from 
giving up. Indeed, they seem lately to have gotten a clue about what is 
needed to keep Tk a viable GUI toolkit.

Regardless of the status of Tk itself, LablTk seems to be going nowhere 
(note that I am not implying any criticism of the OCaml team--they have 
other, quite legitimate, priorities). It is poorly documented and is not 
keeping up with the recent improvements in Tk. Those who try to use it 
often run into trouble, and have difficulty getting their questions 
answered. Yet, for whatever reason, it remains the default GUI toolkit 
for OCaml.

I believe that Tk, while certainly not an ideal GUI, is still adequate 
for many applications, and if the above deficiencies are remedied, could 
still serve as OCaml's default GUI library for some time to come. And it 
occurs to me that, having several years' experience with Tk in various 
forms, and having studied much of the LablTk source code, I am in a 
position to do several things that might help revive LablTk. My purpose 
today is to inquire whether there is enough interest in the community to 
justify any or all of these projects. If there is, I am prepared to work 
on one or more of them--preferably with collaborators, but alone if 
necessary. If there is little or no interest, maybe it is time to 
consider (again) dropping LablTk entirely. Who wants to maintain code 
that isn't used or usable?

1) A Quick Reference

    This document would outline (with little or no explanation) the
    complete LablTk API, including all widget commands and the possible
    values of all LablTk-specific types. Currently the latter information
    can only be obtained by digging through the source code.

    Actually, I wrote a LablTk quick reference some time ago. It may need
    a bit of work, but no more than a couple of hours, I'm sure. So I
    *will* do this if there is any interest at all in it.

2) A Book

    This would be an in-depth tutorial on how to develop useful
    applications with LablTk. It would assume some programming
    experience, but it would not require advanced knowledge of OCaml, nor
    any knowledge of Tcl.

    I'm thinking to publish both a print edition and an inexpensive
    electronic edition. Though I need to research the costs a bit more, I
    believe I can offer the print edition--self-published using Print On
    Demand--at a reasonable price, comparable to what you pay for
    programming books at a bookstore (no, I don't hope to get rich off
    this--just to be modestly compensated for my efforts ;-).

3) A Community-based Modernization Project

    The idea here is to provide a Tk-based GUI library that is complete
    and in sync with the latest stable version of Tk. Other features that
    would be nice to have include (a) support for a few Tcl commands that
    are not strictly part of Tk, but are useful and commonly used in Tk
    programs--in particular I'm thinking of the 'after' command; and (b)
    a framework that allows downstream developers to create custom
    widgets with interfaces analogous to the builtin widgets. I'm not
    sure if (b) is feasible or not within the constraints of the OCaml
    type system--I've tried and failed in the  past--but I imagine
    there's some way to do it.

    Two other interrelated questions are whether this project should be
    done in parallel with LablTk or as a replacement, and whether the
    LablTk API should be preserved or something new designed. But it's
    probably not necessary to decide these questions immediately.

I eagerly await your comments.

--
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
       [not found] ` <aefe758210f7fa0b9846b0ea4278cf3a@rouaix.org>
@ 2005-08-28 23:21   ` Matt Gushee
  0 siblings, 0 replies; 68+ messages in thread
From: Matt Gushee @ 2005-08-28 23:21 UTC (permalink / raw)
  To: caml-list

Francois Rouaix wrote:

> I'm not active in the LablTk or CamlTk community anymore, but as the 
> writer of the (probably) largest piece of CamlTk code lying around (the 
> MMM browser), I want to let you know to feel free to pilfer code from 
> MMM, if useful or relevant.

Thanks!

> Also, you mention "extra Tcl" commands such as "after". I remember after 
> and timers to be present in CamlTk. Maybe they weren't ported to LablTk.

Yes, I think that's right. I wrote an app about a year ago that needed 
'after'. Though for some reason I can't recall, I didn't want to use the 
CamlTk version verbatim, I did model my implementation after it.

--
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-28 15:38 Does LablTk have a future? Matt Gushee
       [not found] ` <aefe758210f7fa0b9846b0ea4278cf3a@rouaix.org>
@ 2005-08-29 22:33 ` Jon Harrop
  2005-08-30  4:39   ` Matt Gushee
                     ` (2 more replies)
  1 sibling, 3 replies; 68+ messages in thread
From: Jon Harrop @ 2005-08-29 22:33 UTC (permalink / raw)
  To: caml-list

On Sunday 28 August 2005 16:38, Matt Gushee wrote:
> Regardless of the status of Tk itself, LablTk seems to be going nowhere

It is odd that you should bring this up now. I've spent the past week writing 
a simple database for a new veterinary surgery in OCaml using labltk. I had 
tried lablgtk before but failed to get to grips with it. By comparison, the 
labktk examples explained everything that I needed and I had a decent GUI up 
and running within a few hours.

May I add another question to this thread: What do people think of OCaml's GUI 
libraries in terms of stability?

> 1) A Quick Reference
>
>     This document would outline (with little or no explanation) the
>     complete LablTk API, including all widget commands and the possible
>     values of all LablTk-specific types. Currently the latter information
>     can only be obtained by digging through the source code.
>
>     Actually, I wrote a LablTk quick reference some time ago. It may need
>     a bit of work, but no more than a couple of hours, I'm sure. So I
>     *will* do this if there is any interest at all in it.

I haven't used anything exotic (or even non-trivial) but it seems to me that 
the API is already so simple that there isn't really a need for a quick 
reference.

> 2) A Book
>
>     This would be an in-depth tutorial on how to develop useful
>     applications with LablTk. It would assume some programming
>     experience, but it would not require advanced knowledge of OCaml, nor
>     any knowledge of Tcl.
>
>     I'm thinking to publish both a print edition and an inexpensive
>     electronic edition. Though I need to research the costs a bit more, I
>     believe I can offer the print edition--self-published using Print On
>     Demand--at a reasonable price, comparable to what you pay for
>     programming books at a bookstore (no, I don't hope to get rich off
>     this--just to be modestly compensated for my efforts ;-).

I think labltk is too specific to be commercially viable. Also, unless I've 
missed some hidden complexities in Tk programming, I think you'd have a job 
filling enough pages to call the result a book.

However, I would be very interested in a book that described how to write GUIs 
using OCaml. I'm still learning how to write and factor "conventional" GUI 
code in OCaml. I have also written custom GUIs using OpenGL (via lablGL) and 
OCaml is superb for this task.

As I'm the author of the only existing self-published book on OCaml, you may 
be interested to know that it is doing well (~500UKP per month for 6 months 
so far). So I would recommend that other people take the plunge and write 
more books on OCaml.

> 3) A Community-based Modernization Project
>
>     The idea here is to provide a Tk-based GUI library that is complete
>     and in sync with the latest stable version of Tk. Other features that
>     would be nice to have include (a) support for a few Tcl commands that
>     are not strictly part of Tk, but are useful and commonly used in Tk
>     programs--in particular I'm thinking of the 'after' command; and (b)
>     a framework that allows downstream developers to create custom
>     widgets with interfaces analogous to the builtin widgets. I'm not
>     sure if (b) is feasible or not within the constraints of the OCaml
>     type system--I've tried and failed in the  past--but I imagine
>     there's some way to do it.
>
>     Two other interrelated questions are whether this project should be
>     done in parallel with LablTk or as a replacement, and whether the
>     LablTk API should be preserved or something new designed. But it's
>     probably not necessary to decide these questions immediately.

I think it would be more constructive to create a decent cross-platform GUI 
library from the ground up for FPLs/OCaml. This wouldn't need to be anything 
fancy, just easy access to the simplest GUI elements to start with. I'd like 
to see GUIs described by purely functional data structures. I'm still 
factoring my current code so I'll let you know what I come up with. Also, 
despite GUI code being a pedagogical example for OO, I'm not yet convinced 
that OO adds anything useful.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-29 22:33 ` Jon Harrop
@ 2005-08-30  4:39   ` Matt Gushee
  2005-08-30 11:39     ` Yaron Minsky
  2005-08-30 11:48     ` Jon Harrop
  2005-08-30  7:16   ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
  2005-08-30 17:35   ` [Caml-list] Does LablTk have a future? Olivier Andrieu
  2 siblings, 2 replies; 68+ messages in thread
From: Matt Gushee @ 2005-08-30  4:39 UTC (permalink / raw)
  To: caml-list

Jon Harrop wrote:

>>Regardless of the status of Tk itself, LablTk seems to be going nowhere 
> 
> It is odd that you should bring this up now. I've spent the past week writing 
> a simple database for a new veterinary surgery in OCaml using labltk. I had 
> tried lablgtk before but failed to get to grips with it. By comparison, the 
> labktk examples explained everything that I needed and I had a decent GUI up 
> and running within a few hours.

Yes, it does have that simplicity about it.

>>1) A Quick Reference

> I haven't used anything exotic (or even non-trivial) but it seems to me that 
> the API is already so simple that there isn't really a need for a quick 
> reference.

Well, you need some source of information other than the OCaml manual. 
To give just one example, if you want to do anything serious with 
Listbox widgets, you need to know the Listbox.index type, which isn't 
described in the manual.

Now, I have lately realized that you can explore LablTk with 
ocamlbrowser, so a reference doc isn't strictly necessary. But you could 
say the same about any OCaml module ... anyway, the document mostly 
exists, and some people may find it more convenient/pleasant to use a 
Web page or a printed document.

>>2) A Book

> I think labltk is too specific to be commercially viable.

Specific in what sense? And do you mean LablTk as a tool, or as a book 
topic?

> Also, unless I've 
> missed some hidden complexities in Tk programming, I think you'd have a job 
> filling enough pages to call the result a book.

Ever used the Canvas or Text widgets? There's a lot going on there. 
Besides, there are several mainstream (i.e. published by major tech 
publishers and available in any well-stocked bookstore) books about Tk 
programming (including at least Tcl/Tk, Perl/Tk and Tkinter). They've 
mostly been available for several years, so there must be some market 
for them.

Of course--and as an author/publisher, I'm sure you know this--the 
questions of what to write about, and how and how much, depend a great 
deal on the audience.

I can tell you that when I read _Effective Tcl/Tk Programming_ in about 
'98, when my GUI-coding experience was limited to a few toy apps in 
Visual Basic, I found it tremendously useful, with its in-depth 
explanation and extended examples of the more complex widgets, geometry 
managers, and the event handling mechanism. Properly described, it was a 
book about GUI programming *with* Tk, rather than strictly about Tk itself.

Maybe today's OCamlers are by and large beyond needing that sort of 
book. But it's kind of self-defeating to take for granted that the 
status quo will continue. I'm inclined to think that as OCaml gains in 
popularity--as it is certainly doing--there will be more people who need 
more hand-holding. Which doesn't necessarily mean there's much of market 
for a book such as I've proposed, just that I see some reason to hope.

> However, I would be very interested in a book that described how to write GUIs 
> using OCaml.

That might indeed be a good thing. I don't think, in my current state of 
knowledge, I'm the one to write it.

> As I'm the author of the only existing self-published book on OCaml, you may 
> be interested to know that it is doing well (~500UKP per month for 6 months 
> so far).

Well, at 85 quid a pop, I should think so (what is that in US money, 
about $120?)! But you're targeting an audience that has significant 
institutional support. I doubt very much that any and all OCaml books 
can be sold for that kind of money.

>>3) A Community-based Modernization Project

> I think it would be more constructive to create a decent cross-platform GUI 
> library from the ground up for FPLs/OCaml.

Great idea! But it sounds to me like the kind of thing that will never 
get finished.

> This wouldn't need to be anything 
> fancy, just easy access to the simplest GUI elements to start with.

What kind of apps do you envision writing with only the simplest elements?

> I'd like to see GUIs described by purely functional data structures. I'm
> still factoring my current code so I'll let you know what I come up with.
> Also, despite GUI code being a pedagogical example for OO, I'm not yet
 > convinced that OO adds anything useful.

Agreed. Once I too was among the benighted souls, those who worship the 
false god of OO. But then I saw the functional light, and I was saved! 
Amen, brother!

Thanks for the comments. Lots of good food for thought there.

--
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-29 22:33 ` Jon Harrop
  2005-08-30  4:39   ` Matt Gushee
@ 2005-08-30  7:16   ` David MENTRE
  2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
                       ` (2 more replies)
  2005-08-30 17:35   ` [Caml-list] Does LablTk have a future? Olivier Andrieu
  2 siblings, 3 replies; 68+ messages in thread
From: David MENTRE @ 2005-08-30  7:16 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

Hello,

2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
>  I had tried lablgtk before but failed to get to grips with it. 

The client of my application is also written in Lablgtk2 and, despite
helpful answers by Jacques Garrigue and Olivier Andrieux as well as
SooHyoung Oh's tutorials, I find programming with Labgtk2 not very
easy (to say the least). I find Lablgtk2 is largely under-documented.
Of course, this is a large task that cannot be achieved by two
individuals.

> I think it would be more constructive to create a decent cross-platform GUI
> library from the ground up for FPLs/OCaml. This wouldn't need to be anything
> fancy, just easy access to the simplest GUI elements to start with. I'd like
> to see GUIs described by purely functional data structures. 

I'd also loved too. Having a cross-platform GUI (with native look and
behaviour on Windows and MacOS X),   programmed using a functional
style, well documented (with reference manual and tutorial) and with
necessary tools (GUI design application) would be very very helpful.

However this is a huge task. To add on your initial question:
  1. do you think a minimal part of the OCaml community could
aggregate to ensure the long term maintainability of the toolkit?

  2. how to have a modern look (with whatever definition you might
find for it) which *is* a discriminant point when choosing a GUI?

  3. how to respond to toolkit's users that need to have more "exotic"
widgets/systems?

Yours,
david


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml
  2005-08-30  7:16   ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
@ 2005-08-30  9:53     ` Christophe Raffalli
  2005-08-30 10:28       ` [Caml-list] " David MENTRE
                         ` (2 more replies)
  2005-08-30 14:14     ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) Richard Jones
  2005-08-30 22:31     ` yoann padioleau
  2 siblings, 3 replies; 68+ messages in thread
From: Christophe Raffalli @ 2005-08-30  9:53 UTC (permalink / raw)
  Cc: Jon Harrop, caml-list

David MENTRE a écrit :

 > Hello,
 >
 > 2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
 >
 >> I had tried lablgtk before but failed to get to grips with it.
 >
 >
 >
 > The client of my application is also written in Lablgtk2 and, despite
 > helpful answers by Jacques Garrigue and Olivier Andrieux as well as
 > SooHyoung Oh's tutorials, I find programming with Labgtk2 not very
 > easy (to say the least). I find Lablgtk2 is largely under-documented.
 > Of course, this is a large task that cannot be achieved by two
 > individuals.
 >
 >
 >> I think it would be more constructive to create a decent 
cross-platform GUI
 >> library from the ground up for FPLs/OCaml. This wouldn't need to be 
anything
 >> fancy, just easy access to the simplest GUI elements to start with. 
I'd like
 >> to see GUIs described by purely functional data structures.
 >
 >
 >
 > I'd also loved too. Having a cross-platform GUI (with native look and
 > behaviour on Windows and MacOS X),   programmed using a functional
 > style, well documented (with reference manual and tutorial) and with
 > necessary tools (GUI design application) would be very very helpful.
 >

I would prefer a GUI programming language (similar to TeX for word 
processing). This might be easier to develop, can either be static (the 
widget build at compile time) or dynamic, and most of all, it is easier 
to modify an existing GUI.

 > However this is a huge task. To add on your initial question:
 >   1. do you think a minimal part of the OCaml community could
 > aggregate to ensure the long term maintainability of the toolkit?
 >

 >   2. how to have a modern look (with whatever definition you might
 > find for

  it) which *is* a discriminant point when choosing a GUI?

 >

Why a modern look, you should have the look of the OS you are running on,
using the OS X look on OS X,
the windows look on windows,
the KDE (with the user skin) look on KDE etc ...

This is were things are difficult and where a programming language to 
design the GUI is needed, because the GUI elements do not have the same 
dimension on all platform.

 >   3. how to respond to toolkit's users that need to have more "exotic"
 > widgets/systems?
 >

Let's start with simple thing for a basic toolkit,

Then, if the librairy is powerfull enough, it should be possible to 
design new widget entierely in OCaml with the library ?


 > Yours,
 > david
 >
 > _______________________________________________
 > Caml-list mailing list. Subscription management:
 > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
 > Archives: http://caml.inria.fr
 > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
 > Bug reports: http://caml.inria.fr/bin/caml-bugs


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: GUI for OCaml
  2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
@ 2005-08-30 10:28       ` David MENTRE
  2005-08-30 13:04         ` Bünzli Daniel
  2005-08-30 17:13         ` David Thomas
  2005-08-30 11:18       ` Mark Shinwell
  2005-08-30 14:22       ` Jacques Carette
  2 siblings, 2 replies; 68+ messages in thread
From: David MENTRE @ 2005-08-30 10:28 UTC (permalink / raw)
  To: Christophe Raffalli; +Cc: Jon Harrop, caml-list

Hello Christophe,

2005/8/30, Christophe Raffalli <christophe.raffalli@univ-savoie.fr>:
> I would prefer a GUI programming language (similar to TeX for word
> processing). This might be easier to develop, can either be static (the
> widget build at compile time) or dynamic, and most of all, it is easier
> to modify an existing GUI.

I'm not fond of yet another Domain Specific Language (DSL), except if
it brings clear advantages (of which I'm not yet convinced).

I don't mind learning a DSL from time to time, but not each time I
need to program a part of my application.

For example, in my current code, I'm using CDuce's DSL and WDialog's
DSL. As an engineer, I would not be very happy to be forced to use yet
another DSL. And other developers in my project need to agree with
this complexity.

BTW, some research has been done one using functional style to program
GUI (in Haskell??). We should at least have a look on it.


> Why a modern look, you should have the look of the OS you are running on,
> using the OS X look on OS X,
> the windows look on windows,
> the KDE (with the user skin) look on KDE etc ...

Your right. I was referring to labltk vs. lablgtk1 vs. lablgtk2. This
is a sub-issue of the general issue of having a native look and
behaviour on all platforms.

> This is were things are difficult and where a programming language to
> design the GUI is needed, because the GUI elements do not have the same
> dimension on all platform.

I don't see why a language rather than a library can improve this point.

> Let's start with simple thing for a basic toolkit,

Agree.

> Then, if the librairy is powerfull enough, it should be possible to
> design new widget entierely in OCaml with the library ?

It could be nice. But as an engineer, I'm always wondering: how can I
reuse that code developed and debugged by others. Reinventing the
wheel is sometimes good, but not always.

Yours,
david


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: GUI for OCaml
  2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
  2005-08-30 10:28       ` [Caml-list] " David MENTRE
@ 2005-08-30 11:18       ` Mark Shinwell
  2005-08-30 14:22       ` Jacques Carette
  2 siblings, 0 replies; 68+ messages in thread
From: Mark Shinwell @ 2005-08-30 11:18 UTC (permalink / raw)
  To: Christophe Raffalli; +Cc: Jon Harrop, caml-list

On Tue, Aug 30, 2005 at 11:53:54AM +0200, Christophe Raffalli wrote:
> Why a modern look, you should have the look of the OS you are running
> on, using the OS X look on OS X, the windows look on windows, the KDE
> (with the user skin) look on KDE etc ...

Personally I'd love to see an up-to-date interface to wxWindows, which
provides all of the above, but from what I hear on the grapevine
previous attempts at such a layer have been frought with difficulties.

Mark


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30  4:39   ` Matt Gushee
@ 2005-08-30 11:39     ` Yaron Minsky
  2005-08-30 11:48     ` Jon Harrop
  1 sibling, 0 replies; 68+ messages in thread
From: Yaron Minsky @ 2005-08-30 11:39 UTC (permalink / raw)
  To: Matt Gushee; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 689 bytes --]

On 8/30/05, Matt Gushee <mgushee@havenrock.com> wrote:
> 
> 
> Maybe today's OCamlers are by and large beyond needing that sort of
> book. But it's kind of self-defeating to take for granted that the
> status quo will continue. I'm inclined to think that as OCaml gains in
> popularity--as it is certainly doing--there will be more people who need
> more hand-holding. Which doesn't necessarily mean there's much of market
> for a book such as I've proposed, just that I see some reason to hope.


I haven't the faintest idea what the market for such a thing would be, but 
if a good book on using Tk from OCaml existed, I would buy it. Similarly for 
a Gtk/Ocaml book.

y

[-- Attachment #2: Type: text/html, Size: 989 bytes --]

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30  4:39   ` Matt Gushee
  2005-08-30 11:39     ` Yaron Minsky
@ 2005-08-30 11:48     ` Jon Harrop
  2005-08-30 12:22       ` David MENTRE
  2005-09-01  4:17       ` Matt Gushee
  1 sibling, 2 replies; 68+ messages in thread
From: Jon Harrop @ 2005-08-30 11:48 UTC (permalink / raw)
  To: caml-list

On Tuesday 30 August 2005 05:39, Matt Gushee wrote:
> Now, I have lately realized that you can explore LablTk with
> ocamlbrowser, so a reference doc isn't strictly necessary. But you could
> say the same about any OCaml module ... anyway, the document mostly
> exists, and some people may find it more convenient/pleasant to use a
> Web page or a printed document.

Yes, I've only studied it through ocamlbrowser. So I'd recommend simply 
commenting the labltk .mli file rather than writing a quick reference.

> >>2) A Book
> >
> > I think labltk is too specific to be commercially viable.
>
> Specific in what sense? And do you mean LablTk as a tool, or as a book
> topic?

I meant that the topic "GUI programming using lablTK" is too specific for a 
book.

> > Also, unless I've
> > missed some hidden complexities in Tk programming, I think you'd have a
> > job filling enough pages to call the result a book.
>
> Ever used the Canvas or Text widgets? There's a lot going on there.

I'm using the Text widget in a very simple way. I may have to start using the 
canvas widget because I can't figure out how to do various things (e.g. a 
spreadsheet).

> Besides, there are several mainstream (i.e. published by major tech
> publishers and available in any well-stocked bookstore) books about Tk
> programming (including at least Tcl/Tk, Perl/Tk and Tkinter). They've
> mostly been available for several years, so there must be some market
> for them.

Yes and there are a few books on OCaml. But you're talking about the 
intersection of those two sets of users, which is much smaller.

> Maybe today's OCamlers are by and large beyond needing that sort of
> book. But it's kind of self-defeating to take for granted that the
> status quo will continue. I'm inclined to think that as OCaml gains in
> popularity--as it is certainly doing--there will be more people who need
> more hand-holding. Which doesn't necessarily mean there's much of market
> for a book such as I've proposed, just that I see some reason to hope.

Yes, that is true.

> > As I'm the author of the only existing self-published book on OCaml, you
> > may be interested to know that it is doing well (~500UKP per month for 6
> > months so far).
>
> Well, at 85 quid a pop, I should think so (what is that in US money,
> about $120?)! But you're targeting an audience that has significant
> institutional support. I doubt very much that any and all OCaml books
> can be sold for that kind of money.

Yes. As OCaml gains popularity it will be commercially viable to publish 
cheaper books. In the mean time, if you're interested in making money, 
perhaps educational software would be better?

> > This wouldn't need to be anything
> > fancy, just easy access to the simplest GUI elements to start with.
>
> What kind of apps do you envision writing with only the simplest elements?

I have two projects with GUIs now. One is that database app, that has a very 
simple GUI. The other is Presenta, that draws its own GUI via OpenGL.

I tried to get the latter to work with lablgtk but was told to take my 
question to the gtk forum, where they told me not to use out of date OpenGL 
bindings.

Incidentally, OpenGL is extremely important for us. So a GUI toolkit must be 
able to handle OpenGL widgets. Indeed, this begs the question: why not do the 
whole thing in OpenGL?

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 11:48     ` Jon Harrop
@ 2005-08-30 12:22       ` David MENTRE
  2005-08-30 13:45         ` Jon Harrop
  2005-09-01  4:17       ` Matt Gushee
  1 sibling, 1 reply; 68+ messages in thread
From: David MENTRE @ 2005-08-30 12:22 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

Hello,

2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
> Incidentally, OpenGL is extremely important for us. So a GUI toolkit must be
> able to handle OpenGL widgets. Indeed, this begs the question: why not do the
> whole thing in OpenGL?

Because printing and PDF rendering is not easy. And because you loose
the ability to have native interface on all paltforms (Gnome, KDE,
Windows 2k, Windows XP, MacOS X, ...).

As somebody else pointed out, the ocaml binding to Cairo library could
be used as underlying framework but you still don't have native
platform GUI style.

Maybe it would be worth putting up a mailing list and a wiki instead
of bothering 500+ caml-list readers? Anybody has easy access to such
facility?

Yours,
d.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: GUI for OCaml
  2005-08-30 10:28       ` [Caml-list] " David MENTRE
@ 2005-08-30 13:04         ` Bünzli Daniel
  2005-08-30 17:13         ` David Thomas
  1 sibling, 0 replies; 68+ messages in thread
From: Bünzli Daniel @ 2005-08-30 13:04 UTC (permalink / raw)
  To: caml-list


Le 30 août 05 à 12:28, David MENTRE a écrit :

> BTW, some research has been done one using functional style to program
> GUI (in Haskell??). We should at least have a look on it.

Some references are

 > fruit [1], based on functional reactive programming.
 > fudgets [2], based on lazy streams.

For multiplatform developpement, an approach would be to have a  
conceptual model of user inter-face/action, i.e. no look, just feel.  
This model could then be interpreted (possibly with hints to adjust  
the look) with the tools provided by the different platform specific  
toolkits. A kind of front-end/back-end architecture. Easy to say...

Daniel

[1]
<http://www.haskell.org/fruit/>

[2]
<http://www.cs.chalmers.se/ComputingScience/Research/Functional/ 
Fudgets/>
<http://www.cs.chalmers.se/~hallgren/Thesis/top.html>


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 12:22       ` David MENTRE
@ 2005-08-30 13:45         ` Jon Harrop
  2005-08-30 15:47           ` David MENTRE
                             ` (2 more replies)
  0 siblings, 3 replies; 68+ messages in thread
From: Jon Harrop @ 2005-08-30 13:45 UTC (permalink / raw)
  To: caml-list

On Tuesday 30 August 2005 13:22, David MENTRE wrote:
> 2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
> > Incidentally, OpenGL is extremely important for us. So a GUI toolkit must
> > be able to handle OpenGL widgets. Indeed, this begs the question: why not
> > do the whole thing in OpenGL?
>
> Because printing and PDF rendering is not easy.

Why do you think that?

> And because you loose 
> the ability to have native interface on all paltforms (Gnome, KDE,
> Windows 2k, Windows XP, MacOS X, ...).

Yes but we gain the ability to have a better interface on all platforms.

> As somebody else pointed out, the ocaml binding to Cairo library could
> be used as underlying framework

I'd rather go entirely OCaml except for the lowest level stuff. Writing 
bindings is just too tedious and error prone and I'm not convinced that 
there's anything sophisticated enough out there that it would be worth the 
hassle. We can certainly improve upon Cairo and I have only had bad 
experiences with other widget sets (e.g. Qt, wxWindows).

> but you still don't have native platform GUI style.

It might be nice to allow native GUI dialog boxes (e.g. load and save) but, 
beyond that, I'd be happy to have non-native provided it was more aesthetica 
than the native GUIs.

Also, we'd need the library to be free for commercial use.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30  7:16   ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
  2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
@ 2005-08-30 14:14     ` Richard Jones
  2005-08-30 15:33       ` mmzeeman
                         ` (2 more replies)
  2005-08-30 22:31     ` yoann padioleau
  2 siblings, 3 replies; 68+ messages in thread
From: Richard Jones @ 2005-08-30 14:14 UTC (permalink / raw)
  To: David MENTRE; +Cc: caml-list

On Tue, Aug 30, 2005 at 09:16:20AM +0200, David MENTRE wrote:
> The client of my application is also written in Lablgtk2 and, despite
> helpful answers by Jacques Garrigue and Olivier Andrieux as well as
> SooHyoung Oh's tutorials, I find programming with Labgtk2 not very
> easy (to say the least). I find Lablgtk2 is largely under-documented.
> Of course, this is a large task that cannot be achieved by two
> individuals.

Lablgtk2 is a pain, but I think the pain comes from Gtk itself, not
any shortcomings in lablgtk2 or ocaml.

> I'd also loved too. Having a cross-platform GUI (with native look and
> behaviour on Windows and MacOS X),   programmed using a functional
> style, well documented (with reference manual and tutorial) and with
> necessary tools (GUI design application) would be very very helpful.
> 
> However this is a huge task. [...]

It is a huge task.  I'm not even sure what a "functional" API for a
GUI toolkit would look like.  Ideas?  Example code snippets?

Rich.

-- 
Richard Jones, CTO Merjis Ltd.
Merjis - web marketing and technology - http://merjis.com
Team Notepad - intranets and extranets for business - http://team-notepad.com


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: GUI for OCaml
  2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
  2005-08-30 10:28       ` [Caml-list] " David MENTRE
  2005-08-30 11:18       ` Mark Shinwell
@ 2005-08-30 14:22       ` Jacques Carette
  2005-08-30 23:12         ` Pietro Abate
  2 siblings, 1 reply; 68+ messages in thread
From: Jacques Carette @ 2005-08-30 14:22 UTC (permalink / raw)
  To: Christophe Raffalli; +Cc: caml-list



Christophe Raffalli wrote:

> I would prefer a GUI programming language (similar to TeX for word 
> processing). This might be easier to develop, can either be static 
> (the widget build at compile time) or dynamic, and most of all, it is 
> easier to modify an existing GUI.
>
What about re-using the work from Mozilla - I mean Gecko and XUL.  See 
the links on http://www.mozilla.org/projects/.  It should be relatively 
simple to create a human-friendly syntax for it, so I don't think that 
XML is a real issue.

Jacques


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 14:14     ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) Richard Jones
@ 2005-08-30 15:33       ` mmzeeman
  2005-08-30 15:44         ` Jon Harrop
  2005-08-30 22:34         ` yoann padioleau
  2005-08-30 16:01       ` Jon Harrop
  2005-08-30 16:03       ` Chris Campbell
  2 siblings, 2 replies; 68+ messages in thread
From: mmzeeman @ 2005-08-30 15:33 UTC (permalink / raw)
  To: Richard Jones; +Cc: David MENTRE, caml-list



> It is a huge task.  I'm not even sure what a "functional" API for a
> GUI toolkit would look like.  Ideas?  Example code snippets?
>

The Clean programming language seems to have a nice functional GUI api
(http://www.cs.ru.nl/~clean/index.html).

Personnaly I like the Qt api. I think it should be possible to
create/generate c++ to ocaml-objects wrappers so you could create Qt GUIs
with ocaml.

Regards,

Maas


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 15:33       ` mmzeeman
@ 2005-08-30 15:44         ` Jon Harrop
  2005-08-30 22:34         ` yoann padioleau
  1 sibling, 0 replies; 68+ messages in thread
From: Jon Harrop @ 2005-08-30 15:44 UTC (permalink / raw)
  To: caml-list

On Tuesday 30 August 2005 16:33, mmzeeman wrote:
> The Clean programming language seems to have a nice functional GUI api
> (http://www.cs.ru.nl/~clean/index.html).

Thanks for the link. I'll check it out.

> Personnaly I like the Qt api. I think it should be possible to
> create/generate c++ to ocaml-objects wrappers so you could create Qt GUIs
> with ocaml.

This is exactly the kind of thing that I'd like to avoid. Firstly, Qt is a 
very expensive commercial product so we wouldn't use it. Secondly, Qt goes to 
great lengths to circumvent flaws in the C++ language. It would be a great 
shame to "port" these to OCaml. Finally, I found that TrollTech's own Qt 
demos segfault reliably, so I'd question Qt's stability.

I'd much rather see only low-level bindings with all of the widget code 
written in OCaml.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 13:45         ` Jon Harrop
@ 2005-08-30 15:47           ` David MENTRE
  2005-08-30 16:08             ` Jon Harrop
  2005-08-30 16:21           ` Bardur Arantsson
  2005-08-30 17:47           ` [Caml-list] " David Thomas
  2 siblings, 1 reply; 68+ messages in thread
From: David MENTRE @ 2005-08-30 15:47 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

Jon,

2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
> > [me]
> > Because printing and PDF rendering is not easy.
> 
> Why do you think that?

Hmm. I thought that making postscript or pdf output of an OpenGL
document is difficult, but apparently I'm wrong.

> > And because you loose
> > the ability to have native interface on all paltforms (Gnome, KDE,
> > Windows 2k, Windows XP, MacOS X, ...).
> 
> Yes but we gain the ability to have a better interface on all platforms.

Well, "better" is rather subjective. And not having the native
interface means that people will say "oh, look, this is a non-standard
OCaml program" instead on looking at the application itself.

That's said, if we can have a nice (to be defined ;-) OCaml GUI
toolkit, cross-platform and well documented, we a minimal set of tools
to help design interfaces, I would seriously consider its use.

> Also, we'd need the library to be free for commercial use.

I'm usually a proponent of GPL but for such a toolkit, I wouldn't mind
a LGPL or BSD-like license.

I have created a Google group to discuss this:
Homepage:  	   	http://groups.google.com/group/ocaml-gui  	 
Group email: 	  	ocaml-gui@googlegroups.com 	 
Description: 	  	Mailing list to discuss design and development of a
cross-platform Graphic User Interface for the OCaml language


Yours,
d.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 14:14     ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) Richard Jones
  2005-08-30 15:33       ` mmzeeman
@ 2005-08-30 16:01       ` Jon Harrop
  2005-08-30 16:25         ` Chris Campbell
  2005-08-30 16:03       ` Chris Campbell
  2 siblings, 1 reply; 68+ messages in thread
From: Jon Harrop @ 2005-08-30 16:01 UTC (permalink / raw)
  To: caml-list

On Tuesday 30 August 2005 15:14, Richard Jones wrote:
> Lablgtk2 is a pain, but I think the pain comes from Gtk itself, not
> any shortcomings in lablgtk2 or ocaml.

Yes. My understanding is that lablgtk does a lot to hide the hideousness 
beneath.

> > However this is a huge task. [...]
>
> It is a huge task.

Depending on what exactly we're talking about, I think it is entirely 
tractable for one person, let alone a team.

> I'm not even sure what a "functional" API for a 
> GUI toolkit would look like.  Ideas?  Example code snippets?

I think the GUI code should be split into definition (i.e. how the widgets are 
laid out) and execution (i.e. what functions are called for GUI events). The 
former should be functional in style because it is easier to write and more 
succinct and the latter should be imperative in style because it is 
essentially poking a state machine about.

The functional definition could be a data structure that is folded over to 
accumulate the widgets needed by the subsequent event code. For example, 
consider a searchable list with a labelled search box, a scrollable list and 
a button to add new entries (off the top of my head):

let gui =
  `Frame [`Frame [`Label "Search: "; `Entry];
          `List;
          `Button "Add"];;

let rec make parent accu = function
  | `Frame l -> List.fold_left (make (Frame.create `Top parent)) accu l
  | `Label text ->
      let widget = Label.create ~text parent in
      pack [widget];
      `Label widget :: accu
  | `Entry ->
      let widget = Entry.create parent in
      pack [widget];
      `Entry widget :: accu
  | `List ->
      let parent = build_frame side fill expand parent in
      let list = Listbox.create ~width parent in
      pack ~side:`Left ~fill:`Both ~expand:true [list];
      let scroll_bar = Scrollbar.create parent in
      Listbox.configure ~yscrollcommand:(Scrollbar.set scroll_bar) list;
      Scrollbar.configure ~command:(Listbox.yview list) scroll_bar;
      pack ~side:`Right ~fill:`Y [scroll_bar];
      `List list :: accu
  | `Button text ->
      let widget = Button.create ~text parent in
      pack [widget];
      `Button widget :: accu

let [_; `Entry search; `List list; `Button add] = make top [] gui;;

You'd want to add a call to "pack" after each call to "*.create" and you'd 
want to have HBox and VBox instead of Frame but the basic idea is there. I 
can't see a good way to statically type such code in general so I've left it 
with an incomplete pattern match.

Perhaps we should start by writing such a wrapper that can target either 
labltk or lablgtk?

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 14:14     ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) Richard Jones
  2005-08-30 15:33       ` mmzeeman
  2005-08-30 16:01       ` Jon Harrop
@ 2005-08-30 16:03       ` Chris Campbell
  2 siblings, 0 replies; 68+ messages in thread
From: Chris Campbell @ 2005-08-30 16:03 UTC (permalink / raw)
  To: Richard Jones; +Cc: David MENTRE, caml-list

On 30/08/05, Richard Jones <rich@annexia.org> wrote:
> On Tue, Aug 30, 2005 at 09:16:20AM +0200, David MENTRE wrote:
> > The client of my application is also written in Lablgtk2 and, despite
> > helpful answers by Jacques Garrigue and Olivier Andrieux as well as
> > SooHyoung Oh's tutorials, I find programming with Labgtk2 not very
> > easy (to say the least). I find Lablgtk2 is largely under-documented.
> > Of course, this is a large task that cannot be achieved by two
> > individuals.
> 
> Lablgtk2 is a pain, but I think the pain comes from Gtk itself, not
> any shortcomings in lablgtk2 or ocaml.

Yep.  Every time I've used a binding to Gtk in any language it's been
pretty ugly.  Unfortunately it's seems to be the only one any wants to
bind to on Linux. :'(

>> I'd also loved too. Having a cross-platform GUI (with native look and
>> behaviour on Windows and MacOS X),   programmed using a functional
>> style, well documented (with reference manual and tutorial) and with
>> necessary tools (GUI design application) would be very very helpful.
>>
>> However this is a huge task. [...]
> 
> It is a huge task.  I'm not even sure what a "functional" API for a
> GUI toolkit would look like.  Ideas?  Example code snippets?

Ch 10 or 11 of CTM (Concepts, Techniques and Models of Computer
Programming by Haridi and Van Roy) describes a good model and the
trade offs of various models.  The ref documentation for QTk, the
toolkit they describe, is available at
http://www.mozart-oz.org/documentation/mozart-stdlib/wp/qtk/html/index.html.

It's incredibly simple, yet very powerful.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 15:47           ` David MENTRE
@ 2005-08-30 16:08             ` Jon Harrop
  2005-09-01  4:25               ` Matt Gushee
  0 siblings, 1 reply; 68+ messages in thread
From: Jon Harrop @ 2005-08-30 16:08 UTC (permalink / raw)
  To: caml-list

On Tuesday 30 August 2005 16:47, David MENTRE wrote:
> 2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
> > Why do you think that?
>
> Hmm. I thought that making postscript or pdf output of an OpenGL
> document is difficult, but apparently I'm wrong.

Yes, generating PS from OpenGL is very easy (I've done a lot of work on this 
for Presenta, of course).

> > Yes but we gain the ability to have a better interface on all platforms.
>
> Well, "better" is rather subjective. And not having the native
> interface means that people will say "oh, look, this is a non-standard
> OCaml program" instead on looking at the application itself.

True. I think this is the lesser of evils though.

> That's said, if we can have a nice (to be defined ;-) OCaml GUI
> toolkit, cross-platform and well documented, we a minimal set of tools
> to help design interfaces, I would seriously consider its use.

Absolutely. Me too.

> > Also, we'd need the library to be free for commercial use.
>
> I'm usually a proponent of GPL but for such a toolkit, I wouldn't mind
> a LGPL or BSD-like license.

If it is OCaml then it will have to be statically compiled in, so you'd need 
that LGPL get-out clause.

> I have created a Google group to discuss this:
> Homepage:  	   	http://groups.google.com/group/ocaml-gui
> Group email: 	  	ocaml-gui@googlegroups.com
> Description: 	  	Mailing list to discuss design and development of a
> cross-platform Graphic User Interface for the OCaml language

I'll cross post this message...

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: Does LablTk have a future?
  2005-08-30 13:45         ` Jon Harrop
  2005-08-30 15:47           ` David MENTRE
@ 2005-08-30 16:21           ` Bardur Arantsson
  2005-08-30 17:47           ` [Caml-list] " David Thomas
  2 siblings, 0 replies; 68+ messages in thread
From: Bardur Arantsson @ 2005-08-30 16:21 UTC (permalink / raw)
  To: caml-list

Jon Harrop wrote:
> On Tuesday 30 August 2005 13:22, David MENTRE wrote:
> 
>>2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
>>
>>>Incidentally, OpenGL is extremely important for us. So a GUI toolkit must
>>>be able to handle OpenGL widgets. Indeed, this begs the question: why not
>>>do the whole thing in OpenGL?
>>
[--snip--]

>>And because you loose 
>>the ability to have native interface on all paltforms (Gnome, KDE,
>>Windows 2k, Windows XP, MacOS X, ...).
> 
> 
> Yes but we gain the ability to have a better interface on all platforms.
> 

Nonsense. For special cases it may appear that writing a GUI toolkit is 
easy. What everbody seems to forget whenever this discussion comes up is 
that writing a GUI toolkit that's useful for *general* use is hard. Very 
hard. You need to worry about such things as BiDi, accessibility, 
feel-compatibility with the "host" platform (ie. things like identical 
focus handling, interaction with other programs through DnD, etc. etc.), 
  proper widget design, etc. etc.

In short: The solution seems easy to you because you're only seeing a 
subset of the problem.

Just a small real life example of why not to do this: The Mozilla people 
wrote their own GUI toolkit and after all these years they *still* 
haven't been able to fix all the focus problems. (Note: They actually 
had valid reasons for doing so, among other things the fact that none of 
the GUI toolkits at the time could do some of the things required for 
full standards compliance.)

-- 
Bardur Arantsson
<bardur@imada.sdu.dk>
<bardur@scientician.net>

Dyslexic, agnostic insomniac: One who lies awake at night
wondering if there really is a dog.
                                                         Anonymous


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 16:01       ` Jon Harrop
@ 2005-08-30 16:25         ` Chris Campbell
  2005-08-30 22:49           ` yoann padioleau
  0 siblings, 1 reply; 68+ messages in thread
From: Chris Campbell @ 2005-08-30 16:25 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

First, I hate AJAX.  Breaks the back button! :(  Yes, this is the
second time I've written this email.

On 30/08/05, Jon Harrop <jon@ffconsultancy.com> wrote:
> On Tuesday 30 August 2005 15:14, Richard Jones wrote:
> > Lablgtk2 is a pain, but I think the pain comes from Gtk itself, not
> > any shortcomings in lablgtk2 or ocaml.
> 
> Yes. My understanding is that lablgtk does a lot to hide the hideousness
> beneath.
> 
> > > However this is a huge task. [...]
> >
> > It is a huge task.
> 
> Depending on what exactly we're talking about, I think it is entirely
> tractable for one person, let alone a team.
> 
> > I'm not even sure what a "functional" API for a
> > GUI toolkit would look like.  Ideas?  Example code snippets?
> 
> I think the GUI code should be split into definition (i.e. how the widgets are
> laid out) and execution (i.e. what functions are called for GUI events). The
> former should be functional in style because it is easier to write and more
> succinct and the latter should be imperative in style because it is
> essentially poking a state machine about.
 
This sounds like QTk.  It is a wrapper to Tk that uses records (tuples
and atoms are records in Oz) and call backs to implement the gui. 
It's quite effective.  In Oz, your example would look something like
this... (warning, last Oz use was a while ago)

Qtk.build td(lr(label:"Search" text(handle: H))
                 (lr(button(text:"Add" action:P)

Where P and H are call back procedures.

> Perhaps we should start by writing such a wrapper that can target either
> labltk or lablgtk?

Make it independant to a degree.  Most GUIs offer the same functionality anyway.


Chris


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: GUI for OCaml
  2005-08-30 10:28       ` [Caml-list] " David MENTRE
  2005-08-30 13:04         ` Bünzli Daniel
@ 2005-08-30 17:13         ` David Thomas
  1 sibling, 0 replies; 68+ messages in thread
From: David Thomas @ 2005-08-30 17:13 UTC (permalink / raw)
  To: caml-list



--- David MENTRE <david.mentre@gmail.com> wrote:

> > I would prefer a GUI programming language (similar
> > to TeX for word processing). This might be easier 
> > to develop, can either be static (the widget build

> > at compile time) or dynamic, and most of all, it
is
> > easier to modify an existing GUI.
> 
> I'm not fond of yet another Domain Specific Language
> (DSL), except if it brings clear advantages (of
which
> I'm not yet convinced).

I quite like the notion of a DSL for GUIs, presuming
that it (1) makes simple things simple, with
reasonable defaults for each platform and few if any
unpleasant surprises; (2) keeps complicated things
possible - we shouldn't be sacrificing flexibility;
and (3) is reasonably orthogonal - if the code looks
similar, the layout produced should look similar, with
only those changes in the gui actually reflected by
changes in the code.

One additional advantage this has is that it allows
GUI work to be done by the people who are good at
designing GUI's, rather than those that know the
particular system being worked with, without producing
a lot of icky code. 

> BTW, some research has been done one using
functional
> style to program GUI (in Haskell??). We should at 
> least have a look on it.

That's a good point.  I've spent way too long looking
at OO examples of GUIs.  What does a functional GUI
framework look like?


		
____________________________________________________
Start your day with Yahoo! - make it your home page 
http://www.yahoo.com/r/hs 
 


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-29 22:33 ` Jon Harrop
  2005-08-30  4:39   ` Matt Gushee
  2005-08-30  7:16   ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
@ 2005-08-30 17:35   ` Olivier Andrieu
  2 siblings, 0 replies; 68+ messages in thread
From: Olivier Andrieu @ 2005-08-30 17:35 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

 Jon Harrop [Monday 29 August 2005] :
 > May I add another question to this thread: What do people think of
 > OCaml's GUI libraries in terms of stability?

Well there are not that many libraries for GUIs in ocaml. We have :

 - LablTk/CamlTk
 - LablGTK
 - Wxcaml [1]
 - OCaml-Win32 [2]

Are there any others ?

[1] http://pllab.kaist.ac.kr/~shoh/ocaml/wxcaml/doc/
[2] http://www.speakeasy.org/~hchomsky/ocaml-win32.html

-- 
   Olivier


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 13:45         ` Jon Harrop
  2005-08-30 15:47           ` David MENTRE
  2005-08-30 16:21           ` Bardur Arantsson
@ 2005-08-30 17:47           ` David Thomas
  2005-08-30 18:06             ` Tyler Eaves
                               ` (2 more replies)
  2 siblings, 3 replies; 68+ messages in thread
From: David Thomas @ 2005-08-30 17:47 UTC (permalink / raw)
  To: caml-list

--- Jon Harrop <jon@ffconsultancy.com> wrote:
> > And because you loose the ability to have native 
> > interface on all paltforms (Gnome, KDE, Windows
2k, 
> > Windows XP, MacOS X, ...).
> 
> Yes but we gain the ability to have a better
> interface on all platforms.

While pleasantly egotistical, I would have to say that
this is a false statement.  Yes, there are problems
with any given windowing system.  Note, however, that
the user has already chosen the system whose
shortcomings they feel the most comfortable with.  

Additionally, they have likely already configured that
system according to their personal preferences, which
means that your application must either know about
each individual system and poll it for each relevent
setting, require the user to re-specify their
preferences with respect to your application, or
ignore the user's preferences altogether.  Since this
is something that virtually every application with a
windowed GUI will likely be using, it should be done
by a GUI library, rather than on an
application-by-application basis.

There's also the principle of least surprise.  While
your system may be better than theirs in the abstract,
the best GUI behaves the way the user expects it to
behave, and that means the same way that the user's
other applications behave - hence, native look and
feel when it doesn't conflict with other goals. 

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 17:47           ` [Caml-list] " David Thomas
@ 2005-08-30 18:06             ` Tyler Eaves
  2005-08-30 19:01             ` Jon Harrop
  2005-09-01  4:31             ` [Caml-list] Does LablTk have a future? Matt Gushee
  2 siblings, 0 replies; 68+ messages in thread
From: Tyler Eaves @ 2005-08-30 18:06 UTC (permalink / raw)
  To: caml-list

Perhaps a viable solution is to take an approach similar to wxWindows, and  
write a library the uses a native library on each major platform (e.g.  
GTK2 or QT3 on *nix, GDI on Windows, and Cocoa on Mac OS X. This way you  
get a native interface on each paltform, as well as saving the effort of  
having to actually write a low-level toolkit. That was programming effort  
could be spent solely on the actual API.

-- 
Tyler Eaves
<tylere@mailshack.com>


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 17:47           ` [Caml-list] " David Thomas
  2005-08-30 18:06             ` Tyler Eaves
@ 2005-08-30 19:01             ` Jon Harrop
  2005-08-30 22:55               ` Chris Campbell
                                 ` (2 more replies)
  2005-09-01  4:31             ` [Caml-list] Does LablTk have a future? Matt Gushee
  2 siblings, 3 replies; 68+ messages in thread
From: Jon Harrop @ 2005-08-30 19:01 UTC (permalink / raw)
  To: caml-list


I had better clarify before continuing. I see two viable approaches here:

1. Write OCaml bindings to the native GUIs and then an OCaml wrapper that 
abstracts the nativeness away.

2. Write a new widget toolkit designed to render via OpenGL.

On Tuesday 30 August 2005 18:47, David Thomas wrote:
> ...

If we do (1) then it will handle skinning and the intersection of the sets of 
functionality of the native GUIs.

If we do (2) then customisation and skinning will be ignored but you have the 
advantage of real time 2D and 3D graphics.

Option (2) seems much easier and more useful to me. I've never cared about 
skinning...

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30  7:16   ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
  2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
  2005-08-30 14:14     ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) Richard Jones
@ 2005-08-30 22:31     ` yoann padioleau
  2005-08-31  8:19       ` About Lablgtk2 (was: e: GUI for OCaml) David MENTRE
  2 siblings, 1 reply; 68+ messages in thread
From: yoann padioleau @ 2005-08-30 22:31 UTC (permalink / raw)
  To: David MENTRE; +Cc: Jon Harrop, caml-list


On 30 août 05, at 09:16, David MENTRE wrote:

> Hello,
>
> 2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
>
>>  I had tried lablgtk before but failed to get to grips with it.
>>
>
> The client of my application is also written in Lablgtk2 and, despite
> helpful answers by Jacques Garrigue and Olivier Andrieux as well as
> SooHyoung Oh's tutorials, I find programming with Labgtk2 not very
> easy (to say the least). I find Lablgtk2 is largely under-documented.

It seems to me that there is nothing original in the ocaml binding of  
gtk
so most of the time you can search in the documentation of gtk in any  
other langage
and "quite easily" adapt it to ocaml. Maybe the only problem with  
lablgtk is that it uses
the object facilities of ocaml and that many people are not very  
aware of those features. But in that case
what we need is a better documentation of the object features of ocaml.

> Of course, this is a large task that cannot be achieved by two
> individuals.

And I think it is not a good idea. We have to factor code and  
documentation.
It is better to have one good documentation of gtk in one langage,  
that 10 bad documentation
of gtk in 10 langages.
Maybe one day when .net or a similar thing will take over the world  
we will have less problems.

>
>
>> I think it would be more constructive to create a decent cross- 
>> platform GUI

Well, gtk is cross-platform.

>> library from the ground up for FPLs/OCaml.

And yet again reinvent the wheel. I am quite sure that you will  
reinvent just exactly gtk :)


>> This wouldn't need to be anything
>> fancy, just easy access to the simplest GUI elements to start with.

Well you have already that with lablgtk.

>> I'd like
>> to see GUIs described by purely functional data structures.

I had a look to fruit in haskell, fudgets, fran, ... and other  
attempts to make gui in functionnal style, and most of the time
I found the code more complex that the classical  widget/callback   
with global variable or closure model.


>>
>
> I'd also loved too. Having a cross-platform GUI (with native look and
> behaviour on Windows and MacOS X),   programmed using a functional
> style,


> well documented (with reference manual and tutorial) and with
>
You have that for gtk, ok it is not in ocaml but you can make the  
translation quite easily from langage X to ocaml.

> necessary tools (GUI design application) would be very very helpful.

Do you really find useful such RAD tools ?




^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 15:33       ` mmzeeman
  2005-08-30 15:44         ` Jon Harrop
@ 2005-08-30 22:34         ` yoann padioleau
  2005-09-01  4:58           ` Matt Gushee
  1 sibling, 1 reply; 68+ messages in thread
From: yoann padioleau @ 2005-08-30 22:34 UTC (permalink / raw)
  To: mmzeeman; +Cc: Richard Jones, caml-list, David MENTRE


On 30 août 05, at 17:33, mmzeeman wrote:

>
>
>
>> It is a huge task.  I'm not even sure what a "functional" API for a
>> GUI toolkit would look like.  Ideas?  Example code snippets?
>>
>>
>
> The Clean programming language seems to have a nice functional GUI api
> (http://www.cs.ru.nl/~clean/index.html).
>
> Personnaly I like the Qt api. I think it should be possible to

Is there really big a differences between Qt, Gtk, Wxwindows, ... ?
The only difference is maybe the number of widgets it supports, but  
all those API share the same kind of style,
the same basic widgets.

> create/generate c++ to ocaml-objects wrappers so you could create  
> Qt GUIs
> with ocaml.
>
> Regards,
>
> Maas
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
>



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 16:25         ` Chris Campbell
@ 2005-08-30 22:49           ` yoann padioleau
  0 siblings, 0 replies; 68+ messages in thread
From: yoann padioleau @ 2005-08-30 22:49 UTC (permalink / raw)
  To: Chris Campbell; +Cc: Jon Harrop, caml-list

>>
>>> I'm not even sure what a "functional" API for a
>>> GUI toolkit would look like.  Ideas?  Example code snippets?
>>>

In fact the API is already "functional" in some way, because in ocaml
(as well as in perl, ruby, ...) you can pass closure as callbacks.  
This is something really great for GUI compared
to langage like C where you have to separate the code responsible for  
creation of the widget from
the code responsible for the action on the widget.

Another point is that it is functional because you can compose the  
widgets together. You can nest them so the nesting of the code
can be put in paralell with the nesting in the widgets.

You can do

build_app_widget(title: "myapp",
      (build_vbox
        (build_menu
           (build_item "File" callback:(fun () -> some_action))
           (build_item "Close"  callback:(fun () -> some_other_action)
      ...
     )
     (build_hbox
       (build_canvas
         (...
      )
   ...
  )



>>
>> I think the GUI code should be split into definition (i.e. how the  
>> widgets are
>> laid out) and execution (i.e. what functions are called for GUI  
>> events). The
>> former should be functional in style because it is easier to write  
>> and more
>> succinct and the latter should be imperative in style because it is
>> essentially poking a state machine about.
>>
>
> This sounds like QTk.  It is a wrapper to Tk that uses records (tuples
> and atoms are records in Oz) and call backs to implement the gui.
> It's quite effective.  In Oz, your example would look something like
> this... (warning, last Oz use was a while ago)
>
> Qtk.build td(lr(label:"Search" text(handle: H))
>                  (lr(button(text:"Add" action:P)
>
> Where P and H are call back procedures.
>

 From what I remember you can do exactly the kind of stuff you wrote  
with lablgtk quite easily.

The only problem is that many times in H and P you want to modify the  
state of the widget (for instance modify the text in an entry) and in  
that
case you have to name the widget  with a let.


>
> Make it independant to a degree.  Most GUIs offer the same  
> functionality anyway.
>


I agree.

>
> Chris
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
>



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 19:01             ` Jon Harrop
@ 2005-08-30 22:55               ` Chris Campbell
       [not found]               ` <c22844d10508301553b54841b@mail.gmail.com>
  2005-08-31  8:48               ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
  2 siblings, 0 replies; 68+ messages in thread
From: Chris Campbell @ 2005-08-30 22:55 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

[forgot to cc list]

On 30/08/05, Jon Harrop <jon@ffconsultancy.com> wrote:
>
> I had better clarify before continuing. I see two viable approaches here:
>
> 1. Write OCaml bindings to the native GUIs and then an OCaml wrapper that
> abstracts the nativeness away.
>
> 2. Write a new widget toolkit designed to render via OpenGL.
>

...

> If we do (1) then it will handle skinning and the intersection of the sets of
> functionality of the native GUIs.
>
> If we do (2) then customisation and skinning will be ignored but you have the
> advantage of real time 2D and 3D graphics.
>
> Option (2) seems much easier and more useful to me. I've never cared about
> skinning...

Easier???  You'd need to build a complete event/messaging subsystem, a
renderer, ..., a set of widgets and get people to ship it.  Plus it'd
likely only run on Linux and BSD.  What about OSX Mac/Windows?  It's
not easier at all especially if it was to be anything like a modern
day gui - think Quartz Extreme/Aqua or AeroGlass. IIRC the plan for
Gtk+ is to go this route too using Cairo.  Despite hating Gtk, it'd be
better to rely on them for the gui and wrap it with something like
your description of a "functional GUI" or bind to WxWidgets (or both).

There's also enlightenment as an alternative for Linux users.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Fwd: [Caml-list] Does LablTk have a future?
       [not found]               ` <c22844d10508301553b54841b@mail.gmail.com>
@ 2005-08-30 22:56                 ` Chris Campbell
  2005-08-30 23:04                   ` Doug Kirk
  2005-08-31  0:08                   ` Fwd: " Jon Harrop
  0 siblings, 2 replies; 68+ messages in thread
From: Chris Campbell @ 2005-08-30 22:56 UTC (permalink / raw)
  To: caml-list

---------- Forwarded message ----------
From: Chris Campbell <cyberdanx@gmail.com>
Date: 30-Aug-2005 23:53
Subject: Re: [Caml-list] Does LablTk have a future?
To: Jon Harrop <jon@ffconsultancy.com>


On 30/08/05, Jon Harrop <jon@ffconsultancy.com> wrote:
>
> I had better clarify before continuing. I see two viable approaches here:
>
> 1. Write OCaml bindings to the native GUIs and then an OCaml wrapper that
> abstracts the nativeness away.
>
> 2. Write a new widget toolkit designed to render via OpenGL.
>

...

> If we do (1) then it will handle skinning and the intersection of the sets of
> functionality of the native GUIs.
>
> If we do (2) then customisation and skinning will be ignored but you have the
> advantage of real time 2D and 3D graphics.
>
> Option (2) seems much easier and more useful to me. I've never cared about
> skinning...

Easier???  You'd need to build a complete event/messaging subsystem, a
renderer, ..., a set of widgets and get people to ship it.  Plus it'd
likely only run on Linux and BSD.  What about OSX Mac/Windows?  It's
not easier at all especially if it was to be anything like a modern
day gui - think Quartz Extreme/Aqua or AeroGlass. IIRC the plan for
Gtk+ is to go this route too using Cairo.  Despite hating Gtk, it'd be
better to rely on them for the gui and wrap it with something like
your description of a "functional GUI" or bind to WxWidgets (or both).

There's also enlightenment as an alternative for Linux users.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 22:56                 ` Fwd: " Chris Campbell
@ 2005-08-30 23:04                   ` Doug Kirk
  2005-08-31  0:08                   ` Fwd: " Jon Harrop
  1 sibling, 0 replies; 68+ messages in thread
From: Doug Kirk @ 2005-08-30 23:04 UTC (permalink / raw)
  To: caml-list

On Mac OS X, all UI elements are OpenGL textures and run on the  
graphics chip, courtesy of the OS (provided you have a recent machine).

Of course, you'd still need a nice system to build the library, but  
OpenGL on OS X is no problem at all :)



> On Aug 30, 2005, at 5:56 PM, Chris Campbell wrote:
>
> What about OSX Mac/Windows?
>


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: GUI for OCaml
  2005-08-30 14:22       ` Jacques Carette
@ 2005-08-30 23:12         ` Pietro Abate
  0 siblings, 0 replies; 68+ messages in thread
From: Pietro Abate @ 2005-08-30 23:12 UTC (permalink / raw)
  To: caml-list

On Tue, Aug 30, 2005 at 10:22:56AM -0400, Jacques Carette wrote:
> What about re-using the work from Mozilla - I mean Gecko and XUL.  See 
> the links on http://www.mozilla.org/projects/.  It should be relatively 
> simple to create a human-friendly syntax for it, so I don't think that 
> XML is a real issue.

Using XUL with ocaml would be great... they are working on building
everything (firefox, thunderbird and friends) on the top of xmlrunner,
that is a multi platform library to display xul widgets. The big problem
is that at the moment you can write 'actions' (DCOM objects ??) only in
javascript and c++, and there is a project to implement a python
backend. javascript and c++ are a pain to use. the python backend is
still in a preliminary stage of development (I think). It would be
fantastic to have ocaml bindings (don't look at me :) )... 

Hand writing gui, in my opinion, is something of the past. Using, for
example glade + code generator or XUL is the way to go.

:)
p

-- 
++ Blog: http://blog.rsise.anu.edu.au/?q=pietro
++ 
++ "All great truths begin as blasphemies." -George Bernard Shaw
++ Please avoid sending me Word or PowerPoint attachments.
   See http://www.fsf.org/philosophy/no-word-attachments.html


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: Fwd: [Caml-list] Does LablTk have a future?
  2005-08-30 22:56                 ` Fwd: " Chris Campbell
  2005-08-30 23:04                   ` Doug Kirk
@ 2005-08-31  0:08                   ` Jon Harrop
  2005-08-31  0:31                     ` Olivier Andrieu
  1 sibling, 1 reply; 68+ messages in thread
From: Jon Harrop @ 2005-08-31  0:08 UTC (permalink / raw)
  To: caml-list

On Tuesday 30 August 2005 23:56, Chris Campbell wrote:
> > Option (2) seems much easier and more useful to me. I've never cared
> > about skinning...
>
> Easier???  You'd need to build a complete event/messaging subsystem, a
> renderer, ..., a set of widgets and get people to ship it.

Yes. The event system is trivial in OCaml (thanks to closures), particularly 
because graphics are regenerated on the fly for OpenGL. The renderer is as 
difficult as you want to make it. Conventional GUIs do little more than quads 
and pixmaps. Making widgets isn't exactly rocket science, albeit somewhat 
tedious. If by "ship it" you mean package it up for Debian etc. them I'm sure 
people will volunteer.

> Plus it'd likely only run on Linux and BSD.

No. It would run on Mac OS X and Windows as well. Probably others...

> It's 
> not easier at all especially if it was to be anything like a modern
> day gui - think Quartz Extreme/Aqua or AeroGlass.

I'm talking about aiming low.

> it'd be
> better to rely on them for the gui and wrap it with something like
> your description of a "functional GUI" or bind to WxWidgets (or both).

I disagree. Static type checking could be leveraged for GUI code as it is for 
most other OCaml code. Writing correct bindings to libraries like those is 
just as much work as writing a toolkit on top of OpenGL, only you'd end up 
with their inefficiencies and instabilities.

If anyone is seriously considering writing bindings for Cairo from OCaml then 
I'd like to know.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: Fwd: [Caml-list] Does LablTk have a future?
  2005-08-31  0:08                   ` Fwd: " Jon Harrop
@ 2005-08-31  0:31                     ` Olivier Andrieu
  0 siblings, 0 replies; 68+ messages in thread
From: Olivier Andrieu @ 2005-08-31  0:31 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

 Jon Harrop [Wednesday 31 August 2005] :
 > If anyone is seriously considering writing bindings for Cairo from
 > OCaml then I'd like to know.

Gah! they already exist : http://cairographics.org/cairo_2docaml

(No tarballs, only in the CVS repository).

-- 
   Olivier


^ permalink raw reply	[flat|nested] 68+ messages in thread

* About Lablgtk2 (was: e: GUI for OCaml)
  2005-08-30 22:31     ` yoann padioleau
@ 2005-08-31  8:19       ` David MENTRE
  2005-09-03 11:41         ` yoann padioleau
  0 siblings, 1 reply; 68+ messages in thread
From: David MENTRE @ 2005-08-31  8:19 UTC (permalink / raw)
  To: yoann padioleau; +Cc: Jon Harrop, caml-list

Hello Yoann,

2005/8/31, yoann padioleau <padator@wanadoo.fr>:
> > [me:]
> > well documented (with reference manual and tutorial) and with
> >
> You have that for gtk, ok it is not in ocaml but you can make the
> translation quite easily from langage X to ocaml.

Ok, let's me try to reword my criticism: I find the use of Labgtk2
objects not easy at all. I find the use of objects and the class
hierarchy very confusing. Maybe this is just an issue of documenting
the general mapping of Gtk2 signals, objects, ... to OCaml modules and
objects. Maybe ocamldoc should be improved to allow unfolding a method
accessible through the class hierarchy in one class. Or maybe I'm too
stupid to understand the toolkit. Or maybe I'm unable to grasp OCaml
objects. The net result is that using Lablgtk2 is really a pain.

However, I do use Labgtk2 for the graphical interface of my
application so I at least consider that I have written enough code to
make my own point of view. With all the examples, I'm able to write
basic interface (i.e. buttons, menus, etc.) through copy/paste. But
I'm still not able to write code that would match GUI design I would
like to have.

> > necessary tools (GUI design application) would be very very helpful.
> 
> Do you really find useful such RAD tools ?

Yes. Yes and yes. Have you ever programmed a GTk2 application? Have
you ever see the number of options available for each widget?

I'm using Glade to produce the XML interface for Labgtk2 (of course,
callbacks are written in regular OCaml code). It saved me hours of
interface layout design. I'm not speaking of two buttons into a
window. I'm speaking of sliding panes, with several buttons, text
boxes and TreeView in each, playing with options to make relative
positioning suits your needs.

Yours,
d.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 19:01             ` Jon Harrop
  2005-08-30 22:55               ` Chris Campbell
       [not found]               ` <c22844d10508301553b54841b@mail.gmail.com>
@ 2005-08-31  8:48               ` David MENTRE
  2005-08-31  9:06                 ` Proposal a GUI from Ocamlsdl Christophe Raffalli
                                   ` (3 more replies)
  2 siblings, 4 replies; 68+ messages in thread
From: David MENTRE @ 2005-08-31  8:48 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

Hello Jon,

2005/8/30, Jon Harrop <jon@ffconsultancy.com>:
> I had better clarify before continuing. I see two viable approaches here:
> 
> 1. Write OCaml bindings to the native GUIs and then an OCaml wrapper that
> abstracts the nativeness away.
> 
> 2. Write a new widget toolkit designed to render via OpenGL.
> 
> If we do (1) then it will handle skinning and the intersection of the sets of
> functionality of the native GUIs.
> 
> If we do (2) then customisation and skinning will be ignored but you have the
> advantage of real time 2D and 3D graphics.
> 
> Option (2) seems much easier and more useful to me. I've never cared about
> skinning...

Well, in option (1), as somebody else underlined it, it is a lot more
than just skinning. How do you handle i18n and l10n issues? How to
display bidirectionnal languages? How to write Arabic, Hebrew or
Chinese characters? How to take input in Japanese or Tamil? How to
handle copy/paste and drag & drop with other applications of the
platform? Or to print PDF with Arabic and Indian characters in the
same document?

Maybe you don't have those issues for you local market, Jon. But as
soon as you are writting graphical applications to be used worldwide,
those issues are coming out pretty quickly. This is at least a
requirement for my application.

I really fear your under estimate the amount of work needed to
accomplish such a job. And the OCaml community seems pretty fragmented
on this GUI front.

To improve on the situation, I see following options:

 1. improve Labgtk2 documentation and use Gtk2 on all patforms. As our
try on Win32 have shown, compiling Gtk2 on Windows seems pretty
complicated and a moving target, albeit not impossible to do. I don't
know for MacOS X. And Gtk2 behaviour is different on Win32 than native
Win32 applications;

 2. write a *simple* GUI front end, in OCaml, with only simple modules
and/or simple objects. No fancy use of OCaml type system. Stay close
to ML core. Use Labgtk2, native Win32 and MacOS X libraries to render
the GUI. However I don't know the complexity of handling gory details,
like encoding of strings;

 3. (Jon option) write a pure GUI from scratch, in pure OCaml. A
project similar to Qt or WxWidgets for C++. It seems doable to have a
basic GUI but handling all i18n and desktop interoperability issues
seems pretty complicated;

 4. Use Labltk. I can't really comment on it, as I have never used it
and can't say about its graphical behaviour or desktop integration
(copy/paste and drag&drop);

 5. drop OCaml to write GUI. Use other languages (usually C++) to make
front-ends and use OCaml code only as backend, communicating through
sockets or shared memory. Maybe the most viable long term solution.

Personnally, I don't know what decision to take. My current GUI code
is in Lablgtk2 but, as stated in other emails, use of Gtk2 is too
difficult for me. And I don't want to go into another reinvent the
wheel syndrom. (sigh)

Yours,
d.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Proposal a GUI from Ocamlsdl
  2005-08-31  8:48               ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
@ 2005-08-31  9:06                 ` Christophe Raffalli
  2005-08-31 14:39                   ` [Caml-list] " Jon Harrop
  2005-08-31 14:27                 ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) Jon Harrop
                                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 68+ messages in thread
From: Christophe Raffalli @ 2005-08-31  9:06 UTC (permalink / raw)
  To: David MENTRE; +Cc: Jon Harrop, caml-list


I plan to write a real interface for GlSurf (google it !). And I might 
start a minimal GUI library on top of OcamlSDL.

What are the advantages:

- access to everything in the hardware: openGL, sound, CD player, ttf 
fonts, etc (can even play video it seems !)

- no need for callbacks from C to Caml (this is a pain, and you can not 
create too many callbacks with register_callback, if you do not want
performance problems. I add a lot of pb with that on Glut, an app with a 
lot of button and one registered callback per button seems not reasonable).
With OcamlSDL, you can have a Caml thread listening (or polling) the 
event queue and calling the Caml function directly.

- it seems simple to use (I write a small example in just a few minutes, 
despite the lack of documentation)

- works at least on windows, linux and OS X (aqua, no X11)

I can either do my interface alone in my corner with a minimal GUI 
library ... or we can start a project with a bunch of people ...

just a pb ... I do not know yet how to manipulate the OS X menu bar from 
SDL ... If someone knows how to do that ?



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-31  8:48               ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
  2005-08-31  9:06                 ` Proposal a GUI from Ocamlsdl Christophe Raffalli
@ 2005-08-31 14:27                 ` Jon Harrop
  2005-09-01  4:49                 ` Feeding the OCaml GUI troll Matt Gushee
  2005-09-01 19:23                 ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) Nathaniel Gray
  3 siblings, 0 replies; 68+ messages in thread
From: Jon Harrop @ 2005-08-31 14:27 UTC (permalink / raw)
  To: caml-list

On Wednesday 31 August 2005 09:48, David MENTRE wrote:
> Well, in option (1), as somebody else underlined it, it is a lot more
> than just skinning. How do you handle i18n and l10n issues? How to
> display bidirectionnal languages? How to write Arabic, Hebrew or
> Chinese characters? How to take input in Japanese or Tamil? How to
> handle copy/paste and drag & drop with other applications of the
> platform? Or to print PDF with Arabic and Indian characters in the
> same document?

Those features would require a substantial amount of work for either (1) or 
(2), AFAIK.

> Maybe you don't have those issues for you local market, Jon. But as
> soon as you are writting graphical applications to be used worldwide,
> those issues are coming out pretty quickly. This is at least a
> requirement for my application.

Then your requirements are quite different from my own and, I believe, many 
other people's. To start with, I am just interested in a minimal working 
library that would let me knock up simple applications. Cross-platform drag 
and drop is way down the line...

> I really fear your under estimate the amount of work needed to
> accomplish such a job. And the OCaml community seems pretty fragmented
> on this GUI front.

If you're talking about supporting all languages and all features on all 
platforms then of course it is an enormous undertaking. From my point of 
view, that is such a difficult task that it simply isn't worth discussing. I 
believe we can only do a decent job if we attack a small problem.

> ...
>  3. (Jon option) write a pure GUI from scratch, in pure OCaml. A
> project similar to Qt or WxWidgets for C++. It seems doable to have a
> basic GUI but handling all i18n and desktop interoperability issues
> seems pretty complicated;

If you're talking about my option (2) then it is more like GLUI and not like 
Qt and wxWindows.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Proposal a GUI from Ocamlsdl
  2005-08-31  9:06                 ` Proposal a GUI from Ocamlsdl Christophe Raffalli
@ 2005-08-31 14:39                   ` Jon Harrop
  2005-09-01 19:27                     ` Nathaniel Gray
  0 siblings, 1 reply; 68+ messages in thread
From: Jon Harrop @ 2005-08-31 14:39 UTC (permalink / raw)
  To: caml-list

On Wednesday 31 August 2005 10:06, Christophe Raffalli wrote:
> I plan to write a real interface for GlSurf (google it !).

You're already famous.

> And I might start a minimal GUI library on top of OcamlSDL.

Excellent idea but how will you support Hebrew? ;-)

> I can either do my interface alone in my corner with a minimal GUI
> library ... or we can start a project with a bunch of people ...

I'd like to help. Do you have a scene graph with GL picking up and running?

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 11:48     ` Jon Harrop
  2005-08-30 12:22       ` David MENTRE
@ 2005-09-01  4:17       ` Matt Gushee
  2005-09-01 13:25         ` Jon Harrop
  1 sibling, 1 reply; 68+ messages in thread
From: Matt Gushee @ 2005-09-01  4:17 UTC (permalink / raw)
  To: caml-list

Jon Harrop wrote:

>>Specific in what sense? And do you mean LablTk as a tool, or as a book
>>topic?

> I meant that the topic "GUI programming using lablTK" is too specific for a 
> book.

Okay, I thought that was probably what you meant. And you're probably right.

>>Ever used the Canvas or Text widgets? There's a lot going on there.
> 
> I'm using the Text widget in a very simple way. I may have to start using the 
> canvas widget because I can't figure out how to do various things (e.g. a 
> spreadsheet).

Yes, using Text for a spreadsheet is pushing the envelope quite a bit. 
It's certainly possible with Canvas. The other option would be to have a 
bunch of Text or Entry widgets laid out with the Grid geometry manager.

> Yes. As OCaml gains popularity it will be commercially viable to publish 
> cheaper books. In the mean time, if you're interested in making money, 
> perhaps educational software would be better?

Okay, you've got my attention. I've had vague thoughts in that direction 
myself, and it happens that I taught English as a Second Language for a 
few years before getting into geekery. What thoughts do you have about 
the opportunities in that field?

> Incidentally, OpenGL is extremely important for us. So a GUI toolkit must be 
> able to handle OpenGL widgets. Indeed, this begs the question: why not do the 
> whole thing in OpenGL?

It might be a good idea. My starting point was enlightened 
self-interest: I know Tk and LablTk fairly well, and I perceive that 
LablTk needs some help if it is to remain (become?) useful. Whereas I'm 
almost totally ignorant of OpenGL. It's one of the many things I think I 
ought to learn, but haven't found time.

--
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 16:08             ` Jon Harrop
@ 2005-09-01  4:25               ` Matt Gushee
  2005-09-01 11:20                 ` Matt Gushee
  2005-09-01 14:09                 ` Chris Campbell
  0 siblings, 2 replies; 68+ messages in thread
From: Matt Gushee @ 2005-09-01  4:25 UTC (permalink / raw)
  To: caml-list

Jon Harrop wrote:

 >>> Yes but we gain the ability to have a better interface on all 
platforms.
 >>
 >>
 >> Well, "better" is rather subjective. And not having the native
 >> interface means that people will say "oh, look, this is a non-standard
 >> OCaml program" instead on looking at the application itself.
 >
 >
 >
 > True. I think this is the lesser of evils though.


Hmm, I'd like to think so. Jef Raskin[*] wrote something to the effect 
that we need better interfaces than what we have now, and something 
better will necessarily be different--with which I heartily agree.

But in terms of "industry acceptance" in the near term ... I've been 
involved in a number of discussions of why Tk is awful (or not), and one 
point that always comes up is that users allegedly don't like Tk apps 
because they look different.

-- 
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-08-30 17:47           ` [Caml-list] " David Thomas
  2005-08-30 18:06             ` Tyler Eaves
  2005-08-30 19:01             ` Jon Harrop
@ 2005-09-01  4:31             ` Matt Gushee
  2 siblings, 0 replies; 68+ messages in thread
From: Matt Gushee @ 2005-09-01  4:31 UTC (permalink / raw)
  To: caml-list

David Thomas wrote:

>>Yes but we gain the ability to have a better
>>interface on all platforms.
> 
> While pleasantly egotistical, I would have to say that
> this is a false statement.  Yes, there are problems
> with any given windowing system.  Note, however, that
> the user has already chosen the system whose
> shortcomings they feel the most comfortable with.  

True in a way. But really, the vast majority of end users have not 
chosen. Their employer, school, or computer vendor has chosen Windows 
for them, and they become used to Windows and never give anything else a 
fair trial.

But the end result is the same, I suppose.

--
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: Feeding the OCaml GUI troll
  2005-08-31  8:48               ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
  2005-08-31  9:06                 ` Proposal a GUI from Ocamlsdl Christophe Raffalli
  2005-08-31 14:27                 ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) Jon Harrop
@ 2005-09-01  4:49                 ` Matt Gushee
  2005-09-01 13:15                   ` [Caml-list] " skaller
  2005-09-01 19:23                 ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) Nathaniel Gray
  3 siblings, 1 reply; 68+ messages in thread
From: Matt Gushee @ 2005-09-01  4:49 UTC (permalink / raw)
  To: caml-list

First of all, I hope the "troll" label is tongue-in-cheek. I really am 
not trying to stir up argument for argument's sake. The goal is to find 
a project or two that might benefit both myself and the community.

David MENTRE wrote:

> I really fear your under estimate the amount of work needed to
> accomplish such a job. And the OCaml community seems pretty fragmented
> on this GUI front.

Sounds right to me.

>  2. write a *simple* GUI front end, in OCaml, with only simple modules
> and/or simple objects. No fancy use of OCaml type system. Stay close
> to ML core. Use Labgtk2, native Win32 and MacOS X libraries to render
> the GUI. However I don't know the complexity of handling gory details,
> like encoding of strings;

I'm not sold on the idea of a "simple" GUI front end. I've tried one or 
two of them, and I think they're probably good for, say, a database 
application, but useless for more general apps like text editors and 
drawing tools.

>  4. Use Labltk. I can't really comment on it, as I have never used it
> and can't say about its graphical behaviour or desktop integration
> (copy/paste and drag&drop);

Drag and drop would have to be added; copy/paste functionality is a 
built-in feature of the Text widget and possibly some others.

>  5. drop OCaml to write GUI. Use other languages (usually C++) to make
> front-ends and use OCaml code only as backend, communicating through
> sockets or shared memory. Maybe the most viable long term solution.

That's no doubt a technically sound solution. Is it commercially viable? 
I'd say that depends on your market. Large organizations are generally 
comfortable with separately installed components. Small businesses, 
primary and secondary schools (at least in the US), and home users are 
often terrified of complex installation and configuration procedures. 
They want one-step installation.

--
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-30 22:34         ` yoann padioleau
@ 2005-09-01  4:58           ` Matt Gushee
  0 siblings, 0 replies; 68+ messages in thread
From: Matt Gushee @ 2005-09-01  4:58 UTC (permalink / raw)
  To: caml-list

yoann padioleau wrote:

 > Is there really big a differences between Qt, Gtk, Wxwindows, ... ?
 > The only difference is maybe the number of widgets it supports, but 
all those API share the same kind of style,
 > the same basic widgets.


No, there are also important differences in their event handling 
mechanisms ... can't really go into detail at this moment, but it's 
something that needs to be considered.

-- 
Matt Gushee
Englewood, CO, USA


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-09-01  4:25               ` Matt Gushee
@ 2005-09-01 11:20                 ` Matt Gushee
  2005-09-01 11:26                   ` Matt Gushee
  2005-09-01 14:09                 ` Chris Campbell
  1 sibling, 1 reply; 68+ messages in thread
From: Matt Gushee @ 2005-09-01 11:20 UTC (permalink / raw)
  To: caml-list

Matt Gushee wrote:

> Hmm, I'd like to think so. Jef Raskin[*] wrote something to the effect 
> that we need better interfaces than what we have now, and something 
> better will necessarily be different--with which I heartily agree.

And the footnote is:

[*] Sometimes called the "father of the Macintosh," Raskin has more
     recently developed an innovative UI originally called The Humane
     Interface, now known as Archie (or aRCHIe?).


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-09-01 11:20                 ` Matt Gushee
@ 2005-09-01 11:26                   ` Matt Gushee
  0 siblings, 0 replies; 68+ messages in thread
From: Matt Gushee @ 2005-09-01 11:26 UTC (permalink / raw)
  To: caml-list

Matt Gushee wrote:

> [*] Sometimes called the "father of the Macintosh," Raskin has more
>     recently developed an innovative UI originally called The Humane
>     Interface

Whoops, that was the title of his book. The software was called The 
Humane *Environment.* And Raskin unfortunately left this world in early 
2005, but his work is being carried on by his son.

--
Matt Gushee
Englewood, CO, USA



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-01  4:49                 ` Feeding the OCaml GUI troll Matt Gushee
@ 2005-09-01 13:15                   ` skaller
  2005-09-01 13:28                     ` David MENTRE
                                       ` (2 more replies)
  0 siblings, 3 replies; 68+ messages in thread
From: skaller @ 2005-09-01 13:15 UTC (permalink / raw)
  To: Matt Gushee; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 965 bytes --]

On Wed, 2005-08-31 at 22:49 -0600, Matt Gushee wrote:

> I'm not sold on the idea of a "simple" GUI front end.

I am. My idea is this: GET RID OF CALLBACKS.
The idea is to use (user space) threads instead.

The big problem with GUI's is that they're passive.
You write 'event handlers' and have to store the current
state manually. By control inverting the code, you can
just use a thread for each widget.

For example for a button something like:

	let rec wait_down () =
		read event;
		match event with
		| state_request -> 
			send(up); 
			wait_down()
		| click -> wait_up()

	and wait_up () =
		draw_button_down();
		read event;
		match event with
		| state_request -> 
			send(down); 
			wait_up()
		| click ->
			draw_button_up()
			wait_down()


is purely functional: it uses the program counter
to maintain state, instead of a mutable state variable.		

-- 
John Skaller <skaller at users dot sourceforge dot net>


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-09-01  4:17       ` Matt Gushee
@ 2005-09-01 13:25         ` Jon Harrop
  0 siblings, 0 replies; 68+ messages in thread
From: Jon Harrop @ 2005-09-01 13:25 UTC (permalink / raw)
  To: caml-list

On Thursday 01 September 2005 05:17, Matt Gushee wrote:
> Jon Harrop wrote:
> > I meant that the topic "GUI programming using lablTK" is too specific for
> > a book.
>
> Okay, I thought that was probably what you meant. And you're probably
> right.

There may well be a market for a book on GUI programming in OCaml (including 
OpenGL).

I've managed to get my database app up and running with lablgtk but it 
required a lot of weirdness (e.g. lots of mutual recursion, a strange 
"memoizing" wrapper for window creation functions to let me hide and show 
windows by destroying and recreating them). Having a book on the subject 
could have saved me a lot of time. The problem is, does anyone know how such 
things should be written?

> Yes, using Text for a spreadsheet is pushing the envelope quite a bit.
> It's certainly possible with Canvas. The other option would be to have a
> bunch of Text or Entry widgets laid out with the Grid geometry manager.

I think GTK will let me do this without too much difficulty. The more I use it 
and the more hassle I have (most of yesterday was spent making fundamental 
changes to my implementation, e.g. to let me hide windows) the more I think 
it would be easier to just start from scratch using OpenGL.

> > Yes. As OCaml gains popularity it will be commercially viable to publish
> > cheaper books. In the mean time, if you're interested in making money,
> > perhaps educational software would be better?
>
> Okay, you've got my attention. I've had vague thoughts in that direction
> myself, and it happens that I taught English as a Second Language for a
> few years before getting into geekery. What thoughts do you have about
> the opportunities in that field?

Vast. Educational software can be cheap because there are no overheads for 
making and shipping the product. Dispatch is O(1) for the human (you don't 
have to do anything per order, it is all automated). So it has the moral 
benefit of letting you help a lot more people whilst also being economically 
viable.

I'm aiming Presenta at the metamarket above this. Ultimately, I hope Presenta 
will let users write technical slideshow presentations that they can then 
sell. It will include an embedded (typeset!) OCaml-like DSL that allows users 
to create and manipulate vector graphics that will be rendered via OpenGL 
using Smoke, as well as a "manual" vector graphics editor (e.g. like a 
cut-down version of Corel DRAW).

As Presenta is written entirely in OCaml, I may even try to support dynamic 
loading of code. However, the core (e.g. the renderer) is performance 
critical and needs to be compiled to native code to achieve good performance.

> > Incidentally, OpenGL is extremely important for us. So a GUI toolkit must
> > be able to handle OpenGL widgets. Indeed, this begs the question: why not
> > do the whole thing in OpenGL?
>
> It might be a good idea. My starting point was enlightened
> self-interest: I know Tk and LablTk fairly well, and I perceive that
> LablTk needs some help if it is to remain (become?) useful. Whereas I'm
> almost totally ignorant of OpenGL. It's one of the many things I think I
> ought to learn, but haven't found time.

Have you seen all of the demos on our site?

  http://www.ffconsultancy.com/products/ocaml_for_scientists/visualisation
  http://www.ffconsultancy.com/free/maze
  http://www.ffconsultancy.com/free/ray_tracer
  http://www.ffconsultancy.com/free/ray_tracer/comparison.html

Also, my book has a chapter describing the basics of OpenGL and its use via 
LablGL.

I've already done a lot of work on OpenGL-based GUIs written in OCaml, of 
course, and I'm willing to help create a decent toolkit. I think we should 
start with a scene graph and picking. I am particularly interested in peer 
review of my scene graph design. Perhaps we could use polymorphic variants to 
make the scene graph extensible?

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-01 13:15                   ` [Caml-list] " skaller
@ 2005-09-01 13:28                     ` David MENTRE
  2005-09-01 13:50                       ` skaller
  2005-09-01 14:43                     ` Chris Campbell
  2005-09-02  7:40                     ` Ville-Pertti Keinonen
  2 siblings, 1 reply; 68+ messages in thread
From: David MENTRE @ 2005-09-01 13:28 UTC (permalink / raw)
  To: skaller; +Cc: Matt Gushee, caml-list, ocaml-gui

Hello,

2005/9/1, skaller <skaller@users.sourceforge.net>:
> I am. My idea is this: GET RID OF CALLBACKS.
> The idea is to use (user space) threads instead.

The main issue with threads is that as soon as you want to share
state/data between threads, it becomes a mess. Of course, you can have
some clean tools like OCaml channels in module Event, but they don't
avoid issues like deadlocks.

The callback and main event handler scheme as the advantage of
simplicity: your program does only one thing at a time.

Yours,
d.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-01 13:28                     ` David MENTRE
@ 2005-09-01 13:50                       ` skaller
  0 siblings, 0 replies; 68+ messages in thread
From: skaller @ 2005-09-01 13:50 UTC (permalink / raw)
  To: David MENTRE; +Cc: Matt Gushee, caml-list, ocaml-gui

[-- Attachment #1: Type: text/plain, Size: 1886 bytes --]

On Thu, 2005-09-01 at 15:28 +0200, David MENTRE wrote:
> Hello,
> 
> 2005/9/1, skaller <skaller@users.sourceforge.net>:
> > I am. My idea is this: GET RID OF CALLBACKS.
> > The idea is to use (user space) threads instead.
> 
> The main issue with threads is that as soon as you want to share
> state/data between threads, it becomes a mess. 

Ah .. but read again: *user space* threads. Such as those
generated by Felix. They're C++, but a control inverter
for Ocaml shouldn't be too hard.

> The callback and main event handler scheme as the advantage of
> simplicity: your program does only one thing at a time.

Same as user space threads.

In Felix, something like this happens:

class f: public continuation {

f(caller, args) { 
	_caller = caller; 
	arg = args;
}

continuation *resume() {

	//read event
	switch (pc) { 
	...
		read_flag = true; 
		pe = &event; // where to put the event
		pc = 99;
		return this;
	case 99:
		
	// call subroutine(x)
		pc = 100;
		return new subroutine(this,x);
	case 100:
	...

	// return
		return _caller;

}
};


The driver loop is (crudely):

	while(p){
		p=p->resume();
		if(p->read_flag == true){
			p->pe = next_event();
			p->read_flag = false;
		}
	}

for a single thread. There's nothing here that can't
be done with an Ocaml class instead of a C++ one.

Probably, even with camlp4. The main problem is that
you can only yield when the machine stack is empty,
which means you HAVE to use continuations everywhere
you might want to read an event/yield.

MLton threads do this much better than Felix: they
use an MLton stack, not the machine stack,
and the MLton stack is kept linear using the
GC's compactor so it grows and shrinks *without*
losing linearity .. I wish I could do that in Felix.


-- 
John Skaller <skaller at users dot sourceforge dot net>


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Does LablTk have a future?
  2005-09-01  4:25               ` Matt Gushee
  2005-09-01 11:20                 ` Matt Gushee
@ 2005-09-01 14:09                 ` Chris Campbell
  1 sibling, 0 replies; 68+ messages in thread
From: Chris Campbell @ 2005-09-01 14:09 UTC (permalink / raw)
  To: Matt Gushee; +Cc: caml-list

On 01/09/05, Matt Gushee <mgushee@havenrock.com> wrote:
> 
> Hmm, I'd like to think so. Jef Raskin[*] wrote something to the effect
> that we need better interfaces than what we have now, and something
> better will necessarily be different--with which I heartily agree.
> 
> But in terms of "industry acceptance" in the near term ... I've been
> involved in a number of discussions of why Tk is awful (or not), and one
> point that always comes up is that users allegedly don't like Tk apps
> because they look different.


That's why I was concerned about the development of a gui with regards
to windows and osx.  If it doesn't look like Aqua, if it doesn't look
like Windows it's not going to work.

Once you factor in feel you might as well forget it, especially on
OSX.  People are less than enthusiastic about X apps on OSX.  They
don't behave like Aqua apps and don't follow Mac conventions. 
Similarly with GTk on windows without skinning.

I also don't see a point in reinventing the wheel.  For Linux someone
could probably do better than KDE/Gnome/Enlightenment given a couple
of years, and some might actually use it but no one is gonna like it
on OSX or Windows (which is used by most people).

The best option is to write a high level toolkit over a gui and make
it general enough to use the native gui.  Let's face it, most systems
have buttons, windows, etc and they serve the same purpose on all
systems even if they don't look or behave the same on all systems. 
It's only the api that's different from a programmers perspective and
as programmers that's where the problem is.  Don't turn a problem for
programmers into a problem for users, because they're the ones who
decides the popularity of your software in the end.

Paul Graham wrote about the problems programmers have seeing it from
the user perspective, but I'm not sure which article it is... might be
"Revenge of the nerds".


Chris


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-01 13:15                   ` [Caml-list] " skaller
  2005-09-01 13:28                     ` David MENTRE
@ 2005-09-01 14:43                     ` Chris Campbell
  2005-09-02  7:40                     ` Ville-Pertti Keinonen
  2 siblings, 0 replies; 68+ messages in thread
From: Chris Campbell @ 2005-09-01 14:43 UTC (permalink / raw)
  To: skaller; +Cc: Matt Gushee, caml-list

On 01/09/05, skaller <skaller@users.sourceforge.net> wrote:
> On Wed, 2005-08-31 at 22:49 -0600, Matt Gushee wrote:
> 
> > I'm not sold on the idea of a "simple" GUI front end.
> 
> I am. My idea is this: GET RID OF CALLBACKS.
> The idea is to use (user space) threads instead.
> 
> The big problem with GUI's is that they're passive.
> You write 'event handlers' and have to store the current
> state manually. By control inverting the code, you can
> just use a thread for each widget.

Joe Armstrong did something like this with Erlang and X called Ex11. 
Can't remember how it works exactly, but it seems each widget is a
thread and can process events independantly of the others.

http://www.erlang.se/workshop/2004/ex11.pdf


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?)
  2005-08-31  8:48               ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
                                   ` (2 preceding siblings ...)
  2005-09-01  4:49                 ` Feeding the OCaml GUI troll Matt Gushee
@ 2005-09-01 19:23                 ` Nathaniel Gray
  3 siblings, 0 replies; 68+ messages in thread
From: Nathaniel Gray @ 2005-09-01 19:23 UTC (permalink / raw)
  To: David MENTRE; +Cc: Jon Harrop, caml-list

On 8/31/05, David MENTRE <david.mentre@gmail.com> wrote:
> 
>  1. improve Labgtk2 documentation and use Gtk2 on all patforms. As our
> try on Win32 have shown, compiling Gtk2 on Windows seems pretty
> complicated and a moving target, albeit not impossible to do. I don't
> know for MacOS X. And Gtk2 behaviour is different on Win32 than native
> Win32 applications;

There is no native Gtk2 port for OS X.  Gtk requires the user to run
an X server under OS X and doesn't provide native look or feel.  For
OS X there's Qt, XUL, wxwidgets, tk, and probably some others I'm not
including.

>  3. (Jon option) write a pure GUI from scratch, in pure OCaml. A
> project similar to Qt or WxWidgets for C++. It seems doable to have a
> basic GUI but handling all i18n and desktop interoperability issues
> seems pretty complicated;

I'm starting to think this is the most promising direction.  Build it
on top of a cross-platform graphics toolkit like Cairo or SDL, then
handle all the logic in ocaml.  It gives developers a single target to
write for at the expense of (probably) never getting native look and
feel.

> Personnally, I don't know what decision to take. My current GUI code
> is in Lablgtk2 but, as stated in other emails, use of Gtk2 is too
> difficult for me. And I don't want to go into another reinvent the
> wheel syndrom. (sigh)

Alas, the cross-language cross-platform gui toolkit with native
look-and-feel is a wheel that has yet to be invented.

-- 
>>>-- Nathaniel Gray -- Caltech Computer Science ------>
>>>-- Mojave Project -- http://mojave.cs.caltech.edu -->


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Proposal a GUI from Ocamlsdl
  2005-08-31 14:39                   ` [Caml-list] " Jon Harrop
@ 2005-09-01 19:27                     ` Nathaniel Gray
  0 siblings, 0 replies; 68+ messages in thread
From: Nathaniel Gray @ 2005-09-01 19:27 UTC (permalink / raw)
  To: Jon Harrop; +Cc: caml-list

On 8/31/05, Jon Harrop <jon@ffconsultancy.com> wrote:
> On Wednesday 31 August 2005 10:06, Christophe Raffalli wrote:
> > I plan to write a real interface for GlSurf (google it !).
> 
> You're already famous.
> 
> > And I might start a minimal GUI library on top of OcamlSDL.
> 
> Excellent idea but how will you support Hebrew? ;-)

I think it's wise to learn to walk before trying to run.  If you try
to solve every issue in GUI design for version 1.0 then version 1.0
will never exist.

Cheers,
-n8

-- 
>>>-- Nathaniel Gray -- Caltech Computer Science ------>
>>>-- Mojave Project -- http://mojave.cs.caltech.edu -->


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-01 13:15                   ` [Caml-list] " skaller
  2005-09-01 13:28                     ` David MENTRE
  2005-09-01 14:43                     ` Chris Campbell
@ 2005-09-02  7:40                     ` Ville-Pertti Keinonen
  2005-09-02 12:39                       ` skaller
  2 siblings, 1 reply; 68+ messages in thread
From: Ville-Pertti Keinonen @ 2005-09-02  7:40 UTC (permalink / raw)
  To: skaller; +Cc: Matt Gushee, caml-list

[-- Attachment #1: Type: text/plain, Size: 1732 bytes --]

On Thu, 2005-09-01 at 23:15 +1000, skaller wrote:

> I am. My idea is this: GET RID OF CALLBACKS.
> The idea is to use (user space) threads instead.
> 
> The big problem with GUI's is that they're passive.
> You write 'event handlers' and have to store the current
> state manually. By control inverting the code, you can
> just use a thread for each widget.

Have you actually done this in a GUI context, or do you just find it
conceptually attractive?

I've experimented with GUI concepts and event mechanisms in OCaml, and
created an event mechanism that could relatively easily be used in a
sort-of control inverted form by manually wrapping things into
continuations.  I never ended up making use of that form of events for
the actual low-level GUI functionality, because it always seemed easier
to just use methods or attach callbacks to events and use explicit
state.  Now that could simply be because I was sort-of porting a GUI
library that I had written earlier (in C++ and Scheme) and I'm rather
used to GUI mechanisms layered around inheritance (one of the few places
where it actually seems natural to me).

> For example for a button something like:
> 
> 	let rec wait_down () =
  ...

> 	and wait_up () =
  ...

> is purely functional: it uses the program counter
> to maintain state, instead of a mutable state variable.

But consider that the state of a button isn't quite that simple.
Tracking the state explicitly isn't difficult - attached is an actual
push button class implementation in a traditional imperative/OO style.

There's 3 boolean variables (8 states, although half of them are
impossible) tracked locally by the simplest stateful widget.  It also
has keyboard focus state, tracked by a superclass.


[-- Attachment #2: ws_button.ml --]
[-- Type: text/plain, Size: 2262 bytes --]

(* Push button type *)

open Ws_widget_types
open Ws_types

type events =
  [ Ws_swidget.events
  | `ButtonClicked ]

class ['a] t parent (style_init : Ws_style.button_style) =
  object (self)
    inherit ['a] Ws_swidget.t parent as super

    constraint 'a = [> events ]

    val style = style_init
    val mutable is_pressed = false
    val mutable is_down = false
    val mutable is_in = false

    method redraw d =
      let mode =
	if is_down then `ButtonPressed
	else
	  if is_active then
	    if is_in then `ActiveMouseOver else `Active
	  else
	    if is_in then `MouseOver else `Default
      in
	style#draw d mode

    method size_changed =
      style#set_size (r_size region)

    method enter_notify =
      is_in <- true;
      if is_pressed then
	is_down <- true;
      self#need_redraw

    method leave_notify =
      is_in <- false;
      if is_pressed then
	is_down <- false;
      self#need_redraw

    method button_press b p m =
      if b = 1 then
	begin
	  is_pressed <- true;
	  is_down <- true;
	  self#need_redraw
	end
      else
	super#button_press b p m

    method button_release b p m =
      if b = 1 then
	begin
	  if is_down && is_pressed then self#clicked;
	  is_pressed <- false;
	  is_down <- false;
	  self#need_redraw
	end
      else
	super#button_release b p m

    method clicked =
      self#post_event `ButtonClicked

    initializer
      let _ = self#request_notify ButtonNotify
      and _ = self#request_notify CrossingNotify in
	self#set_bg style#bg;
	self#bind_key (1, 0, (Ws_key.Kchar 32)) (fun _ -> self#clicked; true)
  end

let on_click f =
  function
      `ButtonClicked -> f ()
    | _ -> ()

let create ?region ?text ?label ?pos ?size ?onclick parent =
  let style = parent#get_app#style in
  let bs = style#button_style in
  let (bt : events t) = new t parent bs
  and set_opt f = function Some x -> f x | _ -> () in
    set_opt bt#set_pos pos;
    set_opt (fun f -> bt#connect (on_click f)) onclick;
    begin
      match text with
	  Some t -> bs#set_label (style#button_textlabel t)
	| None -> set_opt bs#set_label label
    end;
    set_opt bt#set_region region;
    if region = None then begin
      match size with
	  Some x -> bt#set_size x
	| None -> bt#set_size (bs#size_hint)
    end;
    bt


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-02  7:40                     ` Ville-Pertti Keinonen
@ 2005-09-02 12:39                       ` skaller
  2005-09-03 10:34                         ` Damien Bobillot
                                           ` (2 more replies)
  0 siblings, 3 replies; 68+ messages in thread
From: skaller @ 2005-09-02 12:39 UTC (permalink / raw)
  To: Ville-Pertti Keinonen; +Cc: Matt Gushee, caml-list

[-- Attachment #1: Type: text/plain, Size: 7934 bytes --]

On Fri, 2005-09-02 at 10:40 +0300, Ville-Pertti Keinonen wrote:
> On Thu, 2005-09-01 at 23:15 +1000, skaller wrote:
> 
> > I am. My idea is this: GET RID OF CALLBACKS.
> > The idea is to use (user space) threads instead.
> > 
> > The big problem with GUI's is that they're passive.
> > You write 'event handlers' and have to store the current
> > state manually. By control inverting the code, you can
> > just use a thread for each widget.
> 
> Have you actually done this in a GUI context, or do you just find it
> conceptually attractive?

I have done some brief experiments to check it can be
made to work .. but the real answer is no, it is only
a planned application (of Felix). But see below ..

> I've experimented with GUI concepts and event mechanisms in OCaml, and
> created an event mechanism that could relatively easily be used in a
> sort-of control inverted form by manually wrapping things into
> continuations.  I never ended up making use of that form of events for
> the actual low-level GUI functionality, because it always seemed easier
> to just use methods or attach callbacks to events and use explicit
> state. 

Yes, that seems likely for simpler low level things:
for example for a button (my example) clearly you just
need a boolean flag, which is pretty easy to maintain
manually.

However I *have* used the mechanism in a sophisticated embedded
environment, namely a telephony system.

We found, as above, that for some event handling,
callbacks were indeed better: some events like 
'phone call disconnected' are global, pervasive,
and in this case quite final.

Other events didn't fit so easily into this category.
Excuse brief explanation: the system used an asynchronous
real time data base. One task was to terminate a prepaid
phone call when the client's money ran out. In a place
like USA, where phone companies offer various deals,
and there are multiple time zones, the costing algorithm
can be quite complex -- especially if the client is
mobile (basically a recursive tree search with
pruning is required to find the minimum cost 'route')

To do this with hand written callback driven code is 
well nigh impossible. The algorithm is hard enough
written in a functional form with referential transparency
to help reason you have it right.

The fact the control inverted (event driven) form
is object oriented/procedural, yet equivalent to
a purely functional algorithm, makes mechanical
control inversion attractive -- but the utility
is only apparent in more complex examples.

>  Now that could simply be because I was sort-of porting a GUI
> library that I had written earlier (in C++ and Scheme) and I'm rather
> used to GUI mechanisms layered around inheritance (one of the few places
> where it actually seems natural to me).

I guess you start with simplistic procedural code, but
then find it is too hard to tailor and start using 
inheritance to help with that.

Unfortunately, a bit further down the track,
you again find it isn't good enough, and you need
much more dynamics -- and you have to switch
to delegation.

Further still, even that isn't dynamic enough,
and you start needing real message passing, that is,
posting events into the event queue as a means of
communicating between widgets.

The real question is, at this stage of sophistication,
whether you wouldn't be better off due to strong
static type checking, implementing stuff with functional
style instead: functional code can represent state too,
using closures.

I don't know the answer .. but I do know existing GUI's
are pretty bad. It is FAR too hard to get even simple
things to work, and hardly any GUI applications around
have any really high level functionality: the programmers
are struggling so hard to get really basic things to work.

> > For example for a button something like:
> > 
> > 	let rec wait_down () =
>   ...
> 
> > 	and wait_up () =
>   ...
> 
> > is purely functional: it uses the program counter
> > to maintain state, instead of a mutable state variable.
> 
> But consider that the state of a button isn't quite that simple.

The code was just an example of the style: for a more sophisticated
widget -- I mean lets go all the way and look at a tree widget,
an edit widget, or a canvas ... it isn't clear functional code
will be easier.

> Tracking the state explicitly isn't difficult 

No, not for a button. But for complex widgets it is.

Lets face it -- most programmers can't even get the mouse cursor
right. GQView, magnify/shrink with the mouse changes the mouse
from (+) to (-) when you next move the mouse .. which is plain
wrong (it should change as soon as you click to magnify or
shrink).

Many games .. mouse droppings (they got the double buffering
wrong).

So the fact is, programmers simply cannot manage trivial
state in a modern GUI correctly -- particularly they cannot
keep the user view of the state properly synchronised with
the internal state.

Interestingly I think Tk handles this quite well (it knows
when state is changed and re-renders the right things at
the right time automatically).

Windows is particularly BAD at some things, for example,
the tool used to edit the environment is utter rubbish:
PATH etc have very long string values and the dialog
box is small and fixed size .. this is just rubbish.

Another example: the ocamlbrowser is quite nice,
except it spawns top level windows left right and
centre, gets the size wrong, so every window has
to be adjusted. Any decent tool would allow you to spawn
those windows inside a pane or container of your choice:
modern 'Window managers' are just rubbish.

Sophisticated applications (eg Visual Studio) will give
you the choice .. but it is all hand programmed
for that particular application. I have designed a 
system called HWM (Hierarchical Window Manager) which
does away with that completely -- instead of a toolbar
you get a tree widget, which allows you to move windows
around in groups, and mutate their containers to any kind
you like (top level, panes, notebooks, etc). 

I have actually implemented this three separate times.
It relieves the programmer of the burned of hand coding
'mega-widgets' and leaves the organisation of widgets
up to the end user in a consistent way.

Of course .. this is a fairly radical concept .. the 
Open Source community would rather just copy Windows
and add minor improvements than bother to do any real
design work.

The real problem, IMHO, is C. You just cannot consider
new high level concepts for a GUI and implement them in C:
it is way too hard. 

Ocaml offers opportunities to do much better .. but there
is no point just copying existing GUIs: we already have
LablTk and LablGtk, which provide standard functionality
rewrapped more nicely. If we're going to do a real GUI
designed to take advantage of an advanced functional
programming language, we need to do a whole lot better
than what we already have .. and I do not see how to do this
without a lot of design work.

We do NOT want something with the same look and feel as
existing GUIs. They suck. But we have to have something
much better to be convincing .. do you remember the days
before Drag-and-Drop existed?

IMHO the *key* problem with GUI's -- and why real (TM) developers
hate using them -- is the lack of automation: unix script 
sucks, but it does provide automation. If we're going to make
a new GUI it has to have full automation capability.

The only way I can think of to do that is to base the 
core components of the GUI on Category Theory -- for example
have 'product' widgets and 'sum' widgets which represent
a collection and a set of alternatives, respectively,
and a standard way to combine them graphically.

-- 
John Skaller <skaller at users dot sourceforge dot net>


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-02 12:39                       ` skaller
@ 2005-09-03 10:34                         ` Damien Bobillot
  2005-09-03 12:30                           ` skaller
  2005-09-04 14:08                           ` Richard Jones
  2005-09-03 11:10                         ` yoann padioleau
  2005-09-04 14:01                         ` Richard Jones
  2 siblings, 2 replies; 68+ messages in thread
From: Damien Bobillot @ 2005-09-03 10:34 UTC (permalink / raw)
  To: skaller; +Cc: Ville-Pertti Keinonen, Matt Gushee, caml-list

[-- Attachment #1: Type: text/plain, Size: 2603 bytes --]

skaller wrote :

> IMHO the *key* problem with GUI's -- and why real (TM) developers
> hate using them -- is the lack of automation: unix script
> sucks, but it does provide automation. If we're going to make
> a new GUI it has to have full automation capability.

I totally agree : in software development, GUI programming is one of  
the most boring phases. According to my experience, the main issue is  
GUI to core program communication, you have to :
- programmatically get pointers to hundreds of GUI elements
- programmatically install event callbacks for the same widgets
- programmatically keep GUI element contents in synchronization with  
internal variables

All this stuff is very easy to do, but often long, boring.  
Fortunately, you don't any more need to programmatically define your  
widgets (and their attributes, position), thanks to WYSIWYG GUI  
creation tools (Qtdesigner for Qt, Apple's Interface Builder, Visual  
Studio...).

I think, the good idea is the automation of all this work. I'll give  
the solutions retained by Apple for Interface Builder :
- the global variables/class member containing reference to widgets  
are automatically set-up. You just have to define them in your code  
and tell the GUI creation tool to which widgets each variables is  
bind to.
- the user directly define the callbacks function in the GUI editor  
tool : you just have to give the name of the callback function.
- any class member may be bind to the content of a widget : if the  
user types characters in a text field, the matching class member (a  
variable of type string) is automatically updated to contain the  
newly typed characters. If the programmer modify the value of this  
variable, the text field is automatically updated to the new value of  
the variable. Several widgets may be bond to one variable, several  
variable to one widget, and even a variable/widget may be bond
to a file entry to enable persistent storage of the value (it's used  
for user preference storage). It's also possible to create  
transformers in order to do some type convertion when you use, for  
instance, a text field bond to a integer variable.

I don't know if it is implementable in ocaml as is, or if it is  
really the good solution (it has been designed for the Objective-C  
language, using some of its very particular features). However, I  
think it gives a good idea of what is missing in current GUI APIs and  
GUI creation tools.

Apple explanation of bindings :
http://developer.apple.com/cocoa/cocoabindings.html

-- 
Damien alias Schmurtz
aim:goim?screenname=schmuuurtz


[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 2375 bytes --]

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-02 12:39                       ` skaller
  2005-09-03 10:34                         ` Damien Bobillot
@ 2005-09-03 11:10                         ` yoann padioleau
  2005-09-03 11:30                           ` Jonathan Roewen
  2005-09-03 17:23                           ` Doug Kirk
  2005-09-04 14:01                         ` Richard Jones
  2 siblings, 2 replies; 68+ messages in thread
From: yoann padioleau @ 2005-09-03 11:10 UTC (permalink / raw)
  To: skaller; +Cc: Ville-Pertti Keinonen, Matt Gushee, caml-list

>
> IMHO the *key* problem with GUI's -- and why real (TM) developers
> hate using them -- is the lack of automation: unix script
> sucks, but it does provide automation. If we're going to make
> a new GUI it has to have full automation capability.
>

I am not sure I understand what you think by automation. But indeed  
what I like
with shell script is that I can automate some tasks over traditionnal  
programs (or even other scripts).
I can do some "for", "while" over programs, ...
That is because the interface of a command line is simpe,  stdin and  
stdout  with text as value.

But in fact there is some works do to the same with GUI. AppleScript  
is one such thing. You can do
script that send commands to apps and so you can automate some task.  
The problem is that the application
must be AppleScript aware, and that you have to know what it exports.

I once had a great idea,  "let's make the interface of a GUI  
application  be its interface" :)
That is let's be able to write in a sctipt:
  tell Musicplayer
    MENUBAR(OPEN("/tmp/staying-alive.mp3"))

Unfortunatly Apple already had the same idea,
http://www.apple.com/applescript/uiscripting/03.html




> The only way I can think of to do that is to base the
> core components of the GUI on Category Theory -- for example
> have 'product' widgets and 'sum' widgets which represent
> a collection and a set of alternatives, respectively,
>

Interesting, but it sounds like we have already this in current GUI  
toolkit (ok they dont use terms from category theory).
The product is called  boxing  in gtk (and tk I guess) and the sum is  
represented via the typing systems, the widget all inherits
from the same base class.

> and a standard way to combine them graphically.
>

Well you have vbox (vertical box) to pack them guess what,  
vertically,  and hbox.
And you have various options.



> -- 
> John Skaller <skaller at users dot sourceforge dot net>
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-03 11:10                         ` yoann padioleau
@ 2005-09-03 11:30                           ` Jonathan Roewen
  2005-09-03 17:23                           ` Doug Kirk
  1 sibling, 0 replies; 68+ messages in thread
From: Jonathan Roewen @ 2005-09-03 11:30 UTC (permalink / raw)
  To: yoann padioleau; +Cc: skaller, Matt Gushee, Ville-Pertti Keinonen, caml-list

If GUI research with OCaml in mind, then DST may be your kettle of
fish =) You get to start afresh, with nothing standing in your way for
design. Experimentation will be key.

We'll be needing a new GUI toolkit soon, once we have our new kernel
design built. Of course, you have the problems of no existing drawing
primitives (yet), or font support (yet).

One possible limitation: we may decide to use G'Caml, which I don't
believe has been ported to the 3.x series yet (think type-safe ocaml
IPC).

For those interested, please email me privately.

Jonathan Roewen


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: About Lablgtk2 (was: e: GUI for OCaml)
  2005-08-31  8:19       ` About Lablgtk2 (was: e: GUI for OCaml) David MENTRE
@ 2005-09-03 11:41         ` yoann padioleau
  0 siblings, 0 replies; 68+ messages in thread
From: yoann padioleau @ 2005-09-03 11:41 UTC (permalink / raw)
  To: David MENTRE; +Cc: Jon Harrop, caml-list

>

David mentre wrote:

> Ok, let's me try to reword my criticism: I find the use of Labgtk2
> objects not easy at all. I find the use of objects and the class
> hierarchy very confusing. Maybe this is just an issue of documenting
> the general mapping of Gtk2 signals, objects, ... to OCaml modules and
> objects. Maybe ocamldoc should be improved to allow unfolding a method
> accessible through the class hierarchy in one class.

Yes, that is a good idea. Some tools offer such a thing, for instance
in Eiffel there is a command "short"  and a command "long"   that
generate documentation from a class,  the first one with only the new  
method, and second
one with all the methods unfolded.


> Or maybe I'm too
> stupid to understand the toolkit. Or maybe I'm unable to grasp OCaml
> objects. The net result is that using Lablgtk2 is really a pain.
>
> However, I do use Labgtk2 for the graphical interface of my
> application so I at least consider that I have written enough code to
> make my own point of view. With all the examples, I'm able to write
> basic interface (i.e. buttons, menus, etc.) through copy/paste.


> But
> I'm still not able to write code that would match GUI design I would
> like to have.

Ok, that is certainly the reason
why we dont have the same feeling about lablgtk,
we must certainly not have the same standard of quality.
I am quite satisfied with someting rudimentary.

>
>
>>> necessary tools (GUI design application) would be very very helpful.
>>>
>>
>> Do you really find useful such RAD tools ?
>>
>
> Yes. Yes and yes. Have you ever programmed a GTk2 application?

Yes, yes, and yes :) (well it was gtk).
A few years ago I programmed one in C++ (I was forced by my school)   
so from this first experience I learned
the toolkit, so maybe this experience was helpful when doing my  
second app with lablgtk
(which was really easier than in c++).


> Have
> you ever see the number of options available for each widget?

No. Well I dont use them most of the time, the optional arguments
and keyword argumentss of olabl (now ocaml3)) is really a big help  
in  that respect.
You dont have to know all the options.


>
> I'm using Glade to produce the XML interface for Labgtk2 (of course,
> callbacks are written in regular OCaml code). It saved me hours of
> interface layout design. I'm not speaking of two buttons into a
> window. I'm speaking of sliding panes, with several buttons, text
> boxes and TreeView in each,

I must admit that my application was not very advanced, but it had  
many different kind of widgets
(buttons, text, boxes, pane, scrollist, menubar, labels, ...)
Here is a screenshot:
   http://lfs.irisa.fr/~pad/LFSWEB/(ext:gif)|(ext:jpg)|(ext:png)/ 
name:lfs-itunes-screenshot0/
Just a light clone of iTunes, the music application of Apple.


> playing with options to make relative
> positioning suits your needs.

The problem from what I remember is that glade fix position, it fix  
the size of your application,
I prefer not to state any fixed position and let the user adjust the  
panes, scrollbar width, ...
In my program I only state constraints (it must be right justified,  
it must be abobe that, ...).
The reason is that I had previously been frustrated by application  
that you can run only in 1024x768, a
applications where you cannot adjust the side of a subwindow, ...

>
> Yours,
> d.
>
>



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-03 10:34                         ` Damien Bobillot
@ 2005-09-03 12:30                           ` skaller
  2005-09-04 14:08                           ` Richard Jones
  1 sibling, 0 replies; 68+ messages in thread
From: skaller @ 2005-09-03 12:30 UTC (permalink / raw)
  To: Damien Bobillot; +Cc: Ville-Pertti Keinonen, Matt Gushee, caml-list

[-- Attachment #1: Type: text/plain, Size: 2358 bytes --]

On Sat, 2005-09-03 at 12:34 +0200, Damien Bobillot wrote:
> skaller wrote :
[]
>  If the programmer modify the value of this  
> variable, the text field is automatically updated to the new value of  
> the variable. 

Actually, Tk has done this for years.

[]

> I don't know if it is implementable in ocaml as is, 

I don't see why not: the issue isn't implementation
but design.

The kind of automation you are talking about I'd consider
a kind of bi-reflection: changes to a value by the program
are reflected in the GUI, and changes to the GUI made
by the user are reflected in the program variables.

Actually my HWM (Hierarchical Window Manager) system
requires this in triplicate:

(a) There is a Tree data structure in memory representing
'containment' relations.

(b) At a higher level, these objects are concretely particular
widgets -- this level is hidden by abstraction from (a).

(c) The GUI widgets on the 'screen'.

So basically you can do things like: at level (a), you delete
a child from a parent and add it to another:

	p2.add_child(p1.remove_child(c))

and on the screen, the child c and its children move magically
from paned window p1 into a notebook, p2.

Similarly, if the user rips a child out of p1 and drops
it onto p2, the window is reparented .. which is reflected
in the abstraction (a) without programmer intervention.

The user can ALSO do this via the tree widget as well as
directly with the actual windows (recall, there is no toolbar,
instead a tree widget is used).

Thus, both the program AND the user can move window
groups around. Other operations include deletion,
iconisation, and transmuting a container from one kind to
another (eg paned window to notebook).

With HWM, the programmer is relieved of the tedium of 
high level organisation: it is left up to the client
to use the window manager. Combine this with low level
automation such as bi-reflection of variables and fields,
and we have a new kind of GUI.

My builds of HWM were all done with Object Oriented code.
I tend to think it functional code may be much better.
For example -- using persistence of Tree data structure,
it should be easy to 'undo' a reparenting operation.

Exactly how to do this I do not know .. :)

-- 
John Skaller <skaller at users dot sourceforge dot net>


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-03 11:10                         ` yoann padioleau
  2005-09-03 11:30                           ` Jonathan Roewen
@ 2005-09-03 17:23                           ` Doug Kirk
  1 sibling, 0 replies; 68+ messages in thread
From: Doug Kirk @ 2005-09-03 17:23 UTC (permalink / raw)
  To: Ocaml


> But in fact there is some works do to the same with GUI.  
> AppleScript is one such thing. You can do
> script that send commands to apps and so you can automate some  
> task. The problem is that the application
> must be AppleScript aware, and that you have to know what it exports.
>

Actually, the application doesn't have to AppleScript (AS) aware. The  
only reason you augment an app with an AS dictionary is so that AS  
itself can correctly parse the syntax for the messages to the app at  
development time.

Remember that AS is really an interface to an underlying  
technology...the Apple Event mechanism. So, if you can speak low- 
level Apple Events, you don't  need AS at all.

See <http://developer.apple.com/documentation/mac/IAC/IAC-94.html>  
for instance.
Or <http://www.google.com/search?q=site:developer.apple.com+%22Apple 
+Events%22&ie=UTF-8&oe=UTF-8>

The point being, of course, that all of the visual UI re/actions are  
simply side-effects of the underlying event mechanism, which allows  
automation. I'd think you'd want that type of mechanism forming the  
basis of the GUI.

--doug


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-02 12:39                       ` skaller
  2005-09-03 10:34                         ` Damien Bobillot
  2005-09-03 11:10                         ` yoann padioleau
@ 2005-09-04 14:01                         ` Richard Jones
  2 siblings, 0 replies; 68+ messages in thread
From: Richard Jones @ 2005-09-04 14:01 UTC (permalink / raw)
  To: caml-list

On Fri, Sep 02, 2005 at 10:39:41PM +1000, skaller wrote:
> The fact the control inverted (event driven) form
> is object oriented/procedural, yet equivalent to
> a purely functional algorithm, makes mechanical
> control inversion attractive -- but the utility
> is only apparent in more complex examples.

Another good example where it makes sense is in writing web servers.
Have a look at the source to (event-driven webserver) BOA sometime -
it's absolutely horrible.

Rich.

-- 
Richard Jones, CTO Merjis Ltd.
Merjis - web marketing and technology - http://merjis.com
Team Notepad - intranets and extranets for business - http://team-notepad.com


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [Caml-list] Re: Feeding the OCaml GUI troll
  2005-09-03 10:34                         ` Damien Bobillot
  2005-09-03 12:30                           ` skaller
@ 2005-09-04 14:08                           ` Richard Jones
  1 sibling, 0 replies; 68+ messages in thread
From: Richard Jones @ 2005-09-04 14:08 UTC (permalink / raw)
  To: caml-list

We face a similar problem, connecting database fields to GUI widgets.
We came up with a concept of a "tied reference" variable.  Included
below is the interface - you can probably work out how it works.  It
has to be said that it wasn't particularly successful, and still
required lots of manual and repetitive work to make it happen.
Luckily we ditched that project for financial reasons :-)

Rich.

------------------------------------------------------------ tiedref.mli
(* Tied references.
 * Copyright (C) 2003 Merjis Ltd.
 * $Id: tiedref.mli,v 1.2 2003/12/02 13:22:01 rich Exp $
 *)

type 'a tiedref

val tiedref : read:(unit -> 'a) -> write:('a -> unit) -> 'a tiedref

val ( !* ) : 'a tiedref -> 'a
val ( *:= ) : 'a tiedref -> 'a -> unit

------------------------------------------------------------ dbtiedref.mli
(* Database-backed tied references.
 * Copyright (C) 2003 Merjis Ltd.
 * $Id: dbtiedref.mli,v 1.3 2004/03/08 13:44:25 rich Exp $
 *)

open Tiedref

type dbrow

val dbrow : Dbi.connection -> string -> string -> Dbi.sql_t list -> dbrow

type 'a dbfield

val dbfield_bool_not_null : string -> bool dbfield
val dbfield_bool : string -> bool option dbfield
val dbfield_int_not_null : string -> int dbfield
val dbfield_int : string -> int option dbfield
val dbfield_string_not_null : string -> string dbfield
val dbfield_string : string -> string option dbfield

val dbtiedref : dbrow -> 'a dbfield -> 'a tiedref


-- 
Richard Jones, CTO Merjis Ltd.
Merjis - web marketing and technology - http://merjis.com
Team Notepad - intranets and extranets for business - http://team-notepad.com


^ permalink raw reply	[flat|nested] 68+ messages in thread

* GUI for Ocaml
@ 2000-02-22 16:25 Alain Bengaouer CEA - SYSCO
  0 siblings, 0 replies; 68+ messages in thread
From: Alain Bengaouer CEA - SYSCO @ 2000-02-22 16:25 UTC (permalink / raw)
  To: caml-list

	Hi,

As I understand, ocamltk is superseded by LablTk which is included in
Ocaml3 distribution ? Will LablGTk be included as well ?
Is it possible to guess a time schedule for Ocaml3 delivery ? 

Thanks
-- 
---------------------------------------------------------------------
 Alain Bengaouer
 DRN/DMT/SYSCO
 CEA Saclay, Bât 460                   Phone  : 33 (0)1 69 08 84 53
 91191 Gif-sur-Yvette Cedex, France    Fax    : 33 (0)1 69 08 96 96
                                       mailto:Alain.Bengaouer@cea.fr
---------------------------------------------------------------------



^ permalink raw reply	[flat|nested] 68+ messages in thread

end of thread, other threads:[~2005-09-04 13:54 UTC | newest]

Thread overview: 68+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-28 15:38 Does LablTk have a future? Matt Gushee
     [not found] ` <aefe758210f7fa0b9846b0ea4278cf3a@rouaix.org>
2005-08-28 23:21   ` [Caml-list] " Matt Gushee
2005-08-29 22:33 ` Jon Harrop
2005-08-30  4:39   ` Matt Gushee
2005-08-30 11:39     ` Yaron Minsky
2005-08-30 11:48     ` Jon Harrop
2005-08-30 12:22       ` David MENTRE
2005-08-30 13:45         ` Jon Harrop
2005-08-30 15:47           ` David MENTRE
2005-08-30 16:08             ` Jon Harrop
2005-09-01  4:25               ` Matt Gushee
2005-09-01 11:20                 ` Matt Gushee
2005-09-01 11:26                   ` Matt Gushee
2005-09-01 14:09                 ` Chris Campbell
2005-08-30 16:21           ` Bardur Arantsson
2005-08-30 17:47           ` [Caml-list] " David Thomas
2005-08-30 18:06             ` Tyler Eaves
2005-08-30 19:01             ` Jon Harrop
2005-08-30 22:55               ` Chris Campbell
     [not found]               ` <c22844d10508301553b54841b@mail.gmail.com>
2005-08-30 22:56                 ` Fwd: " Chris Campbell
2005-08-30 23:04                   ` Doug Kirk
2005-08-31  0:08                   ` Fwd: " Jon Harrop
2005-08-31  0:31                     ` Olivier Andrieu
2005-08-31  8:48               ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
2005-08-31  9:06                 ` Proposal a GUI from Ocamlsdl Christophe Raffalli
2005-08-31 14:39                   ` [Caml-list] " Jon Harrop
2005-09-01 19:27                     ` Nathaniel Gray
2005-08-31 14:27                 ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) Jon Harrop
2005-09-01  4:49                 ` Feeding the OCaml GUI troll Matt Gushee
2005-09-01 13:15                   ` [Caml-list] " skaller
2005-09-01 13:28                     ` David MENTRE
2005-09-01 13:50                       ` skaller
2005-09-01 14:43                     ` Chris Campbell
2005-09-02  7:40                     ` Ville-Pertti Keinonen
2005-09-02 12:39                       ` skaller
2005-09-03 10:34                         ` Damien Bobillot
2005-09-03 12:30                           ` skaller
2005-09-04 14:08                           ` Richard Jones
2005-09-03 11:10                         ` yoann padioleau
2005-09-03 11:30                           ` Jonathan Roewen
2005-09-03 17:23                           ` Doug Kirk
2005-09-04 14:01                         ` Richard Jones
2005-09-01 19:23                 ` Feeding the OCaml GUI troll (was: Re: [Caml-list] Does LablTk have a future?) Nathaniel Gray
2005-09-01  4:31             ` [Caml-list] Does LablTk have a future? Matt Gushee
2005-09-01  4:17       ` Matt Gushee
2005-09-01 13:25         ` Jon Harrop
2005-08-30  7:16   ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) David MENTRE
2005-08-30  9:53     ` GUI for OCaml Christophe Raffalli
2005-08-30 10:28       ` [Caml-list] " David MENTRE
2005-08-30 13:04         ` Bünzli Daniel
2005-08-30 17:13         ` David Thomas
2005-08-30 11:18       ` Mark Shinwell
2005-08-30 14:22       ` Jacques Carette
2005-08-30 23:12         ` Pietro Abate
2005-08-30 14:14     ` GUI for OCaml (was: Re: [Caml-list] Does LablTk have a future?) Richard Jones
2005-08-30 15:33       ` mmzeeman
2005-08-30 15:44         ` Jon Harrop
2005-08-30 22:34         ` yoann padioleau
2005-09-01  4:58           ` Matt Gushee
2005-08-30 16:01       ` Jon Harrop
2005-08-30 16:25         ` Chris Campbell
2005-08-30 22:49           ` yoann padioleau
2005-08-30 16:03       ` Chris Campbell
2005-08-30 22:31     ` yoann padioleau
2005-08-31  8:19       ` About Lablgtk2 (was: e: GUI for OCaml) David MENTRE
2005-09-03 11:41         ` yoann padioleau
2005-08-30 17:35   ` [Caml-list] Does LablTk have a future? Olivier Andrieu
  -- strict thread matches above, loose matches on Subject: below --
2000-02-22 16:25 GUI for Ocaml Alain Bengaouer CEA - SYSCO

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).