return 0;
}
ΠΠ° ΡΠΈΡ. 16.10 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° buttons.c Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ GtkButton ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠ².
Π ΠΈΡ. 16.10
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΌΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ OK, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°Π·Π½ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ.
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° β ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ GtkButton ΡΠ΅ΡΡΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² β ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΈΠΏΠ° GtkToggleButton, GtkCheckButton ΠΈ GtkRadioButton Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_toggle_button_get_active. ΠΡΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° β ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ get_active Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΡΠ΅Π±ΡΡΡΠΈΠΉΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄.
GtkTreeView
Π ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² GTK+, Π½ΠΎ Π½Π΅ Π²ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΈ GtkTreeView β ΡΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ.
GtkWidget
+---- GtkContainer
+---- GtkTreeView
GtkTreeView β ΡΠ»Π΅Π½ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ², Π½ΠΎΠ²ΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ° GTK+ 2, ΡΠΎΠ·Π΄Π°ΡΡΠΈΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ Π΄Π΅ΡΠ΅Π²Π° ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΊΠ° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΡΡΠ΅ΡΠΈΡΡ Π² ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° GtkTreeView ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΠΌΠ΅ΡΠΈΠ²Π°Ρ ΡΠ΅ΠΊΡΡ, ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΠΊΡ ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π²Π²ΠΎΠ΄ΠΈΠΌΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² GtkEntry, ΠΈ Ρ.Π΄.
Π‘Π°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ GtkTreeView β Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ gtk-demo, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ GTK+. ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² GTK+, Π²ΠΊΠ»ΡΡΠ°Ρ GtkTreeView (ΡΠΈΡ. 16.11).
Π ΠΈΡ. 16.11
Π‘Π΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ GtkTreeView ΡΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
β‘ GtkTreeView β ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΊΠ°;
β‘ GtkTreeViewColumn β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ»Π±ΡΠ° ΡΠΏΠΈΡΠΊΠ° ΠΈΠ»ΠΈ Π΄Π΅ΡΠ΅Π²Π°;
β‘ GtkCellRenderer β ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΌΠΈ ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ;
β‘ GtkTreeModel β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π΄Π΅ΡΠ΅Π²Π° ΠΈ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠΎΡΠΌΠΈΡΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ β ΠΠΎΠ΄Π΅Π»Ρ. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΠΎΠ΄Π΅Π»ΠΈ (ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΠΎΠ΄Π΅Π»Ρ/ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅/ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ (Model/View/Controller) ΠΈΠ»ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎ MVC) Π½Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½Π° GTK+, Π½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π° MVC Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ°Π·Π½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ Π±Π΅Π· Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΈΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄Π²Π΅ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π±Π΅Π· Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄Π²ΡΡ ΠΊΠΎΠΏΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
Π¨Π°Π±Π»ΠΎΠ½ MVC ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ Π² Web-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Web-ΡΠ°ΠΉΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π² ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ»ΠΈ WAP-ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»ΡΡ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π² Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ , ΠΏΡΠΎΡΡΠΎ Π·Π° ΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π»Ρ Web-ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΠΎΠ΄Π΅Π»Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² GTK+ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° GtkTreeStore ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², Π° ΠΎΠ±ΡΠ΅ΠΊΡ GtkListStore ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GtkTreeStore Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ², Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΡΡ ΡΠΈΠΏΡ Π²ΡΠ΅Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ²:
GtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_BOOLEAN);
Π§ΡΠ΅Π½ΠΈΠ΅, Π²ΡΡΠ°Π²ΠΊΠ°, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΡΠΊΡΡΡ GtkTreeIter. ΠΡΠΈ ΡΡΡΡΠΊΡΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠ·Π»Ρ Π΄Π΅ΡΠ΅Π²Π° (ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΈ ΡΠΏΠΈΡΠΊΠ°) ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΠΈ. ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² API Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΎΡΠ΅ΠΊ Π΄Π΅ΡΠ΅Π²Π°, Π½ΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_tree_store_append.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π΅ΡΠ΅Π²Π°, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ. Π€ΡΠ½ΠΊΡΠΈΡ gtk_tree_store_append Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ GtkTreeIter, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π² Π΄Π΅ΡΠ΅Π²Π΅, ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL Π² ΡΡΠ΅ΡΡΠ΅ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅), ΡΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ (Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΈ):
GtkTreeIter iter;
gtk_tree_store_append(store, &iter, NULL);
ΠΠΎΠ»ΡΡΠΈΠ² ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΡΡΡΠΎΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_tree_store_set:
gtk_tree_store_set(store, &iter,
0, "Def Leppard",
1, 1987,
2, TRUE, -1);
ΠΠΎΠΌΠ΅Ρ ΡΡΠΎΠ»Π±ΡΠ° ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ -1. ΠΠΎΠ·ΠΆΠ΅ Π²Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΈΠΏ enum Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΠΎΠ»Π±ΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠΌΠΈ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²Π΅ΡΠ²Ρ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ (Π΄ΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ), Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅, Π²ΡΠ·Π²Π°Π² ΡΠ½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ gtk_tree_store_append ΠΈ ΡΠΊΠ°Π·Π°Π² Π½Π° ΡΡΠΎΡ ΡΠ°Π· Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΡΡΠΎΠΊΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ:
GtkTreeIter child;
gtk_tree_store_append(store, &child, &iter);
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ GtkTreeStore ΠΈ ΡΡΠ½ΠΊΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GtkListStore ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ API, Π° ΠΌΡ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° GtkTreeView.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GtkTreeView β ΡΠ°ΠΌΠ° ΠΏΡΠΎΡΡΠΎΡΠ°: ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΈΠΏΠ° GtkTreeStore ΠΈΠ»ΠΈ GtkListStore:
GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
Π‘Π΅ΠΉΡΠ°Ρ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ GtkCellRenderer ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΎΠ»Π±ΡΠΎΠ².
GtkCellRenderer β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ Π΄Π΅Π»ΠΎ Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌΠΈ ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ, ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈ ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ-Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ:
β‘ GtkCellRendererText;
β‘ GtkCellRendererPixBuf;
β‘ GtkCellRendererToggle.
Π Π²Π°ΡΠ΅ΠΌ ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π΅ΠΊ, GtkCellRendererText.
GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
"This is the column title", renderer, "text", 0, NULL);
ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π΅Π³ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΠ°Π²ΠΊΠΈ ΡΡΠΎΠ»Π±ΡΠ°. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠ°Π·Ρ Π·Π°Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° GtkCellRendererText, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ NULL ΠΏΠ°ΡΡ "ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅". Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·Π°Π½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π°, Π½ΠΎΠΌΠ΅Ρ ΡΡΠΎΠ»Π±ΡΠ°, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΡΠΎΠ»Π±ΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Ρ Π·Π°Π΄Π°Π΅ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡ "text", ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π½ΠΎΠΌΠ΅Ρ ΡΡΠΎΠ»Π±ΡΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GtkCellRendererText ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅, ΡΡΠΈΡΡ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Ρ.Π΄.
Π ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 16.7, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°Π³ΠΈ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.7. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° GtkTreeViewΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΠΉΠ» tree.Ρ.
1. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΈΠΏ enum Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π½ΠΈΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ. ΠΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΊΠ°ΠΊ N_COLUMNS:
#include <gtk/gtk.h>
enum {
COLUMN_TITLE, COLUMN_ARTIST, COLUMN_CATALOGUE, N_COLUMNS
};
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkTreeStore *store;
GtkWidget *view;
GtkTreeIter parent_iter, child_iter;
GtkCellRenderer *renderer;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(ΡloseApp), NULL);
2. ΠΠ°Π»Π΅Π΅ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π΅ΡΠ΅Π²Π°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈ ΡΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ :
store = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING);
3. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°ΠΏ β Π²ΡΡΠ°Π²ΠΊΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΈ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΡΡΡΠΎΠΊ Π² Π΄Π΅ΡΠ΅Π²ΠΎ:
gtk_tree_store_append(store, &parent_iter, NULL);
gtk_tree_store_set(store, &parent_iter,
COLUMN_TITLE, "Dark Side of the Moon",
COLUMN_ARTIST, "Pink Floyd",
COLUMN_CATALOGUE, "B000024D4P", -1);
gtk_tree_store_append(store, &child_iter, &parent_iter);
gtk_tree_store_set (store, &child_iter,
COLUMN_TITLE, "Speak to Me", -1);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
4. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π²Π°Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π½ΠΈΡ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ: