[Gambas-user] Important design changes

Benoît Minisini gambas at ...1...
Sat Aug 31 11:39:32 CEST 2002

Hello world !

I'm going to begin the cleaning of the Qt component interface, and I want to 
get your opinion.

As you may have noticed :-), many controls contain sub-elements : a Treeview 
has nodes, a GridView has cells, etc.

In Visual Basic, controls are ActiveX objects, and they choosed to implement 
these sub-elements as ActiveX objects too. But I think following the same 
kind of implementation in Gambas is a bad idea.

Creating objects for sub-elements is a significant memory and speed overhead, 
(and a significant amount of work for me :-) ).

The life of these objects are very short, because they are mainly used for 
accessing sub-elements properties. So, why not generalizing the principle of 
"virtual" objects. Maybe have you already dealt with such objects, but 
unknowingly ?

Let's take an example. To access an element of the ListBox, you must do the 
following thing in Gambas :

  PRINT MyListBox.Current.Text;" is ";
  IF NOT MyListBox.Current.Selected THEN PRINT "not ";
  PRINT "selected."

But you cannot assign the current item to a variable :

  MyObject = MyListBox.Current
  -> Bad use of virtual class

MyListBox.Current returns a "virtual object", i.e. an hidden object whose 
class is "virtual", i.e. that cannot be instanciated nor assigned.

In fact, this "virtual object" is even not an object : it is just an internal 
counter of the ListBox that indicates which element we are going to use.

I want to generalize this principle to every control. For example, at the 
moment, you can do the following :

  MyNode = MyTreeView["#Key"]
  PRINT MyNode.Text

After the change, you won't. Nodes objects will not be created any longer. You 
will have to do :

  PRINT MyTreeView["#Key"].Text

You can imagine the same thing in the GridView :

  PRINT MyGridView[X, Y].Text

IMHO, I'm sure that the overhead of accessing nodes by keys, cells by 
coordinates, etc. is better than the overhead of creating and managing 
temporary objects.

In Visual Basic, I have always found that filling a TreeView is very slow. I 
thnik that creating a lot of ActiveX objects needs a lot of memory and a lot 
of CPU cycles ! So I hope that it will be better in Gambas :-)

At the moment, the Qt component interface is a "bastard" mix of the two 
approaches. For example, do not try to remove a Node on a TreeView, having a 
reference on the deleted Node ! But accessing the columns and rows properties 
of a GridView is made with virtual classes. etc.

Tell me if you have remarks.

Benoît Minisini
mailto:gambas at ...1...

More information about the User mailing list