[Development] Qt Quick Controls Dialogs -- enabled state of the standard buttons (API choices)
Vladimir Moolle
vmoolle at ics.com
Wed Aug 26 00:00:46 CEST 2015
Hi, thank you all for the comments and suggestions you’ve left. They’ve
helped us come to a consensus as to what is desired for the future API.
We’d like to make the following proposal for the new version of Dialog.
1 . Upon collective agreement, the main use case becomes something like:
Dialog {
ButtonBox { // probably, no need to prepend the name with Dialog,
// provided ButtonBox ends up in Dialogs module
// (and not in Controls nor Layouts modules)
Button {
ButtonBox.standardButton: StandardButton.Ok
}
Button {
ButtonBox.standardButton: StandardButton.Cancel
enabled: <some binding expression>
}
}
This adds the desired ability to govern buttons’ enabled state with
bindings, and also to apply styles, etc. (all without the clutter of
“button delegates” as proposed in #6 of the last week’s e-mail, and with no
proxy objects or button getters).
2 . One nice feature of above API could be possibility to use completely
custom items for buttons, as long as they specify a standard role via the
attached property (and have a clicked signal):
Dialog {
ButtonBox {
MyCustomButton {
// has a clicked() signal (otherwise a warning is emitted by
ButtonBox)
ButtonBox.standardButton: StandardButton.Cancel
}
}
3 . Moreover, it could be possible to allow the user to add buttons lacking
any standard behavior to the ButtonBox:
Dialog {
ButtonBox {
Button {
// would require adding StandardButton.Other to the
StandardButton flags
// (so that buttons could be differentiated from other
children of ButtonBox)
ButtonBox.standardButton: StandardButton.Other // Default value
for this property
onClicked: <custom handler>
}
}
4 . Given the above, parenting (and laying out manually) arbitrary other
items becomes simple, too:
Dialog {
ButtonBox {
MyCustomBackground {
// lacks ButtonBox.standardButton property, and is not laid out
by ButtonBox
anchors.fill: parent
}
Button {
ButtonBox.standardButton: StandardButton.Ok
}
}
5 . It may be beneficial to deprecate the current standardButtons-based API
in favour of the new one (in Controls 3?), and opt for manual (rather than
automatic, with a possibility to discard) ButtonBox insertion into the
dialogs -- this comes at a cost of a couple extra braces, but makes code
intent more explicit, and allows for trivial parenting to the ButtonBox
(when it is necessary, as in #4 above).
Additionally, another, simplified item could be added, leveraging the new
API to implement the old one and ease porting the existing code.
Best regards, Vladimir
On Mon, Aug 24, 2015 at 10:41 AM, Rutledge Shawn <
Shawn.Rutledge at theqtcompany.com> wrote:
> On 22 Aug 2015, at 14:41, Filippo Cucchetto <filippocucchetto at gmail.com>
> wrote:
>
> > I totally agree with the solution proposed by mitch c. With the only
> exception that i would add a DialogButtonGroup qml element into which put
> the buttons. This allows us to add functions and logic without clutturing
> the Dialog component. Furthermore it matches the widget implementation.
>
> My plan was basically that: to have a button box component, so you would
> have two ways to add buttons to the dialog: the StandardButtons enum as
> now, or declare the button box explicitly and put buttons inside. And
> you’d be able to set buttonBox: null (or something like that) to make it go
> away completely. In ApplicationWindow you need to declare a toolbar if you
> want one; but in the case of dialogs, the button box has to be
> automatically created (or exist by default) in case you simply set
> standardButtons, because it was introduced with that (oversimplified?) API.
>
> But I didn’t get around to implementing that just yet.
>
> >
> > F.
> >
> > Il 22/ago/2015 13:57, "Curtis Mitch" <mitch.curtis at theqtcompany.com> ha
> scritto:
> >
> >
> > From: development-bounces+mitch.curtis=theqtcompany.com at qt-project.org
> <development-bounces+mitch.curtis=theqtcompany.com at qt-project.org> on
> behalf of Vladimir Moolle <vmoolle at ics.com>
> > Sent: Saturday, 22 August 2015 01:22
> > To: development at qt-project.org
> > Subject: [Development] Qt Quick Controls Dialogs -- enabled state of the
> standard buttons (API choices)
> >
> > [snip]
> >
> > 6. Finally, Dialog could accept (optional) delegates for the buttons
> created, allowing for arbitrary customizations, i.e.:
> > Dialog {
> > <...>
> > StandardButtonDelegate { //name arguably could be better
> > role: StandardButton.Apply // could be “roles” here even
> > StandardButton { // a Button, but with default
> bindings for “text”, etc.
> > enabled: <some binding expression>
> > }
> > }
> > StandardButtonDelegate { //name arguably could be better
> > role: StandardButton.Apply // could be “roles” here even
> > Rectangle { // a very custom “button”
> > <...>
> > signal clicked // or a warning emitted by Dialog if
> absent
> > enabled: <some binding expression>
> > }
> > }
> > }
> >
> > [snip]
> >
> > At this stage, wouldn't it just be easier to declare regular buttons as
> children of the dialog and then introduce some Dialog.buttonRole attached
> property? For example:
> >
> > Dialog {
> > Button {
> > Dialog.buttonRole: StandardButton.Ok
> > }
> > Button {
> > Dialog.buttonRole: StandardButton.Cancel
> > }
> > }
> >
> > The dialog can still take care of the layouting of the buttons, and the
> text would even be set for you (unless you want to set your own). We could
> document this as overriding the standardButtons property if both are
> specified for whatever reason.
> >
> >
> > _______________________________________________
> > Development mailing list
> > Development at qt-project.org
> > http://lists.qt-project.org/mailman/listinfo/development
> >
> > _______________________________________________
> > Development mailing list
> > Development at qt-project.org
> > http://lists.qt-project.org/mailman/listinfo/development
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20150826/00d4b0c0/attachment.html>
More information about the Development
mailing list