Простое GUI(GTK) приложение на Dlang

Aug 28 2015 dlang

В этой статье я покажу пример каркаса приложения, которое программно создаёт основное окно, диалоговое окно About, меню и связывает его с открытием диалогового окна и завершением приложения.

Для сборки приложения нам понадобится стандартный менеджер пакетов DUB.

Справочные материалы по библиотекам используемым в этой статье можно найти по адресам:

Начнём…

void main(string[] argv){
                UI.run(argv);
              }
              
              class UI{
                import gtk.AboutDialog,
                  gtk.Main,
                  gtk.MainWindow,
                  gtk.Menu,
                  gtk.MenuBar,
                  gtk.MenuItem,
                  gtk.VBox;
              
                static private MainWindow window;
                static private AboutDialog about_dialog;
              
                // Создаём и выводим элементы пользовательского интерфейса
                static private void build(){
                  // Создаём пункт меню "Выход" и привязываем к нему метод для закрытия окна приложения
                  auto exit_menu_item = new MenuItem("Выход");
                  exit_menu_item.addOnActivate(delegate void(MenuItem item){
                    terminate();
                  });
              
                  // Создаём субменю и пункт меню "Файл", добавляем в него "Выход"
                  auto file_menu = new Menu();
                  file_menu.append(exit_menu_item);
                  auto file_menu_item = new MenuItem("Файл");
                  file_menu_item.setSubmenu(file_menu);
              
                  // Создаём пункт меню "О Программе" и привязываем к нему метод для открытия диалогового окна
                  auto about_menu_item = new MenuItem("О Программе");
                  about_menu_item.addOnActivate(delegate void(MenuItem item){
                    about_dialog.show();
                  });
              
                  // Создаём список меню и пункт меню "Помощь", добавляем в него "О Программе"
                  auto help_menu = new Menu();
                  help_menu.append(about_menu_item);
                  auto help_menu_item = new MenuItem("Помощь");
                  help_menu_item.setSubmenu(help_menu);
              
                  // Создаём панель меню и добавляем на неё "Файл", "Помощь"
                  auto menu = new MenuBar();
                  menu.append(file_menu_item);
                  menu.append(help_menu_item);
              
                  // Создаём контейнер для элементов и добавляем в него главное меню
                  // false - указывает контейнеру на разнородность размеров площадей выделяемых элементам
                  auto root_container = new VBox(false, 0);
                  // packStart - чтобы меню "прилипло" сверху контейнера
                  // ...false, false - чтобы меню не было растянуто вертикально по окну
                  root_container.packStart(menu, false, false, 0);
              
                  // Создаём диалоговое окно и устанавливаем несколько встроенных значений
                  about_dialog = new AboutDialog();
                  about_dialog.setProgramName("GTKd Template");
                  about_dialog.setVersion("0.1");
              
                  // Создаём основное окно приложения и добавляем в него контейнер с ранее добавленными элементами
                  window = new MainWindow("GTKd Template");
                  window.setDefaultSize(750, 550);
                  window.add(root_container);
                  window.showAll();
                }
              
                static void run(string[] argv){
                  Main.init(argv);
                  build();
                  Main.run();
                }
              
                static void terminate(){
                  window.close();
                }
              }
              

Комментарии

comments powered by Disqus