/* testtreesort.c
* Copyright ( C ) 2001 Red Hat , Inc
* Author : Jonathan Blandford
*
* 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 "config.h"
#include <gtk/gtk.h>
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
typedef struct _ListSort ListSort;
struct _ListSort
{
const char *word_1;
const char *word_2;
const char *word_3;
const char *word_4;
int number_1;
};
static ListSort data[] =
{
{ "Apples" , "Transmogrify long word to demonstrate weirdness" , "Exculpatory" , "Gesundheit" , 30 },
{ "Oranges" , "Wicker" , "Adamantine" , "Convivial" , 10 },
{ "Bovine Spongiform Encephilopathy" , "Sleazebucket" , "Mountaineer" , "Pander" , 40 },
{ "Foot and Mouth" , "Lampshade" , "Skim Milk\nFull Milk" , "Viewless" , 20 },
{ "Blood,\nsweat,\ntears" , "The Man" , "Horses" , "Muckety-Muck" , 435 },
{ "Rare Steak" , "Siam" , "Watchdog" , "Xantippe" , 99999 },
{ "SIGINT" , "Rabbit Breath" , "Alligator" , "Bloodstained" , 4123 },
{ "Google" , "Chrysanthemums" , "Hobnob" , "Leapfrog" , 1 },
{ "Technology fibre optic" , "Turtle" , "Academe" , "Lonely" , 3 },
{ "Freon" , "Harpes" , "Quidditch" , "Reagan" , 6 },
{ "Transposition" , "Fruit Basket" , "Monkey Wort" , "Glogg" , 54 },
{ "Fern" , "Glasnost and Perestroika" , "Latitude" , "Bomberman!!!" , 2 },
{NULL, }
};
static ListSort childdata[] =
{
{ "Heineken" , "Nederland" , "Wanda de vis" , "Electronische post" , 2 },
{ "Hottentottententententoonstelling" , "Rotterdam" , "Ionentransport" , "Palm" , 45 },
{ "Fruitvlieg" , "Eigenfrequentie" , "Supernoodles" , "Ramen" , 2002 },
{ "Gereedschapskist" , "Stelsel van lineaire vergelijkingen" , "Tulpen" , "Badlaken" , 1311 },
{ "Stereoinstallatie" , "Rood tapijt" , "Het periodieke systeem der elementen" , "Laaste woord" , 200 },
{NULL, }
};
enum
{
WORD_COLUMN_1 = 0 ,
WORD_COLUMN_2,
WORD_COLUMN_3,
WORD_COLUMN_4,
NUMBER_COLUMN_1,
NUM_COLUMNS
};
static void
switch_search_method (GtkWidget *button,
gpointer tree_view)
{
if (!gtk_tree_view_get_search_entry (GTK_TREE_VIEW (tree_view)))
{
gpointer search_entry = g_object_get_data (tree_view, "my-search-entry" );
gtk_tree_view_set_search_entry (GTK_TREE_VIEW (tree_view), GTK_EDITABLE (search_entry));
}
else
gtk_tree_view_set_search_entry (GTK_TREE_VIEW (tree_view), NULL);
}
static void
quit_cb (GtkWidget *widget,
gpointer user_data)
{
gboolean *done = user_data;
*done = TRUE ;
g_main_context_wakeup (NULL);
}
int
main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *scrolled_window;
GtkWidget *tree_view;
GtkTreeStore *model;
GtkTreeModel *smodel = NULL;
GtkTreeModel *ssmodel = NULL;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeIter iter;
int i;
GtkWidget *entry, *button;
GtkWidget *window2, *vbox2, *scrolled_window2, *tree_view2;
GtkWidget *window3, *vbox3, *scrolled_window3, *tree_view3;
gboolean done = FALSE ;
gtk_init ();
/**
* First window - Just a GtkTreeStore
*/
window = gtk_window_new ();
gtk_window_set_title (GTK_WINDOW (window), "Words, words, words - Window 1" );
g_signal_connect (window, "destroy" , G_CALLBACK (quit_cb), &done);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8 );
gtk_box_append (GTK_BOX (vbox), gtk_label_new ("Jonathan and Kristian's list of cool words. (And Anders' cool list of numbers) \n\nThis is just a GtkTreeStore" ));
gtk_window_set_child (GTK_WINDOW (window), vbox);
entry = gtk_entry_new ();
gtk_box_append (GTK_BOX (vbox), entry);
button = gtk_button_new_with_label ("Switch search method" );
gtk_box_append (GTK_BOX (vbox), button);
scrolled_window = gtk_scrolled_window_new ();
gtk_scrolled_window_set_has_frame (GTK_SCROLLED_WINDOW (scrolled_window), TRUE );
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand (scrolled_window, TRUE );
gtk_box_append (GTK_BOX (vbox), scrolled_window);
model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
/*
smodel = gtk_tree_model_sort_new_with_model ( GTK_TREE_MODEL ( model ) ) ;
ssmodel = gtk_tree_model_sort_new_with_model ( GTK_TREE_MODEL ( smodel ) ) ;
*/
tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
gtk_tree_view_set_search_entry (GTK_TREE_VIEW (tree_view), GTK_EDITABLE (entry));
g_object_set_data (G_OBJECT (tree_view), "my-search-entry" , entry);
g_signal_connect (button, "clicked" ,
G_CALLBACK (switch_search_method), tree_view);
/* gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), select_func, NULL, NULL);*/
/* 12 iters now, 12 later... */
for (i = 0 ; data[i].word_1 != NULL; i++)
{
int k;
GtkTreeIter child_iter;
gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
WORD_COLUMN_1, data[i].word_1,
WORD_COLUMN_2, data[i].word_2,
WORD_COLUMN_3, data[i].word_3,
WORD_COLUMN_4, data[i].word_4,
NUMBER_COLUMN_1, data[i].number_1,
-1 );
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
WORD_COLUMN_1, data[i].word_1,
WORD_COLUMN_2, data[i].word_2,
WORD_COLUMN_3, data[i].word_3,
WORD_COLUMN_4, data[i].word_4,
NUMBER_COLUMN_1, data[i].number_1,
-1 );
for (k = 0 ; childdata[k].word_1 != NULL; k++)
{
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
WORD_COLUMN_1, childdata[k].word_1,
WORD_COLUMN_2, childdata[k].word_2,
WORD_COLUMN_3, childdata[k].word_3,
WORD_COLUMN_4, childdata[k].word_4,
NUMBER_COLUMN_1, childdata[k].number_1,
-1 );
}
}
smodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (model));
ssmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (smodel));
g_object_unref (model);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("First Word" , renderer,
"text" , WORD_COLUMN_1,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Second Word" , renderer,
"text" , WORD_COLUMN_2,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Third Word" , renderer,
"text" , WORD_COLUMN_3,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Fourth Word" , renderer,
"text" , WORD_COLUMN_4,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("First Number" , renderer,
"text" , NUMBER_COLUMN_1,
NULL);
gtk_tree_view_column_set_sort_column_id (column, NUMBER_COLUMN_1);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
/* gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (smodel),
WORD_COLUMN_1 ,
GTK_SORT_ASCENDING);*/
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled_window), tree_view);
gtk_window_set_default_size (GTK_WINDOW (window), 400 , 400 );
gtk_window_present (GTK_WINDOW (window));
/**
* Second window - GtkTreeModelSort wrapping the GtkTreeStore
*/
if (smodel)
{
window2 = gtk_window_new ();
gtk_window_set_title (GTK_WINDOW (window2),
"Words, words, words - window 2" );
g_signal_connect (window2, "destroy" , G_CALLBACK (quit_cb), &done);
vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8 );
gtk_box_append (GTK_BOX (vbox2),
gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeStore of window 1" ));
gtk_window_set_child (GTK_WINDOW (window2), vbox2);
scrolled_window2 = gtk_scrolled_window_new ();
gtk_scrolled_window_set_has_frame (GTK_SCROLLED_WINDOW (scrolled_window2), TRUE );
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand (scrolled_window2, TRUE );
gtk_box_append (GTK_BOX (vbox2), scrolled_window2);
tree_view2 = gtk_tree_view_new_with_model (smodel);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("First Word" , renderer,
"text" , WORD_COLUMN_1,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Second Word" , renderer,
"text" , WORD_COLUMN_2,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Third Word" , renderer,
"text" , WORD_COLUMN_3,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Fourth Word" , renderer,
"text" , WORD_COLUMN_4,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view2), column);
/* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (smodel),
( GtkTreeIterCompareFunc ) gtk_tree_data_list_compare_func ,
NULL , NULL ) ;
gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE ( smodel ) ,
WORD_COLUMN_1 ,
GTK_SORT_DESCENDING);*/
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled_window2), tree_view2);
gtk_window_set_default_size (GTK_WINDOW (window2), 400 , 400 );
gtk_window_present (GTK_WINDOW (window2));
}
/**
* Third window - GtkTreeModelSort wrapping the GtkTreeModelSort which
* is wrapping the GtkTreeStore .
*/
if (ssmodel)
{
window3 = gtk_window_new ();
gtk_window_set_title (GTK_WINDOW (window3),
"Words, words, words - Window 3" );
g_signal_connect (window3, "destroy" , G_CALLBACK (quit_cb), &done);
vbox3 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8 );
gtk_box_append (GTK_BOX (vbox3),
gtk_label_new ("Jonathan and Kristian's list of words.\n\nA GtkTreeModelSort wrapping the GtkTreeModelSort of window 2" ));
gtk_window_set_child (GTK_WINDOW (window3), vbox3);
scrolled_window3 = gtk_scrolled_window_new ();
gtk_scrolled_window_set_has_frame (GTK_SCROLLED_WINDOW (scrolled_window3), TRUE );
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window3),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand (scrolled_window3, TRUE );
gtk_box_append (GTK_BOX (vbox3), scrolled_window3);
tree_view3 = gtk_tree_view_new_with_model (ssmodel);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("First Word" , renderer,
"text" , WORD_COLUMN_1,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Second Word" , renderer,
"text" , WORD_COLUMN_2,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_2);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Third Word" , renderer,
"text" , WORD_COLUMN_3,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Fourth Word" , renderer,
"text" , WORD_COLUMN_4,
NULL);
gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_4);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view3), column);
/* gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (ssmodel),
( GtkTreeIterCompareFunc ) gtk_tree_data_list_compare_func ,
NULL , NULL ) ;
gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE ( ssmodel ) ,
WORD_COLUMN_1 ,
GTK_SORT_ASCENDING);*/
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled_window3), tree_view3);
gtk_window_set_default_size (GTK_WINDOW (window3), 400 , 400 );
gtk_window_present (GTK_WINDOW (window3));
}
for (i = 0 ; data[i].word_1 != NULL; i++)
{
int k;
gtk_tree_store_prepend (GTK_TREE_STORE (model), &iter, NULL);
gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
WORD_COLUMN_1, data[i].word_1,
WORD_COLUMN_2, data[i].word_2,
WORD_COLUMN_3, data[i].word_3,
WORD_COLUMN_4, data[i].word_4,
-1 );
for (k = 0 ; childdata[k].word_1 != NULL; k++)
{
GtkTreeIter child_iter;
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
WORD_COLUMN_1, childdata[k].word_1,
WORD_COLUMN_2, childdata[k].word_2,
WORD_COLUMN_3, childdata[k].word_3,
WORD_COLUMN_4, childdata[k].word_4,
-1 );
}
}
while (!done)
g_main_context_iteration (NULL, TRUE );
return 0 ;
}
Messung V0.5 in Prozent C=98 H=90 G=94
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-07-02)
¤
*© Formatika GbR, Deutschland