Greg, thanks for the feedback. This is a little long, so I hope you get the 
time to read it. I'll understand if you back quickly away from it and saunter 
off whistling :)

I'm shooting for something seemingly impossible on Linux, and yet there are 
some tantalizing projects that approach it.

> Use the move() method of the Layout widget to position them.
Okay, will look into that. But the code as it stands still does not display 
the boxes (r and rb) at all.

> Dragging them is going to be tricky. Before trying to do
> that, I would be asking myself whether they really *need*
> to be widgets, or just something that you draw yourself
> in the main drawing area based on an internal data
> structure.
 I don't know. I am *aiming* at a "vector" interface very like Flash (or, less 
so, Director) produces - where "widgets" (movie clips) can contain and be 
contained (by) other "widgets". Individual "widgets" can be scripted, have 
events like clicks and enter/exit and emit events or signals to 
other "widgets"

Can one have "living" visual objects without making them "widgets"? My use of 
the word widgets is very probably incorrect.

 You see, I am still tainted by the Visual Basic way of thinking - I used to 
make ActiveX objects which had a visual interface, events and attached code. 
These could be dropped onto a "form" and thereafter be manipulated by code to 
move around, whatever. I am trying to make a tree-like class structure with 
flexible containing. (which I never got right in VB and then Flash came along 
and I jumped ship.)

 Another way to describe them would be "sprites" which can contain 
other "sprites" (etc. Each with a relative offset to each other).  
 Whichever "sprite" is a "top level" (root of a tree of children) can be moved 
(by dragging or by code) and all the children follow (like a group/clone of 
things in Inkscape). 
 They can be duplicated (instantiated). They can be removed, hidden/shown. 
They can contain internal "frames" such that the same "sprite" can "goto" and 
draw a totally different shape but still be the same object. For example, a 
list of fonts could be "collapsed" into a small icon that later (on click 
maybe) opens again into a list of fonts - all this happening internally 
within a "listOfFonts" object.
 Each "sprite" (movie clip/object) would have a layer such that they are all 
drawn from bottom up and thus overlap.

 That ListOfFonts can contain button objects, font objects, help objects, 
whatever -- all of them being inherited from "Sprite" with their own drawing 
code. Example, a button (when pressed) can open a pull-out (cartoon like 
balloon) which contains text controls (and whatever) in order to do it's 
business. It can be queries from its parent so that stuff happens according 
to what was set/done within it.

Really, each "sprite" is a free-floating concept not tied-down to being 
a "button" or a "text box". They are *whatever* goes into them.
 The most elemental things will be: rectangles, lines, circles, arcs, areas, 
text, images, masks. (A text-input class may be required as a basic 
element) -- all drawn by cairo.
 These things are all able to emit signals and be controlled by code. They go 
into a "sprite" and form a unit which can talk to other units.
 Within a unit, those basic elements can be changed over time so that they can 
animate - change: position, shape, scale, colour, alpha, appear, hide. One 
shape can entirely replace another at a certain "moment" (frame) in time.
 
> Are you going to be using any of the predefined widgets
> like buttons and text fields in this way, or will they
> all be custom things based on a DrawingArea?
I am aiming at en entirely custom interface - I want to create widgets that 
can be user-drawn by cairo. If I can adapt (skin) existing widgets that will 
enhance things nicely. 

> Also, how many are there likely to be? I would be wary
> of trying to make gtk handle a very large number of
> widgets -- it's likely to be very inefficient in a
> number of ways.
There are likely to be many of these "living" objects/sprites. The font lists 
would hold many thousands of faces (but I would only draw those that are 
visible within a clipped area). In the end, the number of objects would be 
under user-control, thus the slower it all responds, the fewer objects the 
user would implement. "User" here is end-user of the final app or a 
programmer using the classes that do all of this.

In the short-term, I would like to create objects that draw their own 
interface which will be embedded/contained manually (by a.add(b)) without all 
the tree-like containing. Just to see what is possible.

Another example - a "folder" object which when clicked will animate open (or 
just instantly draw) into a scrollable/dragable list that displays files 
which can in turn be clicked and dragged out of the widget to become new 
objects (like a ListOfFonts).

I'm entirely new to GTK. I was working in wxPython mostly. I am flexible and 
will follow the route that is best -- even if that means C++. (gulp!)
 The app is a font manager for Gnome because KDE is getting it's own; so using 
QT seems redundant. 
I could use Open GL but don't want to exclude those who have no 3d cards.

I realize it's counter to where GUI's go at the moment -- there likely will be 
no other "windows" opening, all will happen on one large 
(draggable) "canvas". (but not strictly.)

All this is a dream, I can shed it for an ordinary GUI -- which already exists 
in Fonty Python (in wxPython) at the moment -- I am really interested in 
breaking the mould and having a free-flowing interface.

It always struck me that the Flash concept of movie-clips and symbols that 
have internal time-lines and layers and scripting and events was a most 
brilliant and powerful one. It literally opens the door to *any* conceivable 
application. I am thinking along the lines of "wrapping" GTK in a such a way 
that a programmer can work with simple embeddable visual objects to achieve 
the same level of abstraction.

I don't know if GTK can do this -- but I have to ask.

For reference there is "Squeak" (smalltalk)- a very close (but no cigar) 
approximation. It's too heavy on requirements and very broken.

\d
_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to