Professional Documents
Culture Documents
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
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
101
Spis treci
135
Rozdzia 5. MySQL
175
209
237
275
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
325
381
423
Testowanie wymaga..............................................................................................423
Architektura aplikacji .........................................................................................424
Etapy testowania...............................................................................................425
Spis treci
463
10
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
Rozdzia 14. Interfejs GUI dla wypoyczalni pyt DVD implementacja w KDE i Qt
545
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
623
Spis treci
13
661
14
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
805
16
843
Spis treci
17
879
903
18
939
979
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
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
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
1085
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
1149
22
1183
1191
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
276
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
podstawy GNOME,
zapis konfiguracji,
zarzdzanie sesj,
glib,
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
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+.
279
makrodefinicje,
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
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
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
$ %&'.
$ %('.
)
$ )%%" #'&'.
*%+'
,-)%'
,.%'
/,0%+12345634'
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.
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 '<
>
>
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
282
%
! 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 %'<
>
283
Funkcja !
usuwa wiodce spacje w napisie, a !
8 usuwa spacje kocowe.
#9
%#'
#91!%#'
284
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'
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;)<
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
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'<
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 <
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#! '
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
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 '
289
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
+!
!
290
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! '
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).
Opis
FG9.0)I
FG9-
FG9S-)G
Moglibymy napisa:
;6995%'<
;6995%J46T J'<
;6995%J46I5J'<
699%FG9*%'
&
&
FG9-
FG9-
&
&'<
292
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.
293
Aby odczy sygna, trzeba przekaza obiekt .=! oraz identyfikator (ID) poczenia:
699 %FG9C*T/%
' '<
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"'<
294
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,
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
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
297
n E
type
Opis
F)C,9009-9-,
F)C,9009-9CFF9-,
F)C,9009-9I-C-,
F)C,9009-9*
F)C,9009-90C
)
F)C,9009-9S0
element Pomocy
F)C,9009-9)IC-)C
)
n
n
n 8
jest zalene od typu E, jak pokazano powyej. Jeli zawiera funkcj
wywoania zwrotnego, to wtedy nastpny parametr ...
n
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
298
pixmap_type
Znaczenie
F)C,90090-.,09C/G
F)C,90090-.,09I
Wskanik do F 60+1!.
F)C,90090-.,09-),
F)C,90090-.,09)C)
)
Brak bitpamy.
n 1
299
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!!*!!#+'
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
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#!!'
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
301
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.
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
.-&,
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,#
.$. .
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
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
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
#'
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.
306
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.
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 #%%.
307
F6H #1919+95%#1
#1+94!
@@@'
Typy komunikatw, odpowiednio: informacja, ostrzeenie, bd, pytanie, oglny przyp. tum.
308
Plik 6
dla tego przykadu GNOME jest rwnie prosty:
//;
?919!!@
E%//'\1=====1
\=919!!
919!!@
309
310
aplikacji GNOME.
7. I wreszcie uruchomi
w celu wywoania 8, !
,
, !! i 3.
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.
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
n .6A.60%@"&
kompilatora.
312
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:
313
ZI6!4[
)1;IRI
/11;IRIF+; "
-; " @!
1;&
4!;!!
n A88
n !
n !
n
n
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%-)-*'
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
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
Zatem, aby zapisa warto cakowit do cieki !HH 8, naley
wywoa 8!
, a potem 8!
E!, by faktycznie zapisa
dane na dysku.
"
;<
1999%JM!!MM
1J"
'<
1994%'<
315
mog by uyte do zapisu danych poufnych, takich jak np. hasa.
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
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.
317
318
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 %
'<
<
>
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
319
, , ! 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!<
><
Opis
0C09F9)C)
Opcja jest zwykym przecznikiem, takim jak N=! i nie pobiera argumentu.
0C09F9-)F
0C09F9-)
0C09F9C)F
0C09F9-)/I9*
0C09F9/*/G
0C09F9-)9IC,-)
320
321
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
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
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.