Аргерих Л. О языке РНР. Часть 5. Страница 1


Мы разобьем код на семь частей - шесть функций и некоторый код загруз­ки. После чего детально разберем каждую часть кода, образующую наше приложение:

<?php

Первые три строки функции loadMainWindow() устанавливают область види­мости $windows - массива для хранения различных объектов GtkWindow, $wid­gets - массива для хранения экземпляров графических объектов, используе­мых внутри окон, и $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 принимает всего один текст, который должна содержать метка: