BG file - part 1
[email protected] (Ivaylo Botyov Nikolov) Wed, 24 Jan 2007 17:30:44 +0100
| Newsgroups | php.gtk.doc |
|---|---|
| Organization | Divoto |
| Message-ID | <[email protected]> |
I rewrote all the old file so now they are as they have to be - 80 chars a line and info for revcheck. As I advised by Fernando Correa da Conceição I put for maintainer DIVOTO which is my nickname. Hope this time everything will be O.K. so I can continue to translate other files. Sanding all the file in 2 e-mails as first time I got 100K limit for the aattached files. Ivaylo Botyov Nikolov DIVOTO www.divoto.net email: [email protected]
hello_world.xml
(application/xml, 9.2 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.8 Maintainer: DIVOTO Status: ready -->
<chapter id="tutorials.helloworld">
<title>Здравей свят (прост пример)</title>
<simpara>
Когато започнете с някой език за програмиране, първата програма, която ще
напишете е така известната програма 'здравей свят'. За да не разочароваме
всички и ние първата програмка в нашето ръководство ще бъде точно 'здравей
свят'!
</simpara>
<simpara>
Чрез уроците ще имате възможност да научите и за възможностите на PHP.
Уроците са направени така, че да получите ясна представа при програмиране
под PHP-GTK, а също така и техниките за постигането му.
</simpara>
<simpara>
В този урок ще създадем простичък прозорец с техт "Здравей свят!".
</simpara>
<simpara>
Ще започнем с листинга на програмата, след което ще обясним всяка линия
от програмата, за да можете да получите основна представа за една простичка
програма написана на PHP-GTK.
</simpara>
<example>
<title>Простичък скрипт Здравей свят</title>
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloworld/helloworld.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
<note>
<para>
Ако получите грешката
<literal>Fatal error: Call to undefined function: connect_simple()</literal>,
в този случай използвате PHP-Gtk1, а не PHP-Gtk2. Това е грешното
ръководство.
</para>
</note>
<para>
Копирайте този код в програма за текстова обработка и го запазете като
файл <filename>hello.phpw</filename>.Отворете конзола и го стартирайте с
<command>php hello.phpw</command>. Нов прозорец със заглавие "Здравей свят"
трябва да се покаже и в него да бъде изписано само текста "Просто исках
да Ви кажа 'Здравей свят!'".
</para>
<example>
<title>Проверка дали е зареден модулът PHP-GTK</title>
<programlisting role="php"><![CDATA[if (!class_exists('gtk')) {
die("Моля, заредете модулът php-gtk2 в php.ini\r\n");
}]]></programlisting>
</example>
<para>
Тук провиряваме дали е налично PHP-GTK, като проверяваме дали е зареден
класът <literal>gtk</literal>. При PHP 4 и PHP-GTK 1, трябваще да
заредите модула на PHP-GTK чрез
<ulink url="http://www.php.net/dl">dl()</ulink>. Този начин отпада в PHP 5
и не трябва да се използва при написване на нов код. Сега единственото,
което трябва да направим е да отпечатме съобщение за грешка със съобщение
да бъде заредено ръчно от потребителя.
</para>
<example>
<title>Създаване на прозорец</title>
<programlisting role="php"><![CDATA[$wnd = new GtkWindow();]]></programlisting>
</example>
<para>
Създаване на нов уйджет с <link linkend="gtk.gtkwindow">прозорец</link> е
също толкоз лесно, колкото е да създадете нов обект: Чрез променливата
<literal>$wnd</literal> задаваме новият обект. Ако вече сте програмирали на
PHP 4 и PHP-GTK 1, трябва да изпукнете амперсанта <literal>&</literal>
преди <literal>new</literal>. Това беше необходимо при PHP 4,
но при PHP 5 не е необходимо.
</para>
<example>
<title>Задаване на заглавие на прозореца</title>
<programlisting role="php"><![CDATA[$wnd->set_title('Hello world');]]></programlisting>
</example>
<simpara>
За по-лесно откриване на прозорците в лентата със задачи задаваме имена на
прозорците: Просто обръщение към обектен метод.
</simpara>
<example>
<title>За чисто изключване на програмата</title>
<programlisting role="php"><![CDATA[$wnd->connect_simple('destroy', array('gtk', 'main_quit'));]]></programlisting>
</example>
<para>
Това е първият интересен код, който ще разгледаме: Сигналът
<signalname class="GtkObject">destroy</signalname> се свързва със
статичният метод <link linkend="gtk.method.main_quit">Gtk::main_quit</link>
и той казва на GTK, да прекрати главният цикъл когато бъде затворен
отпределен прозорец. (Главният цикъл ще бъде разгледан по-надолу в
Ръководството)
</para>
<example>
<title>Създаване на етикет за показване на текст</title>
<programlisting role="php"><![CDATA[$lblHello = new GtkLabel("Just wanted to say\r\n'Hello world!'");]]></programlisting>
</example>
<para>
Както преди, създаваме нов уйджет. Този път обаче искаме да покажем
кратко съобщение - за тази цел изполваме <classname>GtkLabel</classname>.
</para>
<example>
<title>Добавяне на етикет към прозорец</title>
<programlisting role="php"><![CDATA[$wnd->add($lblHello);]]></programlisting>
</example>
<simpara>
Сега казваме на прозореца да изобрази директно съдържанието на етикета.
</simpara>
<example>
<title>Да направим прозореца да се вижда</title>
<programlisting role="php"><![CDATA[$wnd->show_all();]]></programlisting>
</example>
<para>
До сега нищо от направеното няма да бъде показано. За да бъде показано
трябва да извикате функцията <function class="GtkWidget">show</function>.
Това ще покаже прозореца, но няма да покаже етикета, затова трябва да
извикаме <function class="GtkWidget">show</function> и за етикета.
Това не е много целесъобразно ако в прозореца имаме многократни уйджети от
бутони, полета с отметки и др. Използването на функцията
<function class="GtkWidget">show_all</function> ще покаже прозореца с
всички подчинени уйджети.
</para>
<example>
<title>Стартиране на главния цикъл</title>
<programlisting role="php"><![CDATA[Gtk::main();]]></programlisting>
</example>
<para>
След като всичко е готово е нобходимо да запазим прозореца активен и да сме
сигурни, че прозорецът отговаря на извършените действия от потребителя.
При обикновен скрипт на PHP дейността му спира тук. На нас обаче ни е
необходимо той да продължи. За тази цел е необходимо да се стартира
главният цикъл на GTK. Работата му е да поддържа нашата програма работеща
и да приема заявките от потребителя. Ако се появи някакво действие, главният
цикъл го прехвърля към съответстващото обратно извикване (callbacks).
</para>
<sect1 id="tutorials.helloworld.futherreading">
<title>По-задълбочено четене</title>
<para>
Сега след като направихте първата си проста програма на PHP-GTK 2 може би
ще пожелаете и нещо по-сложничко. Можете да отидете и да прочетете
<link linkend="tutorials.packing">Урокът за пакетиране</link>.
</para>
</sect1>
</chapter>
bookinfo.xml
(application/xml, 1.9 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.4 Maintainer: DIVOTO Status: ready -->
<setinfo id="bookinfo">
<title>&PHPGTK2Docs;</title>
&frontpage.authors;
<pubdate>&phpgtk2doc.build-date;</pubdate>
&frontpage.editors;
&frontpage.translators;
<copyright>
<year>©right.years;</year>
<holder>the PHP-GTK Documentation Group</holder>
</copyright>
<legalnotice id="copyright">
<title>Авторски права</title>
<simpara>
Авторските права © ©right.years; принадлежат на the PHP-GTK
Documentation Group. Правото за копиране, разпространение и/или промени
на този документ се извършва в зависимост от лицензията the GNU Free
Documentation License, Версия 1.2 (както и всички последващи версии на
този документ) публикувани от the Free Software Foundation -
изключвайки разделите Invariant Sections, Front-Cover Texts и Back-Cover
Texts.
Копието на този документ може да се открие в раздела
"<link linkend="appendix.license">&doclicense;</link>". Последната
публикувана версия може да се прочете онлайн на адрес
<ulink url="&url.doclicense;">&url.doclicense;</ulink>.
</simpara>
<simpara>
Членовете и преводачите на the PHP-GTK Documentation Group са
изброени в началото на това Ръководство. За контакт с групата,
моля, пишете на &link.phpgtkdoc;. Внимание! Всички съобщения
се публикуват в публичен майлинг лист.
</simpara>
</legalnotice>
</setinfo>
changes.xml
(application/xml, 13.6 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.6 Maintainer: DIVOTO Status: ready -->
<chapter id="tutorials.changes">
<title>Промени от PHP-GTK 1</title>
<sect1>
<title>Относно този урок</title>
<simpara>
В този урок ще разгледаме разликите между PHP-GTK 1 и PHP-GTK 2 -
какво беше променено, кое е новото и какво е отпаднало.
</simpara>
<simpara>
PHP-GTK 2 се опитва да бъде съвместима по възможно най-добрият начин с
версия 1, но поради коренните промени направени във версия 2 на GTK,
това понякога е невъзможно. Много от нещата в предишната верия не бяха
променени, но някои малки, но много важни промени трябва да знаете, за да
можете успешно да преминете от версия 1 към верия 2 на PHP-GTK.
</simpara>
</sect1>
<sect1 id="tutorials.changes.loadmodule">
<title>Зареждане на модула php_gtk</title>
<para>
В PHP-GTK 1 не знаехте дали модула php-gtk е бил зареден автомотично в PHP
от конфигурационният фаил <filename>php.ini</filename> или поради лошо
конфигуриране на този фаил (най-честият случай), е необходимо да заредите
модула ръчно:
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/changes/extension_load.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</para>
<para>
Във версия 5 на PHP зареждането на модули чрез <literal>dl()</literal> ще
отпадне. Този метод все още може да бъде използван, но не е за
предпочитане. Можете да предположите, че модулът PHP-GTK е вече зареден
или да направите проверка за съществуването на този модул и да отпечатите
грешка:
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/changes/extension_check.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</para>
</sect1>
<sect1 id="tutorials.changes.references">
<title>Референции на обекти (Амперсант &)</title>
<para>
Новото в PHP 4 беше поддръжката на Обектно-Ориентираното (ОО) програмиране,
но използването му не беше така добре развито, както при някои други
езици за ОО програмиране, например JAVA. Когато задавахте дадена променлива
беше абсолютно необходимо да не правите копие на GTK обектите, а да се
използват референциите.
<programlisting role="php"><![CDATA[
//PHP 4: копирането беше основният процес
$a = new GtkLabel();
$a->set_text('1');
$b = $a;
$b->set_text('2');
echo $a->get();//стойността е все още 1
]]></programlisting>
За да не правите копие бяхте задължени да използвате амперсант (&):
<programlisting role="php"><![CDATA[
//PHP 4: създаване на референция (отпратка)
$a = new GtkLabel();
$a->set_text('1');
$b = &$a;
$b->set_text('2');
echo $a->get();//стойността сега е 2
]]></programlisting>
Въпреки това, копие на обекта <emphasis>се прави</emphasis> при създаването.
При GTK уйджетите, за да бъдем по ясни, трябва да направите:
<programlisting role="php"><![CDATA[
//PHP 4: Референция
$a = &new GtkLabel();
]]></programlisting>
</para>
<para>
В PHP 5 нещата бяха променени. Основният метод сега е референцията
(не копирането) и използването на амперсант вече не е обходимо вече!
Следващият скрипт работи със PHP 5 и GTK 2:
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/changes/ampersand_php5.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</para>
<para>
Същото се отнася и за callbacks (обратно извикване) - отпада амперсанта!
При PHP 4 и GTK 1 трябваше да:
<programlisting role="php"><![CDATA[
$window->connect_object('destroy', array(&$object, 'function'));
]]></programlisting>
при PHP 5 и GTK 2 амперсанта отпада:
<programlisting role="php"><![CDATA[
$window->connect_simple('destroy', array($object, 'function'));
]]></programlisting>
</para>
</sect1>
<sect1 id="tutorials.changes.constants">
<title>Константи в GTK</title>
<para>
GTK+ използва многобройни константи. В PHP-GTK 1 те се дефинираха като
глобални и можеха да бъдат използвани чрез
<programlisting role="php"><![CDATA[
echo GTK_WIN_POS_CENTER;
]]></programlisting>
Ако обаче използвате този код в PHP-GTK 2 ще получите следната грешка:
</para>
<screen><![CDATA[
PHP Notice: Use of undefined constant GTK_WIN_POS_CENTER -
assumed 'GTK_WIN_POS_CENTER' in /path/to/file.php on line 23
]]></screen>
<para>
Проблемът, е че първоначалната стойност използвана от
(<literal>GTK_WIN_POS_CENTER</literal> връща стойност
<literal>1</literal> в PHP-GTK 1). PHP-GTK 2 вижда само текста
<literal>"GTK_WIN_POS_CENTER"</literal>и това ще доведе до грешка във
вашият код.
</para>
<para>
Статичните клас константи се поддържат в PHP 5 и така се изчиства кодът.
Дефинирането им става в класове на <literal>Gtk</literal>,
<literal>Gdk</literal> и други.
</para>
<para>
Накратко казано, единстевеното нещо което трябва да направите (в повечето
случаи) е да замените <literal>долното подчертаване</literal> с двуеточие,
така че:
<literal>GTK_WIN_POS_CENTER</literal> при PHP-GTK 1 да стане
<literal>Gtk::WIN_POS_CENTER</literal> при PHP-GTK 2.
</para>
<para>
Забележете също и новият стил на писане на код. Главни букви трябва да си
използват само за първите букви в <literal>Gtk</literal>,
<literal>Gdk</literal>, <literal>Pango</literal> и <literal>Atk</literal>
константите при официалната дистрибуция на документацията и кода на PHP-GTK
2 с което се променя техният статус на константи на класа, а не като
глобални такива.
</para>
</sect1>
<sect1 id="tutorials.changes.connect">
<title>Свързване на сигнали</title>
<para>
За да свържете сигналите към определена функция при PHP-GTK 1 кода,
можехте да ползвате <function class="GtkObject">connect</function>,
<function class="GtkObject">connect_object</function>,
<function class="GtkObject">connect_after</function> или
<function class="GtkObject">connect_object_after</function>.
Особено функцията <literal>connect_object</literal>, не беше много ясна
в началото.
</para>
<para>
Следвайки промените направени в API сигналите на GTK, бе взето решени да
се преименуват <literal>connect_object</literal> на
<function class="GtkObject">connect_simple</function> и
<literal>connect_object_after</literal> на
<function class="GtkObject">connect_simple_after</function> в PHP-GTK 2.
<emphasis>Простичко</emphasis>, това довежда до по-малко параметри на
функцията, тъй като обектите вече не са във функциите - нещо което
трябваще да прави <literal>connect_object</literal>, но не го правеше.
</para>
</sect1>
<sect1 id="tutorials.changes.deprecated">
<title>Отхвърлени уйджети</title>
<simpara>
GTK 2 има много нови уйджет класове.По-голявата часто от новите класове
правят нещи по-добро или по-различно от старите класове и така старите
класове отпаднаха.
</simpara>
<simpara>
За да се запази съвместимостта със старата версия, старите уйджети все още
могат да се ползват, но е почти сигурно, че ще бъдат премахнати във версия
3 на GTK 3. Това не означава, че трябва да пренапишете старите си програми
отново. Желателно е обаче в новият си код на програмата да не се използват.
Простичко казано - ако не искате да Ви боли главата просто избягвайте
отхверлените уйджети занапред.
</simpara>
<!-- xsltproc segfaults when I uncomment the table!
Because of that I used the unordered list.
<table>
<title>Лист с отхвърлените уйджети/title>
<tgroup>
<thead>
<row>
<entry>Старите Класове Уйджети</entry>
<entry>Нови Класове Уйджеути</entry>
</row>
</thead>
<tbody>
<row>
<entry><classname>GtkCList</classname></entry>
<entry><classname>GtkTreeView</classname> със <classname>GtkListStore</classname></entry>
</row>
<row>
<entry><classname>GtkCTree</classname></entry>
<entry><classname>GtkTreeView</classname> със <classname>GtkTreeStore</classname></entry>
</row>
<row>
<entry><classname>GtkPixmap</classname></entry>
<entry><classname>GtkImage</classname> със <classname>GdkPixbuf</classname></entry>
</row>
</tbody>
</tgroup>
</table>
-->
<para>
<itemizedlist>
<title>Листа с отхвърлените уйджети</title>
<listitem>
<classname>GtkCList</classname> и <classname>GtkList</classname> =>
<classname>GtkTreeView</classname> със <classname>GtkListStore</classname>
</listitem>
<listitem>
<classname>GtkCTree</classname> =>
<classname>GtkTreeView</classname> със <classname>GtkTreeStore</classname>
</listitem>
<listitem>
<classname>GtkCombo</classname> и <classname>GtkOptionMenu</classname> =>
<classname>GtkComboBox</classname> със <classname>GtkTreeModel</classname>
</listitem>
<listitem>
<classname>GtkItemFactory</classname> =>
<classname>GtkUIManager</classname>
</listitem>
<listitem>
<classname>GtkOldEditable</classname> =>
<classname>GtkEditable</classname>
</listitem>
<listitem>
<classname>GtkPixmap</classname> и <classname>GtkPreview</classname> =>
<classname>GtkImage</classname> със <classname>GdkPixbuf</classname>
</listitem>
<listitem>
<literal>GtkText</literal> =>
<classname>GtkTextView</classname> със <classname>GtkTextBuffer</classname>
</listitem>
</itemizedlist>
</para>
<para>
<itemizedlist>
<title>Листа с отхвърлените методи</title>
<listitem>
<function class="GtkWindow">set_policy</function> =>
<function classname="GtkWindow">set_resizable</function>
</listitem>
</itemizedlist>
</para>
<simpara>
Тези листи може да не са пълни. Ако откриете някой отхвърлен уйджет,
който не е споменат в по-горе изброените листи, Ви умоляваме да ни пишете
на <ulink url="mailto:[email protected]">php-gtk-doc</ulink>.
</simpara>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
glade.xml
(application/xml, 10 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.6 Maintainer: DIVOTO Status: ready -->
<chapter id="tutorials.helloglade">
<title>Здравей Glade!</title>
<sect1>
<title>Относно този урок</title>
<para>
Този урок ще ви научи на основните похвати при работа с файлове с
разширение <literal>.glade</literal> в програмите ви под PHP-Gtk2.
</para>
<para>
Glade2 е Разработчик на Потребителски Интерфейси, позволявайки ви да
създадете програми под Gtk2 само чрез ползване на мишката, без никакво
програмиране.
Получената програма се записва във файл с разширение
<filename>.glade</filename> и може след това да бъде заредена в програмата
ви под PHP-Gtk2.
</para>
<simpara>
Създаване на потребителски интерфейси с помощта на Glade спестява много
време, особено при голями проекти, а също така ви позволява да разделите
работата по създавето на програмата ви и на други хора.
Интерфейс дезайнерът се занимава само с проектирането на графичната част,
т.нар. GUI, с помощта на Glade (и не трябва изобщо да разбира от
програмиране). От друга страна, ти, като програмист трябва да се занимаваш
само с програмилане без да се занимаваш с графичната част.
</simpara>
</sect1>
<sect1 id="tutorials.helloglade.preparation">
<title>Подготовка</title>
<simpara>
Ще се концентрираме върху работата с фаловете написан с помощта на Glade,
а не как да правил супер сложни потребителски интефейси. Ето затова,
примерът с <filename>.glade</filename> файла е много простичък - просто
прозорец с един бутон.
</simpara>
<para>
Прозорецът получава име (id) <literal>wndClose</literal>, а бутонът
получава име <literal>btnClose</literal>.
</para>
<example>
<title>Примерът с .glade файл - helloglade.glade</title>
<programlisting role="xml">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloglade/helloglade.glade" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
</sect1>
<sect1 id="tutorials.helloglade.loading">
<title>Зареждане на файлът</title>
<para>
Първото нещо, което трябва да направим е да заредим
<filename>.glade</filename> файла. <classname>GladeXML</classname>
конструктора взема за първи параметър пътят до файла, така че
единственото нещо, което трябва да направим е:
</para>
<example>
<title>Зареждане на .glade файла</title>
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloglade/loading.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
<para>
При изпълнението на скрипта ще видите, че на вашият екран са изобразени
прозорец с бутон, но единственото нещо, което можете да правите, е да
затворите прозореца. Вижда се, че въпреки че сте затворили прозореца,
вашият скрипт продължава да функционира - това се получава най-често,
когато липсва връзка към даден сигнал.
</para>
<sect2 id="tutorials.helloglade.connecting">
<title>Ръчно свързване на сигналите</title>
<para>
Следващото нещо е просто да свържем сигналите: чрез извикване на
<function class="GtkObject">connect</function> или
<function class="GtkObject">connect_simple</function> за
уйджет обект. За получаване на обекта използвайте метода
<function class="GladeXML">get_widget</function> и подайте името му
(id) към него. След което продължаваме по стандартният начин:
</para>
<example>
<title>Вземане и свързване на уйджети</title>
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloglade/connecting_by_hand.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
</sect2>
<sect2 id="tutorials.helloglade.autoconnect">
<title>Изполване на Glade за свързване на сигнали</title>
<para>
Може би сте забелязали, че вътре в .glade файла можете директно
да дефинирате кой ще обработва сигналът. Единственото нещо е да
кажете на Glade е да направи връзка, чрез извикването на
<function class="GladeXML">signal_autoconnect</function>.
</para>
<para>
Можете да дефинирате име на проста функция, които при възникване на
дадено действие ще беди извикан или специална анотация към извикване
на статичен метод чрез отделянето името на класа и на метода чрез
двойно двоеточие <literal>Classname::methodName</literal>.
</para>
<example>
<title>Изполване на signal_autoconnect</title>
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloglade/autoconnect.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
</sect2>
<sect2 id="tutorials.helloglade.autoconnect_instance">
<title>Свързване с обектен метод</title>
<para>
За добрите програмисти свързването към прости функции или статични
методи няма да бъде достатъчно. За да не бъде разтеглен много нашият
код е необходимо да можем да свържем сигналите с методи от обекти.
</para>
<para>
Направата на това е много просто: Използвайте
<function class="GladeXML">signal_autoconnect_instance</function> с обекта
като първи параметър вместо да ползвате
<function class="GladeXML">signal_autoconnect</function>:
</para>
<example>
<title>Използване на signal_autoconnect_instance</title>
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloglade/autoconnect_instance.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
</sect2>
</sect1>
<sect1 id="tutorials.helloglade.partial">
<title>Зареждане само част от файл .glade</title>
<para>
При големи проекти е възможно да дефинирате много прозорци във един
единствен файл <filename>.glade</filename>, и всички те ще бъдат заредени
със зареждането на файла <filename>.glade</filename>. Това обаче: a)
забавя стартирането на вашата програма и б) веднага ще изобрази всички
прозорци ако не зададен параметъра за видимост да бъде "скрит".
Продължавайки нататък, може дори да ви се прииска чрез
<function class="GladeXML">signal_autoconnect_instance</function>
само част от файлът <filename>.glade</filename> да е обект, а друга част от
този файл да бъде свързана към друг обект.
</para>
<para>
Решението на този пробелм е във вторият параметър на конструктура
<classname>GladeXML</classname>: Прехвърлете id само на така наречения
root уйджет и само тази част от <filename>.glade</filename> файла ще бъде
зареден.
</para>
<example>
<title>Частично зареждане на файл .glade</title>
<programlisting role="php">
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="&directory.examples;/tutorials/helloglade/partially.phpw" parse="text">
<xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
</xi:include>
</programlisting>
</example>
</sect1>
</chapter>
gtk_pango_co.xml
(application/xml, 3.7 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.4 Maintainer: DIVOTO Status: ready -->
<chapter id="tutorials.gtkpangoco">
<title>GTK, Pango и Подобни</title>
<sect1>
<simpara>
Когато правите програми под PHP-GTK и преглеждате ръковдоството му, ще се
натъкнете на някой "криптирани акроними". Ето някои от по-важните между тях.
</simpara>
<sect2>
<title>PHP</title>
<simpara>
PHP - PHP: Hypertext Processor - е широко използван, с главно
предназначение език за писане на скриптове, създаден за разработване в
Уеб, който може да бъде вграден в HTML.
</simpara>
</sect2>
<sect2>
<title>GTK</title>
<simpara>
GTK - the GIMP Tool Kit - е библиотека за създаване на графични
потребителски интерфейси. Разработен е за различни операционни системи,
като базирани на UNIX, под Windows и на различни устройства.
</simpara>
<simpara>
GTK Библиотеката съдържа уйджети, което всъщност са графични компуненти
като <classname>GtkButton</classname> или
<classname>GtkTextView</classname>.
</simpara>
<simpara>
GTK библиотеката е в пряка зависимост с други библиотеки - GDK, Pango,
ATK и GLib. Пакетът, който комбинира всички тези библиотеки е познат
като GTK+.
</simpara>
</sect2>
<sect2>
<title>GDK</title>
<simpara>
GDK - the GIMP Drawing Kit - е абстрактен слой, която позволява на GTK+ да
се поддържа от различни порозречни системи. GDK предоставя прозоречната си
ситема по операционните системи X11, Windows и различните Linux системи.
</simpara>
</sect2>
<sect2>
<title>Pango</title>
<simpara>
Pango е беблиотека за поддръжка интернационализацията (различни езици).
Всичко е насочено към обекта <classname>PangoLayout</classname>, който
представлява параграф с текст.
Pango, заедно с <classname>GtkTextView</classname>,
<classname>GtkLabel</classname>, <classname>GtkEntry</classname>, е други
GTK+ уйджети единствено служат за показване на текст.
</simpara>
</sect2>
<sect2>
<title>ATK</title>
<simpara>
ATK - Accessibility Tool Kit. Предоставя набор от основни интерфеиси,
позволяващи на технологиите за достъпност (разработени за инвалиди) да
взаимодестват с графичните потребителски интерфейса. Като прост пример
можем да посочим: четец на екрана може де използва ATK за откриване на
текст в интерфейсът и да го прочете на сляп човек.
</simpara>
<simpara>
Благодарение на структурата ATK, GTK+ уйджетите притежават вградена
поддръжка за достъпност (за инвалиди).
</simpara>
</sect2>
</sect1>
</chapter>