/* testcombo.c
* Copyright ( C ) 2003 Kristian Rietveld
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation ; either
* version 2 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Library General Public License for more details .
*
* You should have received a copy of the GNU Library General Public
* License along with this library . If not , see < http : //www.gnu.org/licenses/>.
*/
#include <gtk/gtk.h>
#include <string.h>
#include <stdio.h>
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
/**
* oh yes , this test app surely has a lot of ugly code
*/
/* blaat */
static GtkTreeModel *
create_tree_blaat (void )
{
GtkWidget *cellview;
GtkTreeIter iter, iter2;
GtkTreeStore *store;
cellview = gtk_cell_view_new ();
store = gtk_tree_store_new (3 , G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter,
0 , "dialog-warning" ,
1 , "dialog-warning" ,
2 , FALSE ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "process-stop" ,
1 , "process-stop" ,
2 , FALSE ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "document-new" ,
1 , "document-new" ,
2 , FALSE ,
-1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter,
0 , "edit-clear" ,
1 , "edit-clear" ,
2 , FALSE ,
-1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter,
0 , "document-open" ,
1 , "document-open" ,
2 , FALSE ,
-1 );
g_object_unref (g_object_ref_sink (cellview));
return GTK_TREE_MODEL (store);
}
static GtkTreeModel *
create_empty_list_blaat (void )
{
GtkWidget *cellview;
GtkTreeIter iter;
GtkListStore *store;
cellview = gtk_cell_view_new ();
store = gtk_list_store_new (2 , G_TYPE_STRING, G_TYPE_STRING);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "dialog-warning" ,
1 , "dialog-warning" ,
-1 );
g_object_unref (g_object_ref_sink (cellview));
return GTK_TREE_MODEL (store);
}
static void
populate_list_blaat (gpointer data)
{
GtkComboBox *combo_box = GTK_COMBO_BOX (data);
GtkListStore *store;
GtkWidget *cellview;
GtkTreeIter iter;
store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box));
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
if (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter))
return ;
cellview = gtk_cell_view_new ();
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "process-stop" ,
1 , "process-stop" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "document-new" ,
1 , "document-new" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "edit-clear" ,
1 , "edit-clear" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , NULL,
1 , "separator" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "document-open" ,
1 , "document-open" ,
-1 );
g_object_unref (g_object_ref_sink (cellview));
}
static GtkTreeModel *
create_list_blaat (void )
{
GtkWidget *cellview;
GtkTreeIter iter;
GtkListStore *store;
cellview = gtk_cell_view_new ();
store = gtk_list_store_new (2 , G_TYPE_STRING, G_TYPE_STRING);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "dialog-warning" ,
1 , "dialog-warning" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "process-stop" ,
1 , "process-stop" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "document-new" ,
1 , "document-new" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "edit-clear" ,
1 , "edit-clear" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , NULL,
1 , "separator" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "document-open" ,
1 , "document-open" ,
-1 );
g_object_unref (g_object_ref_sink (cellview));
return GTK_TREE_MODEL (store);
}
static GtkTreeModel *
create_list_long (void )
{
GtkTreeIter iter;
GtkListStore *store;
store = gtk_list_store_new (1 , G_TYPE_STRING);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "here is some long long text that grows out of the combo's allocation" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "with at least a few of these rows" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "so that we can get some ellipsized text here" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "and see the combo box menu being allocated without any constraints" ,
-1 );
return GTK_TREE_MODEL (store);
}
static GtkTreeModel *
create_food_list (void )
{
GtkTreeIter iter;
GtkListStore *store;
store = gtk_list_store_new (2 , G_TYPE_STRING, G_TYPE_STRING);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "Pepperoni" ,
1 , "Pizza" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "Cheese" ,
1 , "Burger" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "Pineapple" ,
1 , "Milkshake" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "Orange" ,
1 , "Soda" ,
-1 );
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
0 , "Club" ,
1 , "Sandwich" ,
-1 );
return GTK_TREE_MODEL (store);
}
/* blaat */
static GtkTreeModel *
create_phylogenetic_tree (void )
{
GtkTreeIter iter, iter2, iter3;
GtkTreeStore *store;
store = gtk_tree_store_new (1 ,G_TYPE_STRING);
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter,
0 , "Eubacteria" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Aquifecales" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Thermotogales" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Thermodesulfobacterium" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Thermus-Deinococcus group" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Chloroflecales" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Cyanobacteria" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Firmicutes" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Leptospirillium Group" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Synergistes" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Chlorobium-Flavobacteria group" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Chlamydia-Verrucomicrobia group" ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "Verrucomicrobia" ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "Chlamydia" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Flexistipes" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Fibrobacter group" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "spirocheteus" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Proteobacteria" ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "alpha" ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "beta" ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "delta " ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "epsilon" ,
-1 );
gtk_tree_store_append (store, &iter3, &iter2);
gtk_tree_store_set (store, &iter3,
0 , "gamma " ,
-1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter,
0 , "Eukaryotes" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Metazoa" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Bilateria" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Myxozoa" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Cnidaria" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Ctenophora" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Placozoa" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Porifera" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "choanoflagellates" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Fungi" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Microsporidia" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Aleveolates" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Stramenopiles" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Rhodophyta" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Viridaeplantae" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "crytomonads et al" ,
-1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter,
0 , "Archaea " ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Korarchaeota" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Crenarchaeota" ,
-1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2,
0 , "Buryarchaeota" ,
-1 );
return GTK_TREE_MODEL (store);
}
/* blaat */
static GtkTreeModel *
create_capital_tree (void )
{
GtkTreeIter iter, iter2;
GtkTreeStore *store;
store = gtk_tree_store_new (1 , G_TYPE_STRING);
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0 , "A - B" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Albany" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Annapolis" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Atlanta" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Augusta" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Austin" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Baton Rouge" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Bismarck" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Boise" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Boston" , -1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0 , "C - D" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Carson City" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Charleston" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Cheyenne" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Columbia" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Columbus" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Concord" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Denver" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Des Moines" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Dover" , -1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0 , "E - J" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Frankfort" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Harrisburg" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Hartford" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Helena" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Honolulu" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Indianapolis" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Jackson" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Jefferson City" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Juneau" , -1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0 , "K - O" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Lansing" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Lincoln" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Little Rock" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Madison" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Montgomery" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Montpelier" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Nashville" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Oklahoma City" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Olympia" , -1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0 , "P - S" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Phoenix" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Pierre" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Providence" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Raleigh" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Richmond" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Sacramento" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Salem" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Salt Lake City" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Santa Fe" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Springfield" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "St. Paul" , -1 );
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0 , "T - Z" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Tallahassee" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Topeka" , -1 );
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0 , "Trenton" , -1 );
return GTK_TREE_MODEL (store);
}
static void
capital_sensitive (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
gboolean sensitive;
sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
g_object_set (cell, "sensitive" , sensitive, NULL);
}
static gboolean
capital_animation (gpointer data)
{
static int insert_count = 0 ;
GtkTreeModel *model = GTK_TREE_MODEL (data);
GtkTreePath *path;
GtkTreeIter iter, parent;
switch (insert_count % 8 )
{
case 0 :
gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, NULL, 0 );
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
0 , "Europe" , -1 );
break ;
case 1 :
path = gtk_tree_path_new_from_indices (0 , -1 );
gtk_tree_model_get_iter (model, &parent, path);
gtk_tree_path_free (path);
gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 0 );
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
0 , "Berlin" , -1 );
break ;
case 2 :
path = gtk_tree_path_new_from_indices (0 , -1 );
gtk_tree_model_get_iter (model, &parent, path);
gtk_tree_path_free (path);
gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 1 );
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
0 , "London" , -1 );
break ;
case 3 :
path = gtk_tree_path_new_from_indices (0 , -1 );
gtk_tree_model_get_iter (model, &parent, path);
gtk_tree_path_free (path);
gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 2 );
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
0 , "Paris" , -1 );
break ;
case 4 :
path = gtk_tree_path_new_from_indices (0 , 2 , -1 );
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
break ;
case 5 :
path = gtk_tree_path_new_from_indices (0 , 1 , -1 );
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
break ;
case 6 :
path = gtk_tree_path_new_from_indices (0 , 0 , -1 );
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
break ;
case 7 :
path = gtk_tree_path_new_from_indices (0 , -1 );
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
break ;
default : ;
}
insert_count++;
return G_SOURCE_CONTINUE;
}
static void
setup_combo_entry (GtkComboBoxText *combo)
{
gtk_combo_box_text_append_text (combo,
"dum de dum" );
gtk_combo_box_text_append_text (combo,
"la la la" );
gtk_combo_box_text_append_text (combo,
"la la la dum de dum la la la la la la boom de da la la" );
gtk_combo_box_text_append_text (combo,
"bloop" );
gtk_combo_box_text_append_text (combo,
"bleep" );
gtk_combo_box_text_append_text (combo,
"klaas" );
gtk_combo_box_text_append_text (combo,
"klaas0" );
gtk_combo_box_text_append_text (combo,
"klaas1" );
gtk_combo_box_text_append_text (combo,
"klaas2" );
gtk_combo_box_text_append_text (combo,
"klaas3" );
gtk_combo_box_text_append_text (combo,
"klaas4" );
gtk_combo_box_text_append_text (combo,
"klaas5" );
gtk_combo_box_text_append_text (combo,
"klaas6" );
gtk_combo_box_text_append_text (combo,
"klaas7" );
gtk_combo_box_text_append_text (combo,
"klaas8" );
gtk_combo_box_text_append_text (combo,
"klaas9" );
gtk_combo_box_text_append_text (combo,
"klaasa" );
gtk_combo_box_text_append_text (combo,
"klaasb" );
gtk_combo_box_text_append_text (combo,
"klaasc" );
gtk_combo_box_text_append_text (combo,
"klaasd" );
gtk_combo_box_text_append_text (combo,
"klaase" );
gtk_combo_box_text_append_text (combo,
"klaasf" );
gtk_combo_box_text_append_text (combo,
"klaas10" );
gtk_combo_box_text_append_text (combo,
"klaas11" );
gtk_combo_box_text_append_text (combo,
"klaas12" );
}
static void
set_sensitive (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
GtkTreePath *path;
int *indices;
gboolean sensitive;
path = gtk_tree_model_get_path (tree_model, iter);
indices = gtk_tree_path_get_indices (path);
sensitive = indices[0 ] != 1 ;
gtk_tree_path_free (path);
g_object_set (cell, "sensitive" , sensitive, NULL);
}
static gboolean
is_separator (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
GtkTreePath *path;
gboolean result;
path = gtk_tree_model_get_path (model, iter);
result = gtk_tree_path_get_indices (path)[0 ] == 4 ;
gtk_tree_path_free (path);
return result;
}
static void
displayed_row_changed (GtkComboBox *combo,
GtkCellView *cell)
{
int row;
GtkTreePath *path;
row = gtk_combo_box_get_active (combo);
path = gtk_tree_path_new_from_indices (row, -1 );
gtk_cell_view_set_displayed_row (cell, path);
gtk_tree_path_free (path);
}
static void
quit_cb (GtkWidget *widget,
gpointer data)
{
gboolean *done = data;
*done = TRUE ;
g_main_context_wakeup (NULL);
}
int
main (int argc, char **argv)
{
GtkWidget *window, *cellview, *mainbox;
GtkWidget *combobox, *comboboxtext;
GtkWidget *tmp, *boom;
GtkCellRenderer *renderer;
GtkTreeModel *model;
GtkTreePath *path;
GtkTreeIter iter;
GtkCellArea *area;
char *text;
int i;
gboolean done = FALSE ;
guint capital_animation_id;
gtk_init ();
if (g_getenv ("RTL" ))
gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
window = gtk_window_new ();
g_signal_connect (window, "destroy" , G_CALLBACK (quit_cb), &done);
mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2 );
gtk_window_set_child (GTK_WINDOW (window), mainbox);
/* GtkCellView */
tmp = gtk_frame_new ("GtkCellView" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
cellview = gtk_cell_view_new ();
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
renderer,
FALSE );
g_object_set (renderer, "icon-name" , "dialog-warning" , NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
renderer,
TRUE );
g_object_set (renderer, "text" , "la la la" , NULL);
gtk_box_append (GTK_BOX (boom), cellview);
/* GtkComboBox list */
tmp = gtk_frame_new ("GtkComboBox (list)" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_list_blaat ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
FALSE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"icon-name" , 0 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 1 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
is_separator, NULL, NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
/* GtkComboBox dynamic list */
tmp = gtk_frame_new ("GtkComboBox (dynamic list)" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_empty_list_blaat ();
combobox = gtk_combo_box_new_with_model (model);
g_signal_connect (combobox, "notify::popup-shown" ,
G_CALLBACK (populate_list_blaat), combobox);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
FALSE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"icon-name" , 0 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 1 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
is_separator, NULL, NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
/* GtkComboBox custom entry */
tmp = gtk_frame_new ("GtkComboBox (custom)" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_list_blaat ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
FALSE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"icon-name" , 0 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 1 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
is_separator, NULL, NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
tmp = gtk_cell_view_new ();
gtk_cell_view_set_model (GTK_CELL_VIEW (tmp), model);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tmp), renderer, TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tmp), renderer,
"text" , 1 ,
NULL);
displayed_row_changed (GTK_COMBO_BOX (combobox), GTK_CELL_VIEW (tmp));
g_signal_connect (combobox, "changed" , G_CALLBACK (displayed_row_changed), tmp);
gtk_combo_box_set_child (GTK_COMBO_BOX (combobox), tmp);
/* GtkComboBox tree */
tmp = gtk_frame_new ("GtkComboBox (tree)" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_tree_blaat ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
FALSE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"icon-name" , 0 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 1 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
set_sensitive,
NULL, NULL);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
is_separator, NULL, NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
/* GtkComboBox (grid mode) */
tmp = gtk_frame_new ("GtkComboBox (grid mode)" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
/* GtkComboBoxEntry */
tmp = gtk_frame_new ("GtkComboBox with entry" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
comboboxtext = gtk_combo_box_text_new_with_entry ();
setup_combo_entry (GTK_COMBO_BOX_TEXT (comboboxtext));
gtk_box_append (GTK_BOX (boom), comboboxtext);
/* Phylogenetic tree */
tmp = gtk_frame_new ("What are you ?" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_phylogenetic_tree ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 0 ,
NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
/* Capitals */
tmp = gtk_frame_new ("Where are you ?" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_capital_tree ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
renderer,
TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 0 ,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
renderer,
capital_sensitive,
NULL, NULL);
path = gtk_tree_path_new_from_indices (0 , 8 , -1 );
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
capital_animation_id = g_timeout_add (1000 , (GSourceFunc) capital_animation, model);
/* Aligned Food */
tmp = gtk_frame_new ("Hungry ?" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_food_list ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (combobox));
renderer = gtk_cell_renderer_text_new ();
gtk_cell_area_add_with_properties (area, renderer,
"align" , TRUE ,
"expand" , TRUE ,
NULL);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 0 ,
NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_area_add_with_properties (area, renderer,
"align" , TRUE ,
"expand" , TRUE ,
NULL);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 1 ,
NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
/* Ellipsizing growing combos */
tmp = gtk_frame_new ("Unconstrained Menu" );
gtk_box_append (GTK_BOX (mainbox), tmp);
boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0 );
gtk_frame_set_child (GTK_FRAME (tmp), boom);
model = create_list_long ();
combobox = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_box_append (GTK_BOX (boom), combobox);
renderer = gtk_cell_renderer_text_new ();
g_object_set (G_OBJECT (renderer), "ellipsize" , PANGO_ELLIPSIZE_END, NULL);
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE );
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
"text" , 0 , NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0 );
gtk_combo_box_set_popup_fixed_width (GTK_COMBO_BOX (combobox), FALSE );
tmp = gtk_frame_new ("Looong" );
gtk_box_append (GTK_BOX (mainbox), tmp);
combobox = gtk_combo_box_text_new ();
for (i = 0 ; i < 200 ; i++)
{
text = g_strdup_printf ("Item %d" , i);
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combobox), text);
g_free (text);
}
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 53 );
gtk_frame_set_child (GTK_FRAME (tmp), combobox);
gtk_window_present (GTK_WINDOW (window));
while (!done)
g_main_context_iteration (NULL, TRUE );
g_clear_handle_id (&capital_animation_id, g_source_remove);
return 0 ;
}
Messung V0.5 in Prozent C=99 H=93 G=95
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet am 2026-07-03)
¤
*© Formatika GbR, Deutschland