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

27
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] 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 CENNI K 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.

description

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.

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

Page 1: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Wydawnictwo Helion

ul. Chopina 6

44-100 Gliwice

tel. (32)230-98-63

e-mail: [email protected]

PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£

IDZ DOIDZ DO

ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EKKATALOG KSI¥¯EK

TWÓJ KOSZYKTWÓJ KOSZYK

CENNIK I INFORMACJECENNIK I INFORMACJE

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW CENNIKZAMÓW CENNIK

CZYTELNIACZYTELNIA

FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE

SPIS TRE�CISPIS TRE�CI

DODAJ DO KOSZYKADODAJ DO KOSZYKA

KATALOG ONLINEKATALOG ONLINE

MySQL. Budowanieinterfejsów u¿ytkownika.Vademecum profesjonalistyAutor: 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, 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.

Page 2: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

����������������� �

��� ����� ��� ��� ��� � ��

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

�������� ���� ��������� �� �������������������������������������������������������

����������� ���������������� ������!�����"��#����#!��� ���������$� �%Dlaczego właśnie MySQL?......................................................................................... 17Licencje .................................................................................................................... 18Porównanie typów danych MySQLz typami dostępnymi w Access 2000 i SQL Server 7 .................................................. 19

Czego brakuje w MySQL?.......................................................................................... 21MySQL, MYSQL i mysql — trzy podobne słowa, trzy różne znaczenia.......................... 27Tylko dla użytkowników programu Access: demony i usługi.......................................... 29Skąd pobrać pakiet instalacyjny MySQL?..................................................................... 30Decyzja dotycząca metody instalacji — wszystkie za i przeciw ...................................... 31Pliki potrzebne do instalacji RPM................................................................................ 33Instalacja ................................................................................................................... 34Pierwsze spotkanie z MySQL: tworzenie, wykorzystywanie i usuwanie bazy danych....... 38Niestandardowe, unikatowe konstrukcje SQL wykorzystywane w MySQL(rozszerzenie standardu ANSI SQL92) ...................................................................... 40

Programy użytkowe w MySQL ................................................................................... 45Interfejs API języka C dla MySQL .............................................................................. 53

���������&� '()*��������+���� �!��#���� ��,- � ����.� ����/� � 0�Dlaczego powinniśmy korzystać z GTK+?................................................................... 60Gdzie zdobyć GTK+ i jak dokonać jego instalacji?........................................................ 61Licencje .................................................................................................................... 61Ogólny opis biblioteki GTK+...................................................................................... 63Pojemniki GTK+ jako odpowiedniki kontrolek zmieniających rozmiary.......................... 71Podstawowe widgety w programie ............................................................................... 73

���������1� ��2 ,����+�!��'()* �0Widget GtkCombo ..................................................................................................... 95GtkProgressBar i GtkStatusBar ................................................................................... 99GtkFrame i GtkAspectFrame..................................................................................... 106Okna dialogowe i informacyjne, czyli obiekty GtkDialog, GtkFileSelection,GtkColorSelectionDialog i GtkFontSelectionDialog ................................................. 110

Systemy menu: obiekty menu, „fabryka elementów” i elementy menu kontekstowego.... 117

Page 3: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

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

���������3� 4����� ������5�#���'()* �&%GtkTable ................................................................................................................. 127GtkTree i GtkCTree ................................................................................................. 132GtkFixed ................................................................................................................. 137GtkLayout ............................................................................................................... 140GtkScrolledWindow................................................................................................. 142GtkNotebook........................................................................................................... 144GtkPaned ................................................................................................................ 147

���������0� '�����������+���� �!��#���� ��,- � ����.� ����/� � �0�Środowisko Glade .................................................................................................... 151Pierwsze spotkanie z Glade: aplikacja WitajSwiecie .................................................... 153Szczegółowa analiza wybranych plików projektu WitajSwiecie.................................... 162Glade i widgety........................................................................................................ 170Tworzenie projektu: trzeba poznać hierarchię obiektów............................................... 173Komunikacja pomiędzy oknami w projekcie utworzonym w Glade............................... 174Zmienne o zasięgu globalnym a poprawne pisanie programów ..................................... 180

��������� �������� ��������� ������������������������������������������������������ ���

���������6� 7��,#����������� �����������������#� ,������,2 ������!����� �80Projekt aplikacji ....................................................................................................... 186Interfejs użytkownika ............................................................................................... 189Tworzenie bazy danych............................................................................................ 193Wdrożenie aplikacji.................................................................................................. 195Modernizacja aplikacji.............................................................................................. 199

���������%� 9������������#� ,������5 ��+�����!��:������;�< &��Tworzenie interfejsu użytkownika za pomocą Glade ................................................... 202Funkcje aplikacji ...................................................................................................... 214Połączenie interfejsu i funkcji wykonujących poszczególne zadania programu............... 248Kompilacja programu ............................................................................................... 259Uwagi dotyczące utworzonego programu ................................................................... 259

���������8� ����#� ,������� �����������,��=����,#����������� &61Przedstawienie problemu .......................................................................................... 264Interfejs użytkownika ............................................................................................... 267Baza danych, przygotowanie autoryzacji .................................................................... 271Tworzenie bazy danych............................................................................................ 273

����������� )�� ���# ,������#� ,��7�����, &8�Budowanie interfejsu użytkownika za pomocą Glade .................................................. 281Kontrola wyświetlanych danych ................................................................................ 286Funkcje tworzonej aplikacji....................................................................................... 289Powią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ń.................................................................................... 327Korzyści płynące z zastosowania Make...................................................................... 328Instalowanie aplikacji ............................................................................................... 330Kompilacja programu dla Win32 za pomocą MS Visual C++....................................... 341

Page 4: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Spis treści 7

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

����������&� )�� ���# ,������#� ,��������� 16�Opis problemu ......................................................................................................... 361Aplikacja sterująca: Raporty...................................................................................... 361Raport 1. Tabela....................................................................................................... 371Raport 2. Wykres kołowy ......................................................................................... 377Raport 3. Wykres liniowo-kolumnowy....................................................................... 387Raport 4. Wykres punktowy...................................................................................... 393

����������1� )������ ,������ ���� ,������#� ,��������� 3�1Kompilacja i dystrybucja w formie pliku RPM ........................................................... 403Kompilacja programów za pomocą MinGW dla Win32 ............................................... 408

���������� ���������������������������������������������������������������������������������� ���

����������3� >����� ���������������?, ���"��#����#��������� -�@�� 3�%Jeszcze raz program „Witaj Swiecie” ......................................................................... 417Komunikacja pomiędzy oknami................................................................................. 422Dokonywanie zmian w aplikacji bez konieczności ponownej kompilacji ....................... 430

���!�� ���������������������������������������������������������������������������������������������� ���

>����#��� 7��#����+������������'����=�����#� ,�������;�< 310interface.c................................................................................................................ 435sesi.glade................................................................................................................. 460

>����#�/� 7��#����+������������'����=�����#� ,��7�����, 3��interface.c................................................................................................................ 499prowizje.glade.......................................................................................................... 516

>����#�A� 7��#����+������������'����=�����#� ,��������� 03%Pliki dla programu głównego..................................................................................... 547Pliki dla programu tworzącego raport w formie tabeli .................................................. 551Pliki dla programu tworzącego wykres kołowy ........................................................... 556Pliki dla programu tworzącego raport w postaci wykresu liniowo-kolumnowego ........... 559Pliki dla programu generującego raport w postaci wykresu punktowego........................ 562

�#������� 0%�

Page 5: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

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.

Page 6: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

128 Część I � Szybkie wprowadzenie

���������Uruchomiony

przykładowy program

� �� �����Prezentacja obiektu GtkTable

���������� ��� ���

�� ������������������� �����������

���������� ��!��� �������������������"�� #�����"$� ������������"��!��������������%��"�����"$���������$� �����!&�����"'��������$� �����!��� ����%���

�� �����������$�$��� �����������'�$��� �����������(�$��� �����������$�'��� �����������$�)��� �����������)�'��� �����������'�)��� �����������)�)��� ��������� �$�

*���������!�����+,�*����� ���������������+,�*����������"������+,�*�������$�$����� ��+,�*�������'�$����� ��+,�*�������(�$����� ��+,�*�������$�'����� ��+,�*�������$�)����� ��+,�*�������)�'����� ��+,�*�������'�)����� ��+,�*�������)�)����� ��+,�

��������+��������&���������*-.,/

�� �����+0����&0���*,�

���������1�� �"����"���"+�#2��3456��#6�78987,�

Page 7: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 129

�� �"����"����������+�#2��3456�+���������,&:���������%�������!���� ��":,�

�� ���������������+�#2�6;<8=#+���������,&:������!:&�#2�>3�4?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�,�

Page 8: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

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���� ����:,��� ���������������+�#2�6;<8=#+����$�$,&:���� ��:&�#2�>3�4?7�@A4=+����$�$����� ��,&4A77,�����'�$1�� ����������"�"���������+:A���"H�� �%�H�@377:,��� ���������������+�#2�6;<8=#+����'�$,&:���� ��:&�#2�>3�4?7�@A4=+����'�$����� ��,&4A77,�����(�$1�� ����������"�"���������+:�!������ �%�>IC342:,��� ���������������+�#2�6;<8=#+����(�$,&:���� ��:&�#2�>3�4?7�@A4=+����(�$����� ��,&4A77,�����$�'1�� ����������"�"���������+:�!�����H�6 �%�H�8J�?45:,��� ���������������+�#2�6;<8=#+����$�',&:���� ��:&�#2�>3�4?7�@A4=+����$�'����� ��,&4A77,�����$�)1�� ����������"�"���������+:�!�����H�6 �%�H�@377H��H�>IC342:,��� ���������������+�#2�6;<8=#+����$�),&:���� ��:&�#2�>3�4?7�@A4=+����$�)����� ��,&4A77,�����)�'1�� ����������"�"���������+:�!�����H�6 �%�H�>IC342H��H�8J�?45:,��� ���������������+�#2�6;<8=#+����)�',&:���� ��:&�#2�>3�4?7�@A4=+����)�'����� ��,&4A77,�����)�)1�� ����������"�"���������+:�!�����H�� �%�H�@377H��H�8J�?45:,��� ���������������+�#2�6;<8=#+����)�),&:���� ��:&�#2�>3�4?7�@A4=+����)�)����� ��,&4A77,�����'�)1�� ����������"�"���������+:�!������ �%�H�@377&8J�?45�>IC342:,��� ���������������+�#2�6;<8=#+����'�),&:���� ��:&�#2�>3�4?7�@A4=+����'�)����� ��,&4A77,��� �$1�� ����� ����������"�"���������+:���!��� "!����:,�D

Page 9: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

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

*�������$�'����� ��+,/�� �"������������!+���,��� ���������������+,��������"������+�#2�8J�?45&B,��� ��������������+�#2�=64#?348C+���������,&���,��� �"���������"����+���������,�D

*�������$�)����� ��+,/�� �"������������!+���,��� ���������������+,��������"������+�#2�@377M�#2�>IC342&B,��� ��������������+�#2�=64#?348C+���������,&���,�

Page 10: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

132 Część I � Szybkie wprowadzenie

�� �"���������"����+���������,�D

*�������)�'����� ��+,/�� �"������������!+���,��� ���������������+,��������"������+�#2�>IC342M�#2�8J�?45&B,��� ��������������+�#2�=64#?348C+���������,&���,��� �"���������"����+���������,�D

*�������)�)����� ��+,/�� �"������������!+���,��� ���������������+,��������"������+�#2�@377M�#2�8J�?45&B,��� ��������������+�#2�=64#?348C+���������,&���,��� �"���������"����+���������,�D

*�������'�)����� ��+,/�� �"������������!+���,��� ���������������+,��������"������+�#2�>IC342M�#2�@377M�#2�8J�?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)

i ������ (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.

Page 11: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

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�� �"����"���"+�#2��3456��#6�78987,�

�� �"����"����������+�#2��3456�+���������,&:���������%�"������"����":,�

�� ���������������+�#2�6;<8=#+���������,&:������!:&�#2�>3�4?7�@A4=+������!�����,&4A77,�

���N�����1�� ����N���"+#CA8&B,�*��N�����1�� �*��N���"+#CA8&B,�*��N������1�� �*��N���"+@?7>8&B,�

�����"��������� ������!�� #������ =#����%���+�� ����&%� �����!�� 7������ =7���,�� �&����� #���� �� ��%�"��!�� ��"�����!&

Page 12: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

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�#C88�3#8K+�*�$�����',&������������',�

��#����������%�"��� � �����������! ������"����<������!� �"�� �������!�������! ������"�&������ ����"�����%��������&�����������!����������������������

�� �"���������"+����'�����$,�

������������)1�� ��������"+,�����'�����$�����$1�� �������������"�"���������+:������)&8������$:,��� ������� ���+�#2�#C88+������������),&����'�����$�����$,�

�� ����������������������+�#2�#C88�3#8K+����'�����$,&������������),�

�� �"���������"+����'�����$�����$,�

"�����������1�� �������������"�"���������+:������!:,��� ������� ���+�#2�#C88+���������,&"�����������,�

��������"������1�� ��������"+,��� ����������������������+�#2�#C88�3#8K+"�����������,&��������"������,�

��5���%�! �� �"������"������"����4�% ���"��"���!�!��! ����F���

Page 13: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 135

����������1�� �������������"+,�������"�����1�� ���������"+:#�%�����! ����:,��� ��������������+�#2�=64#?348C+����������,&������"�����,��� ������� ���+�#2�#C88+��������"������,&����������,��� �"���������"+������"�����,��� �"���������"+����������,�

��4���� �����������!"����"�� ��!��� ���

�����������1�� �������������"+,��������"�����1�� ����������"�"���������+:#�%��� ��!��� �:,��� ��������������+�#2�=64#?348C+�����������,&�������"�����,��� ������� ���+�#2�#C88+��������"������,&�����������,��� �"���������"+�������"�����,��� �"���������"+�����������,�

��?����� ���"!�������

���� ���N�����1�� �������������"+,����� ���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�� �� �������!"����%������"�����!����"�����!�������� �� ����������������������������� �����%���&��!����������%���"������

Page 14: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

136 Część I � Szybkie wprowadzenie

�#CA8�������&��������������"����"����" �������!���+�����������������������!��"����" �������!��,���N ��������������������� �����%���&��!���!"�����%������"�����!��!�������

�����!�����������!��1�� ����������"�"���������+:>�!�������:,��� ���������������+�#2�6;<8=#+�����!�����������!��,&:���� ��:&�#2�>3�4?7�@A4=+�����!�����������!������� ��,&4A77,�

�����!�����N �����1�� ����������"�"���������+:>�!�����"�%���!:,��� ���������������+�#2�6;<8=#+�����!�����N �����,&:���� ��:&�#2�>3�4?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�=#C88�7348>�4648,����� �����'F�� ������������������!��+�#2�=#C88+�����������,&�#2�=#C88�7348>�>6735,����� �����)F�� ������������������!��+�#2�=#C88+�����������,&�#2�=#C88�7348>�56##85,����� �

Page 15: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 137

����(F�� ������������������!��+�#2�=#C88+�����������,&�#2�=#C88�7348>�#?;;85,����� ��������F�� ����+:#��������� �"�����!�"�������RR:,����� �D

D

*��������!�����N ���������� ��+,/�����������N ��������!��1$�

��+�N ��������!��11(,�N ��������!��1$������N ��������!��QQ�

�"����+�N ��������!��,/����$F�� ������������N ��������!��+�#2�=#C88+�����������,&�#2�=#C88�8J�?458C�4648,����� �����'F�� ������������N ��������!��+�#2�=#C88+�����������,&�#2�=#C88�8J�?458C�>SA?C8,����� �����)F�� ������������N ��������!��+�#2�=#C88+�����������,&�#2�=#C88�8J�?458C�#C3?4�78,����� �����(F�� ������������N ��������!��+�#2�=#C88+�����������,&�#2�=#C88�8J�?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.

Page 16: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

138 Część I � Szybkie wprowadzenie

���������Obiekt GtkFixed

� �� �����Prezentacja GtkFixed

���������� ��� ����������������������;������� ����������%��� �����������"!���������"�����������"!��"��� �%��"�����%��������������"����� ���������� �������������� ��!��� � �� �"������������ ���� @�N�����

�� �������������N����� ���������N���������� ����������$�

*���������!�����+,�*������$����� ��+,�

��������+��������&���������*-.,/�� �����+0����&0���*,�

������N��1�� �"����"���"+�#2��3456��#6�78987,�

�� �"����"����������+�#2��3456�+������N��,&:���������%����� ���� @�N��:,�

�� ���������������+�#2�6;<8=#+������N��,&:������!:&�#2�>3�4?7�@A4=+������!�����,&4A77,�

��N�������1�� ���N�����"+,�

���� @�N��%������� ��� ����!�"��!����4����!� ����"� �������� �������� ������"������ ��������&���������������� �"���������� @�N���?��!���!����&��N ���& �������������������!����������� �!� ������&������������� �"���������� @�N��&�������!��������%��"����%����%��!������& ��"���%��!�����"!�"����������#� ���������"����������� ��� @�N��& ���!���������!��������%��"����������� �"���������� ����& ����������"!�"���������"��!�� ���%������� ��"�<����"����� �����!�������� ���������!� ���������!�������� @�N��&��"���������������� �"��������"�%�"!����!�� &��! ���������!���� �������!�"������!��<�������� � �����!�������� �����%����������!"���� ��� �����"����&�� @�N����������%��!�������!�������"�% �"������������K����� ��"����������"�!���������� �"��!�������"��

Page 17: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 139

�� �����"����"��� ������������ ��������P�����!� ��! ����"� ��!�%����� ��$&$���������!���� ��� ��!�%�$BB&$BB�+� �����"���������%��������"��� ��������,���!�������! ������������� ����TB&TB&� ����������%��!������!%���� ����������!����� ���$TB&TB&��� �����"�����"�������"�%��������� &��!�"!�"������!���� ��������������%��� �"����������6 �����"��%����!��"��� ���"����� ���!������&��!���� �!���������������������������������� ��� �"����������� @�N���6 �����"��& ����� ���"������!�� "�������&�����������" �"�!�� ��! �� ���� ������������ ��������� ����� �������=��U�� @�N��%������������"!"�������"����&� �����������������% ���!���%���� 7�!������������ �������"!����:����������� ��:� ��"���!�"��!������! �����������+�� @�N����� 7�!���,���

���$1�� ����������"�"���������+:���!��� $:,��� ���������������+�#2�6;<8=#+���$,&:���� ��:&�#2�>3�4?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,�

Page 18: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

140 Część I � Szybkie wprowadzenie

��/!� ��1!� ��O'BB�D"����+!� ���'BB,�

�� ���N�����*�+�#2�@3J85+��N�������,&�#2��35�8#+���$,&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�� �"����"���"+�#2��3456��#6�78987,�

�� �"����"����������+�#2��3456�+������!���,&:���������%����� ���� 7�!���:,�

�� ���������������+�#2�6;<8=#+������!���,&:������!:&�#2�>3�4?7�@A4=+������!�����,&4A77,�

Page 19: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 141

��!��������1�� ���!������"+4A77&4A77,�

��P������"!"��!"����� �%��� ���!������"+,& ����%� � ��������"� �������%����� ��"�������!%�!��+ �����!��� ����"!��,&������� ���!����� � �������������������"������ �%����"�����!������ �!������������" �:��N��:��:��!���:+ ������ �"��������������,���#�� ������%��� �����!�� � ���������&��� ������� �� ������ �"!�������� �%�& �������%��!��������"�������� ���� 7�!������

���$1�� ����������"�"���������+:���!��� $:,��� ���������������+�#2�6;<8=#+���$,&:���� ��:&�#2�>3�4?7�@A4=+���$����� ��,&4A77,��� ���!���� ��+�#2�7?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����%"�� ���������� ������!�� @�N����� 7�!�����P�������!��"������"�� ��"����%�������������&�� ��%������ �"��%�&� �� ������� ��������������%������� ��"O������ �"���<�����������W���� ��!����� ��!"�������� ����� �����!�����

Page 20: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

142 Część I � Szybkie wprowadzenie

�� ���!����������+�#2�7?V6A#+��!��������,,�

�� ���!������*�+�#2�7?V6A#+��!��������,&�#2��35�8#+���$,&N� ��&!� ��,�

�� ���!�������"+�#2�7?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���������� ��������������� ����!�����&��������� ����!���"�!��

*���������!�����+,�*����������� ����!���������� ��+,�*����������� ����!���"�!������ ��+,�

Page 21: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 143

��������+��������&���������*-.,/�� �����+0����&0���*,�

������������1�� �"����"���"+�#2��3456��#6�78987,��� �"����"����������+�#2��3456�+������������,&:���������%�� ��� �� ��� ���"�%����:,�

��4����!���"��!�&����� ���%�� ����� �"!����������"�� ���������!�������&��!� ����%�������������� �"����������?�!"!�"��������!�"� ��!��� �&���������������������������!� �����"������� ����!����"������"�� ����!"!�"�������� �� �" ���"�%�������

�� ���������������+�#2�6;<8=#+������������,&:������!:&�#2�>3�4?7�@A4=+������!�����,&4A77,�

�������������1�� ����������"����"���"+4A77&4A77,���N�������1�� ���N�����"+,�

�������� ����!�����1�� ����������"�"���������+:��� �"!�"�������"����� ������!:,��� ���������������+�#2�6;<8=#+�������� ����!�����,&:���� ��:&�#2�>3�4?7�@A4=+�������� ����!���������� ��,&4A77,�

�������� ����!���"�!�1�� ����������"�"���������+:��� ���"���"�������:,��� ���������������+�#2�6;<8=#+�������� ����!���"�!�,&:���� ��:&�#2�>3�4?7�@A4=+�������� ����!���"�!������ ��,&4A77,�

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

�� ����������"����"�����"����*��" ���+�#2�>=C67785��3456�+�������������,&��N�������,��� ��������������+�#2�=64#?348C+������������,&�������������,�

�� �"���������"����+������������,��� �����+,�������B�

D

*���������!�����+,/�� ������E���+,�D

*����������� ����!���������� ��+,/�� ����������"����"����� ����!+�#2�>=C67785��3456�+�������������,&�#2��673=V�?A#6K?#3=&�#2��673=V�?A#6K?#3=,�

Page 22: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

144 Część I � Szybkie wprowadzenie

D

*����������� ����!���"�!������ ��+,/��#�%������!���������"�������"���������

�� ����������"����"����� ����!+�#2�>=C67785��3456�+�������������,&�#2��673=V�?7�?V>&�#2��673=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 programprezentujący

działanie

GtkNotebook

� �� �����Program prezentujący obiekt GtkPaned

���������� ��� ���

�� ������������������ ��� �������������� �������� ���������N��� ���$��� �������*��N� ���'�

*���������!�����+,�*����������������������� ��+,�*�������������������������������� ��+,�*���������������������������������� ��+,�*����������� �������� ��+,�*����������� ��������N����� ��+,�*���������� ��"����� ���+,�

��������+��������&���������*-.,/�� �����������������������

Page 23: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 145

�� �������������������������������&������������������������������ ��������������� ���&��������� ��������N��� ��������������$&��������'�

�� �����+0����&0���*,�

����������� 1�� �"����"���"+�#2��3456��#6�78987,��� �"����"����������+�#2��3456�+����������� ,&:���������%�� ��4������ :,�

�� ���������������+�#2�6;<8=#+����������� ,&:������!:&�#2�>3�4?7�@A4=+������!�����,&4A77,�

������� �����1�� �������� ���"+,��� ���������������+�#2�6;<8=#+������� �����,&:�"����O ���:&�#2�>3�4?7�@A4=+������� ��"����� ���,&4A77,�

��>����� ���"���"������� ������

��N��� ���$1�� ���N�����"+,��������$1�� ���������"+:����"����� ��� �:,�

���������������1�� ����������"�"���������+:C����%��� ���� :,��� ���������������+�#2�6;<8=#+���������������,&:���� ��:&�#2�>3�4?7�@A4=+�������������������� ��,&4A77,�

������������������������1�� ����������"�"���������+:#� �����"��� ����� ���� :,��� ���������������+�#2�6;<8=#+������������������������,&:���� ��:&�#2�>3�4?7�@A4=+����������������������������� ��,&4A77,�

��������������������������1�� ����������"�"���������+:C����"��� ����� ���� :,��� ���������������+�#2�6;<8=#+��������������������������,&:���� ��:&�#2�>3�4?7�@A4=+������������������������������� ��,&4A77,�

�� ���N��� ��+�#2�@3J85+��N��� ���$,&���������������&'B&'B,��� ���N��� ��+�#2�@3J85+��N��� ���$,&������������������������&'B&TB,��� ���N��� ��+�#2�@3J85+��N��� ���$,&��������������������������&'B&YB,��� �������� �� ���� ���+�#2�46#8;662+������� �����,&��N��� ���$&�������$,�

��>�����'�����*��N� ���'1�� �*��N���"+#CA8&B,��������� ���1�� ����������"�"���������+:5���%������:,��� ���������������+�#2�6;<8=#+�������� ���,&:���� ��:&�#2�>3�4?7�@A4=+�������� �������� ��,&4A77,�

Page 24: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

146 Część I � Szybkie wprowadzenie

�������� ��������N1�� ����������"�"���������+:����������� ������!:,��� ���������������+�#2�6;<8=#+�������� ��������N,&:���� ��:&�#2�>3�4?7�@A4=+�������� ��������N����� ��,&4A77,�

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

�������'1�� ���������"+:5������ ��� �:,�

�� �������� �� ���� ���+�#2�46#8;662+������� �����,&*��N� ���'&�������',�

��2�����������%�� ��� �&��������������� �����"�������

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

�� �"���������"����+����������� ,��� �����+,�������B�

D

*���������!�����+,/�� ������E���+,�D

*����������������������� ��+,/����������������������1$�

��+������������11(,������������1$�����������������QQ�

�"����+������������,/����$F�� �������� ��������� ��+�#2�46#8;662+������� �����,&�#2��6>�#6�,����� �����'F�� �������� ��������� ��+�#2�46#8;662+������� �����,&�#2��6>�C3�I#,����� �����)F�� �������� ��������� ��+�#2�46#8;662+������� �����,&�#2��6>�;6##6K,����� �����(F�� �������� ��������� ��+�#2�46#8;662+������� �����,&�#2��6>�78@#,����� ��������F�� ����+:#�� ��! ��� ��� �"���������!"!��� ���H�:,�DD

*�������������������������������� ��+,/�� �������� ���������������������+�#2�46#8;662+������� �����,&#CA8,�D

*���������������������������������� ��+,

Page 25: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 147

/��#���� �%��������� ��&%������ ��� �������������� � ��"�%�����"�%�����������!� ��! �� ���� �%������"������ ����&%� ������������������������������ ��+,����� �������� ���������������������+�#2�46#8;662+������� �����,&@?7>8,�D

*����������� �������� ��+,/�� ���������N����� �����������

��N��1�� ���N�����"+,�

���1�� ���������"+:4�"!:,�

�� �������� �� ���� ���+�#2�46#8;662+������� �����,&��N��&���,�

��6��"�������� �����

�� �"���������"����+������� �����,�D

*����������� ��������N����� ��+,/��P� ��� ���������"�������������� ����+:3��� ������!��Z��H�:&�� �������� ������������� ���+�#2�46#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 ���!����� ���������"#.

Page 26: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

148 Część I � Szybkie wprowadzenie

���������Okno prezentacji

GtkPaned

� �� �����Prezentacja GtkPaned

���������� ��� ���

�� ����������� �����

*���������!�����+,�

��������+��������&���������*-.,/�� ������������ ����$�������� �����������* ����$��� ��� ������������ ����'�������� �����������* ����'��� ��� �����������* ����'���������� �������� ����$��� �������* ����$��� �������� ����'��� �������* ����'�

�� �����+0����&0���*,�

���� ����1�� �"����"���"+�#2��3456��#6�78987,��� �"����"����������+�#2��3456�+���� ����,&:���������%��� �����:,�

�� ���������������+�#2�6;<8=#+���� ����,&:������!:&�#2�>3�4?7�@A4=+������!�����,&4A77,�

� ����$1�� �� �������"+,��� � ����������������+�#2��?485+� ����$,&'B,��� � ����������������+�#2��?485+� ����$,&'B,������ ����$�����1�� ���������"+:� ����$����"�H�6 �%�C�����#CA8H�6 �%�>���� #CA8:,��� � ����� �� $+�#2��?485+� ����$,&����� ����$�����&#CA8&#CA8,�

���!"��������� �%��� � ����������������+,������"���������������������� ������! �������"��������������%��!����� ���������"��!�&������"��� ������ "!����������!�����"�������%�����!� �"�� ������ � ����������������+, �"���%�������������������& "������"��� ��!��� �&����� � ��������!� �"�� ������������������! ���������� � ����� �� $+, �"���%����������������������� ���"��"�%& ������%������ ��������"�����%&� ����"�%������ �������� � ����� �� '+,����!+ ���� �����%,������������������� ��""�����%��� ��"�%������

Page 27: MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty

Rozdział 4. � Zaawansowane obiekty GTK+ 149

� ������ �������* ���������������!��� �%��� � ����� �� �+,F� ��� ����������"!�������"����� �����!&����������!"��"�%+ ��"�%,���������%+�����%,��������������%������"������#CA8&���� � �����!�������������!�� �"�������������� �� ���%�"� ������"�!�������� %������"������@?7>8& ��������������������� �"�������������%���%��� �"������������� �� �����������

* ����$1�� �* �������"+,��� � ����������������+�#2��?485+* ����$,&'B,�����* ����$��� 1�� ���������"+:* ����$����H�6 �%�C�����#CA8H�6 �%�>���� @?7>8:,��� � ����� �� '+�#2��?485+� ����$,&* ����$&#CA8&@?7>8,��� � ����� �� $+�#2��?485+* ����$,&����* ����$��� &#CA8&@?7>8,�

� ����'1�� �� �������"+,��� � ����������������+�#2��?485+� ����',&'B,������ ����'�����1�� ���������"+:� ����'����"�H�6 �%�C�����@?7>8H�6 �%�>���� #CA8:,��� � ����� �� '+�#2��?485+* ����$,&� ����'&@?7>8&#CA8,��� � ����� �� $+�#2��?485+� ����',&����� ����'�����&@?7>8&#CA8,�

* ����'1�� �* �������"+,��� � ����������������+�#2��?485+* ����',&T,��� � ����������������+�#2��?485+* ����',&T,�����* ����'��� 1�� ���������"+:* ����'����H�C�����@?7>8H�6 �%�>���� @?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