background image

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63

e-mail: helion@helion.pl

PRZYK£ADOWY ROZDZIA£

PRZYK£ADOWY ROZDZIA£

IDZ DO

IDZ DO

ZAMÓW DRUKOWANY KATALOG

ZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EK

KATALOG KSI¥¯EK

TWÓJ KOSZYK

TWÓJ KOSZYK

CENNIK I INFORMACJE

CENNIK I INFORMACJE

ZAMÓW INFORMACJE

O NOWOCIACH

ZAMÓW INFORMACJE

O NOWOCIACH

ZAMÓW CENNIK

ZAMÓW CENNIK

CZYTELNIA

CZYTELNIA

FRAGMENTY KSI¥¯EK ONLINE

FRAGMENTY KSI¥¯EK ONLINE

SPIS TRECI

SPIS TRECI

DODAJ DO KOSZYKA

DODAJ DO KOSZYKA

KATALOG ONLINE

KATALOG ONLINE

MySQL. Budowanie
interfejsów u¿ytkownika.
Vademecum profesjonalisty

Autor: Matthew Stucky
T³umaczenie: Tomasz Miszkiel 
ISBN: 83-7197-885-5
Tytu³ orygina³u: 

MySQL Building User Interfaces

Format: B5, stron: 582

Przyk³ady na ftp: 1098 kB 

MySQL jest szybkim, przenony 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 
dowiadczenie 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 wywietlania 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 
    koniecznoci rekompilacji kodu ród³owego 
• Przeledzisz krok po kroku proces powstawania kompletnej aplikacji korzystaj¹cej 
    z MySQL. 

background image

5RKUVTGħEK

  
  
  

Dla kogo przeznaczona jest ta książka? ........................................................................ 12
Układ książki ............................................................................................................. 12
Konwencje przyjęte w książce..................................................................................... 13

  !"##!  $ %

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

& '()*+ !# ,-. /  0

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

1 2,+!'()*  0

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

background image

6

MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

3 4 5#'()*  &%

GtkTable ................................................................................................................. 127
GtkTree i GtkCTree ................................................................................................. 132
GtkFixed ................................................................................................................. 137
GtkLayout ............................................................................................................... 140
GtkScrolledWindow ................................................................................................. 142
GtkNotebook ........................................................................................................... 144
GtkPaned ................................................................................................................ 147

0 '+ !# ,-. /  0

Ś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

  

6 7,#

#,,2! 80

Projekt aplikacji ....................................................................................................... 186
Interfejs użytkownika ............................................................................................... 189
Tworzenie bazy danych ............................................................................................ 193
Wdrożenie aplikacji.................................................................................................. 195
Modernizacja aplikacji.............................................................................................. 199

% 9#,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

8 #,,=,#  &61

Przedstawienie problemu .......................................................................................... 264
Interfejs użytkownika ............................................................................................... 267
Baza danych, przygotowanie autoryzacji .................................................................... 271
Tworzenie bazy danych ............................................................................................ 273

 ) #,#,7,  &8

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

 < ,#,,  1&%

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

background image

Spis treści

7

 7,##, 10

Definicja problemu................................................................................................... 351
Interfejs użytkownika ............................................................................................... 352
Baza danych, uprawnienia użytkowników .................................................................. 356
Tworzenie bazy danych ............................................................................................ 357

& ) #,#, 16

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

1 ), ,#, 31

Kompilacja i dystrybucja w formie pliku RPM ........................................................... 403
Kompilacja programów za pomocą MinGW dla Win32 ............................................... 408

 

3 >?, "##-@ 3%

Jeszcze raz program „Witaj Swiecie” ......................................................................... 417
Komunikacja pomiędzy oknami................................................................................. 422
Dokonywanie zmian w aplikacji bez konieczności ponownej kompilacji ....................... 430

 !

># 7#+'=#,;< 310

interface.c................................................................................................................ 435
sesi.glade................................................................................................................. 460

>#/ 7#+'=#,7, 3

interface.c................................................................................................................ 499
prowizje.glade.......................................................................................................... 516

>#A 7#+'=#,  03%

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

#  0%

background image

Rozdział 4.

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:

  

,

  

 i 

,

  

,

  

,

  

,

  

,

  

.

Obiekt 

 działa na zasadzie siatki, w której można  umieszczać inne obiekty. Moż-

na powiedzieć, że 

 jest połączeniem dwóch prostokątnych pojemników (pozio-

mego  i  pionowego).  Na  rysunku  4.1  przedstawiono  obiekt 

,  który  utworzymy

w  przykładowym  programie  (listing  4.1).  W 

  można  umieścić  obiekt  w  kilku

komórkach (poziomo lub pionowo).

Przykładowy  program  przedstawia  działanie  obiektu 

.  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.

background image

128

Część I 

 Szybkie wprowadzenie


Uruchomiony
przykładowy program

Prezentacja obiektu GtkTable

 !"#

"$"!%""$

$!&"'$!%

$$

'$

($

$'

$)

)'

')

))

$

*!+,

*+,

*"+,

*$$+,

*'$+,

*($+,

*$'+,

*$)+,

*)'+,

*')+,

*))+,

+&*-.,

/

+0&0*,

1"""+#23456#678987,

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

129

""+#23456+,&:%!":,

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

+,

3%% !"!"!!

>!!+,

%"+,&"%

%+,

+#2#?;78+,&$$&B&$&B&$,

+#2#?;78+,&'$&B&$&$&),

+#2#?;78+,&($&B&(&)&(,

+#2#?;78+,&$'&$&'&B&',

+#2#?;78+,&$)&'&)&B&$,

+#2#?;78+,&)'&$&'&'&),

+#2#?;78+,&))&'&)&'&),

+#2#?;78+,&')&'&(&$&',

$1""+:!"!:,

+#2#?;78+,&$&)&(&B&$,

+#2=64#?348C+,&,

""+,

+,

B

D

*!+,

/E+,

D

*"+6#364>&?=234,

/

+#2#?;78+,&$$&B&$&B&$&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&'$&B&$&$&)&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&($&B&(&)&(&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&$'&$&'&B&'&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&$)&'&)&B&$&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&)'&$&'&'&)&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&))&'&)&'&)&6#364>&6#364>&?=234&

?=234,

background image

130

Część I 

 Szybkie wprowadzenie

+#2#?;78+,&')&'&(&$&'&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&$&)&(&B&$&6#364>&6#364>&?=234&

?=234,

D

*+,

/

1"+(&(&#CA8,

! "!%%F!&!&%

$$1""+:! G:,

+#26;<8=#+$$,&

::&

#2>34?7@A4=+$$,&

4A77,

'$1""+:A"H %H@377:,

+#26;<8=#+'$,&

::&

#2>34?7@A4=+'$,&

4A77,

($1""+:! %>IC342:,

+#26;<8=#+($,&

::&

#2>34?7@A4=+($,&

4A77,

$'1""+:!H6 %H8J?45:,

+#26;<8=#+$',&

::&

#2>34?7@A4=+$',&

4A77,

$)1""+:!H6 %H@377HH>IC342:,

+#26;<8=#+$),&

::&

#2>34?7@A4=+$),&

4A77,

)'1""+:!H6 %H>IC342HH8J?45:,

+#26;<8=#+)',&

::&

#2>34?7@A4=+)',&

4A77,

))1""+:!H %H@377HH8J?45:,

+#26;<8=#+)),&

::&

#2>34?7@A4=+)),&

4A77,

')1""+:! %H@377&8J?45>IC342:,

+#26;<8=#+'),&

::&

#2>34?7@A4=+'),&

4A77,

$1""+:!"!:,

D

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

131

*$$+,

/

#"!!!  "!%"!

 ! !"!

!"!"

K!  &# %

4"!!%&!"!!

"!  !" !% !

% !&%"!!!

""%&!!

 "!L!

"!+,

+,

"+B&G,

+#2=64#?348C+,&,

""+,

D

*'$+,

/

"!+,

+,

"+#2@377&B,

+#2=64#?348C+,&,

""+,

D

*($+,

/

"!+,

+,

"+#2>IC342&B,

+#2=64#?348C+,&,

""+,

D

*$'+,

/

"!+,

+,

"+#28J?45&B,

+#2=64#?348C+,&,

""+,

D

*$)+,

/

"!+,

+,

"+#2@377M#2>IC342&B,

+#2=64#?348C+,&,

background image

132

Część I 

 Szybkie wprowadzenie

""+,

D

*)'+,

/

"!+,

+,

"+#2>IC342M#28J?45&B,

+#2=64#?348C+,&,

""+,

D

*))+,

/

"!+,

+,

"+#2@377M#28J?45&B,

+#2=64#?348C+,&,

""+,

D

*')+,

/

"!+,

+,

"+#2>IC342M#2@377M#28J?45&B,

+#2=64#?348C+,&,

""+,

D

Obiekty 

 i 

 służą do prezentacji  drzewa  elementów.  Litera  „

C” w na-

zwie 

 oznacza „kolumny” (C pochodzi od angielskiego słowa 

Columns); moż-

na powiedzieć, że 

 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

 jest obiektem  nadrzędnym dla 

 i 

  po-

chodzi od 

, ale podobny związek nie istnieje pomiędzy 

 i 

.


Drzewa elementów,
czyli GtkTree
i GtkCTree

W tym programie porównano cechy i wygląd widgetów 

 (po lewej stronie okna)

 (po prawej stronie okna). Główną różnicą pomiędzy tymi obiektami jest  fakt,

że 

 akceptuje tylko mapy pikselowe i tekst, a w 

 można  umieścić dowol-

ne widgety potomne.

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

133

GtkTree i GtkCTree

&

'

)

"

*!+,

*!!+,

*!N +,

+&*-.,

/

N&*N&*N

*$$&*$'

"

"&"&N"

'$&'$$

&&N

!!&!N

=#4$

=#4'

=#4)

%" !""=

>!% "!

"& &%"

-'.1/:!%:&:3%:D

$-'.1/:$:&::D

'-'.1/:':&:# "! :D

)-'.1/:"$:&:":D

+0&0*,

1"""+#23456#678987,

""+#23456+,&:%""":,

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

N1N"+#CA8&B,

*N1*N"+#CA8&B,

*N1*N"+@?7>8&B,

" !#=#

%+&%!7=7,&

# %"!"!&

background image

134

Część I 

 Szybkie wprowadzenie

=#O! ! "

1"+,

5"% !!&%"

4""!""%

*$$1""+:$&8$:,

*$'1""+:$&8':,

  +#2#C88+,&*$$,

  +#2#C88+,&*$',

4" ! % !

P!"%"&!!"

 ""%%""

""& "% "

4!:""":&!

""

'1"+,

'$1""+:'&8$:,

  +#2#C88+',&'$,

+#2#C883#8K+*$',&',

#%" ! "

<!"!! "& "

%&!

""+'$,

)1"+,

'$$1""+:)&8$:,

  +#2#C88+),&'$$,

+#2#C883#8K+'$,&),

""+'$$,

"1""+:!:,

  +#2#C88+,&",

"1"+,

+#2#C883#8K+",&",

5%!"""

4% ""!!!F

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

135

1"+,

"1"+:#%!:,

+#2=64#?348C+,&",

  +#2#C88+",&,

""+",

""+,

4 !"" !

1"+,

"1""+:#% !:,

+#2=64#?348C+,&",

  +#2#C88+",&,

""+",

""+,

? "!

N1"+,

N"1""+:#% "!:,

+#2=64#?348C+N,&N",

  +#2#C88+",&N,

""+N",

""+N,

"%!"=#

1""+'&B&,

$1+#2=#C88+,&4A77&4A77&$&

B&4A77&4A77&4A77&4A77&@?7>8&#CA8,

'1+#2=#C88+,&4A77&4A77&'&

B&4A77&4A77&4A77&4A77&@?7>8&#CA8,

)1+#2=#C88+,&'&4A77&

)&

B&4A77&4A77&4A77&4A77&@?7>8&#CA8,

2%"=#%

!!"!% "&

"!"!!%"""6

 !%F

6=#

 6"!&4A77""

6":!:4A77

N#" !

"%"

!"

 7  !"

 N H

H6 "!&"!"&

 N  !"%"!"!

 

%&!%"

background image

136

Część I 

 Szybkie wprowadzenie

#CA8&""" !

+!"" !,

N %&!!"

%"!!

!!1""+:>!:,

+#26;<8=#+!!,&

::&

#2>34?7@A4=+!!,&

4A77,

!N 1""+:>!"%!:,

+#26;<8=#+!N ,&

::&

#2>34?7@A4=+!N ,&

4A77,

N +#2;6J+*N,&&#CA8&#CA8&B,

N +#2;6J+*N,&&#CA8&#CA8&B,

N +#2;6J+*N,&!!&#CA8&@?7>8&B,

N +#2;6J+*N,&!N &#CA8&@?7>8&B,

N +#2;6J+N,&*N&#CA8&#CA8&B,

N +#2;6J+N,&*N&#CA8&#CA8&B,

+#2=64#?348C+,&N,

""+,

+,

B

D

*!+,

/E+,

D

*!!+,

/

!1$

+!11(,

!1$

!QQ

"+!,

/

$F!+#2=#C88+,&

#2=#C887348>4648,

'F!+#2=#C88+,&

#2=#C887348>>6735,

)F!+#2=#C88+,&

#2=#C887348>56##85,

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

137

(F!+#2=#C88+,&

#2=#C887348>#?;;85,

F +:# "!"RR:,

D

D

*!N +,

/

N !1$

+N !11(,

N !1$

N !QQ

"+N !,

/

$FN !+#2=#C88+,&

#2=#C888J?458C4648,

'FN !+#2=#C88+,&

#2=#C888J?458C>SA?C8,

)FN !+#2=#C88+,&

#2=#C888J?458C#C3?478,

(FN !+#2=#C88+,&

#2=#C888J?458C=3C=A7?C,

F +:# "!"RR:,

D

D

Obiekt 

  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 

, ze względu  na jego

większe możliwości (obiekt zaprezentowano w kolejnej sekcji, „

”).

Program  umieszczony w listingu 4.3 jest  bardzo  prosty.  Wykorzystano  w  nim  obiekt

 i jeden przycisk,  który  po  każdym  kliknięciu  zmienia  swoją  pozycję  na  po-

wierzchni okna 

. Porównajmy 

 z obiektem 

 przed podjęciem

decyzji, który z nich lepiej nadaje się do wykorzystania w naszych aplikacjach.

background image

138

Część I 

 Szybkie wprowadzenie


Obiekt GtkFixed

Prezentacja GtkFixed

;%

"!""!"%"%

"   !

 "@N

N

N

$

*!+,

*$+,

+&*-.,

/

+0&0*,

N1"""+#23456#678987,

""+#23456+N,&:%@N:,

+#26;<8=#+N,&

:!:&

#2>34?7@A4=+!,&

4A77,

N1N"+,

@N% !"!4!

 "  " &

 "@N?!!&

N & !!

 & "@N&!

%"%%!& "%!"!"

#"@N&!!

%" "& "!"

"!%"<" ! !

 !@N&" "

"%"!!&! !!"!

< ! %!"

"&@N%!!

"% "

K ""!"!"

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

139

"" P!

 !" !%$&$! !%$BB&$BB

+"%" ,!!

TB&TB&%!!% !

$TB&TB&"""%&!

"!"!% "

6"%!" "!&!!

  "@N6"&

 "!"&" "! !  

 

=U@N%"!""&

 %!%7!

"!:: "!

"!!+@N7!,

$1""+:!$:,

+#26;<8=#+$,&

::&

#2>34?7@A4=+$,&

4A77,

N +#2@3J85+N,&$&$&$BB,

#"!  "!%%

 "F"%"+" ,

%"+"

" ,

+#2=64#?348C+N,&N,

""+N,

+,

B

D

*!+,

/E+,

D

*$+,

/

N &!

N 1+,

! 1+,

#%!!""$'BB&

 %"% !

/

N 1N O'BB

D"+N 'BB,

background image

140

Część I 

 Szybkie wprowadzenie

/

! 1! O'BB

D"+! 'BB,

N*+#2@3J85+N,&#2358#+$,&N &! ,

D

  ma podobne właściwości, co 

, 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 

 i 

 (opisane w listingu 4.4). Na rysun-

ku 4.4 przedstawiono wynik działania programu.


Prezentacja działania
GtkLayout

Aby uwidocznić podobieństwa i różnice pomiędzy  kontrolkami 

 i 

,

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.

Prezentacja GtkLayout

!

!

$

*!+,

*$+,

+&*-.,

/

+0&0*,

!1"""+#23456#678987,

""+#23456+!,&:%7!:,

+#26;<8=#+!,&

:!:&

#2>34?7@A4=+!,&

4A77,

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

141

!1!"+4A77&4A77,

P"!"!"%!"+,&% "

 %"!%!+ ! "!,&

!  

"%"!!

":N::!:+  ",

# % !  &

"!%& %!

"7!

$1""+:!$:,

+#26;<8=#+$,&

::&

#2>34?7@A4=+$,&

4A77,

! +#27?V6A#+!,&$&$&$BB,

+#2=64#?348C+!,&!,

""+!,

+,

B

D

*!+,

/E+,

D

*$+,

/

N &!

N 1+,

! 1+,

#%!!""$'BB&

 %"% !

/

N 1N O'BB

D"+N 'BB,

/

! 1! O'BB

D"+! 'BB,

6%" !@N7!

P!"""%& %

"%&   %"O

"<W ! !"

 !

background image

142

Część I 

 Szybkie wprowadzenie

!+#27?V6A#+!,,

!*+#27?V6A#+!,&#2358#+$,&N &! ,

!"+#27?V6A#+!,,

D

Obiekt 

  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.


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.

Prezentacja GtkScrolledDemo

N

 !& !"!

*!+,

* !+,

* !"!+,

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

143

+&*-.,

/

+0&0*,

1"""+#23456#678987,

""+#23456+,&:%

 "%:,

4!"!& % "!"

!&!%

 "?!"!"!" !&

!"!"

" !"!" " "%

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

1"""+4A77&4A77,

N1N"+,

 !1""+:"!""

 !:,

+#26;<8=#+ !,&

::&

#2>34?7@A4=+ !,&

4A77,

 !"!1""+:"":,

+#26;<8=#+ !"!,&

::&

#2>34?7@A4=+ !"!,&

4A77,

N +#2@3J85+N,& !&'BB&'BB,

N +#2@3J85+N,& !"!&TB&XT,

"""*" +#2>=C677853456+,&

N,

+#2=64#?348C+,&,

""+,

+,

B

D

*!+,

/E+,

D

* !+,

/

"" !+#2>=C677853456+,&

#2673=V?A#6K?#3=&

#2673=V?A#6K?#3=,

background image

144

Część I 

 Szybkie wprowadzenie

D

* !"!+,

/

#%!""

"" !+#2>=C677853456+,&

#2673=V?7?V>&

#2673=V?7?V>,

D

Obiekt 

 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).


Uruchomiony program
prezentujący
działanie
GtkNotebook

Program prezentujący obiekt GtkPaned

N $

*N '

*!+,

*+,

*+,

*+,

* +,

* N+,

*" +,

+&*-.,

/

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

145

&

 & N

$&'

+0&0*,

1"""+#23456#678987,

""+#23456+,&:%4:,

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

1"+,

+#26;<8=#+,&

:"O :&

#2>34?7@A4=+" ,&

4A77,

> ""

N $1N"+,

$1"+:":,

1""+:C%:,

+#26;<8=#+,&

::&

#2>34?7@A4=+,&

4A77,

1""+:#":,

+#26;<8=#+,&

::&

#2>34?7@A4=+,&

4A77,

1""+:C":,

+#26;<8=#+,&

::&

#2>34?7@A4=+,&

4A77,

N +#2@3J85+N $,&&'B&'B,

N +#2@3J85+N $,&&'B&TB,

N +#2@3J85+N $,&&'B&YB,

   +#246#8;662+,&N $&$,

>'

*N '1*N"+#CA8&B,

 1""+:5%:,

+#26;<8=#+ ,&

::&

#2>34?7@A4=+ ,&

4A77,

background image

146

Część I 

 Szybkie wprowadzenie

 N1""+:!:,

+#26;<8=#+ N,&

::&

#2>34?7@A4=+ N,&

4A77,

N +#2;6J+*N ',& ,

N +#2;6J+*N ',& N,

'1"+:5:,

   +#246#8;662+,&*N '&',

2%&"

+#2=64#?348C+,&,

""+,

+,

B

D

*!+,

/E+,

D

*+,

/

1$

+11(,

1$

QQ

"+,

/

$F +#246#8;662+,&#26>#6,

'F +#246#8;662+,&#26>C3I#,

)F +#246#8;662+,&#26>;6##6K,

(F +#246#8;662+,&#26>78@#,

F +:# !  "!"! H:,

D

D

*+,

/

+#246#8;662+,&#CA8,

D

*+,

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

147

/

#%&%  "%"%

! ! %"&%

+,

+#246#8;662+,&@?7>8,

D

* +,

/

N

N1N"+,

1"+:4"!:,

   +#246#8;662+,&N&,

6"

""+,

D

* N+,

/

P"

 +:3!ZH:&

 +#246#8;662+,,,

D

*" +,

/

 +:H:,

D

Dzięki widgetowi 

 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 

 ! "#

.

background image

148

Część I 

 Szybkie wprowadzenie


Okno prezentacji
GtkPaned

Prezentacja GtkPaned

 

*!+,

+&*-.,

/

 $

* $

 '

* '

* '

 $

* $

 '

* '

+0&0*,

 1"""+#23456#678987,

""+#23456+ ,&:%:,

+#26;<8=#+ ,&

:!:&

#2>34?7@A4=+!,&

4A77,

 $1 "+,

 +#2?485+ $,&'B,

 +#2?485+ $,&'B,

 $1"+: $"H6 %C#CA8H6 %>

#CA8:,

  $+#2?485+ $,& $&#CA8&#CA8,

!"% +,"

 ! "%!"!&

" "!!"%!"

 +, "%&"" !&

!"!

  $+, "%

""%& % "%&

 "%   '+,!+  %,

""% "%

background image

Rozdział 4. 

 Zaawansowane obiekty GTK+

149

  *

!%  +,F

  "!

" !&!""%+ "%,

%+%,

%"#CA8& !! "

  %""!

%"@?7>8&  "

%% "

* $1* "+,

 +#2?485+* $,&'B,

* $ 1"+:* $H6 %C#CA8H6 %>

@?7>8:,

  '+#2?485+ $,&* $&#CA8&@?7>8,

  $+#2?485+* $,&* $ &#CA8&@?7>8,

 '1 "+,

 +#2?485+ ',&'B,

 '1"+: '"H6 %C@?7>8H6 %>

#CA8:,

  '+#2?485+* $,& '&@?7>8&#CA8,

  $+#2?485+ ',& '&@?7>8&#CA8,

* '1* "+,

 +#2?485+* ',&T,

 +#2?485+* ',&T,

* ' 1"+:* 'HC@?7>8H6 %>@?7>8:,

* '1"+:* ':,

  '+#2?485+ ',&* '&@?7>8&@?7>8,

  $+#2?485+* ',&* ' &@?7>8&@?7>8,

  '+#2?485+* ',&* '&@?7>8&@?7>8,

+#2=64#?348C+ ,& $,

""+ ,

+,

B

D

*!+,

/E+,

D