MySQL jest szybkim, przenośny i -- co najważniejsze -- darmowym systemem bazodanowym, który zdobył ogromną popularność w zastosowaniach internetowych. Książka "MySQL. Budowanie interfejsów użytkownika." pokaże Ci jak używać tej bazy także poza Internetem. Nauczysz się z niej budowania atrakcyjnych interfejsów użytkownika współpracujących z tą bazą. W tym celu wykorzystana zostanie biblioteka GTK+.
Książka jest przeznaczona głównie dla programistów, którzy rozważają wykorzystanie Linuksa w tworzonych przez siebie rozwiązaniach, dla osób posiadających pewne doświadczenie w tworzeniu systemów opartych na architekturze klient-serwer (np. za pomocą Visual Basica i SQL Server). Aby w pełni skorzystać z informacji zawartych w książce, wystarczy znać język C i podstawy programowania baz danych.
* Poznasz mocne strony i zalety bazy MySQL
* Nauczysz się tworzyć programy w systemie Linuks, a następnie, korzystając z ich kodu źródłowego, kompilować je w systemie Windows.
* Dowiesz się, w jaki sposób można instalować programy korzystając ze skryptów lub pakietów RPM (RedHat Pakage Manager).
* Nauczysz się korzystać z interfejsu języka C dla MySQL w aplikacjach, w których użyto bibliotekę GTK+.
* Poznasz sposoby wyświetlania danych pochodzących z MySQL w obiektach GTK+.
* Będziesz w stanie utworzyć (w języku C) aplikacje, które wyglądem i zachowaniem przypominają programy Windowsowe
* Utworzysz aplikacje, które będą dynamicznie tworzyć graficzny interfejs użytkownika, dzięki czemu będziesz mógł zmienić wygląd interfejsu bez konieczności rekompilacji kodu źródłowego
* Prześledzisz krok po kroku proces powstawania kompletnej aplikacji korzystającej z MySQL.
"Do napisania niniejszej książki skłonił mnie brak podobnej pozycji, opisującej tworzenie aplikacji „korporacyjnych” za pomocą integracji GTK+ i MySQL. Jeśli jesteś programistą lub pracujesz w firmie, w której rozważa się wykorzystanie systemu Linuks celem zmniejszenia kosztów działalności -- ta książka jest przeznaczona właśnie dla Ciebie." -- Matt Stucky.
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI MySQL. Budowanie
interfejsów u¿ytkownika.
KATALOG KSI¥¯EK Vademecum profesjonalisty
KATALOG ONLINE Autor: Matthew Stucky
T³umaczenie: Tomasz Miszkiel
ZAMÓW DRUKOWANY KATALOG ISBN: 83-7197-885-5
Tytu³ orygina³u: MySQL Building User Interfaces
Format: B5, stron: 582
TWÓJ KOSZYK Przyk³ady na ftp: 1098 kB
DODAJ DO KOSZYKA
MySQL jest szybkim, przeno ny i — co najwa¿niejsze — darmowym systemem
bazodanowym, który zdoby³ ogromn¹ popularno æ w zastosowaniach internetowych.
CENNIK I INFORMACJE Ksi¹¿ka „MySQL. Budowanie interfejsów u¿ytkownika.” poka¿e Ci jak u¿ywaæ tej bazy
tak¿e poza Internetem. Nauczysz siê z niej budowania atrakcyjnych interfejsów
ZAMÓW INFORMACJE u¿ytkownika wspó³pracuj¹cych z t¹ baz¹. W tym celu wykorzystana zostanie
O NOWO CIACH biblioteka GTK+.
Ksi¹¿ka jest przeznaczona g³ównie dla programistów, którzy rozwa¿aj¹ wykorzystanie
ZAMÓW CENNIK Linuksa w tworzonych przez siebie rozwi¹zaniach, dla osób posiadaj¹cych pewne
do wiadczenie w tworzeniu systemów opartych na architekturze klient-serwer (np. za
pomoc¹ Visual Basica i SQL Server). Aby w pe³ni skorzystaæ z informacji zawartych
CZYTELNIA w ksi¹¿ce, wystarczy znaæ jêzyk C i podstawy programowania baz danych.
• Poznasz mocne strony i zalety bazy MySQL
FRAGMENTY KSI¥¯EK ONLINE • Nauczysz siê tworzyæ programy w systemie Linuks, a nastêpnie, korzystaj¹c z ich
kodu ród³owego, kompilowaæ je w systemie Windows.
• Dowiesz siê, w jaki sposób mo¿na instalowaæ programy korzystaj¹c ze skryptów
lub pakietów RPM (RedHat Pakage Manager).
• Nauczysz siê korzystaæ z interfejsu jêzyka C dla MySQL w aplikacjach, w których
u¿yto bibliotekê GTK+.
• Poznasz sposoby wy wietlania danych pochodz¹cych z MySQL
w obiektach GTK+.
• Bêdziesz w stanie utworzyæ (w jêzyku C) aplikacje, które wygl¹dem
i zachowaniem przypominaj¹ programy Windowsowe
• Utworzysz aplikacje, które bêd¹ dynamicznie tworzyæ graficzny interfejs
Wydawnictwo Helion u¿ytkownika, dziêki czemu bêdziesz móg³ zmieniæ wygl¹d interfejsu bez
ul. Chopina 6 konieczno ci rekompilacji kodu ród³owego
44-100 Gliwice • Prze ledzisz krok po kroku proces powstawania kompletnej aplikacji korzystaj¹cej
tel. (32)230-98-63 z MySQL.
e-mail: helion@helion.pl
2. 5RKU VTG EK
1 #WVQTG
1 4GEGPGPVCEJ VGEJPKEP[EJ
9RTQYCFGPKG
Dla kogo przeznaczona jest ta ksią ka? ........................................................................ 12
Układ ksią ki ............................................................................................................. 12
Konwencje przyjęte w ksią ce..................................................................................... 13
%ú è + 5[DMKG YRTQYCFGPKG
4QFKC /[53. FNC CFOKPKUVTCVQTÎY K W [VMQYPKMÎY #EEGUU K 53. 5GTXGT
Dlaczego właśnie MySQL? ......................................................................................... 17
Licencje .................................................................................................................... 18
Porównanie typów danych MySQL
z typami dostępnymi w Access 2000 i SQL Server 7 .................................................. 19
Czego brakuje w MySQL?.......................................................................................... 21
MySQL, MYSQL i mysql — trzy podobne słowa, trzy ró ne znaczenia.......................... 27
Tylko dla u ytkowników programu Access: demony i usługi.......................................... 29
Skąd pobrać pakiet instalacyjny MySQL?..................................................................... 30
Decyzja dotycząca metody instalacji — wszystkie za i przeciw ...................................... 31
Pliki potrzebne do instalacji RPM................................................................................ 33
Instalacja ................................................................................................................... 34
Pierwsze spotkanie z MySQL: tworzenie, wykorzystywanie i usuwanie bazy danych ....... 38
Niestandardowe, unikatowe konstrukcje SQL wykorzystywane w MySQL
(rozszerzenie standardu ANSI SQL92) ...................................................................... 40
Programy u ytkowe w MySQL ................................................................................... 45
Interfejs API języka C dla MySQL .............................................................................. 53
4QFKC )6-
FNC RTQITCOKUVÎY MQT[UVCLæE[EJ 8KUWCN $CUKE
Dlaczego powinniśmy korzystać z GTK+? ................................................................... 60
Gdzie zdobyć GTK+ i jak dokonać jego instalacji?........................................................ 61
Licencje .................................................................................................................... 61
Ogólny opis biblioteki GTK+...................................................................................... 63
Pojemniki GTK+ jako odpowiedniki kontrolek zmieniających rozmiary.......................... 71
Podstawowe widgety w programie ............................................................................... 73
4QFKC 9KúEGL YKFIGVÎY )6-
Widget GtkCombo ..................................................................................................... 95
GtkProgressBar i GtkStatusBar ................................................................................... 99
GtkFrame i GtkAspectFrame..................................................................................... 106
Okna dialogowe i informacyjne, czyli obiekty GtkDialog, GtkFileSelection,
GtkColorSelectionDialog i GtkFontSelectionDialog ................................................. 110
Systemy menu: obiekty menu, „fabryka elementów” i elementy menu kontekstowego.... 117
3. 6 MySQL. Budowanie interfejsów u ytkownika. Vademecum profesjonalisty
4QFKC CCYCPUQYCPG QDKGMV[ )6-
GtkTable ................................................................................................................. 127
GtkTree i GtkCTree ................................................................................................. 132
GtkFixed ................................................................................................................. 137
GtkLayout ............................................................................................................... 140
GtkScrolledWindow ................................................................................................. 142
GtkNotebook ........................................................................................................... 144
GtkPaned ................................................................................................................ 147
4QFKC )NCFG FNC RTQITCOKUVÎY MQT[UVCLæE[EJ 8KUWCN $CUKE
Środowisko Glade .................................................................................................... 151
Pierwsze spotkanie z Glade: aplikacja WitajSwiecie .................................................... 153
Szczegółowa analiza wybranych plików projektu WitajSwiecie.................................... 162
Glade i widgety........................................................................................................ 170
Tworzenie projektu: trzeba poznać hierarchię obiektów ............................................... 173
Komunikacja pomiędzy oknami w projekcie utworzonym w Glade............................... 174
Zmienne o zasięgu globalnym a poprawne pisanie programów ..................................... 180
%ú è ++ 2TCYFKYG CRNKMCELG
4QFKC 2TQLGMVQYCPKG K CUCFC FKC CPKC
CRNKMCELK RT[LúEKC COÎYKGPKC
Projekt aplikacji ....................................................................................................... 186
Interfejs u ytkownika ............................................................................................... 189
Tworzenie bazy danych ............................................................................................ 193
Wdro enie aplikacji.................................................................................................. 195
Modernizacja aplikacji.............................................................................................. 199
4QFKC 7VYQTGPKG CRNKMCELK FQ QDU WIK COÎYKG FNC 5'5+
Tworzenie interfejsu u ytkownika za pomocą Glade ................................................... 202
Funkcje aplikacji ...................................................................................................... 214
Połączenie interfejsu i funkcji wykonujących poszczególne zadania programu............... 248
Kompilacja programu ............................................................................................... 259
Uwagi dotyczące utworzonego programu ................................................................... 259
4QFKC #RNKMCELC 9[PCECPKG RTQYKLK RTQLGMV K CPCNKC
Przedstawienie problemu .......................................................................................... 264
Interfejs u ytkownika ............................................................................................... 267
Baza danych, przygotowanie autoryzacji .................................................................... 271
Tworzenie bazy danych ............................................................................................ 273
4QFKC -QPUVTWMELC CRNKMCELK 2TQYKLG
Budowanie interfejsu u ytkownika za pomocą Glade .................................................. 281
Kontrola wyświetlanych danych ................................................................................ 286
Funkcje tworzonej aplikacji....................................................................................... 289
Powiązanie funkcji „narzędziowych” z obiektami interfejsu u ytkownika
— funkcje zwrotne w pliku callbacks.c.................................................................... 318
Uwagi dotyczące utworzonego programu ................................................................... 325
4QFKC +PUVCNCELC CRNKMCELK 9[PCECPKG RTQYKLK
Kompilacja z wiersza poleceń.................................................................................... 327
Korzyści płynące z zastosowania Make ...................................................................... 328
Instalowanie aplikacji ............................................................................................... 330
Kompilacja programu dla Win32 za pomocą MS Visual C++ ....................................... 341
4. Spis treści 7
4QFKC 2TQLGMV CRNKMCELK 4CRQTV[
Definicja problemu................................................................................................... 351
Interfejs u ytkownika ............................................................................................... 352
Baza danych, uprawnienia u ytkowników .................................................................. 356
Tworzenie bazy danych ............................................................................................ 357
4QFKC -QPUVTWMELC CRNKMCELK 4CRQTV[
Opis problemu ......................................................................................................... 361
Aplikacja sterująca: Raporty...................................................................................... 361
Raport 1. Tabela....................................................................................................... 371
Raport 2. Wykres kołowy ......................................................................................... 377
Raport 3. Wykres liniowo-kolumnowy ....................................................................... 387
Raport 4. Wykres punktowy...................................................................................... 393
4QFKC -QORKNCELC K KPUVCNCELC CRNKMCELK 4CRQTV[
Kompilacja i dystrybucja w formie pliku RPM ........................................................... 403
Kompilacja programów za pomocą MinGW dla Win32 ............................................... 408
%ú è +++ 2T[M CF
4QFKC [PCOKEPG VYQTGPKG KPVGTHGLUW W [VMQYPKMC C RQOQEæ :/.
Jeszcze raz program „Witaj Swiecie” ......................................................................... 417
Komunikacja pomiędzy oknami................................................................................. 422
Dokonywanie zmian w aplikacji bez konieczności ponownej kompilacji ....................... 430
QFCVMK
QFCVGM # 2NKMK Y[IGPGTQYCPG RTG )NCFG CRNKMCELC FNC 5'5+
interface.c................................................................................................................ 435
sesi.glade................................................................................................................. 460
QFCVGM $ 2NKMK Y[IGPGTQYCPG RTG )NCFG CRNKMCELC 2TQYKLG
interface.c................................................................................................................ 499
prowizje.glade.......................................................................................................... 516
QFCVGM % 2NKMK Y[IGPGTQYCPG RTG )NCFG CRNKMCELC 4CRQTV[
Pliki dla programu głównego..................................................................................... 547
Pliki dla programu tworzącego raport w formie tabeli .................................................. 551
Pliki dla programu tworzącego wykres kołowy ........................................................... 556
Pliki dla programu tworzącego raport w postaci wykresu liniowo-kolumnowego ........... 559
Pliki dla programu generującego raport w postaci wykresu punktowego........................ 562
5MQTQYKF
5. Rozdział 4.
CCYCPUQYCPG
QDKGMV[ )6-
W tym rozdziale opisano zaawansowane obiekty GTK+, słu ące do rozmieszczania i pre-
zentacji innych elementów. Szczegółowo opisano tu następujące widgety:
)VM6CDNG,
)VM6TGG i )VM%6TGG,
)VM(KZGF,
)VM.C[QWV,
)VM5ETQNNGF9KPFQY,
)VM0QVGDQQM,
)VM2CPGF.
)VM6CDNG
Obiekt )VM6CDNG działa na zasadzie siatki, w której mo na umieszczać inne obiekty. Mo -
na powiedzieć, e )VM6CDNG jest połączeniem dwóch prostokątnych pojemników (pozio-
mego i pionowego). Na rysunku 4.1 przedstawiono obiekt )VM6CDNG, który utworzymy
w przykładowym programie (listing 4.1). W )VM6CDNG mo na umieścić obiekt w kilku
komórkach (poziomo lub pionowo).
Przykładowy program przedstawia działanie obiektu )VM6CDNG. Pokazano tu równie
nowy trend tworzenia „programów w akcji”, gdzie w odpowiedzi na wystąpienie zda-
rzeń tworzy się (lub niszczy) określone widgety. Nale y pamiętać, e jeśli będziemy ko-
rzystać z tej metody w tworzonych aplikacjach, to jednocześnie będziemy musieli zna-
leźć sposób na przechowanie danych, które mają być przekazane tworzonym na nowo
obiektom.
Rysunek 4.1 przedstawia okno utworzonej aplikacji, której kod źródłowy znajduje się
w listingu 4.1.
6. 128 Część I Szybkie wprowadzenie
4[UWPGM
Uruchomiony
przykładowy program
.KUVKPI Prezentacja obiektu GtkTable
KPENWFG IVMIVMJ
)VM9KFIGV
48. 132 Część I Szybkie wprowadzenie
IVMAYKFIGVAUJQYACNN
HTOAVCDNG
_
XQKF EOFAAAENKEMGF
]
IVMAYKFIGVAFGUVTQ[
VDN
OCMGAVCDNGADWVVQPU
CVVCEJAYKFIGVU
)6-A5*4+0- ^ )6-A':2#0
IVMAEQPVCKPGTACFF
)6-A%106#+0'4
HTOAVCDNG VDN
IVMAYKFIGVAUJQYACNN
HTOAVCDNG
_
XQKF EOFAAAENKEMGF
]
IVMAYKFIGVAFGUVTQ[
VDN
OCMGAVCDNGADWVVQPU
CVVCEJAYKFIGVU
)6-A(+.. ^ )6-A':2#0
IVMAEQPVCKPGTACFF
)6-A%106#+0'4
HTOAVCDNG VDN
IVMAYKFIGVAUJQYACNN
HTOAVCDNG
_
XQKF EOFAAAENKEMGF
]
IVMAYKFIGVAFGUVTQ[
VDN
OCMGAVCDNGADWVVQPU
CVVCEJAYKFIGVU
)6-A5*4+0- ^ )6-A(+.. ^ )6-A':2#0
IVMAEQPVCKPGTACFF
)6-A%106#+0'4
HTOAVCDNG VDN
IVMAYKFIGVAUJQYACNN
HTOAVCDNG
_
)VM6TGG K )VM%6TGG
Obiekty )VM6TGG i )VM%6TGG słu ą do prezentacji drzewa elementów. Litera „C” w na-
zwie )VM%6TGG oznacza „kolumny” (C pochodzi od angielskiego słowa Columns); mo -
na powiedzieć, e )VM%6TGG jest skrzy owaniem dwóch, znanych z VB kontrolek: kon-
trolki prezentującej dane i kontrolki drzewa (rysunek 4.2, listing 4.2). W GTK+ obiekt
)VM%QPVCKPGT jest obiektem nadrzędnym dla )VM.KUV, )VM%.KUV i )VM6TGG. )VM%6TGG po-
chodzi od )VM%.KUV, ale podobny związek nie istnieje pomiędzy )VM6TGG i )VM.KUV.
4[UWPGM
Drzewa elementów,
czyli GtkTree
i GtkCTree
W tym programie porównano cechy i wygląd widgetów )VM6TGG (po lewej stronie okna)
i )VM%6TGG (po prawej stronie okna). Główną ró nicą pomiędzy tymi obiektami jest fakt,
e )VM%6TGG akceptuje tylko mapy pikselowe i tekst, a w )VM6TGG mo na umieścić dowol-
ne widgety potomne.
49. Rozdział 4. Zaawansowane obiekty GTK+ 133
.KUVKPI GtkTree i GtkCTree
KPENWFG IVMIVMJ
)VM9KFIGV
142. Rozdział 4. Zaawansowane obiekty GTK+ 137
ECUG IVMAEVTGGAUGVANKPGAUV[NG
)6-A%64''
EVTGGATKIJV
)6-A%64''A.+0'5A6#$$'
DTGCM
FGHCWNV IARTKPV
6C NKPKC PKG RQYKPPC D[E YKFQEPC
DTGCM
_
_
XQKF EOFAE[ENGAGZRCPFGTAENKEMGF
]
UVCVKE IKPV GZRCPFGTAUV[NG
KH
GZRCPFGTAUV[NG
GZRCPFGTAUV[NG
GNUG GZRCPFGTAUV[NG
UYKVEJ
GZRCPFGTAUV[NG
]
ECUG IVMAEVTGGAUGVAGZRCPFGTAUV[NG
)6-A%64''
EVTGGATKIJV
)6-A%64''A':2#0'4A010'
DTGCM
ECUG IVMAEVTGGAUGVAGZRCPFGTAUV[NG
)6-A%64''
EVTGGATKIJV
)6-A%64''A':2#0'4A537#4'
DTGCM
ECUG IVMAEVTGGAUGVAGZRCPFGTAUV[NG
)6-A%64''
EVTGGATKIJV
)6-A%64''A':2#0'4A64+#0).'
DTGCM
ECUG IVMAEVTGGAUGVAGZRCPFGTAUV[NG
)6-A%64''
EVTGGATKIJV
)6-A%64''A':2#0'4A%+4%7.#4
DTGCM
FGHCWNV IARTKPV
6C NKPKC PKG RQYKPPC D[E YKFQEPC
DTGCM
_
_
)VM(KZGF
Obiekt )VM(KZGF jest obiektem docenianym szczególnie przez programistów wykorzy-
stujących wcześniej VB lub VC++ ze względu na jedną, wa ną właściwość. Otó w tym
obiekcie mo emy umieszczać inne widgety bezpośrednio na jego powierzchni (pokrytej
siatką, ułatwiającą lokalizację rozmieszczanych widgetów — rysunek 4.3). Nie korzy-
stamy tu z obiektów-pojemników, których stosowanie jest główną własnością GTK+.
Większość programistów zamiast tego obiektu wybierze )VM.C[QWV, ze względu na jego
większe mo liwości (obiekt zaprezentowano w kolejnej sekcji, „)VM.C[QWV”).
Program umieszczony w listingu 4.3 jest bardzo prosty. Wykorzystano w nim obiekt
)VM(KZGF i jeden przycisk, który po ka dym kliknięciu zmienia swoją pozycję na po-
wierzchni okna )VM(KZGF. Porównajmy )VM(KZGF z obiektem )VM.C[QWV przed podjęciem
decyzji, który z nich lepiej nadaje się do wykorzystania w naszych aplikacjach.
143. 138 Część I Szybkie wprowadzenie
4[UWPGM
Obiekt GtkFixed
.KUVKPI Prezentacja GtkFixed
KPENWFG IVMIVMJ
KPENWFG UVFNKDJ
195. 140 Część I Szybkie wprowadzenie
FQ]
[ARQU [ARQU
_ YJKNG
[ARQU
IVMAHKZGFAOQXG
)6-A(+:'
HKZGFAOCKP )6-A9+)'6
EOF ZARQU [ARQU
_
)VM.C[QWV
)VM.C[QWV ma podobne właściwości, co )VM(KZGF, ale umo liwia wykorzystanie więk-
szej powierzchni dla widgetów potomnych od powierzchni wymaganej do ich wyświe-
tlenia. W tym obiekcie, zamiast korzystać z niszczenia i ponownego tworzenia okna,
mamy do dyspozycji funkcje
199. (opisane w listingu 4.4). Na rysun-
ku 4.4 przedstawiono wynik działania programu.
4[UWPGM
Prezentacja działania
GtkLayout
Aby uwidocznić podobieństwa i ró nice pomiędzy kontrolkami )VM(KZGF i )VM.C[QWV,
listing 4.4 jest bardzo podobny do listingu 4.3. Najlepiej oba programy skompilować
i uruchomić, a następnie wybrać bardziej odpowiedni dla danego zastosowania obiekt.
.KUVKPI Prezentacja GtkLayout
KPENWFG IVMIVMJ
KPENWFG UVFNKDJ
)VM9KFIGV
223. 142 Część I Szybkie wprowadzenie
IVMANC[QWVAHTGGG
)6-A.#;176
NC[QWVAOCKP
IVMANC[QWVAOQXG
)6-A.#;176
NC[QWVAOCKP )6-A9+)'6
EOF ZARQU [ARQU
IVMANC[QWVAVJCY
)6-A.#;176
NC[QWVAOCKP
_
)VM5ETQNNGF9KPFQY
Obiekt )VM5ETQNNGF9KPFQY jest pojemnikiem, w którym mo na umieścić inne widgety.
Okno to posiada paski przewijania. Mo na je zaimplementować równie w innych wid-
getach, które nie posiadają tych pasków. Dzięki temu na jednym ekranie mo na umie-
ścić kilka okienek, w których — za pomocą pasków przewijania — mo na wybierać
wyświetlany obszar z po ądanymi obiektami. Na rysunku 4.5 przedstawiono okno wy-
generowane przez program, którego kod źródłowy znajduje się w listingu 4.5.
4[UWPGM
Obiekt
GtkScrolledWindow
W programie prezentującym okno przewijane umieściliśmy dwa przyciski, dzięki któ-
rym mo emy wybrać odpowiednie ustawienia. Jeden z nich słu y do wybrania opcji
always, czyli stałego wyświetlania pasków przewijania (niezale nie od tego, czy jest to
potrzebne, czy nie), a drugi — do ustawienia opcji auto, czyli wyświetlania pasków tyl-
ko wtedy, gdy widget w oknie głównym nie mieści się na wyświetlanym obszarze. Na-
le y wiedzieć, e odpowiednich ustawień mo na dokonać dla ka dego paska osobno.
Na przykład dla paska pionowego mo na wybrać właściwość auto, a dla poziomego —
always. W naszym programie będziemy wybierać takie same właściwości dla obydwu
pasków.
.KUVKPI Prezentacja GtkScrolledDemo
KPENWFG IVMIVMJ
)VM9KFIGV
239. IVMAUETQNNGFAYKPFQYAUGVARQNKE[
)6-A5%41..'A9+019
UETQNNGFAOCKP
)6-A21.+%;A#.9#;5
)6-A21.+%;A#.9#;5
_
)VM0QVGDQQM
Obiekt )VM0QVGDQQM jest odpowiednikiem kontrolki nazywanej przez programistów VB
„kontrolką zakładek”. Taka kontrolka umo liwia egzystencję wielu obiektów na jednej
„powierzchni u ytkowej”. Ka da zakładka oznacza osobną stronę, na której mo na umie-
ścić dowolne obiekty kontrolne. W danej chwili mo na wyświetlić jedną stronę, a inne
w tym czasie pozostaną ukryte.
Okno z główną zakładką aplikacji pokazano na rysunku 4.6, a odpowiedni kod źródło-
wy w listingu 4.6. Zwróćmy uwagę na mo liwość dynamicznego dodawania kolejnych
stron (w zasadzie mo na napisać program, w którym mo na dodawać równie inne wid-
gety w trakcie jego działania).
4[UWPGM
Uruchomiony program
prezentujący
działanie
GtkNotebook
.KUVKPI Program prezentujący obiekt GtkPaned
KPENWFG IVMIVMJ
)VM9KFIGV
270. IARTKPV
+PFGMU UVTQP[ VQ KP
IVMAPQVGDQQMAIGVAEWTTGPVARCIG
)6-A016'$11-
PQVGDQQMAOCKP
_
XQKF PQVGDQQMAUYKVEJARCIG
]
IARTKPV
UVTQPG OKGPKQPQP
_
)VM2CPGF
Dzięki widgetowi )VM2CPGF mo na podzielić okno — pionowo lub poziomo — na dwie
mniejsze powierzchnie, zwane panelami (rysunek 4.7). Jeśli chcemy uzyskać więcej
mniejszych powierzchni, mo emy dzielić większe na dwie mniejsze, potem mniejsze na
jeszcze mniejsze, i tak dalej. Po uruchomieniu programu w oknie zobaczymy specjalne
przyciski, dzięki którym będziemy mogli zmienić rozmiary ka dej powierzchni (pod wa-
runkiem, e wybierzemy właściwe opcje).
Zwróćmy uwagę na wymiary przycisków słu ących do zmiany rozmiarów powierzchni.
W naszym przypadku mamy do czynienia z bardzo „cieniutkimi” obiektami, ale nic nie
stoi na przeszkodzie, aby wykorzystać większe przyciski. Wymiary tych przycisków są
związane z przestrzenią pomiędzy granicą powierzchni a obiektami w niej umieszczony-
mi. Wielkość tej przestrzeni określa się w funkcji IVMARCPGFAIWVVGTAUKG
.
271. 148 Część I Szybkie wprowadzenie
4[UWPGM
Okno prezentacji
GtkPaned
.KUVKPI Prezentacja GtkPaned
KPENWFG IVMIVMJ
)VM9KFIGV