====== GtkIconView ====== Mit ''GtkIconView'' können Icons ("kleine Bilder") in einer Tabelle angezeigt werden. ===== Allgemeine Informationen ===== {{ :gui:gtk:widgets:iconview.png|}} * **Basisklassen:** \\ ''GObject => GInitiallyUnowned => GtkObject => GtkWidget => GtkContainer'' * **Von ''GtkAboutDialog'' abgeleitete Widgets:** - * **Anmerkungen:** Implementiert ''GtkBuildable'', ''GtkCellLayout''. * **Referenz:** [[http://library.gnome.org/devel/gtk/stable/GtkIconView.html|GtkIconView]] ===== Benutzung ===== ==== Erstellung ==== Der (Default-)Konstruktor verlangt keine weiteren Argumente: GtkWidget* icon_view = gtk_icon_view_new(); ==== Icons hinzufügen ==== Um Icons in die Tabelle einzufügen, muss ein sogenanntes ''GtkTreeModel'' erstellt werden. ''GtkTreeModel'' ist allerdings nur ein Interface: Idealerweise benutzt man die Implementierung ''GtkListStore'': GtkListStore *list_store; GdkPixbuf *pixbuf; /* Unser Icon */ GtkTreeIter iter; /* Zeigt auf ein bestimmtes Element im ListStore */ \\ Dann sollte zunächst das Icon geladen werden: pixbuf = gdk_pixbuf_new_from_file(".png", NULL); \\ Als nächstes erstellen wir eine Instanz von ''GtkListStore'': Wir legen die Anzahl an Spalten fest (2), setzen den Typ der ersten Spalte auf ''G_TYPE_STRING'' (schließlich soll unter dem Icon Text stehen) und den Typ der zweiten Spalte auf ''GDK_TYPE_PIXBUF'' (das Icon als Pixbuf selbst): list_store = gtk_list_store_new(2, G_TYPE_STRING, GDK_TYPE_PIXBUF); \\ Schließlich fügen wir Elemente in das ''GtkListStore'' ein: Zunächst setzen wir den ''GtkTreeIter'' auf das nächste Element in der Liste (dessen Inhalt NULL sein sollte) und legen mit ''gtk_list_store_set'' den Inhalt der beiden Spalten fest. In Spalte 0 (G_TYPE_STRING) fügen wir einen Text ein, in Spalte 1 (GDK_TYPE_PIXBUF) unser geladenes Icon. Die Funktion erwartet am Ende der Auflistung eine negative Zahl (-1): gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, 0, "Icon", 1, pixbuf, -1); \\ Nun müssen wir ''GtkIconView'' die Liste übergeben und den Index der Textspalte und den Index der Pixbuf-Spalte übergeben: gtk_icon_view_set_model(GTK_ICON_VIEW(icon_view), GTK_TREE_MODEL(list_store)); gtk_icon_view_set_text_column(GTK_ICON_VIEW(icon_view), 0); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(icon_view), 1); ==== Auswahlverhalten festlegen ==== void gtk_icon_view_set_selection_mode (GtkIconView *icon_view, GtkSelectionMode mode); Die Enumeration ''GtkSelectionMode'' besitzt folgende Werte: ^Wert^Beschreibung^ |GTK_SELECTION_NONE|Kein Element kann ausgewählt werden.| |GTK_SELECTION_SINGLE|Es kann entweder ein Element oder kein Element ausgewählt werden (Standard).| |GTK_SELECTION_BROWSE|Nur ein Element kann ausgewählt werden. Es kann nur deaktiviert werden, wenn ein anderes Element dafür aktiviert wird.| |GTK_SELECTION_MULTIPLE|Es können beliebig viele Elemente oder keines ausgewählt werden.| ==== Auf Aktivierung eines Icons reagieren ==== Mit dem ''item-activate'' Signal können Aktivierungen von Icons im GtkIconView verarbeitet werden. Das Signal wird ausgelöst, wenn: * der Benutzer auf ein Element im GtkIconView doppelt geklickt hat * der Benutzer bei einem markierten Element Enter oder Leertaste gedrückt hat * die Funktion ''gtk_icon_view_item_activated'' aufgerufen wurde Die Callback-Funktion erwartet drei Argumente: void on_item_activated(GtkIconView *iconview, GtkTreePath *path, gpointer user_data) Um zu erfahren, welches Element aktiviert wurde, interessiert uns ''path''. gint index_of_element = gtk_tree_path_get_indices(path)[0]; ''gtk_tree_path_get_indices'' liefert ein Array aus Integers, welches die Indizes aller Knoten im Baum enthält, die der Pfad von der Wurzel zum aktivierten Element enthält. Da für ein GtkIconView üblicherweise GtkListStore als GtkTreeModel-Implementierung benutzt wird, muss nur auf den Index des Knoten auf der ersten Ebene zugreifen: Mehr Ebenen besitzt GtkListStore nicht! Eine weitere Möglichkeit setzt voraus, dass der GtkListStore, der bei der Erstellung des GtkIconView benutzt wurde, als user_data übergeben wird. GtkTreeIter iter; gtk_tree_model_get_iter(GTK_TREE_MODEL(user_data), &iter, path); ''iter'' zeigt jetzt auf das Element im GtkListStore, dass aktiviert wurde. Nun kann der Inhalt mit ''gtk_list_store_set'' direkt verändert werden. ====== ====== -----
[[gui:gtk:widgets:start|Hoch zur Übersicht]]