|
Using dialog filesIn this part we use dialog files to layout dialogs seperately from the source code. To download the code for this tutorial, fetch it from the git-repository by issuing: git clone git://www.diskohq.org/disko-tutorials.git Then you can follow this part by having a look at the tutorials firststeps/02 folder. What is a dialog file?Dialog files store information about layout and structure of window content. It is the easiest way of creating content. It frees from programming a fixed dialog structure and lets designers change the face of the dialog, without programming a single line. The first dialogThe first dialog resembles the simple "Hello world!" from the first example. The following content should be placed inside a file named dialog.xml. <mmsdialog> <rootwindow w="100%" h="100%" margin="0" alignment="center" border.thickness="0" bgcolor="#00000000" opacity="255"> <label name="label1" text="Hello World" alignment="center" bgcolor="#00000000" color="#999999ff" font.name="DejaVuSansMono.ttf" font.size="18"/> </rootwindow> </mmsdialog> The structure is pretty simple. A <mmsdialog> spans a <rootwindow> which contains only one label as a child item. Load and show the dialogTo load the dialog into a window the MMSDialogManager is used. As for now we continue to ignore themes for a while. // load a window MMSDialogManager dm; MMSWindow *window = dm.loadDialog("./dialog.xml"); Like in the first tutorial, the window is showed by window->show(); Update dialog contentMost applications would want to update the text label with some other value. The text of the label is defined in the dialog.xml. How is the label accessed then? The label tag has an attribute name, with the value set to "label1". Using this name the label could be extracted by the dialog manager. // extract the label MMSLabel *label = (MMSLabel *)dm["label1"]; // update the text label->setText("updated hello world!"); This works for all kinds widgets. The naming of the widgets is important. Having two widgets with the same name results in an error. Only those widgets that should be acessible through the dialog manager should be named though.
The result should look like this:
|