You are on page 1of 70

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Zaawansowane programowanie
w systemie Linux
Autorzy: Neil Matthew, Richard Stones
Tumaczenie: Robert Gbarowski, Zygmunt Wereszczyski
ISBN: 83-7197-495-7
Tytu oryginau: Professional Linux Programming
Format: B5, stron: 1288
Przykady na ftp: 1780 kB
Linux nieustannie umacnia swoj obecno w wiecie jako platforma systemowa
przeznaczona dla zaawansowanych aplikacji. Dojrzewanie i szybki rozwj tego
wszechstronnego systemu, zapewniajcego cae bogactwo bezpatnych narzdzi
programowania, pozwala mie pewno, co do jego ugruntowanej pozycji w przyszoci.
Przy niewielkim nakadzie si i rodkw, system Linux udostpnia szeroki wachlarz
narzdzi oraz obsug nowych lub dopiero powstajcych technologii. Dziki temu
system Linux, pozwala wybra i zastosowa waciwe rozwizania w procesie
tworzenia aplikacji.
Niniejsza ksika pozwala czerpa z praktycznej wiedzy i bogatego dowiadczenia
autorw w zakresie tworzenia oprogramowania dla systemu Linux. Czytelnik zostanie
poprowadzony poprzez proces tworzenia przykadowej aplikacji dla wypoyczalni
filmw DVD tematycznie opracowane rozdziay podejmuj rne aspekty
implementacji tej aplikacji. Z kolei samodzielne rozdziay o charakterze dygresyjnym
omawiaj wane tematy, ktre wykraczaj poza zakres motywu przewodniego, jakim
jest przykadowa aplikacja. Niniejsza monografia podkrela wag praktycznych
aspektw programowania, pokazuje, jak wany jest waciwy dobr narzdzi
programisty dla okrelonego zadania, uczy ich poprawnego uycia oraz wskazuje
najkrtsz drog do upragnionego celu.
Zarwno dowiadczeni programici, jak te i ambitni przyszli twrcy oprogramowania
w systemie Linux znajd tutaj mnstwo praktycznych informacji na tematy takie jak:
biblioteki oprogramowania, techniki, narzdzia oraz aplikacje. Od Czytelnika wymaga si
znajomoci podstaw systemu Linux, dobrej praktycznej znajomoci programowania
w jzyku C. Ponadto, zakada si w niektrych rozdziaach zrozumienie zasad
programowania zorientowanego obiektowo w jzyku C++.
W ksice omwiono midzy innymi :
Przechowywanie danych w systemie Linux ze szczeglnym uwzgldnieniem
PostgreSQL, MySQL i XML.
Implementacja interfejsw graficznych uytkownika w systemie Linux omwienie KDE i GNOME.
Interfejsy WWW zastosowanie moduu PHP dla serwera Apache.
Zastosowanie jzyka Python rozszerzanie i wbudowywanie tego jzyka.
astosowanie RPC oraz CORBA do konstrukcji rozproszonych aplikacji
obiektowych.
Oznaczanie wersji (za pomoc CVS), dokumentacja, internacjonalizacja
i dystrybucja projektw.
Rozproszone rozwizania sprztowe, takie jak bezdyskowy system Linux i klastry
Beowulf.

Spis treci
O Autorach

23

Wstp

33

Dla kogo jest przeznaczona ta ksika?......................................................................33


Tematyka ksiki ......................................................................................................33
Czego wymagamy od czytelnika ksiki?.....................................................................37
Kod rdowy............................................................................................................38
Oznaczenia stosowane w ksice...............................................................................38

Rozdzia 1. Projekt aplikacji

39

Informacje oglne.....................................................................................................39
Formuowanie zaoe...............................................................................................41
Modele tworzenia kodu .............................................................................................43
Opracowanie wczesnego prototypu .......................................................................44
Wczesne i czste testy ........................................................................................45
Wypoyczalnia DVD ...................................................................................................45
Zaoenia wstpne ..............................................................................................46
Analiza wymaga klienta ......................................................................................47
Spis wymaga ..........................................................................................................52
Przypadki uycia ..................................................................................................54
Architektura aplikacji ................................................................................................56
Projekt szczegowy.............................................................................................58
Funkcje dostpu do danych..................................................................................59
Funkcje zwizane z danymi klientw......................................................................59
Funkcje zwizane z filmami ..................................................................................62
Funkcje opisujce pyt DVD ................................................................................63
Funkcje zwizane z wypoyczaniem .......................................................................63
Przykadowa implementacja .................................................................................65
Materiay dodatkowe.................................................................................................65
Podsumowanie.........................................................................................................66

Rozdzia 2. CVS

67

Narzdzia dla systemu Linux .....................................................................................68


Terminologia ............................................................................................................69
Repozytorium ...........................................................................................................69
Obsuga CVS przez jednego uytkownika.....................................................................70
Format polecenia CVS .........................................................................................71
Zmienne rodowiskowe .......................................................................................71
Import nowego projektu .......................................................................................72
Pocztek prac nad projektem w CVS .....................................................................74
Porwnywanie zmian z zawartoci repozytorium....................................................75

Zaawansowane programowanie w systemie Linux


Aktualizacja repozytorium.....................................................................................76
Wydanie projektu.................................................................................................77
Przegldanie zmian .............................................................................................78
Dodawanie i usuwanie plikw z projektu................................................................79
Rozwinicia sw kluczowych ................................................................................79
Korekty, znaczniki i rozgazienia ...............................................................................80
Korekty...............................................................................................................80
Znaczniki ............................................................................................................81
Rozgazienia projektu .........................................................................................84
CVS dla wielu uytkownikw ......................................................................................89
Praca zespoowa .................................................................................................90
ledzenie zmian..................................................................................................92
Wicej zabawy z CVS ................................................................................................92
Pliki binarne........................................................................................................92
Poprawianie bdnych adnotacji ............................................................................93
Sieciowy dostp do CVS............................................................................................93
Klienty CVS z interfejsem graficznym ..........................................................................96
Materiay dodatkowe.................................................................................................97
Podsumowanie.........................................................................................................98

Rozdzia 3. Bazy danych

101

Wybr bazy danych .................................................................................................102


mSQL...............................................................................................................102
MySQL .............................................................................................................103
PostgreSQL ......................................................................................................103
Jaki wybr bdzie odpowiedni? ...........................................................................103
PostgreSQL............................................................................................................104
Instalacja i uruchamianie ...................................................................................104
Tworzenie uytkownikw ...............................................................................106
Tworzenie baz danych...................................................................................107
Tworzenie zapasowych kopii bazy danych .......................................................107
Zdalny dostp..............................................................................................108
Podstawy teorii baz danych .....................................................................................109
Pierwsza posta normalna .................................................................................110
Druga posta normalna .....................................................................................111
Trzecia posta normalna ....................................................................................111
Denormalizacja .................................................................................................112
Prosta baza danych ...........................................................................................112
Korzystanie z psql ..................................................................................................117
Polecenia dla psql.............................................................................................117
Polecenia do definicji danych .............................................................................118
Tworzenie i usuwanie tabel ...........................................................................119
Typy danych w PostgreSQL............................................................................123
Polecenia do manipulacji danymi ........................................................................123
Wstawianie danych ......................................................................................124
Pobieranie danych z pojedynczej tabeli...........................................................125
Kombinowane pobieranie danych z wielu tabel ...............................................127
Aktualizacja danych w tabeli..........................................................................129
Usuwanie danych .........................................................................................129
Transakcje........................................................................................................130

Spis treci

Wskazwki dla projektu bazy danych ........................................................................132


Materiay dodatkowe...............................................................................................134
Podsumowanie.......................................................................................................134

Rozdzia 4. Interfejsy PostgreSQL

135

Dostp do PostgreSQL z kodu programu...................................................................135


Biblioteka libpq .................................................................................................136
Funkcje do obsugi pocze z baz danych ....................................................137
Uruchamianie polece SQL ...........................................................................139
Uzyskiwanie wynikw zapyta........................................................................142
Biblioteka ecpg .................................................................................................155
Jak metod zastosowa? .................................................................................166
Aplikacja................................................................................................................167
Podsumowanie.......................................................................................................174

Rozdzia 5. MySQL

175

Instalacja i zarzdzanie ...........................................................................................175


Pakiety skompilowane .......................................................................................175
Budowanie z plikw rdowych ..........................................................................177
Konfiguracja poinstalacyjna................................................................................178
Zarzdzanie baz MySQL.........................................................................................179
Polecenia .........................................................................................................179
isamchk ......................................................................................................180
mysql..........................................................................................................180
mysqladmin.................................................................................................181
mysqlbug ....................................................................................................181
mysqldump..................................................................................................181
mysqlimport ................................................................................................182
mysqlshow ..................................................................................................182
Tworzenie uytkownikw i nadawanie uprawnie ..................................................183
grant...........................................................................................................183
with grant ....................................................................................................184
revoke, delete .............................................................................................185
Hasa ...............................................................................................................185
Tworzenie bazy danych ......................................................................................186
Obsuga standardu SQL przez PostgreSQL i MySQL ...................................................187
Dostp do danych MySQL z jzyka C ........................................................................188
Inicjalizacja poczenia ......................................................................................189
Obsuga bdw ................................................................................................193
Wykonywanie polece SQL .................................................................................194
Polecenia SQL niezwracajce danych.............................................................194
Polecenia zwracajce dane ...........................................................................197
Przetwarzanie zwrconych danych..................................................................202
Funkcje dodatkowe............................................................................................207
Materiay dodatkowe...............................................................................................208
Podsumowanie.......................................................................................................208

Rozdzia 6. Zmagania z bdami

209

Typy bdw ...........................................................................................................209


Zgaszanie bdw ..................................................................................................210
Wykrywanie bdw w oprogramowaniu.....................................................................214
Rodzaje bdw w oprogramowaniu ..........................................................................214

Zaawansowane programowanie w systemie Linux


Instrukcje diagnostyczne .........................................................................................215
Weryfikacja zaoe ...........................................................................................220
Gdzie jeste?....................................................................................................222
lad wsteczny (backtrace)..................................................................................226
Usuwanie bdw czynnoci wstpne ...................................................................228
Uycie programu uruchomieniowego ...................................................................229
Proste polecenia GDB........................................................................................230
Inne moliwoci GDB .........................................................................................234
Zasoby ..................................................................................................................234
Podsumowanie.......................................................................................................235

Rozdzia 7. Usugi katalogowe LDAP

237

Co to jest usuga katalogowa?.................................................................................237


X.500 i LDAP ....................................................................................................238
Struktura serwera katalogowego ..............................................................................239
Nazwy czci... .................................................................................................240
Nadawanie nazw dn...........................................................................................241
Schemat nazewnictwa X.500 ........................................................................241
X.500 ze schematem nazewnictwa domen .....................................................241
Schemat nazewnictwa oparty na skadniku domeny ........................................241
Skadniki obiektw ............................................................................................242
Standardowe typy i atrybuty ..........................................................................243
Drzewo katalogowe LDAP ...................................................................................244
Pliki LDIF ..........................................................................................................245
Instalacja i konfiguracja serwera LDAP .....................................................................247
Instalacja OpenLDAP .........................................................................................248
Konfiguracja OpenLDAP .....................................................................................248
Uruchomienie serwera ............................................................................................251
Dostp do LDAP z poziomu jzyka C.........................................................................253
Inicjalizacja biblioteki LDAP ................................................................................253
Powizanie z serwerem LDAP .............................................................................254
Obsuga bdw LDAP........................................................................................255
Pierwszy program kliencki LDAP..........................................................................256
Wyszukiwanie ...................................................................................................257
Wybr zakresu .............................................................................................257
Filtracja wynikw ..........................................................................................257
Wyszukiwanie przy uyciu API ........................................................................260
Sortowanie zwrconych obiektw...................................................................266
Zmiana danych.......................................................................................................266
Nowy wpis ........................................................................................................266
Modyfikacja wpisu .............................................................................................270
Usuwanie wpisu ................................................................................................272
Aplikacja................................................................................................................273
Materiay dodatkowe...............................................................................................273
Podsumowanie.......................................................................................................274

Rozdzia 8. Programowanie graficznych interfejsw uytkownika (GUI)


za pomoc GNOME-GTK+

275

Biblioteki GTK+ i GNOME ........................................................................................276


glib277
GTK+ ...............................................................................................................277

Spis treci

GDK .................................................................................................................277
Imlib ................................................................................................................278
ORBit ...............................................................................................................278
libGnorba..........................................................................................................278
Biblioteka glib ........................................................................................................278
Typy .................................................................................................................279
Makrodefinicje ..................................................................................................280
Makrodefinicje diagnostyczne .......................................................................280
Funkcje obsugujce napisy................................................................................282
Przydzielanie pamici.........................................................................................284
Listy.................................................................................................................285
GTK+.....................................................................................................................287
Widety ............................................................................................................287
Utworzenie widetu ......................................................................................287
Pojemniki ....................................................................................................288
Tabele ........................................................................................................290
Sygnay .......................................................................................................292
Ukazanie, aktywno i ukrycie .......................................................................293
Zniszczenie .................................................................................................293
gtk_init i gtk_main .............................................................................................293
Przykadowa aplikacja GTK+ ...............................................................................293
Podstawy GNOME...................................................................................................295
gnome_init ..................................................................................................295
GnomeApp ..................................................................................................296
Menu i paski narzdziowe ..................................................................................296
GnomeAppbar..............................................................................................299
Pasek postpu ............................................................................................300
Okna dialogowe ................................................................................................300
Tworzenie widetu GnomeDialog....................................................................301
Pokazywanie widetu GnomeDialog................................................................302
GnomeAbout ...............................................................................................304
GnomePropertyBox.......................................................................................305
GnomeMessageBox .....................................................................................306
Przykadowa aplikacja GNOME............................................................................307
Drzewo kodu rdowego GNOME.............................................................................309
configure.in .................................................................................................310
Makefile.am ................................................................................................312
Zapis konfiguracji ..............................................................................................313
Przechowywanie danych................................................................................314
Odczyt zachowanych danych .........................................................................315
Zarzdzanie sesj .............................................................................................315
GnomeClient ...............................................................................................316
Analiza skadniowa wiersza polece z uyciem popt .............................................319
Materiay dodatkowe...............................................................................................322
Podsumowanie.......................................................................................................323

Rozdzia 9. Tworzenie GUI za pomoc Glade i GTK+/GNOME

325

Oglne omwienie Glade.........................................................................................326


Uwagi na temat projektowania GUI .....................................................................326
Samouczek Glade...................................................................................................327
Okno gwne.....................................................................................................328
Paleta ..............................................................................................................329

Zaawansowane programowanie w systemie Linux


Okno waciwoci..............................................................................................332
Kod rdowy utworzony za pomoc Glade ...........................................................335
lookup_widget...................................................................................................337
Dopisywanie kodu .............................................................................................338
libglade ............................................................................................................340
GUI do obsugi wypoyczalni pyt DVD .......................................................................343
Projekt .............................................................................................................344
Kompilacja i uruchamianie dvdstore....................................................................344
Struktura ..........................................................................................................350
Kod..................................................................................................................351
main.c ........................................................................................................351
callbacks.c ..................................................................................................353
member_dialog.c oraz title_dialog.c...............................................................354
rent_dialog.c oraz return_dialog.c ..................................................................358
search_window.c .........................................................................................364
misc.c.........................................................................................................374
Podsumowanie.......................................................................................................379

Rozdzia 10. Flex i Bison

381

Struktura danych wejciowych .................................................................................382


Skanery i analizatory skadni ..............................................................................383
Jak dziaaj generatory?.....................................................................................384
Skanery .................................................................................................................385
Prosty skaner....................................................................................................386
Specyfikacje skanera.........................................................................................386
Zasada najduszego dopasowania .....................................................................391
Wyraenia regularne ..........................................................................................392
czenie wyrae regularnych .......................................................................393
Dziaania ..........................................................................................................395
Przekierowanie wejcia i wyjcia skanera ............................................................396
Zwracanie elementw ........................................................................................397
Skanery kontekstowe ........................................................................................398
Opcje programu flex ..........................................................................................398
Analizatory skadni (parsery) ....................................................................................399
Tworzenie parserw...........................................................................................401
Definicje......................................................................................................404
Reguy.........................................................................................................405
Kod dodatkowy ............................................................................................406
Tworzenie testera skadni ..................................................................................406
Typy elementw ................................................................................................410
Dziaania w reguach..........................................................................................411
Opcje programu bison........................................................................................418
Konflikty gramatyczne ........................................................................................419
Wyraenia arytmetyczne .....................................................................................420
Materiay dodatkowe...............................................................................................421
Podsumowanie.......................................................................................................422

Rozdzia 11. Narzdzia do testowania

423

Testowanie wymaga..............................................................................................423
Architektura aplikacji .........................................................................................424
Etapy testowania...............................................................................................425

Spis treci

Testy oglne .....................................................................................................425


Testy regresyjne ................................................................................................426
Program testujcy .............................................................................................428
Nagwki i deklaracje....................................................................................429
main() .........................................................................................................429
show_result()...............................................................................................430
Interfejsy programisty (API) ...........................................................................430
Testowanie programu dvdstore...........................................................................433
Testy w postaci skryptw ...................................................................................434
expect ..............................................................................................................434
Problemy z pamici..........................................................................................436
Pami statyczna .........................................................................................437
Stos ...........................................................................................................437
Pami dynamiczna......................................................................................442
Instalacja programu mpatrol...............................................................................444
Zastosowanie programu mpatrol ........................................................................445
Testy pokrycia...................................................................................................450
Pokrycie instrukcji ........................................................................................450
Pokrycie rozgazie programu i pokrycie danych ............................................451
GCOV narzdzie do testw pokrycia instrukcji.............................................452
Testowanie wydajnoci ......................................................................................458
Podsumowanie.......................................................................................................461

Rozdzia 12. Bezpieczne programowanie

463

Czym jest bezpieczne programowanie?.....................................................................463


Dlaczego tak trudno bezpiecznie programowa?........................................................464
Bdy utajone....................................................................................................464
Pochwaa paranoi..............................................................................................465
Bezpieczestwo systemu plikw ..............................................................................467
Standardowe uprawnienia ..................................................................................467
Lepki bit ...........................................................................................................468
Atrybuty setuid i setgid ......................................................................................469
Atrybuty setuid i setgid dla plikw wykonywalnych ...........................................469
Atrybut setgid dla katalogw .........................................................................470
Bezpieczne uywanie setguid i setgid..................................................................470
Potwierdzanie tosamoci uytkownikw...................................................................471
Tradycyjne uwierzytelnianie w UNIX-ie ..................................................................471
Podstawowe techniki....................................................................................472
Ograniczenia................................................................................................472
Dynamiczne moduy uwierzytelniajce PAM..........................................................473
PAM w teorii ................................................................................................473
Etapy sprawdzania tosamoci za pomoc PAM..............................................473
Rejestracja wywoa zwrotnych ...........................................................................478
Przykad ......................................................................................................479
Zarzdzanie uprawnieniami ................................................................................483
Porzucanie i odzyskiwanie uprawnie.............................................................483
Funkcje get*id i set*id .................................................................................484
Strategie zarzdzania uprawnieniami ..................................................................485
Bezpieczne korzystanie z kryptografii........................................................................486
Krtkie wprowadzenie do kryptografii .............................................................487
Kryptografia z kluczem publicznym.................................................................487

10

Zaawansowane programowanie w systemie Linux


Bezpieczne algorytmy jednostronne ...............................................................488
O pisaniu wasnych algorytmw .....................................................................488
Niektre powszechnie stosowane techniki...........................................................489
Cyfrowe podpisy...........................................................................................489
Uwierzytelnianie za pomoc hasa .................................................................490
Szyfrowanie sesji .........................................................................................491
Generowanie liczb losowych w Linuksie...............................................................492
Zarzdzanie kluczem .........................................................................................493
Bezpieczne programowanie sieciowe........................................................................494
Opracowywanie protokow......................................................................................495
Jeli jest to moliwe, naley stosowa standardy .................................................495
Przyjazne zapory sieciowe ..................................................................................496
Zagadnienia bezpieczestwa aplikacji WWW ........................................................497
Zagadnienia zwizane z zarzdzaniem sesj ........................................................497
Skrypty zewntrzne.......................................................................................498
Standardowe sieciowe narzdzia kryptograficzne.......................................................500
SSL-TLS ...........................................................................................................500
ssh ..................................................................................................................500
Oglne wskazwki i techniki zabezpiecze...........................................................501
Problemy ze rodowiskiem ......................................................................................502
Specjalne zmienne rodowiskowe.......................................................................502
LD_*...........................................................................................................503
IFS..............................................................................................................503
PATH...........................................................................................................504
Uycie plikw tymczasowych .........................................................................504
Uycie chroot............................................................................................505
Zagadnienia specyficzne dla jzyka.....................................................................507
Jak dziaa przepenienie bufora?....................................................................507
Jak unika problemw z przepenieniem bufora?.............................................509
Sprawdzanie bdw i wyjtkw ..........................................................................510
Perl ..................................................................................................................510
Skrypty setuid i setgid w Perlu............................................................................511
Python ...................................................................................................................511
PHP.......................................................................................................................512
Materiay dodatkowe...............................................................................................512
Podsumowanie.......................................................................................................513

Rozdzia 13. Programowanie GUI za pomoc KDE/Qt

515

Wprowadzenie ........................................................................................................515
Informacje o Qt .................................................................................................515
Informacje o KDE ..............................................................................................516
Instalacja Qt .....................................................................................................517
Instalacja KDE ..................................................................................................518
Biblioteki ..........................................................................................................519
Programowanie aplikacji przy uyciu Qt .....................................................................519
Na pocztek: Witaj wiecie..............................................................................519
Uproszczenie zarzdzania plikiem MakefileMakefile za pomoc tmake ..................521
Sygnay i odbiorniki ...........................................................................................522
Witaj wiecie ponownie...................................................................................525
Dziedziczenie z klas podstawowych.....................................................................525
Widety ............................................................................................................528
Ukady..............................................................................................................530

Spis treci

11

Programowanie aplikacji przy uyciu KDE ..................................................................534


Prosty edytor tekstowy.......................................................................................534
Materiay dodatkowe...............................................................................................542
Podsumowanie.......................................................................................................542

Rozdzia 14. Interfejs GUI dla wypoyczalni pyt DVD implementacja w KDE i Qt

545

Projekt aplikacji ......................................................................................................546


Okno gwne.....................................................................................................549
Elementy menu............................................................................................550
Pasek narzdzi ............................................................................................551
Widet gwny ..............................................................................................552
Rejestr transakcji.........................................................................................553
Okno dialogowe klienta ................................................................................554
Okno dialogowe wypoycze ...............................................................................558
Wykaz wypoycze........................................................................................558
Raport wypoyczenia..........................................................................................559
Okno wyszukiwa ..............................................................................................560
Strona wyszukiwania filmw..........................................................................561
Strona wyszukiwa klientw..........................................................................564
Strona wyszukiwania pyt ..............................................................................565
Meneder ustawie ...........................................................................................566
Dostosowanie kodu do KDE ....................................................................................568
Kconfig i SettingsManager .................................................................................574
Materiay dodatkowe...............................................................................................574
Podsumowanie.......................................................................................................575

Rozdzia 15. Python

577

Wprowadzenie ........................................................................................................577
Cechy...............................................................................................................578
Jzyk bardzo wysokiego poziomu (Very High Level Language VHLL) ..............579
Interpretowany.............................................................................................579
Czysta, prosta i uyteczna skadnia ...............................................................580
Obiektowy ...................................................................................................581
Dynamiczne okrelanie typu..........................................................................581
Dua biblioteka standardowa ........................................................................581
Obsuga wielu platform .................................................................................581
Mnogo implementacji................................................................................581
Due moliwoci rozbudowy ..........................................................................582
Otwarty dostp do kodu rdowego...............................................................582
Rozrywka!....................................................................................................582
Python: odpowiednie narzdzie pracy ..................................................................583
...ale nie kadej! ...............................................................................................583
Instalacja Pythona ..................................................................................................583
Uruchomienie Pythona ............................................................................................585
Interaktywny interpreter .....................................................................................586
Polecenie jako argument....................................................................................587
Skrypt jako argument.........................................................................................587
Samodzielnie wykonywalny program.................................................................587
Szczegy...............................................................................................................588
Interpreter i kompilacja bajtowa..........................................................................588
Skadnia komentarzy .........................................................................................588

12

Zaawansowane programowanie w systemie Linux


Znaczenie wielkoci liter ....................................................................................589
Wbudowane typy danych i operatory....................................................................589
Nic..............................................................................................................589
Liczby cakowite ...........................................................................................590
Dugie liczby cakowite..................................................................................593
Liczby zmiennoprzecinkowe...........................................................................593
Liczby zespolone..........................................................................................593
Listy ...........................................................................................................594
Napisy ........................................................................................................596
Krotki..........................................................................................................598
Sowniki ......................................................................................................598
Zmienne ...........................................................................................................599
Skadnia struktury blokowej................................................................................600
Skadnia instrukcji.............................................................................................601
Instrukcje z wyraeniami ...............................................................................601
Przypisanie ..................................................................................................602
Instrukcje proste..........................................................................................602
Instrukcje zoone ........................................................................................605
Funkcje ............................................................................................................607
Funkcje wbudowane ..........................................................................................609
Przestrzenie nazw..............................................................................................610
Moduy i pakiety ................................................................................................610
Niektre moduy ze standardowej dystrybucji .......................................................611
Klasy i obiekty ..................................................................................................611
Metody........................................................................................................612
self.............................................................................................................612
Dziedziczenie...............................................................................................612
Metody specjalne.........................................................................................613
Rozszerzenia Pythona ........................................................................................614
Program przykadowy co do grosza ........................................................................614
Materiay dodatkowe...............................................................................................620
Podsumowanie.......................................................................................................621

Rozdzia 16. Tworzenie interfejsu WWW za pomoc PHP

623

PHP i skrypty wykonywane po stronie serwera...........................................................624


Skrypty wykonywane po stronie serwera ..............................................................624
Skrypty CGI..................................................................................................624
Aktywne strony serwera ................................................................................625
Strony Java i serwlety ...................................................................................625
Pisanie skryptw w PHP................................................................................625
Moliwoci PHP.................................................................................................626
Instalacja i konfiguracja PHP ...................................................................................627
Budowa i instalacja PHP jako interpretera CGI .....................................................628
Budowa i instalacja PHP z Apache i jako modu Apache........................................629
Instalacja PHP z pliku RPM.................................................................................631
Konfiguracja PHP...............................................................................................631
Wprowadzenie do skadni PHP .................................................................................633
Zmienne, stae i typy danych ..............................................................................633
Operatory w PHP ...............................................................................................635
Operatory arytmetyczne ................................................................................635
Operatory porwna .....................................................................................635

Spis treci

13

Operatory logiczne .......................................................................................635


Inne operatory .............................................................................................636
Instrukcje .........................................................................................................636
Funkcje ............................................................................................................637
Tablice .............................................................................................................638
Realizacja projektu DVD za pomoc PHP ..................................................................639
HTTP, HTML i PHP .............................................................................................639
Aplikacja...........................................................................................................641
Rejestracja w systemie (Login) ......................................................................641
Stan rezerwacji ............................................................................................642
Wyszukiwanie tytuw ...................................................................................642
Rezerwacja filmw........................................................................................642
Odwoanie rezerwacji ....................................................................................642
dvdstoredbfunctions.php ..............................................................................643
dvdstorecommon.php...................................................................................650
dvdstorelogin.php ........................................................................................653
dvdstoresearch.php .....................................................................................654
dvdstorestatus.php ......................................................................................656
dvdstorecancel.php......................................................................................657
dvdstorereserve.php ....................................................................................658
Materiay dodatkowe...............................................................................................659
Podsumowanie.......................................................................................................660

Rozdzia 17. Wbudowywanie i rozszerzanie Pythona za pomoc C/C++

661

Rozszerzenie Pythona za pomoc moduu rozszerzenia C/C++..............................662


Wbudowanie Pythona do programu macierzystego................................................662
Opracowanie moduw rozszerzenia w C/C++ ...........................................................663
Wymagane oprogramowanie narzdziowe ............................................................663
Interpreter Pythona ......................................................................................663
Biblioteki do opracowywania oprogramowania w Pythonie ................................664
SWIG uproszczony generator interfejsu otoczki...........................................664
Rozszerzenie Pythona przy uyciu SWIG...............................................................664
Proste funkcje .............................................................................................665
Kompilacja i test pliku otoczki utworzonego przez SWIG ..................................668
Testowanie moduu rozszerzenia ...................................................................669
Dostp do tablic przy uyciu wskanikw SWIG ...............................................670
Dodanie metod wirtualnych do struktur ..........................................................671
Zgaszanie i obsuga wyjtkw przy uyciu odwzorowa typw ..........................672
Tworzenie nowych typw obiektw za pomoc SWIG .......................................678
Rozszerzanie Pythona przy uyciu C API ....................................................................692
Typy obiektw Pythona.......................................................................................693
Zliczanie odsyaczy oraz prawo wasnoci ............................................................694
Przegld metod opracowywania moduw rozszerzenia w jzyku C .........................695
Struktura moduu rozszerzenia ......................................................................695
Funkcja init..................................................................................................696
Proste funkcje...................................................................................................697
Troch bardziej zoona funkcja ..........................................................................698
Globalna blokada interpretera ............................................................................700
Tworzenie nowych typw obiektw Pythona..........................................................700
Minimalny typ obiektu ..................................................................................701
Obsuga getattr............................................................................................704

14

Zaawansowane programowanie w systemie Linux


Obsuga setattr............................................................................................705
Obsuga wywoa metod ...............................................................................706
Inicjalizacja obiektu ......................................................................................707
Hermetyzacja obiektw C++ za pomoc interfejsu C API .......................................708
Wbudowywanie Pythona do programw C/C++..........................................................711
rodowisko programowania dla wbudowywania....................................................711
Wbudowywanie Pythona przy uyciu funkcji wysokiego poziomu .............................712
Statyczna konsolidacja programu macierzystego z moduem rozszerzenia ..............714
Wbudowywanie Pythona przy uyciu wywoa niszego poziomu .............................716
Uruchamianie napisw .................................................................................716
Zastpowanie wewntrznych funkcji Pythona ..................................................717
Wywoywanie funkcji Pythona ........................................................................719
Tworzenie egzemplarza obiektu w Pythonie oraz wywoywanie jego metody........720
Przetwarzanie wielowtkowe .........................................................................722
tdemo.c ......................................................................................................722
Oglne sugestie .....................................................................................................728
Materiay dodatkowe...............................................................................................729
Podsumowanie.......................................................................................................729

Rozdzia 18. Zdalne wywoania procedur

731

Omwienie.............................................................................................................731
Prosta sieciowa baza danych wypoyczalni DVD ........................................................732
Gniazda BSD ....................................................................................................732
Prosty serwer gniazd (Simple Socket Server) ..................................................733
Prosty klient gniazd (Simple Socket Client).....................................................736
Programowanie przy uyciu interfejsu gniazd BSD......................................................738
Architektura ONC-RPC i zwizane z tym pojcia .........................................................739
Datagramy (bez poczenia) lub strumienie (zorientowane na poczenie)...............740
Rozszerzona reprezentacja danych (XDR).............................................................740
Korzyci wynikajce z uycia RPC w aplikacji obsugujcej wypoyczalni DVD..............741
Narzdzia i programy uytkowe RPC .........................................................................742
rpcgen kompilator protokou RPC ...................................................................742
Struktura pliku definiujcego protok RPC .....................................................743
portmap odwzorowanie adresu portu na numer programu RPC ....................743
rpcinfo zapytanie o informacj RPC ...........................................................744
Zastosowanie zdalnych wywoa procedur w aplikacji dla wypoyczalni DVD.................745
Funkcje bez argumentw lub typw zwracanych....................................................746
Funkcje z prostymi argumentami i prostymi typami zwracanymi .............................755
Bardziej zoone przykady ..................................................................................757
Zwracanie tablic ................................................................................................760
Ograniczenia czasowe dla klienta .......................................................................764
Uwierzytelnianie .....................................................................................................765
AUTH_NONE .....................................................................................................765
AUTH_UNIX .......................................................................................................765
Obsuga uwierzytelniania po stronie klienta .........................................................766
Obsuga uwierzytelniania po stronie serwera........................................................767
Uycie serwerw RPC wraz z /etc/inetd.conf.............................................................769
Inne metody uatwiajce programowanie sieciowe .....................................................770
Materiay dodatkowe...............................................................................................771
Podsumowanie.......................................................................................................772

Spis treci
Rozdzia 19. Multimedia i Linux

15
773

Stan obecny...........................................................................................................773
Integracja programowa............................................................................................775
Dwik...................................................................................................................775
Urzdzenia........................................................................................................776
Obsuga standardowych formatw dwikowych ...................................................778
Nieupakowany surowy format dwikowy........................................................778
Upakowany format dwikowy .......................................................................779
WAV............................................................................................................780
AIFF ............................................................................................................780
Konwersja pomidzy formatami dwikowymi sox .......................................780
Zrb to sam......................................................................................................781
/sys/soundcard.h........................................................................................781
soundtest.c .................................................................................................782
Ocena moliwoci urzdzenia karty dwikowej...............................................784
Moliwoci urzdzenia ..................................................................................786
Obsugiwane formaty ....................................................................................788
Soundtest test dwiku, czyli poskadajmy wszystko razem .........................790
Odtwarzanie rzeczywistych danych dwikowych .............................................795
Porzdkowanie.............................................................................................798
Ruchome obrazy.....................................................................................................798
Odtwarzacze programowe...................................................................................799
xanim..........................................................................................................799
RealPlayer ...................................................................................................800
Inne formaty ................................................................................................800
Odtwarzacze sprztowe......................................................................................800
Hybrydy ............................................................................................................801
OMS otwarty system mediw....................................................................801
Kwestie polityczne i prawne.....................................................................................803
Materiay dodatkowe...............................................................................................803
Podsumowanie.......................................................................................................804

Rozdzia 20. CORBA

805

Jzyk definicji interfejsu (IDL)...................................................................................806


Porednik da obiektowych (ORB).........................................................................806
Umowny adres obiektu (IOR)....................................................................................807
Adapter obiektu......................................................................................................807
Serwery .................................................................................................................808
Usugi nazewnicze i usugi wymiany..........................................................................808
Oglna ocena architektury CORBA............................................................................809
CORBA i RPC..........................................................................................................810
CORBA i gniazda sieciowe .......................................................................................812
Systemy podobne do CORBA ...................................................................................812
DCOM lub COM+...............................................................................................813
Metoda zdalnych wezwa (RMI) w jzyku Java......................................................813
Enterprise JavaBeans ........................................................................................814
MQSeries firmy IBM...........................................................................................814
SOAP ...............................................................................................................815
IDL: definiowanie interfejsu .....................................................................................815
Moduy .............................................................................................................816
Puapki........................................................................................................816

16

Zaawansowane programowanie w systemie Linux


Interfejsy ..........................................................................................................817
Podstawowe typy danych ...................................................................................817
Typy szablonowe ...............................................................................................818
Typ sequence ..............................................................................................818
Typy string i wstring......................................................................................819
Typ fixed .....................................................................................................819
Zoone typy danych .....................................................................................819
Operacje .....................................................................................................821
Wyjtki ........................................................................................................823
Atrybuty.......................................................................................................824
Przykad aplikacji obsugujcej wypoyczalni DVD ...............................................824
Odwzorowania jzykw ............................................................................................828
Skadniki odwzorowania jzyka ...........................................................................829
Odwzorowania dla jzyka C ................................................................................829
Podstawowe odwzorowania typw danych IDL.................................................830
Zoone i szablonowe typy danych .................................................................830
Odwoania do staych ...................................................................................833
Wywoywanie operacji ...................................................................................834
Obsuga wyjtkw ........................................................................................834
Przykad wprowadzajcy prosty system powiadamiania ..........................................836
Prosta wymiana komunikatw ............................................................................836
Zastosowanie ORBit z IDL ..................................................................................837
Klient komunikatw ...........................................................................................837
Serwer komunikatw .........................................................................................839
Kompilowanie aplikacji ORBit .............................................................................840
Uruchamianie przykadowej aplikacji ...................................................................841
Materiay dodatkowe...............................................................................................842
Podsumowanie.......................................................................................................842

Rozdzia 21. Implementacja CORBA z porednikiem ORBit

843

CORBA w aplikacji obsugujcej wypoyczalni pyt DVD .............................................844


Klient DVD........................................................................................................844
Serwer DVD ......................................................................................................845
Serwer obsugi logw.........................................................................................845
Serwer weryfikacji..............................................................................................845
Kod klienta .......................................................................................................846
Kod serwera obsugi logw.................................................................................846
Kod serwera DVD ..............................................................................................847
Odwzorowanie API w jzyku C na operatory CORBA .........................................857
Monta caoci..................................................................................................862
Zastosowanie libgnorba ..........................................................................................863
Konfiguracja ORBit do pracy w sieci .........................................................................864
GOAD rejestr aktywacji obiektw GNOME .............................................................865
Zastosowanie CORBA w GNOME ..............................................................................865
Zaawansowane waciwoci CORBA .........................................................................867
Dynamiczne wezwania interfejsu.........................................................................867
Usugi CORBAServices.......................................................................................867
Usugi nazewnicze........................................................................................868
Usugi wymiany ............................................................................................868
Obsuga zdarze ..........................................................................................868
Usuga powiadamiania .................................................................................868

Spis treci

17

Kontrola pracy rwnoczesnej.........................................................................869


Usuga wymiany komunikatw .......................................................................869
Usugi zwizane z czasem.............................................................................869
Obsuga cyklu ycia obiektu ..........................................................................870
Usugi relacyjne ...........................................................................................870
Usugi utrwalania obiektw ...........................................................................870
Usugi transakcyjne ......................................................................................870
Usugi zwizane z bezpieczestwem ..............................................................871
Usuga uzewntrzniania ................................................................................872
Obsuga waciwoci obiektw ......................................................................872
Obsuga zapyta o obiekty ............................................................................872
Obsuga licencjonowania ..............................................................................872
Usugi CORBAFacilities ......................................................................................872
Projektowanie i uruchamianie skalowalnych usug CORBA.....................................873
Zarzdzanie rwnoczesnym dostpem ...........................................................874
Wtki ..........................................................................................................874
Rozdzielanie wielu obiektw..........................................................................874
Przetwarzanie asynchroniczne i wywoania zwrotne..........................................875
Zarzdzanie odpornoci ..............................................................................876
Interfejsy do zarzdzania systemem ..............................................................876
Materiay dodatkowe...............................................................................................877
Podsumowanie.......................................................................................................878

Rozdzia 22. Systemy bezdyskowe

879

Troch historii ........................................................................................................879


Co takiego!? Nie ma dysku? ....................................................................................881
Dlaczego bez dysku? ..............................................................................................882
Jak to dziaa?.........................................................................................................883
Uruchamianie systemu bezdyskowego ................................................................884
Identyfikacja maszyn bezdyskowych w sieci .........................................................885
Uruchamianie systemu operacyjnego ..................................................................886
Konfiguracja serwera ..............................................................................................888
Tworzenie obrazu startowego...................................................................................890
Jdro Linuksa dla systemu bezdyskowego ................................................................892
Gwny system plikw .............................................................................................895
Problemy ...............................................................................................................898
Aplikacje klienckie ..................................................................................................899
Podsumowanie.......................................................................................................900

Rozdzia 23. XML i libxml

903

Struktura dokumentu XML.......................................................................................904


Skadnia XML....................................................................................................905
Dobrze uformowany dokument XML ....................................................................905
Sekcje ........................................................................................................906
Elementy .....................................................................................................907
Zagniedanie elementw .............................................................................908
Komentarze.................................................................................................909
Poprawno XML...............................................................................................910
Definicja typu dokumentu (DTD) ....................................................................911
Tworzenie DTD.............................................................................................911
Schematy ....................................................................................................914
Powizania DTD z dokumentem XML .............................................................915

18

Zaawansowane programowanie w systemie Linux


Rozbir XML...........................................................................................................915
DOM ................................................................................................................915
SAX..................................................................................................................916
Biblioteka libXML (gnome-xml) ............................................................................916
Tworzenie i wywoywanie parsera...................................................................917
Informacja o dokumencie..............................................................................920
Zastosowanie wywoa zwrotnych ..................................................................921
Przykad wywoania zwrotnego .......................................................................926
Utrzymywanie informacji o stanie parsera.......................................................929
Ostateczna wersja parsera.................................................................................930
Materiay dodatkowe...............................................................................................937
Podsumowanie.......................................................................................................938

Rozdzia 24. Klastry Beowulf

939

Konfiguracja sprztowa ...........................................................................................939


Konfiguracja oprogramowania..................................................................................940
Programowanie klastra Beowulf ...............................................................................941
Programowanie z wykorzystaniem MPI ......................................................................941
Podstawowe waciwoci programw MPI............................................................943
Kompilacja i uruchamianie prostego programu MPI ..............................................945
Rozproszony koder MP3.....................................................................................946
Wydajno komunikacyjna klastra Beowulf ..........................................................948
Przegld zaawansowanych moliwoci MPI ..........................................................952
Procedury obsugujce komunikacj midzy dwoma wzami............................952
Typy danych definiowane przez uytkownika ...................................................954
Operacje kolektywne ....................................................................................955
Bariera (barrier) ...........................................................................................959
Przykady programw korzystajcych z MPI ..........................................................959
Obliczanie wartoci liczby pi.......................................................................960
Obliczanie zbioru Mandelbrota ......................................................................962
Transponowanie macierzy .............................................................................966
Programowanie stosujce PVM ................................................................................970
Porwnanie PVM z MPI ......................................................................................970
Pobieranie i instalacja PVM ................................................................................971
Omwienie funkcji biblioteki PVM .......................................................................971
Przykadowy program PVM..................................................................................974
Kompilacja i uruchamianie programu PVM na klastrze Beowulf ........................975
Materiay dodatkowe...............................................................................................976
Podsumowanie.......................................................................................................977

Rozdzia 25. Dokumentacja

979

Okrelenie odbiorcw pracy .....................................................................................980


Dokumentacja uytkownika: interfejs graficzny ..........................................................980
Dokumentacja dla lokalnych GUI.........................................................................980
Pomoc kontekstowa .....................................................................................981
Pomoc kontekstowa dla ubogich ................................................................981
Dokumentacja dla interfejsw WWW ...................................................................983
Dokumentacja dla zaawansowanego uytkownika lub administratora systemu .............984
Opcje wiersza polece: moliwo uycia --help....................................................984
Strony podrcznika systemowego .......................................................................985
Sekcje podrcznika systemowego .................................................................986

Spis treci

19

Utrzymywanie porzdku......................................................................................987
Najczciej spotykane elementy strony podrcznika systemowego ...................987
Podrcznik systemowy za zason: troff .........................................................989
Tworzenie wasnej strony podrcznika systemowego .......................................989
Kroje pisma ......................................................................................................991
Akapity .............................................................................................................992
Tabele..............................................................................................................992
Instalacja strony podrcznika systemowego ...................................................993
Przykadowa strona podrcznika systemowego ...............................................993
Tworzenie stron podrcznika dla API ...................................................................995
Nowsza generacja stron podrcznika pliki info.................................................995
Wszystko o strukturze: od pojedynczego programu do systemw rozproszonych...........997
Narzdzia dokumentacyjne ......................................................................................998
Stare, ale jare: TeX i LaTeX ................................................................................999
Sposb dziaania programw TeX i LaTeX.......................................................999
Produkt kocowy........................................................................................1001
Ogldanie wyniku przetwarzania ..................................................................1002
Tworzenie lepiej wygldajcych dokumentw ................................................1002
Ponowne spojrzenie na pliki info .................................................................1003
Nowy gatunek: HTML, XML i DocBook ...............................................................1003
HTML ........................................................................................................1004
Rzut oka na DocBook .................................................................................1004
Ostatnie pocignicia pdzlem: pliki HOWTO i FAQ.............................................1005
Dokumentacja dla programisty...............................................................................1009
Zastosowanie metody POD w jzyku Perl........................................................1010
Programowanie literackie .................................................................................1011
Jak to dziaa? ............................................................................................1012
Lekkostrawne programowanie literackie ............................................................1015
Wymiana dokumentw .....................................................................................1016
Pliki PDF.........................................................................................................1017
Podsumowanie.....................................................................................................1017

Rozdzia 26. Sterowniki urzdze

1019

Kontekst dziaania................................................................................................1020
Modu i kod inicjalizujcy.......................................................................................1021
Sekcje konsolidatora ............................................................................................1022
Przykadowy kod moduu ..................................................................................1022
Urzdzenia i sterowniki magistrali PCI ....................................................................1023
Struktura pci_dev ............................................................................................1023
Wyszukiwanie urzdze PCI..............................................................................1025
Przeszukiwanie rczne................................................................................1025
Sterowniki PCI.................................................................................................1026
Funkcje dostpu do urzdze PCI .....................................................................1028
Przydzia zasobw ...........................................................................................1028
Obsuga przerwa............................................................................................1030
Kod sterownika PCI moduu Applicom ..........................................................1031
Dostp do pamici w obszarze uytkownika.......................................................1033
Architektura kiobuf ..........................................................................................1034
Kod obsugi kiobuf dla karty firmy Applicom..................................................1036

20

Zaawansowane programowanie w systemie Linux


Podstawowe funkcje blokujce .........................................................................1039
Semafory ..................................................................................................1039
Blokady ptlowe.........................................................................................1040
Wielka blokada jdra ..................................................................................1040
Szeregowanie zada i kolejki............................................................................1041
schedule() .................................................................................................1041
set_current_state().....................................................................................1042
schedule_timeout() ....................................................................................1042
wake_up() .................................................................................................1042
add_wait_queue().......................................................................................1043
remove_wait_queue() .................................................................................1044
sleep_on() i wycigi .................................................................................1044
Powrt do sterownika karty Applicom...........................................................1045
Licznik wywoa w module................................................................................1047
Budowanie sterownika.....................................................................................1049
Opcje konfiguracyjne ..................................................................................1049
Pliki Makefile.............................................................................................1050
Co zrobi z nowym sterownikiem? ..........................................................................1051
Jak zgosi nowy sterownik?.............................................................................1052
Podsumowanie.....................................................................................................1054

Rozdzia 27. Rozprowadzanie aplikacji

1055

Pakiety RPM.........................................................................................................1057
Uytkownik RPM..............................................................................................1057
Co naprawd zostao zainstalowane?................................................................1058
Baza danych RPM ...........................................................................................1059
Co znajduje si w pakiecie? ........................................................................1059
Usuwanie pakietu ......................................................................................1060
Status pakietu ...........................................................................................1060
Instalowanie pakietw ................................................................................1061
Aktualizacja pakietu ...................................................................................1062
Instalatory graficzne ...................................................................................1062
Sprawdzanie zalenoci ..............................................................................1063
Pomijanie zalenoci ..................................................................................1065
Inne opcje .................................................................................................1065
Pakiety, ktre nie s zainstalowane.............................................................1067
Anatomia pakietu RPM ....................................................................................1068
Pakiety rdowe .............................................................................................1069
configure, autoconf i automake .............................................................................1070
Pakiety rdowe RPM......................................................................................1075
Budowanie pakietu RPM .......................................................................................1076
atki....................................................................................................................1081
Tworzenie atki ................................................................................................1081
Uycie atki .....................................................................................................1083
GNATS.................................................................................................................1084
Podsumowanie.....................................................................................................1084

Rozdzia 28. Wersje midzynarodowe

1085

Terminologia I18N ................................................................................................1087


Czy Unicode nie jest rozwizaniem? .......................................................................1088

Spis treci

21

Unicode..........................................................................................................1088
Co to jest? ................................................................................................1088
Co umoliwia Unicode?...............................................................................1093
A czego nie umoliwia?...............................................................................1094
Problem kodowania znakw...................................................................................1095
ISO 2022: Techniki poszerzania zakodowanych zestaww znakw.......................1095
Programowanie z uyciem Unicode....................................................................1097
Modele I18N i rodowisko systemowe ...................................................................1104
Model lokalizacji POSIX....................................................................................1104
Przewodnik X/Open dotyczcy przenonoci (XPG) .............................................1108
Rozszerzenia GNU libc dla modeli POSIX i X/Open ........................................1110
Formatowanie danych wyjciowych i przetwarzanie danych wejciowych ....................1112
X Window System............................................................................................1112
Formatowanie danych wyjciowych ..............................................................1112
Wprowadzanie danych przez uytkownika .....................................................1113
Praktyczne aspekty programowania I18N................................................................1117
I18N i wewntrzne przetwarzanie tekstu............................................................1119
Programowanie przy uyciu lokalizacji................................................................1120
I18N i programowanie z zastosowaniem Xlib .....................................................1132
I18N i interfejsy graficzne w Linuksie ................................................................1139
Rola I18N w oprogramowaniu dla systemu Linux................................................1141
I18N w rzeczywistych projektach ............................................................................1142
Programowanie obiektowe i I18N......................................................................1143
I18N w pakietach do budowy aplikacji...............................................................1144
Co dalej z I18N w systemie Linux?....................................................................1146
Odnoniki z komentarzami ..........................................................................1146

Dodatek A Opis obiektw GTK+ i GNOME

1149

Widety i funkcje GTK+..........................................................................................1149


GtkButton .......................................................................................................1149
GtkCheckButton ..............................................................................................1150
GtkCList .........................................................................................................1150
GtkCombo ......................................................................................................1156
GtkEntry .........................................................................................................1157
GtkFrame .......................................................................................................1159
GtkHBox .........................................................................................................1159
GtkHButtonBox ...............................................................................................1159
GtkHSeparator ................................................................................................1160
GtkLabel.........................................................................................................1160
GtkMenu ........................................................................................................1161
GtkMenuBar ...................................................................................................1162
GtkMenuItem ..................................................................................................1163
GtkNotebook...................................................................................................1164
GtkOptionMenu ...............................................................................................1166
GtkPixmapMenuItem .......................................................................................1167
GtkScrolledWindow..........................................................................................1167
GtkSpinButton ................................................................................................1168
GtkTable.........................................................................................................1170
GtkText ..........................................................................................................1171
GtkVBox .........................................................................................................1172
GtkWindow .....................................................................................................1173

22

Zaawansowane programowanie w systemie Linux


Widety i funkcje GNOME ......................................................................................1173
GnomeAbout...................................................................................................1173
GnomeApp......................................................................................................1174
GnomeAppBar.................................................................................................1175
GnomeDateEdit...............................................................................................1176
GnomeDialog ..................................................................................................1176
GnomeDock....................................................................................................1178
GnomeDockItem .............................................................................................1178
GnomeEntry ....................................................................................................1179
GnomePropertyBox ..........................................................................................1180
Materiay dodatkowe.............................................................................................1181

Dodatek B Definicja protokou RPC dla wypoyczalni pyt DVD

1183

Dodatek C Licencje oprogramowania otwartego

1191

Oglna Licencja Publiczna GNU..............................................................................1191


Oglna licencja publiczna GNU dla bibliotek............................................................1199
Licencja Wolnej Dokumentacji GNU ........................................................................1209
Publiczna licencja Q ..............................................................................................1216

Skorowidz

1219

Programowanie graficznych
interfejsw uytkownika (GUI)
za pomoc GNOME-GTK+
rodowisko GNOME (w dosownym tumaczeniu: rodowisko modelu obiektw sieciowych GNU, GNU Network Object Model Enviroment) to rozwijajca si ga darmowego oprogramowania GNU. Celem projektu GNOME jest zbudowanie wszechstronnego i atwego w obsudze rodowiska pulpitowego dla uytkownika oraz wydajnych
i skutecznych komponentw aplikacyjnych dla programistw. Biblioteki GNOME i GTK+
(na ktrych w duej mierze oparte s elementy graficzne GNOME) za pomoc cisego
poczenia narzdzi pulpitu z wydajn i elastyczn konstrukcj oprogramowania uatrakcyjniaj bogactwem moliwoci opracowywanie w Linuksie profesjonalnych GUI, czyli
graficznych interfejsw uytkownika (graphical user interface).
Zestawy narzdzi graficznych, takie jak Tk, Qt, Motif i inne, s obecne od dawna dla
ukrycia przed programist GUI interfejsu API systemu X Window. Co zatem wyrnia
biblioteki GNOME i GTK+?
n

Dziki licencji GPL biblioteki GNOME i GTK+ s, byy i zawsze bd cakowicie


darmowym oprogramowaniem. Podstawow ich zalet w stosunku np. do KDE
(K Desktop Environment rodowisko pulpitowe K) jest to, e (w odrnieniu
od KDE) w swojej wewntrznej strukturze nie wykorzystuj adnego
oprogramowania objtego choby tylko w czci prawami wasnoci.

Aby uatwi przenoszenie na rne platformy, biblioteki te s napisane


w jzyku C. Implementuj one wyrafinowany, w peni obiektowy system
typw danych. Taka konstrukcja zachca do przenoszenia API na inne jzyki.
Do programowania z GNOME-GTK+ mona ju uywa C, C++, Python,
Guile i Perl.

276

Zaawansowane programowanie w systemie Linux


n

Podstawowym elementem strukturalnym w nowym i nastpnych wydaniach


GNOME jest Bonobo. Ta technologia umoliwia stosowanie moliwych
do wbudowania komponentw wielokrotnego uytku, podobnych do ActiveX
i Java Beans. To pozwoli na przykad na wczenie komponentu graficznego
czy te edytora tekstu do programu arkusza kalkulacyjnego.

Pulpit GNOME jest przyjazny w uyciu i niezwykle atwo dostosowuje si do indywidualnych potrzeb. Menu s wstpnie skonfigurowane do intuicyjnie najwaciwszego
ukadu, maj dobrze zaprojektowane i atrakcyjne ikony. GNOME jest niezaleny od menedera okien, ale dostarcza mu wskazwek, aby prawidowo wsppracowa z takimi
elementami GNOME, jak na przykad panel.
Zakadajc podstawow wiedz o GNOME-GTK+, w tym rozdziale omwimy fundamentalne zagadnienia dotyczce GNOME-GTK+. Przypomnimy znane tematy i poruszymy w zarysie pojcia zaawansowane. Celem jest osignicie poziomu, na ktrym
bdzie mona w komfortowy sposb zrealizowa za pomoc GNOME-GTK+ interfejs
GUI dla aplikacji obsugujcej wypoyczalni pyt DVD. Bdziemy pracowa wycznie w jzyku C, co, jak zobaczymy, pasuje zaskakujco dobrze do obiektowej struktury
GNOME-GTK+.
Wszyscy, dla ktrych GNOME-GTK+ jest cakowit nowoci, mog najpierw
zapozna si z materiaami o charakterze wprowadzajcym, ktre s podane
na kocu tego rozdziau.
Omwimy:
n

biblioteki GTK+ i GNOME,

glib bibliotek narzdziow C,

GTK+ podstawowy zestaw narzdzi,

podstawy GNOME,

drzewo kodu rdowego GNOME,

zapis konfiguracji,

analiz skadniow wiersza polece,

zarzdzanie sesj,

rda dodatkowej informacji o GNOME-GTK+.

Biblioteki GTK+ i GNOME


W tym i nastpnym podrozdziale zajmowa si bdziemy prawie wycznie nastpujcymi bibliotekami:

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...


n

glib,

GTK+ (wraz z GDK),

GNOME.

277

glib
Biblioteka glib zawiera szkielet konstrukcyjny wikszoci struktur bibliotek GTK+
i GNOME. Jest to wszechstronna biblioteka, oferujca wszelakie akcesoria dla programistw jzyka C, wczajc w to: zarzdzanie pamici, przechowywanie danych i funkcje
sortujce. Zawiera rwnie wiele ulepszonych wariantw standardowych funkcji systemowych oraz funkcji bibliotecznych C. Omwimy to szczegowo w kolejnym podrozdziale, gdzie wyjanimy, co oznacza okrelenie ulepszone warianty.

GTK+
GTK+ (GIMP ToolKit), czyli zestaw narzdzi GIMP (GNU Image Manipulation Program uniwersalny program do edycji grafiki bitmapowej) jest zestawem narzdzi
GUI uywanym przez GNOME, udostpniajcym warstw abstrakcji midzy programist a odnonym systemem okien (system X Window czy te Win32). Dziki temu programowanie aplikacji GUI jest atwiejsze. Zwolennicy zestawu GTK+ wskazuj na jego
wspaniay system ukadu pojemnikw (zobacz podrozdzia Pojemniki w dalszej czci
tego rozdziau) do projektowania okien, jak te na przejrzysty system czenia zdarze
generowanych przez uytkownika z kodem.
W systemie X Window zdarzenia nazywa si sygnaami. Takie sygnay rni si
cakowicie od sygnaw niskiego poziomu w UNIX-ie, wic nie naley ich myli ze sob.

GDK
GDK (GIMP Drawing Kit) jest zestawem narzdzi do rysowania, ktry udostpnia cienk
warstw pomidzy aplikacjami a elementarnymi procedurami Xlib do rysowania. W czasie opracowywania oprogramowania przy uyciu GTK+ w istocie uywa si nakadki na
GDK, ktry z kolei stanowi nakadk na system X. Oznacza to, e biblioteka GDK jest
niezbdnym skadnikiem w opracowywaniu aplikacji dla Linuksa przy uyciu narzdzi
GTK+ i GNOME.
Istniej jeszcze inne, bardzo rozbudowane biblioteki zwizane z GNOME. Ich opis stanowczo wykracza poza zakres tej ksiki. Jednak z uwagi na to, e w rodowisku uytkownikw GNOME powszechnie si je stosuje i do nich odwouje, grzechem byoby
o nich nie wspomnie. S to:
n

Imlib,

ORBit,

libGnorba.

278

Zaawansowane programowanie w systemie Linux

Imlib
Imlib jest rozbudowan bibliotek do obsugi grafiki, zdoln do operowania du liczb formatw graficznych, jak np. JPG i PNG. GNOME uywa wersji GDK tej biblioteki. W przyszoci biblioteka Imlib bdzie zastpiona przez doskonalsz bibliotek 
.

ORBit
ORBit jest nieodpatnie udostpnian implementacj CORBA 2.2 ORB, zaprojektowan
z myl o szybkoci i prostocie. ORBit take obsuguje jzyk C, a zatem jest waciwym
wyborem obiektowego porednika zapyta ORB dla GNOME. W rozdziaach 20. i 21.
podamy wicej wiadomoci o implementacji CORBA.

libGnorba
Biblioteka libGnorba zaopatruje GNOME w cza z ORBit, wcznie z mechanizmami
aktywacji obiektw i systemem zabezpiecze.

Biblioteka glib
Jest bibliotek narzdzi C oglnego przeznaczenia, ktra dostarcza solidnych elementw
niskiego poziomu i ma zasadnicze znaczenie dla operacji przenoszenia oprogramowania
midzy rnymi typami systemw UNIX i Windows. Biblioteka glib wnosi standardowy zestaw funkcji narzdziowych i typw danych do wykorzystania przez programistw
wszystkich platform. Dziki temu nie trzeba wywaa otwartych drzwi i mona skrci
zarwno czas opracowania aplikacji, jak i zuycie pamici. Co wicej, biblioteka moe
zwikszy stabilno opracowywanego kodu, poniewa nie trzeba poznawa nowych
standardw dla kadej platformy, na ktrej si programuje. I jest cudownie uyteczna
nawet przy zwykym opracowywaniu aplikacji dla Linuksa.
Zestaw funkcji udostpnianych przez glib wywiera imponujce wraenie niezalenie od
przyjtych standardw. Szczegowe ich omwienie wykracza znacznie poza ramy tego
rozdziau. Na szczcie, podobnie jak kady typowy projekt GNU, biblioteka glib jest
bardzo dobrze opisana zarwno na swojej witrynie http://www.gtk.org, jak i w pliku nagwkowym   . Nawet jeli kto nie naley do mionikw czytania plikw nagwkowych, powinien doceni skarbnic wiedzy tam zawart. Nierzadko okazuje si,
e szybciej mona odnale potrzebn informacj w pliku nagwkowym ni podczas
przegldania plikw pomocy lub stron WWW.
GNOME i GTK+ same znaczco polegaj na typach, funkcjach i makrodefinicjach diagnostycznych udostpnionych przez glib. Tak wic, naleyte opanowanie wiedzy na temat glib
powinno by zasad kadego kursu programowania w GNOME-GTK+.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

279

W tym podrozdziale zostan scharakteryzowane:


n

typy danych biblioteki glib,

makrodefinicje,

procedury obsugi pamici (memory routines),

funkcje obsugi napisw,

listy.

Typy
Jeden wany, aczkolwiek czsto zaniedbywany aspekt jzyka C, to zaleno rozmiaru
pewnych elementarnych typw od platformy systemowej. Na przykad  zwykle zajmie
32 bity pamici, ale komputery mog zarezerwowa dla  mniej lub wicej. Oczywicie istniej wzgldnie proste metody programowania, ktre pozwalaj wykluczy tego
rodzaju problemy, niemniej jednak pomyki si zdarzaj.
Dlatego te, aby uczyni nasze ycie atwiejszym, glib definiuje wasny zbir elementarnych typw o gwarantowanej dugoci oraz nowe typy  ,  i typ wskanika na . I tak na przykad  jest typem cakowitym ze znakiem o dugoci 16
bitw, a   jest jego odpowiednikiem bez znaku.
Typ zdefiniowany w glib

Opis

 


liczba cakowita o gwarantowanej dugoci, ze znakiem

    


 

liczba cakowita o gwarantowanej dugoci, bez znaku



typ booleowski,  i  take zdefiniowane w glib



odpowiednik 



odpowiednik 



odpowiednik 



odpowiednik 

  

odpowiednik  

!

odpowiednik " #

Zauwamy, e  i   istniej jedynie wtedy, gdy platforma systemowa moe
je obsuy. Jeli tak, to glib zdefiniuje  .
Typy ,  , ! , 
 i    to otoczki istniejcych typw jzyka C i s
wczone jedynie dla zachowania zgodnoci. Biorc pod uwag ich identyczn natur,
mona zapyta, jakie korzyci pyn z uycia  w miejsce , czy te !  zamiast
! . Faktem jest, e z technicznego punktu widzenia nie ma adnej rnicy. Jednak
rozwaajc to w kategoriach stylu dobrego programowania, zachowamy spjno, a ten

280

Zaawansowane programowanie w systemie Linux


nawyk powinnimy wiczy przy kadej okazji. Uycie jednolitego stylu kodowania i zachowanie spjnoci jest szczeglnie istotne w czasie pisania kodu dla wielu platform
systemowych. Cho skompilowany kod nie ma rnicy spowodowanej zastpieniem 
przez , to taka zamiana moe jednak pomc programicie w bardziej subtelny sposb.

Makrodefinicje
Biblioteka glib definiuje kilka makrodefinicji pomocnych w oglnym programowaniu
i usuwaniu bdw. Wikszo z nich jest zapewne znana programistom jzyka C. Dla
uzupenienia typu   zaczono makrodefinicje "# oraz $%&. #%% jest zdefiniowane w ANSI C jako pusty wskanik (void pointer): '()*+.
Istnieje take kilka prostych makrodefinicji uatwiajcych onglowanie liczbami. Wszystko
po to, by przyspieszy kodowanie i zwikszy czytelno kodu
Makrodefinicja

Opis



$ %&'.



$ %('.

)

$ )%%" #'&'.

*%+'

Zwraca warto bezwzgldn +.

,-)%'

Zwraca mniejsz z liczb  i .

,.%'

Zwraca wiksz z liczb  i .

/,0%+12345634'

Zwraca +, jeli + jest pomidzy 1234 i 5634; zwraca 1234,


jeli(+71234 oraz 5634, jeli +85634.

W zalenoci od procesora komputera, makrodefinicja ,- ."/" przyjmuje warto


% %/, ,/ lub 0/0/ (odpowiednio, kolejno bajtw 4321,
1234 i 3412).

Makrodefinicje diagnostyczne
Biblioteka glib dostarcza zbioru makrodefinicji, ktre mog by uyte do sprawdzenia
zaoe w kodzie. Dziki nim bdy w programach mog by szybciej wykryte. Naley
makrodefinicje umieci we wraliwych miejscach kodu, aby sprawdzay konieczne warunki. W razie niepowodzenia weryfikacji warunku, makrodefinicje wydrukuj ostrzeenie na konsoli. Mog wymusi natychmiastowy powrt do funkcji wywoujcej, a nawet
zakoczenie aplikacji.
Makrodefinicje dziel si na dwa typy: te, ktre s powszechnie uywane do sprawdzania poprawnoci argumentw dostarczonych przez funkcj wywoujc, oraz na te, ktre
weryfikuj warunki w obrbie funkcji.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

281

Sprawdzenie poprawnoci argumentw jest czsto pierwsz czynnoci przy rozpoczciu funkcji. S to tzw. sprawdzenia warunkw koniecznych. Dwie makrodefinicje:
  

 '1 231!1* oraz  

 '1 * drukuj
ostrzeenie, jeli '1 45 "#* i powracaj z funkcji. Podczas gdy pierwsza z tych
funkcji zwraca 31!1 i jako taka musi by uyta dla funkcji, ktre nie s deklarowane w pustym kontekcie (void), druga jest uywana w funkcjach, ktre nie przekazuj wartoci (void functions).
Nie trzeba dugo szuka, aby znale przykady w kodach rdowych GNOME oto
wycinek z implementacji panelu w GNOME:
"
!99!!%!!-#'
:
9 99%(;)'<
%=85 ':
%=84!;;009':
 9!!9! 9%= '<
>
695 9 4%=85 '<
>
>

Bez  



 , gdyby w 
 przekazano #%%, funkcja  !  
wpadaby w tarapaty. W obecnoci makrodefinicji weryfikujcej warunek  


 zwraca komunikat o bdzie:


##/--/##?!@? A%!99!!'?
B(;)B @

ktry bezporednio wskazuje na przyczyn kopotw. Sprawdzenie wewntrznej zgodnoci w obrbie funkcji jest najczciej przeprowadzane za pomoc makrodefinicji
weryfikacji warunku:
9%5 6'

Jeli warunek nie jest speniony, to wywoywana jest funkcja  i generowany zrzut
pamici:
##C##?@?D%9'?
 ?%!(;)'
@@@
 % 1! '
E

Poniewa  koczy wykonywanie programu, zaleca si uycie  




w obrbie funkcji w przypadkach, w ktrych niepowodzenie nie byoby krytyczne.
Do oznaczenia obszaru kodu, ktry nigdy nie powinien by wykonany, glib dostarcza
makrodefinicji:
999 %'

282

Zaawansowane programowanie w systemie Linux


ktra powoduje przerwanie poczone z komunikatem o bdzie, jeli kiedykolwiek taki
fragment kodu zostanie osignity.
##C##?95 5@?A

% ! 99'?
  
@@@
 % 1! '
E

Okazuje si to uyteczne w instrukcjach warunkowych, gdzie jeden lub wicej warunkw nigdy nie powinno by spenionych. Na przykad w tym fragmencie kodu:
 9!;69699 9!%FG9)C*CCG%96''<
5% 9!'
:
-90F?
;6 !95 %FG9H-IF% 'J99J'<
6<
,,*90F?
;6 !95 %FG9H-IF% 'J1199J'<
6<
I-G90F?
;6 !95 %FG9H-IF% 'J 699J'<
6<
  ?
999 %'<
>

zapewniamy, e !  jest rwna albo  %0, 66,"0, albo te /&70


w instrukcji 1! .
Biblioteki GNOME i GTK+ czsto wykorzystuj te makrodefinicje w swoich kodach
rdowych. Z tego m.in. powodu programowanie i wykrywanie bdw przy uyciu
tych bibliotek jest atwe i oczywiste. Uycie makrodefinicji diagnostycznych skrci o poow czas, jaki powicamy na szukanie wskanikw #%%( i innych irytujcych bdw
w programach warto sprbowa.

Funkcje obsugujce napisy


Operowanie napisami w jzyku C jest kopotliwym zadaniem, o czym wie kady programista pracujcy w tym jzyku. Postpowanie z tablicami znakowymi, wskanikami
do znakw, wskanikami do tablic, tablicami wskanikw itd. wymaga konsekwentnego
i bezbdnego programowania.
Wykroczenie poza zakres pamici oraz niepoprawne uycie wskanikw to podstawowe
bdy wykonania. Nie pomaga te to, e standardowe funkcje obsugujce napisy zawarte
w  nie toleruj pomyek. Biblioteka glib udostpnia alternatywne funkcje, ktre
s bardziej przejrzyste, bezpieczniejsze i wygodne do przenoszenia pomidzy rnymi
platformami. Oferuje rwnie dodatkowe funkcje, ktre s pomocne w sytuacji, gdy potrzebne bdzie pocicie napisu na kawaki, wymiana czy zwyke manipulacje na napisach.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

283

Dobrym przykadem solidnoci biblioteki obsugujcej napisy w glib jest 


.
Ta funkcja jest rwnowana 
, ale kopiuje tylko pierwszych  znakw sformatowanego napisu do 
i gwarantuje zakoczenie napisu wartoci #%%. Warto zapamita, e w  znakw mieci si te ogranicznik #%%.
9!%#  #1@@@'

Przed uyciem( 


naley zadba o zapewnienie sformatowanemu napisowi
wystarczajcej iloci miejsca.
#1;91%K&'<
9!%1K&J* L 54!@LJ'<

W takim przypadku wygodniejsza metoda polega na uyciu  


:
#9 !9!%#1@@@'

Przydziela ona poprawn ilo miejsca do przechowywania sformatowanego napisu,


wykluczajc potrzeb zgadywania czy obliczania potrzebnej dugoci.
#1;9 !9!%JH4! L @LJ'<

W obu przypadkach przydzielona pami musi by po wykorzystaniu uwolniona za


pomoc 
:
9%1'<

Do funkcji zarzdzania pamici wystpujcych w glib jeszcze powrcimy.


Na wszystkich platformach systemowych funkcje !!8 i !!8 maj swoje
odpowiedniki w bibliotece glib w postaci:
91!%## '
91!%##  '

gdzie !!8 porwnuje dwa podane napisy, a !!8 pierwsze  znakw


dwch napisw. Zwraca 0, jeli si zgadzaj, warto ujemn, jeli (9(: oraz warto
dodatni, jeli (;(:. Porwnanie nie rozrnia maych i wielkich liter.
Biblioteka glib udostpnia rwnie funkcje modyfikujce napis. Aby zamieni wielko
liter w napisie na wielkie lub mae, trzeba wywoa odpowiednio   i 1. Kolejno znakw w napisie jest odwracana za pomoc , tak wic 
'< <* zamieni napis na < <.
" 9 !%#'
" 9 5%#'
" 9"%#'

Funkcja !  usuwa wiodce spacje w napisie, a ! 8 usuwa spacje kocowe.
#9 %#'
#91!%#'

284

Zaawansowane programowanie w systemie Linux


Do utworzenia wieo zaalokowanej kopii napisu potrzebne bd wspomniane wczeniej  ,   i  
. Jak wiadomo,   kopiuje peny napis, a   kopiuje pierwszych (znakw:
#9 !%#'
#9 !%#1 '

Na koniec naszego krtkiego przegldu najchtniej stosowanych funkcji obsugujcych


napisy docieramy do dwch funkcji przeznaczonych do czenia napisw:
#9%#@@@'
#92%#!@@@'

Funkcja(!! zwraca wieo alokowany napis zawierajcy poczenie argumentw (jako ostatni parametr przekazujemy wskanik NULL), natomiast =
dziaa w podobny sposb, ale umieszcza  pomidzy elementami czonymi.

Przydzielanie pamici
Biblioteka glib neutralizuje wszelkie potencjalne problemy zwizane z funkcjami C obsugi
pamici 8 ! i
 za pomoc zawinicia ich we wasne odpowiedniki: 8 !
i 
. Te dwie funkcje uyte w bibliotece glib skompilowanej z opcj >? ?88?

  dokonuj poytecznej charakterystyki pamici. Wywoanie 88
  drukuje
na konsoli potrzebn informacj o wykorzystaniu pamici przez program. Ucilajc,
88
  podaje czstotliwo przydziau pamici o rnych rozmiarach, cakowit
liczb bajtw, ktre zostay zarezerwowane, cakowit liczb bajtw uwolnionych oraz
rnic pomidzy tymi wartociami, czyli liczb bajtw cigle uywanych. Wycieki pamici staj si atwe do spostrzeenia.
W przeciwiestwie do( 8 !, 8 ! rozsdnie obsuy zlecenie przydziau o rozmiarze 0, zwracajc wskanik #%%. 8 ! natychmiast przerwie program, jeli przydzia si nie powiedzie, a to pozwoli na pominicie sprawdzania obecnoci wskanika
#%%. Mona to ocenia negatywnie, gdy w razie niepowodzenia brakuje awaryjnej zmiany trybu pracy. W przeciwiestwie do
, 
 zupenie ignoruje wskaniki #%% do
niej przekazane.
Poniewa dwie funkcje przydzielajce 8 ! i 8 ! mog uywa oddzielnych obszarw pamici, koniecznie trzeba uywa ich parami: 
 z 8 !, a
 z 8 !.
!91% 3'
" 9%!11'

Funkcja(  ! jest w glib wiernym odbiciem znanej funkcji  ! sucej do
powtrnego przydziau bufora z nowym rozmiarem. Podobnie jak 8 !,  !
zwraca wskanik #%%, jeli zosta przekazany bufor o zerowej dugoci. Funkcja
88  kopiuje blok pamici do wieo przydzielonego bufora.
!9%!11 3'
!911 !%!11 43'

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

285

Listy
Bardzo czsto chcemy przechowywa dane jako list jedno- lub dwukierunkow. Biblioteka glib udostpnia wymienite sposoby implementacji obu rodzajw list w sposb
przejrzysty i wydajny.
Struktura   listy dwukierunkowej (doubly-linked list) zawiera wskaniki zarwno
do poprzedniego (), jak i nastpnego elementu ():
M#I 46 N 5 6 65#M
 F
:
! <
F#+<
F#!"<
><

W odrnieniu od listy jednokierunkowej (singly-linked list) &%, lista % uaktywnia moliwo przegldania zarwno w przd, jak i w ty.
M#46 N2 6 65#M
 F
:
! <
F#+<
><

Warto zauway, e dane w obu rodzajach list s zachowane jako dane typu ,
ale moemy bez problemu zachowa liczby cakowite, korzystajc z makrodefinicji  
.0. ", 0. " . , #  .0. " i 0. " .# .
Aby utworzy pust list jednokierunkow, wystarczy zainicjalizowa wskanik #%%:
F#9;)<

Podobnie jest utworzona lista dwukierunkowa:


F#  9;)<

Obie listy uywaj identycznego zestawu funkcji API, z t tylko rnic, e nazwy funkcji
dla listy jednokierunkowej poprzedza litera s, co jest o tyle sensowne, e zbir list
jednokierunkowych jest podzbiorem zbioru list dwukierunkowych. Na przykad  
 dodaje element do listy jednokierunkowej, podczas gdy   dodaje
element do listy dwukierunkowej. Nie ma jednak odpowiednika polecenia  
  dla listy jednokierunkowej.
W celu dodania elementw do listy uywa si  , pamitajc o uaktualnieniu wskanika &% wartoci zwrcon, co ma znaczenie w przypadku zmiany
pocztku listy.
F#99!! %F#! '<

286

Zaawansowane programowanie w systemie Linux


Na przykad napis i liczba cakowita dodane jako elementy do koca listy wygldayby tak:
F#9;)<
9;99!! %9JC !5 O31?J'<
9;99!! %9F-)9C90C-)% ''<

Jeli ta sama lista zawiera elementy rnego typu, trzeba zachowa ostrono w dalszej
czci kodu.
Aby doda elementy do pocztku listy, uywa si  :
9;99!! %9J!25P!3Q6 J'<

I wreszcie do uwolnienia listy wywouje si  


:
99%9'<

Polecenie to zwalnia pami zajt przez komrki listy, ale nie usuwa zawartoci komrek. Jeli zajdzie taka potrzeba, naley rcznie usun zawarto listy, aby zapobiec wyciekom pamici.
W celu odczytania zawartoci jakiej komrki trzeba bezporednio dotrze do waciwego
elementu danych w strukturze GSList:
! ;9=8 <

eby przej do nastpnej komrki w licie, wywouje si  :


9;99+%9'<

Rzecz jasna, mona porusza si do tyu wzdu listy dwukierunkowej:


 9;99!" %  9'<

Czsto musimy doda element w okrelonej pozycji listy. Moe te pojawi si potrzeba
przechwycenia danych z okrelonej pozycji na licie. Do tego celu wykorzystuje si:
F#99%F#! !'
!999 %F# '

Bardzo przydatna jest rwnie funkcja  8, ktra usuwa element zawierajcy dane :
F#991"%F#! '

Inne funkcje do przechwytywania danych z listy zwracaj list w miejscu okrelonym


przez podany element. Trzy niej podane funkcje pozwalaj okreli element kolejno za
pomoc jego zawartoci, pozycji liczonej od pocztku lub te oczywistego faktu, e jest
to ostatni element z listy:
F#99 %F#! '
F#99%F# '
F#99%F#'

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

287

GTK+
Zestaw narzdzi GIMP (GIMP ToolKit), GTK+ bierze swj pocztek w udostpnieniu
interfejsu uytkownika dla sztandarowego programu graficznego GNU (GNU Image Manipulation Program, w skrcie GIMP). GTK+ od tego czasu rozrs si i obecnie jest bogato wyposaonym, atwym w uyciu, oszczdnym, niezalenym od pulpitu zestawem narzdzi. Nie ma te adnych wymaga dotyczcych istniejcego rodowiska pulpitowego.
Nie moe oddziaywa z systemami menu pulpitu ani nie ma zdolnoci zapisu stanu pomidzy sesjami. Jest to cakowicie zamierzony wynik projektowania, ktry umoliwia
przenoszenie zestawu narzdzi GTK+ midzy platformami systemowymi. Przykady systemw, do ktrych przeniesiono go z powodzeniem, to Windows, Solaris i BeOS.
GNOME opiera si na GTK+, dlatego znajomo jego dziaania jest warunkiem wstpnym dla tych, ktrzy zamierzaj programowa w GNOME. Zawarto tego podrozdziau
jest zaledwie uamkiem wiedzy na ten temat i, jak si okae, klucz do zrozumienia
GNOME/GTK+ ley w przyswojeniu poj oglnych, a nie w szczegach zwizanych
z poszczeglnymi widetami.

Widety
Widet (widget) to termin, ktrym okrela si kady element interfejsu uytkownika.
Nazwa pochodzi z systemu X Window; zostaa ona oryginalnie ukuta w projekcie MIT
Athena. Widetami mog by etykiety (labels), ramki (frames), pola wejciowe (entry
boxes), okna (windows), przyciski (buttons) i wszystko to, co mona wykorzysta jako
element graficzny interfejsu. GTK+ jest obiektowo zorientowanym zestawem narzdzi,
a wszystkie widety w GTK+ s pochodnymi bazowej klasy @ (ta z kolei jest
pochodn obiektu bazowego .=!). Jak wspomniano wczeniej, narzdzia GTK+
s napisane w jzyku C i zawieraj wszechstronny system obiektw i typw zawiadujcy wasnociami klas, dziedziczeniem, definiowaniem typw, przechowywaniem i odzyskiem danych dotyczcych dowolnego obiektu.
Typowy cykl yciowy widetu zawiera pi etapw:

Utworzenie widetu
Widet jest zazwyczaj tworzony za pomoc funkcji @()3111,
ktra zwraca wskanik typu @.
;6995%JH25344J'<

288

Zaawansowane programowanie w systemie Linux


Aby uy  w funkcji specyficznej dla widetu etykiety, takiej jak   ,
naleaoby uy makrodefinicji rzutujcej typ na  7%,%:
6999+%FG9*%'JI33J'<

Peny opis systemu obiektw i typw wraz z przykadami pomocnymi podczas pisania
wasnych widetw mona znale w GTK+/GNOME Application Development
szczegy na kocu tego rozdziau.

Pojemniki
Pojemnik GTK+ to widet, ktry moe fizycznie zawiera inny widet. A
jest przykadem takiego widetu, ktrego celem jest poszerzenie zestawu funkcji dla
jego widetw potomnych, co oznacza, e widety wyprowadzone z A
posiadaj zdolno zawierania innych.
To wanie z tej cechy GTK+ korzysta podczas rozmieszczania widetw na ekranie. Zamiast rozmieszcza je w oknie przy uyciu ustalonego ukadu odniesienia, kady
widet jest dodany do macierzystego pojemnika za pomoc funkcji:
" 699 %F6/#F6H #5 '

Pozycja i rozmiar widetu na ekranie s okrelone przez waciwoci pojemnika. Takie


podejcie jest ogromnie elastyczne, dlatego rozmiary widetw w oknie s odpowiednio
dobrane, niezalenie od rozmiaru okna.

Patrzc na hierarchi obiektw powyej, mona zauway, e widety okna @1


i przycisku ,  znajduj si wrd pochodnych widetu A. Zatem, aby
@1 zawiera widet , , a ,  zawiera % , napiszemy:
F6H #5 5;695 595%FG9H-)ICH9C0R'<
F6H # ;69 95%'<
F6H #;6995%JH2H344J'<
699 %FG9/C)-)% ''<
699 %FG9/C)-)%5 5' '<

@1 i ,  s widetami potomnymi ,, kolejn abstrakcyjn klas

widetw, ktra zostaa zaprojektowana do przechowywania pojedynczego widetu


potomnego. Aby rozmieci je w sposb bardziej zoony, uywa si bezporednich klas
potomnych klasy A, ktre mog zawiera wiele widetw w dowolnym
formacie spord kilku dostpnych.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

289

Paczki (elementy zbiorcze)


Widety o charakterze pojemnikw , i , w zajtej czci okna tworz
odpowiednio poziome (H) wiersze i pionowe (V) kolumny. Kady z nich, bdc swoist
paczk (packing box), moe zawiera wszystkie zwyke widety, w tym take wicej
paczek. Jest to klucz do swobodnego rozmieszczenia widetw w oknach. Pozwala na
podzia prostego okna na czci skadowe w sposb zoony, ale jasno okrelony. Wzgldny rozmiar i odstpy widetw w paczce s nadzorowane przez waciwoci widetw
 i .
Odpowiednie funkcje tworzce obiekt wymagaj podania dwch oglnych waciwoci:
jednorodnoci 8  ustalajcej, czy widetom potomnym przydziela si jednakow ilo miejsca, oraz odstpu ! odlegoci w pikselach pomidzy
przylegajcymi widetami.
F6H #69+95%1 !'
F6H #69"+95%1 !'

Waciwoci odstpu poszczeglnych widetw s okrelone przez dodanie widetu potomnego do  lub :
" 69+9!69%F6*+#+F6H # +! 
! '
" 69+9!69 %F6*+#+F6H # +! 
! '

! doda widet potomny u gry , lub z lewej strony ,,
podczas gdy ! dodaje odpowiednio u dou lub z prawej strony.

Pomidzy paczk i widetami potomnymi zachodz do zoone oddziaywania zmierzajce do ustalenia wzajemnych odstpw. Trzy argumenty przekazane z chwil dodawania nowego widetu potomnego wydaj si atwe do zrozumienia.
Argument

Typ

Opis

+!



Jeli , to widet potomny powiksza si do zapenienia dostpnego


miejsca; w przeciwnym razie pozostaje jego rozmiar domylny.





Jeli , to widet potomny powiksza si do zapenienia


zarezerwowanego miejsca; w przeciwnym razie dodaje wicej
wypenienia (padding) wok siebie.

! 



Odstp w pikselach, ktry ma otacza widet potomny.

Dla jednorodnej paczki parametr GZRCPF nie ma zastosowania.


Warto poeksperymentowa z tymi waciwociami najlepiej za pomoc programu Glade,
ktry omwimy pokrtce w nastpnym rozdziale.

290

Zaawansowane programowanie w systemie Linux

Tabele
W oknach dialogowych (dialog boxes) wykorzystuje si powszechnie wiersze widetw
etykiet i widetw pola wprowadzania tekstu przez uytkownika. Metod utworzenia takiego rozmieszczenia byoby zapakowanie kadej pary napis-pole wprowadzania w ,,
a nastpnie upakowanie utworzonych wierszy w ,. Jednake wyrwnanie kolumn
napisw i pl wprowadzania okazuje si zajciem raczej mczcym, chyba e wszystkie
napisy maj t sam dugo.

Okazuje si, e w tym przypadku atwiej uy widetu z klasy   . Jak sama nazwa
wskazuje, widet z klasy    skada si z tabeli rozmieszczenia (layout table)
z komrkami podzielonymi na wiersze i kolumny, do ktrych widet moe by doczony.
W razie potrzeby mona widety rozcign na wicej ni jeden wiersz lub kolumn.
   wyrwnuje rzdy i kolumny, podnoszc estetyk, nadaje take poszczeglnym
widetom umieszczanym w widetach , i , podobn swobod.
F6H #6995% 5  11 '

Pierwsze dwa argumenty w  1 podaj pocztkow liczb wierszy i kolumn
tabeli, cho i tak tabela powikszy si automatycznie, gdy jaki widet bdzie dodany
poza biece granice wyznaczajce tabel. Jak w przypadku paczek 8  okreli,
czy kada komrka tabeli bdzie zajmowa taki sam obszar.
Dodanie widetu do tabeli wymaga wywoania funkcji  ! , ktrej naley
poda wiersz i kolumn krawdzi bocznych, dwie opcje ! . i wielko
wypenienia wok widetu.
F6H #699%F6#F6H # 
 9 1 9 1
 !95 195
F6C!+!
F6C!4!
 +!  4! '

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

291

Pozycja kadego widetu potomnego w tabeli jest okrelona liniami wierszy i kolumn,
ktre tworz ramk brzegow widetu. Na przykad w tabeli z 3 kolumnami i 2 wierszami znajduj si 4 linie pionowe-kolumnowe (numerowane od 0 do 3) i 3 linie poziome-wierszowe (numerowane od 0 do 2).

Aby umieci widet potomny w pokazanej pozycji, ustawilibymy warto 


! 8
na 1,  ! 8 na 3, a 1 i 81 odpowiednio na 1 i 2.
Argumenty ! . pobieraj jedn lub wicej spord trzech wyszczeglnionych poniej wartoci w celu uzupenienia informacji o pooeniu widetu w obrbie
tabeli. Te wartoci to maski bitowe. Tak wic aby okreli dwie lub wicej jednoczenie, trzeba uy alternatywy bitowej .": na przykad  7B0/C 7$%%.
GtkAttachOptions

Opis

FG9.0)I

Ta sekcja tabeli rozszerza si do zapenienia dostpnej przestrzeni.

FG9-

Widet potomny rozszerzy si do zapenienia przestrzeni zarezerwowanej,


jeli jest uyty wraz z FG9.0)I; bez FG9.0)I nie wywouje adnego efektu.

FG9S-)G

Jeli nie ma wystarczajco duo miejsca dla widetu potomnego i opcja


FG9S-)G jest ustawiona, to tabela wymusi zmniejszenie si tego widetu
potomnego; jeli nie jest ustawiona, widet potomny otrzyma swoje dane
rozmiary, ale moe to spowodowa obcicie na brzegach.

Moglibymy napisa:
;6995% '<
;6995%J46T J'<
 ;6995%J46I5J'<
699%FG9*%'
&
&
FG9-
FG9-
&
&'<

292

Zaawansowane programowanie w systemie Linux


699%FG9*%' 
&
 
FG9-UFG9.0)IUFG9S-)G
FG9-UFG9.0)IUFG9S-)G
&
&'<

i doda sam tabel   do jakiego pojemnika.


Rczne pisanie kodu rozmieszczenia jest niewtpliwie zajciem mudnym i nucym,
zwaszcza dla okien zoonych. W celu zaprojektowania interfejsu naley rozway
uycie konstruktora interfejsw uytkownika (takiego jak Glade). Nie tylko otrzyma si
dokadnie to, co wida (WYSIWYG, What You See Is What You Get), ale te zyskuje si
wicej moliwoci, takich jak choby moliwo dynamicznego adowania wzorw GUI
(GUI designs).

Sygnay
Generowanie odpowiedzi na dziaania uytkownika stanowi integraln cz programowania GUI. Kiedy dzieje si co ciekawego, np. uytkownik klika widet lub wpisuje
co do pola wprowadzania tekstu, wtedy widet ten wyemituje w odpowiedzi sygna
(jak ju wspomniano wyej, sygnay w GTK+ s cakowicie rne od sygnaw UNIX-a
niskiego poziomu). Kady widet potrafi emitowa sygnay charakterystyczne dla swojego typu oraz wszystkie sygnay charakterystyczne dla widetw nadrzdnych wobec
niego w hierarchii.
Sygnay identyfikujemy przez podanie ich nazwy w postaci napisu. Na przykad, kiedy
kliknie si przycisk , , wtedy emituje on sygna <! !< (kliknity). Aby
zareagowa na ten sygna, kojarzymy z nim funkcj zwrotn (callback function), ktra
bdzie wykonana z chwil wyemitowania tego sygnau:
 ;699%FG9C*T/% '
J6 J
FG9-F)9)/% 96 96'
)'<

Tutaj  !! czy funkcj  ! !! ! z sygnaem <! !<
wyemitowanym przez przycisk  . Istnieje opcja przekazania dowolnych danych
uytkownika jako czwartego parametru w postaci . W powyszym przykadzie
nie skorzystalimy z tej opcji i przekazalimy wskanik #%% zamiast tej zmiennej. Funkcja  !! zwraca unikatowy identyfikator (ID) skojarzenia sygnaowego.
Jest on rzadko uywany, ale okazuje si niezbdny do odczenia sygnau od funkcji.
Pierwowzr typowej funkcji zwrotnej wyglda nastpujco:
"  9696%F6* # ! '<

Niektre sygnay wymagaj nieco innej postaci funkcji zwrotnej, co zobaczymy dalej przy
oknach dialogowych GNOME. Zawsze jako pierwszy argument przekazywany jest
wskanik do widetu emitujcego sygna.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

293

Aby odczy sygna, trzeba przekaza obiekt .=! oraz identyfikator (ID) poczenia:
699 %FG9C*T/% ' '<

Ukazanie, aktywno i ukrycie


Pojedynczy widet pojawi si na ekranie po jego wywoaniu przez 1 1 dla
kadego z nich. Wygodniej wywoa 1 1 dla widetu najwyszego
poziomu, co spowoduje rekurencyjne pokazanie wszystkich jego potomnych:
" 695 95%F6H #5 '
" 695 959%F6H #5 '

W celu zdezaktywowania widetu, co przejawia si w pocieniowanym (shaded) czy poszarzaym (gray out, czyli widet zrobiony na szaro) jego wygldzie, naley zgodnie
z terminologi GTK ustawi aktywno (sensitivity) na $%&. Aktywno mona wczy lub wyczy, wywoujc nastpujc funkcj:
" 695 99"%F6H #5 '

Widet moe by rwnie czasowo ukryty za pomoc wywoania funkcji 1 :
" 695 9 %F6H #5 '

Zniszczenie
Zniszczenie niepotrzebnych ju widetw minimalizuje zuycie pamici:
" 695 9 4%F6H #5 '

gtk_init i gtk_main
Inicjalizacja programw GTK+ nastpuje wskutek pojedynczego wywoania funkcji 
, ktre czy si z serwerem X i analizuje specyficzne opcje GTK+ podane w wierszu polecenia. Przekazanie ! i  powoduje usunicie przez  rozpoznanych opcji z  i zmniejszenie odpowiednio liczby !:
69%VV"'<

Po utworzeniu i rozplanowaniu okna podstawowego typowa aplikacja GTK+ przekazuje


sterowanie do ptli obsugi zdarze przez wywoanie funkcji 8, nieprzyjmujcej
adnych argumentw. Podczas dziaania funkcji 8 program oddziaywuje z uytkownikiem jedynie za porednictwem sygnaw i funkcji wywoania zwrotnego dla zdarze, a do chwili wywoania funkcji 8D :
6919W %'<

Przykadowa aplikacja GTK+


Poniej przedstawiona jest bardzo prosta aplikacja wykorzystujca omwione dotychczas zasady:

294

Zaawansowane programowanie w systemie Linux


M#
#5 !! FGX
#M
$ 76M6@8
"
9 96 %F6H # ! '
:
9!%J 56 =SH (YJ'<
>

9 9"%F6H #5 5F 6"4#"! '
:
6919W %'<
 <
>

1%#"Z['
:
F6H #5 5<
F6H #"+<
F6H #<
F6H # <
69%VV"'<
5 5;695 595%FG9H-)ICH9C0R'<
"+;69"+95%&'<
;6995%J! R*+J'<
 ;69 95959%J/6,(J'<
69+9!69%FG9*C.%"+'&'<
69+9!69%FG9*C.%"+' &'<
699 %FG9/C)-)%5 5'"+'<
695 599%FG9H-)ICH%5 5'JJ'<
699%FG9C*T/%5 5'J 9"J
FG9-F)9)/%9 9"'
)'<
699%FG9C*T/% 'J6 J
FG9-F)9)/%9 96 '
)'<
695 959%5 5'<
691%'<
 &<
>

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

295

Plik 6
  dla aplikacji ! ! wyglda nastpujco:
//;
?969!!@
E%//'\6===N\=969!!969!!@

Podstawy GNOME
W tym podrozdziale omwimy niektre wane aspekty GNOME i programowania
w GNOME, uwzgldniajc:
n

widety GNOME,

budow struktur menu i paskw narzdziowych za pomoc GNOME,

okna dialogowe w GNOME.

Jak wspominalimy we wstpie do tego rozdziau, GNOME korzysta z GTK+ na dwa


sposoby. Pierwszy polega na dodawaniu widetw, rozszerzajcych zestaw moliwoci
istniejcych ju widetw GTK+ na przykad 8E jest ulepszonym E.
Sposb drugi to zamiana podprogramw GTK+, sucych do budowania rnych menu,
paskw narzdziowych i okien dialogowych, na zestaw nowych funkcji, ktre s nie
tylko skuteczniejsze, ale i atwiejsze w uyciu.
Wszystkie pliki nagwkowe GNOME, GTK+, GDK itd. s wczane dyrektyw F! :
$ 71@8

gnome_init
Ta funkcja jest analogiczna do  aplikacja musi przekaza krtk wersj swojej
nazwy i numeru wersji (wraz ze zwykymi parametrami z wiersza polece) do 8
 w celu rwnoczesnej inicjacji GNOME i GTK+. W programach GNOME nie trzeba wic wywoywa . Funkcja ta w przyszoci powinna zwraca warto niezerow, jeli wywoanie skoczy si niepowodzeniem. Biece wersje GNOME w razie
niepowodzenia przerywaj dziaanie.
19%#!!9 #!!9"
##"'

Funkcja( 8 nie zmieni ! i  w sposb waciwy dla . Analiza
skadniowa wiersza polece w aplikacjach GNOME powinna by przeprowadzona
przy uyciu 81  .
Biblioteka popt jest wyspecjalizowan bibliotek analizy skadniowej wiersza polece,
ktr omwimy nieco pniej.

296

Zaawansowane programowanie w systemie Linux

GnomeApp
Prawie wszystkie aplikacje GNOME wykorzystuj widet 8 dla swojego gwnego
okna. 8 jest podklas @1 i umoliwia tworzenie prostego menu, paska
narzdziowego i paska stanu. Najwspanialsze jest to, e 8, bez adnych dodatkowych nakadw, zapewnia aplikacjom mnstwo dodatkowych funkcji i moliwoci.
n

Menu i paski narzdziowe mog by odczone i zadokowane w poziomej


i pionowej pozycji na widecie 8. GNOME automatycznie zapisuje
konfiguracj dokowania pomidzy sesjami.

Uytkownicy mog konfigurowa ustawienia globalne okrelajce waciwoci


menu i paskw narzdziowych.

Do utworzenia widetu 8 potrzebne jest: wywoanie do 81, przekazanie


, identycznego jak dla funkcji 8 i napis do umieszczenia w tytule okna.
F6H #19!!95%#!!9 #'

Dodanie menu, paska narzdziowego i paska stanu do ju istniejcego widetu 8


jest jedynie kwesti ustawienia struktur danego menu i paska narzdziowego, utworzenia paska stanu, a nastpnie wywoania:
" 19!!991 %F1!!#!!F6, *#1 '
" 19!!99%F1!!#!!F6#'
" 19!!99 %F1!!#!!F6H # '

Menu i paski narzdziowe


Tworzenie menu i paskw narzdziowych w GNOME polega na zdefiniowaniu kadego
elementu menu czy te paska narzdziowego przy uyciu struktury 8#
:
4!  :
F1--4!<
#<
#<
!1<
! 9 <
!   9 <
F1-0+1!4!!+1!94!<
!!+1!9<
 964
F 6, 4!91 <
F6H #5 <
>F1-<

W rzeczywistoci rzadko pojawia si potrzeba samodzielnego wypenienia parametrw


tej struktury, bo GNOME posiada liczne wstpnie zdefiniowane struktury 8#
.
Mimo to warto zapozna si z jego wntrzem.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

297

n E

jest znacznikiem (marker) odnoszcym si do jednego


z wyszczeglnionych poniej typw 8#
 E. Jego warto okrela
interpretacj czwartego parametru, 8
, w sposb wymieniony poniej.

type

moreinfo interpretowane jako

Opis

F)C,9009-9-,

funkcja wywoania zwrotnego


(callback)

standardowy element menu


oraz paska narzdziowego

F)C,9009-9CFF9-,

funkcja wywoania zwrotnego

element do przeczania (toggle)


lub zaznaczania (check)

F)C,9009-9I-C-,

tablica pl wyboru (tzw.


przyciskw radiowych
radio items) w grupie

grupa przyciskw radiowych

F)C,9009-9*

tablica F1-- tworzca


drzewo podrzdne (subtree)

menu podrzdne (submenu)

F)C,9009-90C

)

separator pomidzy elementami

F)C,9009-9S0

strona pomocy do zaadowania

element Pomocy

F)C,9009-9)IC-)C

)

zakoczenie tablicy F1--

n 

(etykieta) zawiera tekst elementu menu lub paska narzdziowego.

n 

(wskazwka) wskazuje na dodatkowy opis. W przypadku przycisku


wskazwka bdzie wywietlona jako etykietka narzdzia (tooltip), a dla
elementu menu moe pojawi si w pasku stanu. Etykietki narzdzi mog by
dowolnie dugie, aby wyczerpujco opisa funkcj elementu. W kadym razie
nie wolno ograniczy si tylko do powtrzenia tekstu z  .

n 8


jest zalene od typu E, jak pokazano powyej. Jeli zawiera funkcj
wywoania zwrotnego, to wtedy nastpny parametr ...

...  jest przekazany do funkcji wywoania zwrotnego.

n  

jest zarezerwowane do wykorzystania w przeszoci i powinno


by ustawione na #%%.

n 8E

i 8
 okrelaj obrazek bitmap (pixmap), ktry
ma zosta uyty w elemencie menu lub paska narzdziowego. Interpretacja
8
 jest uzaleniona od 8E.

n !! E

i !8 definiuj skrty klawiaturowe, ktre znajduj


zastosowanie dla danego elementu. Pierwszy z tych parametrw moe by
znakiem, takim jak GG, lub wartoci wzit z HE8 . Drugi z tych
parametrw jest mask (podobnie jak /7A. ".%6&7*, nadzorujc
klawisze modyfikujce lub ich kombinacje, ktre mog by uyte z tym skrtem.

298

Zaawansowane programowanie w systemie Linux

pixmap_type

pixmap_info interpretowane jako

Znaczenie

F)C,90090-.,09C/G

Nazwa bitmapy dostarczonej


przez GNOME.

Uyj bitmapy dostarczonej


przez GNOME.

F)C,90090-.,09I

Wskanik do F 60+1!.

Uyj bitmapy specyficznej


dla aplikacji.

F)C,90090-.,09-),

Nazwa pliku z bitmap.

Uyj bitmapy znalezionej


pod nazw pliku 1.

F)C,90090-.,09)C)

)

Brak bitpamy.

n 1

powinien by pozostawiony jako #%%. Przy przekazaniu 8#



do 8!8  GNOME wypeni 1 wskanikiem do faktycznego
widetu dla tego elementu menu czy te paska narzdziowego. Wskanik ten
jest uyty do okrelenia elementu menu lub paska narzdziowego w trakcie
wykonywania programu. Powszechnym przykadem uycia byoby przerobienie
na szaro elementu przez przekazanie widetu do funkcji GTK+ 1
.

Oto konkretny przykad wpisu dla elementu Undo (Cofnij):


F1--  ;:F)C,9009-9-,
)9%J9 J'
)9%J J'
9  96 
)
F)C,90090-.,09I
  9!+1!
B3B
FIG9/C)C9,G><

Makrodefinicja N_ otaczajca napisy wyprowadzane na ekran uatwia


umidzynarodowienie (przekad na inne jzyki); temat ten zostanie
omwiony w rozdziale 28.
Menu i paski narzdziowe budujemy z tablic struktur 8#
, a potem nastpuje
wywoanie odpowiednio do 8!8  lub te do 8! .
" 19!!991 %F1!!#!!F1--# '
" 19!!99%F1!!#!!F1--# '

Mimo e struktury 8#


 zapewniaj pen kontrol nad definicjami menu i paska
narzdzi, to jednak nie zawsze jest to potrzebne czy nawet podane. Wiele aplikacji GUI
przyjmuje menu najwyszego poziomu w stylu File (Plik), Edit (Edycja), View (Widok),
Help (Pomoc), a wikszo tych, ktre nie przyjmuj, powinny. Wewntrz menu najwyszego poziomu jest jeszcze wicej konwencji, okrelajcych pooenie i kolejno
elementw menu. Na przykad New (Nowy), Open (Otwrz) i Exit (Zakocz) s zgodnie
z konwencj umieszczane jako pierwszy, drugi i ostatni element menu File (Plik).

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

299

Majc na uwadze standaryzacj, GNOME udostpnia cay zbir makrodefinicji, ktre


definiuj struktury 8#
 dla powszechnie uywanych elementw menu. Mog
one wstawi etykiet, etykietk narzdzia, bitmap lub klawisz skrtu. Standardowy wystrj menu jest zatem bardzo atwy i szybki do zdefiniowania.
Kade menu najwyszego poziomu na pasku menu skada si z tablicy struktur 8?
#
, a pene jego drzewo tworz definicje menu w poczeniu ze wskanikami do
tych tablic, wczanymi za pomoc makrodefinicji .6#$.&#, ". Definicje te
mona znale w 8 H8??   .

GnomeAppbar
Widet 8 moe opcjonalnie zawiera pasek stanu. Jest to taki pasek, jakie czsto
s uoone wzdu dolnej krawdzi okna i przekazuj informacj o stanie, w jakim znajduje si aplikacja. 8 moe zawiera take pasek postpu (progress bar) pokazujcy graficznie postp czasochonnej operacji. Na przykad Netscape uywa swojego
paska postpu dla oszacowania na bieco zaadowanego ju procentu strony WWW
czy poczty elektronicznej, ktre s wanie w trakcie odbierania z sieci.
Tworzc 8, uywa si zmiennych logicznych (booleowskich) do okrelenia,
czy pasek skada si z paska stanu, paska postpu czy te ich obu. Na implementacj
czeka jeszcze !E (interakcja), ktra w przyszych wersjach GNOME powinna umoliwi lepsze oddziaywanie z uytkownikiem. Do czasu opracowania tej funkcji
zalecane ustawienie to .60"$"A&#&".
F6H #19!!95%9!
9 
F104!"4'

W ten sposb tworzy si widet 8. Aby doda go do okna 8, posuymy si funkcj:
" 19!!99 %F1!!#!!F6H # '

Tekst w pasku stanu jest traktowany na zasadzie stosu. Dodanie tekstu oznacza umieszczenie go na stosie za pomoc:
" 19!!9! %F1!!*!!#+'

Tekst umieszczony na wierzchoku stosu pozostaje widoczny do momentu, kiedy nowy


tekst umiecimy na wierzchoku stosu albo kiedy wierzch stosu zostanie usunity poprzez wywoanie 8. W tym drugim przypadku zobaczymy tekst umieszczony na stosie o jedn warstw niej.
" 19!!9!!%F1!!*#!!# '

Gdyby okazao si, e stos bdzie pusty, to wtedy zostanie pokazany tekst domylny
jest to zwykle pusty napis. Mona zmieni ten napis przy uyciu:
" 19!!99  %F1!!*#!!#  9+'

300

Zaawansowane programowanie w systemie Linux


Cay stos moe by szybko i atwo oczyszczony za pomoc funkcji 8! 
!. Mimo e stos umoliwia rnym czciom aplikacji jednoczesne uywanie paska
stanu bez ryzyka interferencji pomidzy nimi, czsto pojawia si potrzeba pokazania jedynie tymczasowej informacji bez uciekania si do pomocy stosu. Uywajc 8?
 , mona doda tekst przejciowy, ktry pozostaje widoczny do chwili
dodania nowego tekstu albo uzupenienia, oprnienia, wyczyszczenia czy odwieenia
stosu przez wywoanie 8
 .
" 19!!996%F1!!*#!!'
" 19!!99 %F1!!*#!!# '
" 19!!9%F1!!*#!!'

W czasie kiedy wskanik myszy zaznacza elementy menu, GNOME pozwala pokaza
etykietk narzdzia dla menu na pasku stanu kosztem jednego wywoania:
" 19!!991 9%F1!!#!!F1--# '

Struktura 8#
 musiaa by uprzednio utworzona przy uyciu wywoania do jednej z funkcji tworzenia menu, tak aby pole 1u zostao zapenione.

Pasek postpu
Pasek postpu skada si z widetu 0. Zakadajc, e 8, zosta
utworzony z opcjonalnym paskiem postpu, wskanik do 0 moe by zwrcony wraz z
F60#19!!99!%F1#!!'

Wreszcie, co najwaniejsze, mona do widetu 8 doda zawarto za pomoc


" 19!!99%F1!!#!!F6H #'

Jest to rwnowane z uyciem ! z konwencjonalnym 11.

Okna dialogowe
Okna dialogowe stanowi zasadnicz cz kadej aplikacji GUI. Pozwalaj uytkownikowi
na wybr lub wprowadzenie danych, jak rwnie przekazuj mu komunikaty o bdach,
komunikaty oglne czy teksty pomocy. W typowej aplikacji jest wicej okien dialogowych ni okien gwnych. Tak wic prostota programowania dialogw jest zasadniczym
wymogiem stawianym przed nowoczesnym zestawem narzdzi.
Okna dialogowe maj pewne cechy odrniajce je od zwykych okien.
n

Maj zawsze jeden lub wicej przyciskw, ktre sygnalizuj aplikacji


wywoanie lub anulowanie operacji dialogu.

Nie maj zakadki minimalizujcej na ramce dekoracyjnej okna.

Opcjonalnie dialogi mog by modalne, to znaczy zapobiegaj dalszemu


uyciu aplikacji a do chwili zakoczenia dialogu.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

301

Majc na uwadze te cechy wyrniajce, GNOME implementuje dialogi, rozszerzajc


@1 do klasy podstawowej 8/ . To stwarza gotowy szablon dialogu wraz
z rnorodnymi funkcjami. Zatem kreowanie dialogw za pomoc GNOME jest cakowicie ucywilizowan czynnoci.

Jednake historia nie koczy si na 8/ . Istniej jeszcze przecie trzy specjalne
typy dialogw:
n 8 ,
n 80E,,
n 86,.

Dziki nim tworzenie powszechnie stosowanych okien dialogowych jest dla pewnych
celw szybsze i atwiejsze. Co wicej, jako pochodne widetu 8/ , wspdziel
jego moliwoci i pomagaj utrzyma spjno aplikacji GNOME.

Tworzenie widetu GnomeDialog


Aby utworzy widet 8/ , naley wywoa 8 1 i przekaza jako
argumenty tytu okna oraz list przyciskw zakoczon wartoci #%% (do umieszczenia wewntrz okna dialogowego).
F6H #19 95%#@@@'

Lista przyciskw jest list napisw uywanych jako etykiety przyciskw. Zamiast przekazywa prosty napis, znacznie lepszym sposobem jest uycie makrodefinicji GNOME
dla powszechnie stosowanych przyciskw. Podobnie jak w przypadku makrodefinicji
dla menu i paskw narzdziowych, makrodefinicja GNOME dostarcza bitmap w celu
ujednolicenia interfejsu graficznego.
Lista makrodefinicji jest zawarta w 8 H8?! i obejmuje:
n .6& .A7,#

..7,

n .6& .A7,#

.AA%,

302

Zaawansowane programowanie w systemie Linux


n .6& .A7,#

.-&,

n .6& .A7,#

..,

n .6& .A7,#

.A%.&,

n .6& .A7,#

.00%-,

n .6& .A7,#

.%0,

n .6& .A7,#

.B ,

n .6& .A7,#

.0",

n .6& .A7,#

.#0,

n .6& .A7,#

./.@,

n .6& .A7,#

.$. .

Te makrodefinicje s rwnowane z prostymi napisami. Tak wic, jeli tworzymy


przycisk z jednym z tych napisw, to prawdopodobnie otrzymamy i ikon, i tekst.
Utworzenie prostego dialogu z przyciskami OK i Cancel (Anuluj) mogoby wyglda
nastpujco:
F6H # ;19 95%
9%JF1I3!3461C6/J'
F)C,9C/G9*C)9CG
F)C,9C/G9*C)9/)/
)'<

Przyciski wypeniaj dialog od lewej do prawej. Przydzielane s im numery, poczwszy


od 0, co oznacza przycisk pooony najbardziej z lewej.
Widety 8/  s automatycznie tworzone za pomoc widetu , w gwnej
czci okna i dostpne jako element  struktury  . Dodanie widetw do nowo
utworzonego widetu 8/  jest jedynie kwesti ich upakowania w ,:
F6H #;6995%9%J46256  J''<
69+9!69%FG9*C.%F)C,9I-CF% '=8"+''&'<

Pokazywanie widetu GnomeDialog


Utworzony i wypeniony dialog trzeba uaktywni, pokazujc go na ekranie. Mechanizmy wywietlania dialogu i oczekiwania na odpowied uytkownika s bardzo rne dla
dialogw modalnych i niemodalnych. Powinno si zatem ustawi modalno dialogu
przed jego pokazaniem, wywoujc 118 . Domylnie okna i dialogi nie
s modalne.
695 5991 %F6H 5#5 51 4'

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

303

Dialogi niemodalne
Dialogi niemodalne s typem, ktry nie ogranicza uycia innych okien. Poniewa umoliwiaj one normalne dziaanie reszty aplikacji, trzeba do widetu 8/  doczy
funkcje zwrotne, ktre poinformuj o klikniciu przycisku lub zamkniciu dialogu. Gdy
niemodalny widet 8/  zostanie utworzony i wypeniony, mona uy w zwyky sposb 1 1, aby wywietli dialog na ekranie.
695 95% '<

Najlepiej uy wasnych sygnaw widetu 8/ , zamiast czy obsug z poszczeglnymi przyciskami. Poza sygnaami dostarczonymi przez widety nadrzdne widet
8/  emituje dodatkowo dwa sygnay: "clicked" (kliknito) i "close" (zamknito).
To wanie te sygnay naley przyczy dla zapewnienia dialogowi penych moliwoci.
n

Sygna "clicked" jest emitowany, kiedy kliknito przycisk dialogu. Funkcja


wywoania zwrotnego poczona do "clicked" otrzymuje trzy argumenty:
wskanik do dialogu, numer kliknitego przycisku i dane uytkownika. Uwiadomi
sobie naley, e sygna widetu 8/  "clicked" jest rny od sygnau
"clicked" emitowanego przez same przyciski.

Sygna "close" jest emitowany z funkcji 8 ! . Ma domyln


obsug dostarczon przez GNOME. Domylnie niszczy ona dialog, wywoujc
1E, chyba e funkcja 8 !   jest wywoana
z argumentem  okrelonym jako "#.

" 19 99 %F1I# '

W tym przypadku obsuga "close" ukryje dialog za pomoc   . To oznacza,
e nie trzeba bdzie ponownie go tworzy, gdy pojawi si potrzeba ponownego pokazania
tego dialogu. Jest to wietne rozwizanie dla skomplikowanych dialogw lub w takich
sytuacjach, w ktrych trzeba zachowa stan widetu w dialogu pomidzy operacjami
dialogowymi.
Mona rwnie skojarzy "close" z wasn obsug funkcja obsugi mogaby umieci komunikat w rodzaju Czy jeste pewien?, a warto zwrcona przez ni przekae
do GNOME informacj, czy wykona jakie domylne dziaanie.
Wygodnie byoby otrzymywa sygna "close" przy klikniciu przycisku, bo zapobiegoby
to koniecznoci rcznego niszczenia lub ukrycia samego dialogu. Aby widet 8/ 
emitowa zarwno sygna "close", jak i "clicked" przy klikniciu przycisku, naley przekaza funkcji 8 !  warto "#.
" 19 99%F1I# '

Dialogi modalne
Dialogi modalne zapobiegaj interakcji uytkownika z innymi oknami a do chwili zakoczenia dialogu. Uycie dialogu modalnego jest nieuniknione, kiedy np. trzeba zapobiec
dokonywaniu przez uytkownika zmian krytycznych ustawie w czasie trwania dialogu
lub te by skoni uytkownika do podjcia natychmiastowej decyzji. Poniewa reszta

304

Zaawansowane programowanie w systemie Linux


aplikacji jest zamroona w czasie pokazywania dialogu, mona spowodowa, aby, bez
naruszenia zestawu funkcji reszty aplikacji, kod czeka na dane wprowadzone przez
uytkownika. Innymi sowy, nie trzeba uywa wywoa zwrotnych, poniewa dialog
jest wywietlany i czeka na pojawienie si jakiego zdarzenia.
Z tego powodu tworzenie dialogw modalnych jest znacznie prostsze ni kreowanie ich
odpowiednikw niemodalnych. Dlatego te dialogi modalne s bardzo lubiane przez
programistw i wykorzystywane nawet w takich sytuacjach, w ktrych dialog niemodalny
byby bardziej odpowiedni. Do opracowania dialogu modalnego naley, jak zwykle, utworzy i pokaza dialog 8/  oraz wywoa albo 8  , albo 8?
 ! . Obie funkcje pokazuj 8/  i zwracaj numer wcinitego przycisku (lub ?, jeli dialog zosta zamknity przez menedera okien). Wariant  ! 
niszczy dialog podczas zwrotu, jeli nie zosta unicestwiony zwykymi rodkami.
19 9 %F1I# '
19 9 99%F1I# '

Te wywoania tworz automatycznie dialog modalny nie trzeba na wstpie uywa


do tego celu 118 . Musimy pamita, e przyciski s numerowane,
poczwszy od 0, w kolejnoci nadanej im przez 8 1:
F6H # <
 <
 ;19 95%9%J/34!5 33634]J'
F)C,9C/G9*C)9^
F)C,9C/G9*C)9)C
)'<
695 95% '<
 ;19 9 9 9%F)C,9I-CF% ''<
5% '
:
&?9!%JG6^YJ'<
6<
?9!%JG6)YJ'<
6<
  ?9!%J_16 YJ'<
>

GnomeAbout
Przy okazji omawiania widetu 8/  zauwaylimy, e ma on trzy widety potomne,
ktre zapewniaj dalsz specjalizacj. Pierwszym z nich jest 8 , szablon wszdobylskiego dialogu About, ktry podaje informacj o wersji aplikacji, autorach, prawach
autorskich i inne komentarze. Aby zrobi wiksze wraenie, mona doda nawet logo!
F6H 19 95%#
#"
#!4
## 
#11
#'

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

305

Jedynym obowizkowym polem jest tablica napisw(  . Widet 8  zawiera
przycisk OK, ktry po wciniciu niszczy dialog.

Dialog 8  powinien by ustawiony tak, by pojawi si, kiedy element About
w menu Help zosta kliknity.

GnomePropertyBox
Widet 80E, jest waniejszym rozszerzeniem 8/  ni 8 .
Jak sama nazwa sugeruje, jest to szablon okna dialogowego dla funkcji Properties (Waciwoci) lub Preferences (Ustawienia). Zawiera widet  (w celu umoliwienia podziau Preferences na strony) oraz cztery przyciski: OK, Apply, Cancel i Help.

Widet( 80E, pomaga w kodowaniu dialogu, emitujc sygnay "apply"


(zastosuj) i "help" (pomoc). Zamyka te automatycznie dialog, jeli przyciski OK lub
Cancel s wcinite. Utworzenie widetu 80E, wymaga wywoania funkcji
8E1, ktra nie pobiera argumentw. Podobnie jak 8 , tytu
dialogu jest ustawiony domylnie, a ustawienie to odpowiada nazwie aplikacji.
F6H #19!!49+95%'

306

Zaawansowane programowanie w systemie Linux


Przycisk Apply jest nieaktywny to znaczy jest zrobiony na szaro w celu wskazania,
e nie ma znaczcych zmian w ustawieniach. Jeli zawarto jakiego widetu na ktrej
ze stron zostaa zmodyfikowana, wtedy programista jest odpowiedzialny za uaktywnienie przycisku Apply. W tym celu wywouje 8E!  w odpowiedzi
na sygna "changed" (zmieniony), wysany przez widety z 80E,
" 19!!49+9 %F10!4*+#+'

Oczywicie najpierw trzeba doda strony do dialogu, uywajc funkcji(8E


, ktra zwraca numer wanie dodanej strony:
19!!49+9!! 9!%F10!4*+#+
F6H #!F6H #'

Widet( jest tym, ktry ma by dodany do nowej strony dla nadania jej estetycznego
wygldu, nawet jeli zawiera tylko jeden widet. Bdzie to najprawdopodobniej $8
lub widet-pojemnik. Z kolei  jest widetem umieszczanym w zakadce notatnika, ktry pozwala na uycie zarwno bitmapy, jak i tekstu do identyfikacji kadej strony.
80E, emituje sygna "apply", kiedy kliknito albo przycisk Apply, albo OK.
W odpowiedzi kod powinien odczyta stan widetw na stronie i zastosowa odpowiednie ustawienia. Jeli kliknito przycisk Apply, to 80E, ustawia ten
przycisk na nowo jako nieaktywny.

W mao prawdopodobnej sytuacji, gdy zajdzie konieczno rcznego ustawienia stanu


znacznika oczekujcych zmian, mona uy 8, gdzie
przekazanie  jako "# wskazuje, e istotnie dokonane s zmiany, ktre oczekuj
na potwierdzenie:
" 19!!9+99%F10!4*+#+'

Pierwowzr funkcji wywoania zwrotnego dla sygnaw "apply" i "help" powinien wyglda nastpujco:
" !!49+9 %F6H #+!9 1! '<

Do obsugi sygnau "help"  8 zawiera numer aktualnie otwartej strony, pozwalajc
tym samym na wywietlenie pomocy zalenej od kontekstu. Dla sygnau "apply" sytuacja
nie jest rwnie oczywista. W istocie sygna "apply" jest emitowany jednokrotnie dla kadej strony i jeszcze dodatkowo, na koniec, przekazuje  8 jako >. Procedura obsugi
tego sygnau nie musi rozrnia stron. Wystarczy, e zaczeka na emisj strony o numerze >, a nastpnie uaktualni ustawienia odnoszce si do wszystkich stron.

GnomeMessageBox
Ostatnim potomkiem widetu 8/  jest 86, prosta podklasa
dialogu, wywietlajca krtkie komunikaty wraz z odpowiednimi tytuami i ikonami okrelonymi przez typ okna komunikatu. Funkcja tworzca widet jest jedyn funkcj specjaln w 86,. Przy jej wywoaniu podaje si tre, typ i list przyciskw
zakoczon #%%.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

307

F6H #1919+95%#1
#1+94!
@@@'

GNOME udostpnia makrodefinicje dla 8E, ktrych nazwy mwi same


za siebie1:
n .66&&,.B$.,
n .66&&,.B@",
n .66&&,.B"".",
n .66&&,.BI#& .,
n .66&&,.B"A.

Oto przykad typu pytania z zastosowaniem 86,:


F6H # <
!4<
;1919+95%9%J  6]J'
F)C,9,F9*C.9`-C)
F)C,9C/G9*C)9CG
F)C,9C/G9*C)9/)/
)'<
695 95% '<
!4;19 9 %F)C,9I-CF% ''<
%!4;;F)C,9CG'
:
M#3465666CG#M
>

Przykadowa aplikacja GNOME


Zanim przejdziemy dalej, wyprbujmy w dziaaniu to, co ju zostao omwione. Wyprbujmy prost aplikacj GNOME. W tym przykadzie widet 8 zostanie utworzony, zapeniony kilkoma elementami menu i paska narzdziowego oraz skojarzony z odpowiednimi funkcjami zwrotnymi, wskazujcymi kliknity element:
$ 71@8
#!!9 ;JF1+1!J<
#";J&@J<
"
91 9196 %F6H # ! '
:
#+;%#' <
9!%JL1 156 YJ+'<
>
1

Typy komunikatw, odpowiednio: informacja, ostrzeenie, bd, pytanie, oglny przyp. tum.

308

Zaawansowane programowanie w systemie Linux


M#1   #M
F1--1 Z[;:
F)C,--)C9,)9)H9-,%J)5JJSJ91 9196 
J)5J'
F)C,--)C9,)9C0)9-,%91 9196 JC!J'
F)C,--)C9)I
><
F1-- 191 Z[;:
:F)C,9009-9-,J-1CJJ-1CSJ))&&>
:F)C,9009-9-,J-15JJ-15SJ))&&>
F)C,--)C9)I
><
F1--1 Z[;:
F)C,--)C9,)9-9%1 '
F)C,--)C9*%J/ 1J 191 '
F)C,--)C9)I
><

9 9"%F6H #5 5F 6"4#"! '
:
6919W %'<
 <
>
1%#"Z['
:
F6H #5 5<
19%!!9 ""'<
5 5;19!!95%!!9 J5 5J'<
695 599  93%FG9H-)ICH%5 5'
&&
&&'<
699%FG9C*T/%5 5'J 9"J
FG9-F)9)/%9 9"'
)'<
19!!991 %F)C,900%5 5'1 '<
19!!99%F)C,900%5 5' 191 '<
695 95%5 5'<
691%'<
 &<
>

Plik 6
  dla tego przykadu GNOME jest rwnie prosty:
//;
?919!!@
E%//'\1=====1 \=919!!
919!!@

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

309

Drzewo kodu rdowego GNOME


Opracowanie kodu rdowego dla aplikacji GNOME moe wydawa si jednym z bardziej czasochonnych etapw cyklu programowania. Najistotniejsze na tym etapie jest
upewnienie si, czy aplikacja ma pod kadym wzgldem dobrze okrelon struktur. Jeli przewiduje si dystrybucj aplikacji na caym wiecie lub tylko na innym komputerze, niezbdne jest zbudowanie drzewa kodu rdowego aplikacji. Najlepiej to zrobi,
jeszcze zanim napisze si pierwszy wiersz kodu.
Elementy drzewa kodu rdowego GNOME stosuj si do pewnych konwencji,
ktre nieco rni si od konwencji typowych drzew kodu rdowego
oprogramowania GNU. Pomimo e drzewo skada si z wielu plikw
i podkatalogw, to wikszo z nich moe by zwyczajnie przekopiowana
bez zmian z innej aplikacji GNOME. Pozostae pliki tworzy si samodzielnie
przy uyciu szablonw.
1. Pierwszym krokiem w rcznym kreowaniu drzewa kodu rdowego GNOME

jest utworzenie struktury katalogw, skadajcej si z katalogu najwyszego


poziomu (nazwanego stosownie dla danej aplikacji) i podkatalogw !, 8!,
! i 8 (przy zaoeniu, e aplikacja GNOME bdzie rozprowadzana
razem z bitmapami).

310

Zaawansowane programowanie w systemie Linux


2. Nastpnie tworzy si pliki tekstowe # ."&, @&, A.0-, "/6 i A %.

Kady z nich powinien zawiera adekwatn, odpowiednio sformatowan


informacj tego samego rodzaju, co w innych aplikacjach GNOME. Na tym etapie
warto znale i sprawdzi zawarto innych plikw rdowych. Pliki takie
naley wypeni i umieci w katalogu najwyszego poziomu.
3. Teraz trzeba utworzy pusty plik o nazwie 8 , ktry bdzie
wykorzystany z makrodefinicj 6A.$/" przez !
  .
4. W tej chwili napiszemy pliki !
   i !!
 i umiecimy je w katalogu
najwyszego poziomu. Napiszemy take plik 6
  8 dla katalogu

najwyszego poziomu, obejmujcy wykaz kadego katalogu zawierajcego


kod rdowy. Nastpnie trzeba napisa odrbny plik 6
  8 dla kadego
takiego katalogu z osobna.
5. Naley uruchomi plik wykonywalny 3, ktry jest czci pakietu
GNU . To utworzy katalogi  oraz , ktre odgrywaj du rol
przy umidzynarodowieniu. W H0. $%&  naley umieci wykaz plikw

rdowych zawierajcych napisy, ktre powinny by przetumaczone.


6. Naley teraz skopiowa zawarto katalogu 8! oraz plik    z innej

aplikacji GNOME.
7. I wreszcie uruchomi    w celu wywoania  8,  !
,
  , ! ! i  3.

Teraz pora na pliki, ktre trzeba napisa samodzielnie: !


   oraz 6
  8.

configure.in
Plik !
   to szablon uywany przez  !
do tworzenia skryptu konfiguracyjnego (configure script), ktry skada si z makrodefinicji jzyka m4, rozwijanych
przez autoconf do postaci skryptw powoki.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

311

Przykadowy !
   jest jednym ze skryptw uywanych przez nakadk graficzn GNOME dla naszej aplikacji obsugujcej wypoyczalni pyt DVD. Wystpuj
tu tylko trzy specyficzne dla GNOME makrodefinicje: .6 , .6A.60%@"?
& i .6BAA7&, ktre s rozwinite do postaci skryptw powoki na podstawie
plikw zawartych w katalogu 8!.
05 !  !@
/9-)-% @'
,9-)-9C,G% " &@'
,9/C)-F9SI%@'
06 !F11@
,9C/9-)/I%1'
F)C,9-)-
/9-/90C-.
/90CF9//
,90CF9//9I/
/9SI9I/
F)C,9/C,0-9H)-)F
F)C,9.9/S/G
  54 !! !!@
9-)F;JJ
,9F)9F.
0/GF9C/9I-@@
J+E:!+>J;J+)C)J<
/9I-)9)`CI%0/GF9C/9I-
JE:9  9!+>ME:II-),>MJ'

/9I-)9)`CI%0/GF9C/9I-JE:!+>ME:II-),>MJ

 0/GF90-.,09I-@
0/GF90-.,09I-;J\1===  \M!+1!ME:0/GF>J
/9*%0/GF90-.,09I-'
/9C0%Z
,6
1M,6
M,6
M,6
!M,6@
['
n .6

odpowiada za dodanie do skryptu konfiguracyjnego specyficznych


dla GNOME argumentw wiersza polece, wykorzystujc do tego celu
intensywnie program 8?!
.

n .6A.60%@"&

kompilatora.

wcza wszystkie waciwe opcje diagnostyczne

312

Zaawansowane programowanie w systemie Linux


n .6BAA7&

przeprowadza proste testy serwera X11 i sprawdza obecno

biblioteki B8.
Skrypt !
   take tworzy i eksportuje zmienn rodowiskow 0A70B?
60&/" (uywajc do tego makrodefinicji A&#,& ), ktra umoliwia aplikacji odnalezienie kadej zainstalowanej bitmapy.

Makefile.am
Polecenie  8 czyta pliki 6
  8 z katalogu najwyszego poziomu i kadego
z jego podkatalogw zawierajcych pliki rdowe. Przetwarza je nastpnie do postaci
6
  . Naley pamita, e  8 jest wywoywane w trakcie wykonywania
   . Plik 6
  8 najwyszego poziomu moe zawiera jedynie wskanik
&#,/"& do podkatalogw. W pliku 6
  graficznej nakadki GNOME dla aplikacji obsugujcej wypoyczalni pyt DVD, pokazanym niej, znajduje si rwnie wpis dla instalacji pliku  i dwie dodatkowe opcje 8:  ?? ! oraz ? .
$$05 16! ,6@
*I-;!1
.9I-;Y
 " @ 6!
!! ;E%1  'M1M!!M!!
!!9I; " @ 6!
= =?
aE%)C,9-)'
N E% 'M!+1!<Y
E%16 'E%II-'a0/GF90-.,09I-a<Y
!+1!E% 'M!+1!M#< Y
NEE!+1!<Y
E%-)9I'EE!+1!E%II-'a0/GF90-.,09I-a<Y
Y
 Y

=6?
N !+1!<Y
16 E%  'M!+1!<Y
!+1!!+1!M#< Y
NEE!+1!<Y
!N!EE!+1!E%  'M!+1!<Y
Y
 Y


Plik typu  przekazuje do GNOME informacj, jak i gdzie umieci wpis dla
aplikacji w menu GNOME. Plik   wyglda nastpujco:

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

313

ZI6!4[
)1;IRI
/11;IRIF+; " 
-; " @!
1;&
4!;!!

Plik typu (skada si z szeregu par klucz-warto.


n 8

jest nazw aplikacji w tej postaci, w ktrej wystpuje w domylnym


jzyku.

n A88

pojawia si jako etykietka narzdzia.

n !

okrela instrukcj wiersza polece uywanego do uruchomienia programu.

n !

jest ikon do umieszczenia obok wpisu w menu GNOME.

n
n

8 jest wartoci logiczn. Jeli ma warto niezerow, to aplikacja


uruchomi si w oknie terminala.
E powinien by ustawiony na  !.

Plik 6
  8 w katalogu ! dla  informuje  8 o plikach rdowych
i bibliotekach, ktre musz by skompilowane i skonsolidowane.
$$05 16! ,6@
-)/I;Y
=-E%!9 'MY
E%F)C,9-)/II-'
90CF,; " 
" 9C/;Y
@ " @Y
1@Y
 !!@ !!@Y
@@Y
6@6@Y
 " 9 @ " 9 @
" 9III;E%F)C,9-*I-'E%F)C,-9-*'E%-)-*'

Schemat procesu tworzenia i kompilacji drzewa kodu rdowego zawiera rysunek


umieszczony na nastpnej stronie.

Zapis konfiguracji
Wan cech kadej aplikacji GUI jest jej zdolno do zapisu konfiguracji i ustawie
uytkownika. GNOME bardzo uatwia przechowywanie i odzyskiwanie danych wszystkich
powszechnie uywanych typw. Udostpnia w tym celu wszechstronny interfejs API

314

Zaawansowane programowanie w systemie Linux

w przestrzeni nazw 8!


. Dane konfiguracyjne s przechowywane jako pary
klucz-warto w zwykym pliku tekstowym, ktry znajduje si domylnie w katalogu
H 8.

Przechowywanie danych
Zapisywanie danych do pliku konfiguracyjnego wie si z przekazaniem do odpowiedniej funkcji 8!
 cieki E wraz z danymi, ktre maj by zachowane.
cieka E skada si z trzech sekcji oddzielonych znakiem ukonika GHG:
n

nazwa pliku !


 jest zgodnie z konwencj nazw aplikacji,

sekcja, dowolna etykieta opisujca kategori klucza,

i wreszcie sam klucz: H9


 8;H9!;H9E;.

Zatem, aby zapisa warto cakowit do cieki  !H H 8, naley
wywoa 8!
, a potem 8!
E!, by faktycznie zapisa
dane na dysku.
" ; <
1999%JM!!MM 1J" '<
1994%'<

Dla innych typw danych istniej podobne funkcje:


" 1999%#!#" '
" 1999%#!  " '
" 1999%#!" '
" 1999%#!" '
" 1999 9%#!
#" '
" 1999"%#!
#"Z['

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

315

Istnieje te rwnowany zestaw funkcji z nazwami rozpoczynajcymi si od 8


!
, zapisujcych dane w katalogu JH 8. Ten katalog
powinien by dostpny do odczytu tylko dla uytkownika. Tak wic funkcje 8!?

 mog by uyte do zapisu danych poufnych, takich jak np. hasa.

Odczyt zachowanych danych


Zachowane dane moemy wygodnie odebra w postaci wartoci zwracanych funkcji
8!
:
#1999%#!'
  1999%#!'
1999%#!'
1999%#!'
#1999 9%#!'
" 1999"%#!#!###"!'

atwo wic odzyska uprzednio zachowan liczb cakowit  za pomoc:


9!%JC !5 O31L YJ
1999%JM!!MM 1J''<

co daje:
C !5 O31

Jeli plik konfiguracyjny nie zosta utworzony lub klucz jeszcze nie istnieje, to funkcje
8!
 zwrc +, #%% lub $%&, zalenie od typu. Doczajc 5
  do
cieki, mona dostarczy warto domyln, ktra bdzie zwrcona, jeli klucz nie zostanie znaleziony. To rwnie wykluczy moliwo zwrcenia przez funkcj 8
!
 wskanika #%%.
#1
1;1999%JM!!MM;I 9+J'<
9!%J_54 LYJ1'<
9%1'<

Funkcja 8?!
 udostpnia funkcje 8!
  
 oraz 8!


, dziki ktrym unika si podawania penej cieki przy kadym wywoaniu.
Poza tym, meneder sesji moe przekaza prefiks (przedrostek) do odpowiedniego
pliku, aby zachowa dane konfiguracyjne pomidzy sesjami opiszemy to w nastpnym podrozdziale.
199! 9!+%JM!!MJ'<
1999%J 1; J'<
199!!9!+%'<

Zarzdzanie sesj
Zarzdzanie sesj to proces zapisu stanu pulpitu pod koniec sesji i jego odtworzenie na
pocztku nowej sesji.

316

Zaawansowane programowanie w systemie Linux


Stan pulpitu odnosi si do aktualnie otwartych aplikacji, pozycji i rozmiaru ich
okien, otwartych dokumentw itd., jak rwnie do komponentw pulpitu, takich
jak np. pozycja panelu.
Odpowiedzialnoci za zapewnienie poprawnej wsppracy z menederem sesji obarczony jest programista, ktry, poproszony, powinien zapisa wystarczajc informacj
o stanie utworzonej przez siebie aplikacji tak, aby umoliwi innym jej ponowne uruchomienie (lub sklonowanie) w tym samym stanie.
Meneder sesji GNOME, 8?, uywa specyfikacji zarzdzania sesj X do
zapewnienia kompatybilnoci z innymi rodowiskami pulpitowymi, takimi jak CDE i KDE.
Meneder 8? komunikuje si z aplikacjami GNOME za pomoc nastpujcych sygnaw:
n

"save_yourself" (zapisz si2) emitowany, kiedy aplikacja musi zachowa swj


stan biecy,

"die" (gi) emitowany, kiedy aplikacja powinna natychmiast si zakoczy.


Cho GNOME generuje sygnay GTK w obrbie aplikacji, te, uyte przez
menedera sesji, nie s sygnaami GTK.

Ilo informacji, jak aplikacja powinna zachowa pomidzy sesjami, bdzie zalee od
typu aplikacji. Edytor tekstu np. mgby zapisa aktualnie otwarty dokument, pozycj
kursora, stos zdarze cofnij-powtrz itd., itd., podczas gdy jaki may program narzdziowy mgby nic nie zachowywa. W pewnych sytuacjach, takich jak np. program
z baz danych chronion hasem, zapis stanu moe mie konsekwencje dotyczce bezpieczestwa.
W GNOME uytkownik musi zazwyczaj sam wyranie zayczy sobie, aby sesja zostaa
zachowana za pomoc zaznaczenia przycisku przeczania w oknie wylogowania.

GnomeClient
W celu poczenia sygnaw z 8?!  najpierw naley przechwyci wskanik do
obiektu klienta nadrzdnego, a nastpnie zwyczajnie przyczy funkcj wywoania
zwrotnego.
F1/#;1919%'<
699%FG9C*T/%'J"94 J
FG9-F)9)/%99"'"Z&['<
699%FG9C*T/%'J J
FG9-F)9)/%99 ')'<

Save yourself w jzyku angielskim oznacza raczej ratuj si wic pod koniec pracy
aplikacja Gnome albo dostaje od menedera sesji szans ratunku, bd te jest przez niego
bezlitonie likwidowana.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

317

W funkcji wywoania zwrotnego E 


aplikacja musi zachowa odpowiedni
informacj do ponownego uruchomienia w nastpnej sesji. Istniej dwie standardowe
metody zachowania danych.

Argumenty wiersza polece


Argumenty potrzebne do uruchomienia aplikacji w danym stanie mog by przekazane do 8?, o ile jest to niewielka ilo informacji dajca si zamkn w ramach wiersza polece.
Poniej znajduje si przykad, w ktrym dwa parametry, ?? 8 (nazwa uytkownika) i >?1 (haso) wraz z ich biecymi wartociami,  i 1, s przekazane
do 8? w tablicy . Przy rozpoczciu nastpnej sesji 8? uruchomi ponownie aplikacj, przekazujc >? 8( ( >?1( 1 jako argumenty. Aplikacja powinna wtedy podj odpowiednie dziaanie: w tym przypadku zapewne
otworzy interfejs GUI wraz z charakterystycznymi dla tej aplikacji nazw uytkownika
i hasem, wprowadzonymi uprzednio.

99"%F1/#!F1"4"94
9  5F1-4949
!9 '
:
##"<
 <
%(%";1%3%#'# '':
!%J1%' J'<
+%'<
>
11%"&%3%#'# ''<
"Z&[;9 <
;<
-% '
:
"Z[;Jb= 1J<
"Z [; 
"Z
[;Jb=!5 J<
"Z [;!5 <
;K<
>
1999911 %"'<
1999911 %"'<
 <
>

318

Zaawansowane programowanie w systemie Linux

API gnome-config
Uycie argumentw wiersza polece do przechowania informacji pomidzy sesjami ma
wtedy tylko praktyczne zastosowanie, kiedy ilo informacji jest niewielka. Przy wikszej
iloci wykorzystuje si alternatywnie API 8?!
, nakazujc 8? dostarczenie odpowiedniego prefiksu. Odzyskanie informacji przy ponownym uruchomieniu nie
wymaga analizy skadniowej argumentw wiersza polece. Sprbujmy wic.
Do przechwycenia prefiksu trzeba uy 8! !



"94 %F1/#!F1"4"94
9  5F1-494
9!9 '
:
#Z [;ZJ1JJ=J))[<
199! 9!+%19999!+%''<
1999%JM 1J '<
1999%JM!5 J!5 '<
199!!9!+%'<
Z [;19999!
%19999!+%''<
1999  911 %
'<
 <
>

Uywajc 8! !!88, usuwa si kad informacj zachowan


jako cz sesji, ktra bya w toku, kiedy polecenie usunicia zostao wydane.
Funkcja zwrotna dla sygnau "die" jest o wiele prostsze celem jest schludne zakoczenie sesji.

99 %F1/#!9 '
:
6919W <
 <
>

Podczas rozpoczcia nowej sesji aplikacje GNOME wznowi si bez kopotw automatycznie, jeli dwa powysze sygnay bd poprawnie obsugiwane. Wyczerpujce materiay rdowe dotyczce 8? mona odnale w plikach ?8?
8  oraz 8?!  , bdcych czci bibliotek GNOME. Pliki zawieraj informacje na temat wsppracy z uytkownikiem w czasie zachowywania sesji i o sposobach unikania warunku wycigu3 (race condition) podczas uruchamiania sesji z uyciem
poziomw priorytetu.
3

Czsto spotykany bd programisty, dokadniej opisany w rozdziale 12 przyp. red.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

319

Analiza skadniowa wiersza polece z uyciem popt


Rozsdn metod analizy skadniowej opcji wiersza polece przekazanych do aplikacji
GNOME jest uycie biblioteki popt. Domylnie obsuguje ona wiele opcji GNOME
i GTK+. Indywidualnie dostosowane opcje mona doda, uywajc tablic popt, ktre skadaj si z tablicy struktur ..
Analiza skadniowa  i ! za pomoc popt jest zwizana z zastpieniem 8
 przez 81  :
19959!!9%#!!9 
#!!9"

##"
 !!C!#!

!!/+# 9+'

, , ! i  maj identyczne znaczenie jak ich odpowiedniki
w 8. Tablica struktur . jest zakoczona pust opcj (o wszystkich
elementach rwnych + lub #%%). Kady element wyszczeglnia nazw i waciwoci argumentu wiersza polece. Tablica . jest zdefiniowana w sposb nastpujcy:
 !!C!:
#)1<
)1<
-<
" #<
"<
# !<
#I!<
><

Pierwszymi dwoma elementami s duga i krtka nazwa opcji, dajce uytkownikowi


jednoczenie skrtow i bardziej opisow nazw. Kolejny element 
 okrela typ
opcji i moe mie posta jednej z siedmiu makrodefinicji.
argInfo

Opis

0C09F9)C)

Opcja jest zwykym przecznikiem, takim jak N=! i nie pobiera argumentu.

0C09F9-)F

Opcja przyjmuje warto bdc napisem, tak jak N= 1;< 32<.

0C09F9-)

Opcja przyjmuje warto typu .

0C09F9C)F

Opcja przyjmuje warto typu .

0C09F9-)/I9*

To nie jest opcja, ale wskanik do innej tablicy.

0C09F9/*/G

Okrela, e wszystkie opcje w tablicy !! maj by obsugiwane przez


funkcj zwrotn; opcja ta, jeli jest uyta, powinna by umieszczona na
pocztku tablicy.

0C09F9-)9IC,-)

Wskazuje (o ile jest okrelona) jzyk przekadu tekstu na ekranie.

320

Zaawansowane programowanie w systemie Linux


Znaczenie  zaley od typu 
.
Dla 0.0 ".  ustawia  tak, by wskazywa zmienn booleowsk,
stwierdzajc tym samym obecno lub nieobecno tej opcji w wierszu polece.
Dla 0.0 "& ", 0.0 " i 0.0 "%.(  powinien wskazywa na zmienn o tym samym typie, co typ argumentu. Nastpnie  wypenia wskanik argumentem przekazanym w wierszu polece.
Dla 0.0 "A%#/ ,%  jest wskanikiem do tablicy . niszego
rzdu, ktra ma zosta wczona.
Dla 0.0 "A%%,A7 i 0.0 " %/.6  powinien by wskanikiem do
funkcji wywoania zwrotnego i napisu okrelajcego domen przekadu.
Pole  jest identyfikatorem opcji, ktry moe si przyda w funkcji zwrotnej,
z reguy jednak nie jest uywany i pozostawia si go z wartoci +.
Ostatnimi elementami struktury . s ! i /!. Zawieraj one opis
opcji uywany podczas przetwarzania opcji ??  , ktr domylnie obsuguje ;
! zawiera opis opcji, a /! jest przykadow wartoci. Dla opcji okrelajcych nazw uytkownika i haso, tablica . wygldaaby tak:
 !!C!!Z[;:
:
J 1J
B B
0C09F9-)F
V 
&
)9%J!4 1J'
)9%J),J'
>
:
J!5 J
B!B
0C09F9-)F
V!5 
&
)9%J!4!5 J'
)9%J0HCIJ'
>
:
)
BY&B
)
&
)
&
)
)
>
><

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

321

Wydruk opcji ??   bdzie wyglda tak:


EFXFUVQTGJGNR
? " ZC0-C)@@@[
F)C,C!
== = 
=== 
==!6;SC),?0C
=="
S!!
=]==!
== 
FG!
== 6=  ;F
== 6==  ;F
== !4;I-0^
==4
===+1
==1;),
==;/
==+ 9;SC
==+ 9!;0C
==+1=! ;^
==+1= ;^
==6=  ;F
==6==  ;F
====5
==6=1 ;,CI

I  " 


  " 
S?!5  " 
 

5!1
I!4 1
F 6  
F 6   
. !4 
,6.4 
IB . 114+
011  45 51
01  45 51

F6X  
F6X   
,65
  F61 

F)C,F-!
== == 
11!
==1== ;-I
==1==!+;0-.
==1= 
" !
= == 1;),
=!==!5 ;0HCI
E

!411-I
!4!+"  
I1
!4 1
!4!5

Na dole wydruku pojawia si opis niestandardowych opcji okrelajcych nazw uytkownika ( 8) i haso (1). Wikszo z pozostaych opcji jest wsplna dla
wszystkich aplikacji GNOME.
Na koniec wracamy do pozostaych dwch parametrw 81  .
I tylko jeden z nich,  !, jest naprawd interesujcy. Parametr
 mona
zignorowa, bo nie jest przydatny w aplikacjach GNOME.
Parametr( ! dostarcza wskanika do biecego kontekstu, ktry umoliwia analiz skadniow pozostaych argumentw wiersza polece to znaczy argumentw niezwizanych z adn opcj, takich jak nazwy plikw, bibliotek itd. W celu przechwycenia

322

Zaawansowane programowanie w systemie Linux


tablicy argumentw, zakoczonej przez #%%, trzeba jedynie wywoa  w biecym kontekcie. Nie naley zapomnie o uwolnieniu kontekstu za pomoc $?
A po zakoczeniu pracy.
!!/++<
<
##<
19959!!9%00R-C)"!&V+'<
;!!F%+'<
%(;)'
:
5%Z[(;)'
:XX<
>
>
!!/+%+'<

Materiay dodatkowe
Rosnca popularno GNOME zapewnia powikszanie zasobw wysokiej jakoci dokumentacji, wykadw wprowadzajcych, zestaww FAQ (zawierajcych pytania i odpowiedzi dotyczce GNOME), przewodnikw dla pocztkujcych zarwno w wersji
dostpnej w sieco, jak i w postaci drukowanej.
n

Najlepszym miejscem szukania nowoci i uzyskiwania informacji jest strona


gwna projektu GNOME http://www.gnome.org/. Warto rwnie sprawdzi
stron programistw http://developer.gnome.org/. Mona tam znale wszelkie
rodzaje czy do dokumentacji, wykaz bibliografii do API oraz map
oprogramowania GNOME/GTK+ wraz z czami do najbardziej
popularnych aplikacji.

Nie naley zapomina, e pliki nagwkowe GNOME/GTK+ zawieraj sporo


uytecznych informacji. Podstawow zasad jest sprawdzanie kodu rdowego
w razie jakichkolwiek wtpliwoci.

Istniej rwnie ksiki powicone GNOME/GTK+, chocia wikszo podejmuje


temat na poziomie dla pocztkujcych. Dwie godne polecenia pozycje to:
n

Peter Wright: Beginning GTK+/GNOME, Wrox Press (ISBN 1-861003-81-1).


Ksika podaje wyczerpujce wprowadzenie w wiat GTK+ i GNOME.

Havoc Pennington: GTK+/GNOME Application Development, New Riders


(ISBN 0-7357-0078-8), najbardziej zaawansowana ksika dostpna na ten
temat. To ostatnie sowo w programowaniu GNOME, napisane przez rdzennego
hakera GNOME. Ksika ta jest wydana na licencji GPL (General Public
Licence) i mona pobra jej tekst za darmo z http://www.gnome.org/.

Rozdzia 8. n Programowanie graficznych interfejsw uytkownika (GUI) ...

323

Podsumowanie
W tym rozdziale zostay omwione najpopularniejsze zagadnienia programowania GNOME/GTK+. Najpierw opisalimy bibliotek glib i peny zestaw przenonych typw
zmiennych, makrodefinicji, funkcji do obsugi napisw i przydziau pamici oraz obsugi przechowywania list.
Nastpnie, podczas omawiania GTK+, wprowadzono pojcie widetw, opisano uycie pojemnikw i sygnaw obsugujcych proste i sprawne budowanie interfejsw.
Temat zakoczono krtkim, ale uytecznym przykadem.
W dalszej czci opisano GNOME, omawiajc podstawowe funkcje i widety tej biblioteki oraz ich zastosowanie w budowie menu, paskw narzdziowych i okien dialogowych. Na zakoczenie ukazano budow drzewa kodu rdowego GNOME, zapis konfiguracji i zarzdzanie sesj.

You might also like