New QML components: Know thy dialogs
Today part of "what to expect in 4.10 in QML components": Dialog. The Dialog components have been introduced in plasma since sone time, and are documented in the usual page. The components that may be used to create a dialog are:
- Dialog: unsurprising name: it creates a Plasma themed window with space for a title, a content and buttons. You have to create all of them, you're on your own, but provides the window management and methods such as open(), close(), accepted() and rejected(). You usually don't want to use this, unless you want some strange custom things in the titlebar area or in the buttons area.
- CommonDialog: is a Dialog, but provides a titlebar and the buttons, you want to use this in the 90% of the cases when you want to display custom content in a dialog.
- SelectionDialog: presents the user a list of items to chose from, useful to create menus when you want to modally ask "what of those items do you want?"
- QueryDialog: probably the most useful: is a simple dialog with text and two buttons. Used for things like confirmation dialogs like "are you sure you want to delete this item?". It displays a text and two buttons, that default as "Ok" and "Cancel", but their text is customizable.
It's a while this API exists, but in 4.10 there was an important change in its look and feel in 4.10: Now if it's possible the dialogs looks "inline". It will be done on the same window as the plasmoid (i.e. on the "desktop") and if provided with a visualParent property, it will have a comic balloon tip pointing to it. As usual, an image is worth a thousand words:
But what about if there isn't enough space? For instance the dialog may be displayed from a Panel, where is impossible to have an inline dialog. Fear not, in this case the dialog will become a separate window, still working everywhere:
An "inline" behavior for dialogs is preferred because in this way questions are semantically and visually grouped with the object they belong to, and most important the desktop layer must not "interrupt" the user, it's just background information.
The switch between an inline behavior and an external window is completely automatic, as usual, something that the plasmoid should never have to worry about.