On Jul 14, 2005, at 9:04 PM, [EMAIL PROTECTED] wrote:


Is this the right way to do it? Should my ._parse method set the value to
a tuple of subvalues, and .set_value propagate the values to the
subwidgets? Or should I ignore the widget value and have caller look at
the subwidget values directly?  "form.get_widget('quantity')['low']"?
I suppose I can't do "form['quantity']['low']" ?

I think that the first option you suggest, setting the value to a tuple,
or to an instance of a class you write for this particular purpose, is a good
way to do it.  The user of the widget should not need be aware of the
particulars of the subwidgets.


What if I need several range controls on the same form?  All the
subwidgets will be in a flat namespace in the HTML. I'm getting subwidget
names like 'release$low', so I guess that's being taken care of
automatically somehow.

Right, you would just get the _parsed value from your composite widget as
if it were a non-composite widget.

    def _parse(self):
        is_low = self['low'] is not None
        is_high = self['high'] is not None
        is_unit = self['unit'] is not None
        if is_high and not is_low:
            self.error = "Must provide low number."
        if (is_low or is_high) and not is_unit:
            self.error = "Must provide unit."

The _parse needs to set the value to something.


I made a date widget earlier but that was pretty straightforward, since the value is a datetime object, and I put the subwidgets in .year, .month, and .day attributes. (Perhaps I should have used .add() and .widgets, but I bypassed them.) But a range object doesn't have an obvious single value unless I arbitrarily say ".value = (low, high, unit)". Is that how to do
it with composite widgets?

Yes.  Or, you could make a RangeWithUnit class for this purpose.
You might be interested in the classes for this that are in dulcinea.
They serve a similar purpose, but the widgets don't work the same
way as the ones you want.


After that I need to make a latitude/longitude widget that accepts:
    123.45               West    (degrees)
    123     45.67        West    (degrees, minutes)
    123     45    45.67  West    (degrees, minutes, seconds)
But first I have to get the simpler widget down.

That will be easier after you get the pattern worked out.


What is the purpose of WidgetList and WidgetDict? At first I thought they were for making arbitrary composite widgets, but that raises the question
of when to use them and when to use CompositeWidget directly, and what
that funny 'add_element' widget is for.  Then I thought, "No, they are
specialized widgets, for growable lists/dicts."  Are they for when you

That thought was correct.

have multiple values and want to let the user as many additional values as they want? But there's nothing to delete an element if they want to go
the other way.  Or are these widgets for something else?

Dulcinea has a DeletableWidget that is designed to allow delete buttons
in a WidgetList.

_______________________________________________
Quixote-users mailing list
[email protected]
http://mail.mems-exchange.org/mailman/listinfo/quixote-users

Reply via email to