[Gambas-user] Inconsistent initialization in controls: seems a little bug
Doriano Blengino
doriano.blengino at ...1909...
Fri Sep 3 07:31:37 CEST 2010
Fabián Flores Vadell ha scritto:
> 2010/9/2 Doriano Blengino <doriano.blengino at ...1909...>:
>
>> I agree - consistency; but the center question is the AutoResize
>> property. If it is true by default, then the widget should show as soon
>> as its text property is set to something "visible". If it is false, then
>> the widget should not resize and, doing so, it should keep its default
>> size. If its default size is zero, then the widget is invisible. The
>> Autoresize seems to default to false, so gtk seems more logical.
>>
>
> I think that have no sense that a graphic object is initialized to
> (0,0,0,0), because make not sense that it become invisible in its
> initial state. There's no logic in that. The purpose of a control is
> showing something, so its initial state shouldn't be one that it
> become invisible.
>
Perhaps you don't see the whole thing, which goes much deeper than the
surface.
Creating a label in Gambas+GTK means creating a gambas object which
refers to a GTK object which refers to a GDK object which refers to a
Xwindow object. Starting from XWindow and going up, an object is created
"empty" (all dimensions set to zero, empty text, and so on), because it
is logical not to set any dimension, at any level, because that
dimension will be wrong - and "to zero" all the fields is the fastest
thing to do. Setting any visual property of such object makes, by
cascading over and over, a lot of things: don't forget repacking all
containers in the hierarchy, marking dirty all those objects and repaint
them.
When in code you create a label, what should be its initial width? 100?
1000? A third of the screen width? Ten characters wide (using which
font?)? It is true, a label is supposed to show something: but what?
Only after you set the text property, a label comes in its true
existence. Then, if Autoresize is already true, the label should resize
itself. If Autoresize is false, nothing should happen. If you set
Autoresize to true after having set the text property, may be that the
label should resize, may be not (I would say yes, but it is debatable).
May be that this does not work well in gambas (I made some test, and
found something strange, but I don't remember well).
> I think about this goal can be achieved by making TRUE the default
> value of AutoResize property in the control Label, that make sense
> especially in this case because Labels always should show the value of
> its Text property (show a half string o just a part make no sense.
> Right?). So, default AutoResize = False go against the purpose of the
> Label control.
>
This could be a good idea, or not. I see that Richard does not agree,
and probably I think the same. Sometimes it is handy, sometimes not.
Anyway, if Autoresize was true by default, you can set it to false just
after creation.
>
>> Anyway, I believe that interactive editing of a form, and creatiaon of
>> controls by code, are two different situations, with different
>> requirements.
>>
>
> Yes, they are two differents situations. But, what those diferent requirements?
>
The difference is that when a widget is created by code, the runtime
should make as little assumptions as possible, because the user program
will set the properties just after the creation.
When creating widgets in interactive mode, a few reasonable assuptions
must be made, because otherwise the user would have difficulty to
interact with the just created object. And those "reasonable"
assumptions often are not enough. For example, all the widgets get a
totally stupid name: Button1, Button2, TextBox25... when I see a program
filled with "PUBLIC SUB Button8_Click()" my first thought is "this is a
stupid programmer". Then I realize that I do the same, because I am too
lazy to change those stupid names :-)
>
>> Consistency is desirable, if it does not clash with
>> something else more important.
>>
>
> I agree. But I don't see clash between consistency and anything else
> in this case.
>
I see clashes, instead. Would you say, for example, that when creating a
label by code, its text should be set to "Label 1" automatically? This
would be consistent, because in interactive mode a label does so.
Anyway, the clash is with efficiency of the program. When creating
widgets by code, a runtime should make as little assumptions as
possible. Perhaps, in this view, it is good that Autoresize defaults to
false - more efficient. If you want it, you set it to true.
> Consistency matters because allow predict behaviors, but never can go
> against the logical behavior of a object. So in this case consistency
> and logical behavior of the control Label match, if the default value
> to AutoResize is TRUE.
>
>
> Regards.
>
Regards,
Doriano
More information about the User
mailing list