-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathusegtkui.d
More file actions
62 lines (51 loc) · 2.35 KB
/
usegtkui.d
File metadata and controls
62 lines (51 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// распостраняется до конца файла: если нет версии usegtkui, то
// код ниже не попадает в компиляцию
version(usegtkui):
import std.stdio;
import std.conv : text;
import gtkui : MainBuilderUI;
import gtk.Window;
import gtk.Button;
import gtk.Label;
// MainBuilderUI делает бОльшую часть работы по созданию кода
// работы с gtk объектами
class GUI : MainBuilderUI
{
// вставляется вспомогательный код, шаблон объявлен внутри
// GtkUI -- базовый класс MainBuilderUI
mixin GtkUIHelper;
/+ @gtkwidget -- UDA, объявленный в GtkUI
UDA - user defined attribute - атрибут определённый пользователем
определён в gtkui
@gtkwidget используется для автоматической инициализации полей
посредством получения экземпляров из gtk.Builder с последующим
кастованием к нужному типу. При отсутствии поля во входном xml
в конструкторе выбрасывается исключение.
+/
@gtkwidget
{
// имена в файле интерфейса должны совпадать с именами полей
Window mwindow;
Button actionbtn;
Label infolbl;
}
this()
{
/+ в базовый класс нужно передать текст файла интерфейса
import("filename") читает filename во время компиляции
поиск filename осуществляется в папке, указанной в флаге
компилятора -Jfolder, который так же выставляется в
dub.sdl/json в параметре stringImpmortPaths
+/
super(import("main.glade"));
size_t n;
actionbtn.addOnClicked((aux) { infolbl.setText(text(n++)); });
setupMainWindow(mwindow);
addOnQuit({ exitLoop(); });
}
}
void main()
{
auto gui = new GUI;
gui.runLoop(); // запуск цикла обработки событий (вызов gtk.Main.run)
}