Мы разобьем код на семь частей - шесть функций и некоторый код загрузки. После чего детально разберем каждую часть кода, образующую наше приложение:
<?php
Первые три строки функции loadMainWindow() устанавливают область видимости $windows - массива для хранения различных объектов GtkWindow, $widgets - массива для хранения экземпляров графических объектов, используемых внутри окон, и $disconnect_id - переменной, созданной в функции doLo- gin() для отключения сигнала уничтожения от главного окна. Массивы $windows и $widgets для удобства хранят все экземпляры графических элементов и окон, а это означает, что для доступа к любому созданному графическому элементу или окну достаточно объявить две глобальные переменные. Это также означает, что пространство имен не будет забито множеством различных имен переменных:
function loariMainWindow() {
GLOBAL $windows; GLOBAL $widgets; GLOBAL $disconnect_id;
Теперь создадим экземпляр GtkWindow, установим его заголовок и соединим его сигнал уничтожения с нашей функцией destroyWnd(), чтобы при щелчке по кнопке X в правом верхнем углу окна приложение закрывалось корректно. Метод connect () возвращает то, что известно как connected сигнала. Запишем этот идентификатор в переменную $disconnect_id, чтобы, когда придется уничтожать окно при входе пользователя в приложение, мы могли отключить сигнал уничтожения окна, избежав вызова функции destoryWnd(), когда он нам не нужен:
$windows['main'] = &new GtkWindow(GTK_WINDOW_TOPLEVEL); $windows['main']->set_title("Online Library
$disconnect_id = $windows['main']->connect("destroy", "destroyWnd");
Следующая строка создает новый экземпляр GtkTable. С помощью этого графического элемента мы организуем структуру окна нужным нам образом. Конструктор GtkTable принимает три аргумента: количество строк, количество колонок и флаг, определяющий, должны ли все ячейки иметь одинаковый размер (что называется однородностью - homogeneity):
$widgets['main']['table'] = 4new GtkTable(4, 2, false);
Теперь создадим два экземпляра GtkEnt ry, один для ввода пользователем своего имени и другой для ввода им пароля. Конечно, мы не хотим, чтобы пароль можно было подглядеть, поэтому установим видимость в false, что скроет пароль:
= &new GtkEntry(); $widgets['main']['login_pass'] = &new GtkEntryO; $widgets["main-]['login_pass']->set_visibility(false);
Мы также должны сообщить пользователю, что он должен ввести в каждое из только что созданных окон GtkEnt ry, поэтому сделаем для них метки. Конструктор GtkLabel принимает всего один текст, который должна содержать метка: