diff options
author | Lars Hamann <lars@src.gnome.org> | 1998-07-15 23:40:00 +0000 |
---|---|---|
committer | Lars Hamann <lars@src.gnome.org> | 1998-07-15 23:40:00 +0000 |
commit | 8b9b7b9d04c1f11118f28a9ec7b4c65a7a3f967c (patch) | |
tree | c85c8864d97e7306662c535a3680878f103376cc /tests | |
parent | b6656088162e00c77f9d84f96e5721c0b84dd5ec (diff) | |
download | gtk+-8b9b7b9d04c1f11118f28a9ec7b4c65a7a3f967c.tar.gz |
Added focus handling, horizontal and vertical autoscrolling, extended
* gtk/gtkctree.h :
* gtk/gtkctree.c :
Added focus handling, horizontal and vertical autoscrolling,
extended Selection Mode, key bindings
Added gtk_ctree_toggle_expansion & gtk_ctree_toggle_expansion_recursive
Changed gtk_ctree_scroll_to to gtk_ctree_moveto.
Removed gtk_ctree_clear.
* gtk/gtkclist.h :
* gtk/gtkclist.c :
Added focus handling, horizontal and vertical autoscrolling,
extended Selection Mode, key bindings
Diffstat (limited to 'tests')
-rw-r--r-- | tests/testgtk.c | 239 |
1 files changed, 151 insertions, 88 deletions
diff --git a/tests/testgtk.c b/tests/testgtk.c index 2042ae8749..5f99a8336f 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -3034,12 +3034,14 @@ create_list (void) gtk_widget_destroy (window); } + /* * GtkCList */ -#define TESTGTK_CLIST_COLUMNS 7 + +#define TESTGTK_CLIST_COLUMNS 20 static gint clist_rows = 0; -static gint clist_selected_row = 0; +static GtkWidget *clist_omenu; static void add1000_clist (GtkWidget *widget, gpointer data) @@ -3101,7 +3103,6 @@ add10000_clist (GtkWidget *widget, gpointer data) gtk_clist_append (GTK_CLIST (data), texts); } gtk_clist_thaw (GTK_CLIST (data)); - } void @@ -3114,7 +3115,7 @@ clear_clist (GtkWidget *widget, gpointer data) void remove_row_clist (GtkWidget *widget, gpointer data) { - gtk_clist_remove (GTK_CLIST (data), clist_selected_row); + gtk_clist_remove (GTK_CLIST (data), GTK_CLIST (data)->focus_row); clist_rows--; } @@ -3134,7 +3135,8 @@ void select_clist (GtkWidget *widget, gint row, gint column, - GdkEventButton * bevent) + GdkEventButton * bevent, + GtkWidget *button) { gint i; guint8 spacing; @@ -3187,15 +3189,14 @@ select_clist (GtkWidget *widget, } g_print ("\n\n\n"); - - clist_selected_row = row; } void unselect_clist (GtkWidget *widget, gint row, gint column, - GdkEventButton * bevent) + GdkEventButton * bevent, + GtkWidget *button) { gint i; guint8 spacing; @@ -3248,8 +3249,6 @@ unselect_clist (GtkWidget *widget, } g_print ("\n\n\n"); - - clist_selected_row = row; } static void @@ -3257,16 +3256,14 @@ insert_row_clist (GtkWidget *widget, gpointer data) { static char *text[] = { - "This", - "is", - "a", - "inserted", - "row", - "la la la la la", - "la la la la" + "This", "is", "a", "inserted", "row.", + "This", "is", "a", "inserted", "row.", + "This", "is", "a", "inserted", "row.", + "This", "is", "a", "inserted", "row." }; - gtk_clist_insert (GTK_CLIST (data), clist_selected_row, text); + gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row, text); + clist_rows++; } @@ -3297,6 +3294,36 @@ clist_warning_test (GtkWidget *button, } static void +undo_selection (GtkWidget *button, GtkCList *clist) +{ + gtk_clist_undo_selection (clist); +} + +#define RADIOMENUTOGGLED(_rmi_, __i) { \ + GSList * __g; \ + __i = 0; \ + __g = gtk_radio_menu_item_group(_rmi_); \ + while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \ + __g = __g->next; \ + __i++; \ + }\ +} + +static void +clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist) +{ + gint i; + + if (!GTK_WIDGET_MAPPED (widget)) + return; + + RADIOMENUTOGGLED ((GtkRadioMenuItem *) + (((GtkOptionMenu *)clist_omenu)->menu_item), i); + + gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i)); +} + +static void create_clist (void) { gint i; @@ -3310,7 +3337,20 @@ create_clist (void) "Title 3", "Title 4", "Title 5", - "Title 6" + "Title 6", + "Title 7", + "Title 8", + "Title 9", + "Title 10", + "Title 11", + "Title 12", + "Title 13", + "Title 14", + "Title 15", + "Title 16", + "Title 17", + "Title 18", + "Title 19" }; char text[TESTGTK_CLIST_COLUMNS][50]; @@ -3322,9 +3362,15 @@ create_clist (void) GtkWidget *button; GtkWidget *separator; + GtkWidget *undo_button; + GtkWidget *label; + GtkWidget *menu; + GtkWidget *menu_item; + GSList *group; if (!window) { + clist_rows = 0; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy", @@ -3334,16 +3380,12 @@ create_clist (void) gtk_window_set_title (GTK_WINDOW (window), "clist"); gtk_container_border_width (GTK_CONTAINER (window), 0); - box1 = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), box1); - gtk_widget_show (box1); - box2 = gtk_hbox_new (FALSE, 10); gtk_container_border_width (GTK_CONTAINER (box2), 10); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); - gtk_widget_show (box2); /* create GtkCList here so we have a pointer to throw at the * button callbacks -- more is done with it later */ @@ -3359,9 +3401,6 @@ create_clist (void) (GtkSignalFunc) add1000_clist, (gpointer) clist); - gtk_widget_show (button); - - button = gtk_button_new_with_label ("Add 10,000 Rows"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3370,8 +3409,6 @@ create_clist (void) (GtkSignalFunc) add10000_clist, (gpointer) clist); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Clear List"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3380,8 +3417,6 @@ create_clist (void) (GtkSignalFunc) clear_clist, (gpointer) clist); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Remove Row"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3390,13 +3425,10 @@ create_clist (void) (GtkSignalFunc) remove_row_clist, (gpointer) clist); - gtk_widget_show (button); - /* second layer of buttons */ box2 = gtk_hbox_new (FALSE, 10); gtk_container_border_width (GTK_CONTAINER (box2), 10); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); - gtk_widget_show (box2); button = gtk_button_new_with_label ("Insert Row"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3406,8 +3438,6 @@ create_clist (void) (GtkSignalFunc) insert_row_clist, (gpointer) clist); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Show Title Buttons"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3416,8 +3446,6 @@ create_clist (void) (GtkSignalFunc) show_titles_clist, (gpointer) clist); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Hide Title Buttons"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3426,8 +3454,6 @@ create_clist (void) (GtkSignalFunc) hide_titles_clist, (gpointer) clist); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Warning Test"); gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); @@ -3436,41 +3462,96 @@ create_clist (void) (GtkSignalFunc) clist_warning_test, (gpointer) clist); - gtk_widget_show (button); + box2 = gtk_hbox_new (FALSE, 10); + gtk_container_border_width (GTK_CONTAINER (box2), 10); + gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); + + undo_button = gtk_button_new_with_label ("Undo last selection"); + gtk_box_pack_start (GTK_BOX (box2), undo_button, TRUE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (undo_button), + "clicked", + (GtkSignalFunc) undo_selection, + (gpointer) clist); + + label = gtk_label_new ("Selection Mode :"); + gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0); + + clist_omenu = gtk_option_menu_new (); + + menu = gtk_menu_new (); + group = NULL; + + menu_item = gtk_radio_menu_item_new_with_label (group, "Single"); + gtk_signal_connect (GTK_OBJECT (menu_item), "activate", + GTK_SIGNAL_FUNC (clist_toggle_sel_mode), clist); + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); + gtk_menu_append (GTK_MENU (menu), menu_item); + gtk_widget_show (menu_item); + + menu_item = gtk_radio_menu_item_new_with_label (group, "Browse"); + gtk_signal_connect (GTK_OBJECT (menu_item), "activate", + GTK_SIGNAL_FUNC (clist_toggle_sel_mode), clist); + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); + gtk_menu_append (GTK_MENU (menu), menu_item); + gtk_widget_show (menu_item); + + menu_item = gtk_radio_menu_item_new_with_label (group, "Multiple"); + gtk_signal_connect (GTK_OBJECT (menu_item), "activate", + GTK_SIGNAL_FUNC (clist_toggle_sel_mode), clist); + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); + gtk_menu_append (GTK_MENU (menu), menu_item); + gtk_widget_show (menu_item); + + menu_item = gtk_radio_menu_item_new_with_label (group, "Extended"); + gtk_signal_connect (GTK_OBJECT (menu_item), "activate", + GTK_SIGNAL_FUNC (clist_toggle_sel_mode), clist); + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); + gtk_menu_append (GTK_MENU (menu), menu_item); + gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE); + gtk_widget_show (menu_item); + + gtk_option_menu_set_menu (GTK_OPTION_MENU (clist_omenu), menu); + gtk_box_pack_start (GTK_BOX (box2), clist_omenu, FALSE, TRUE, 0); + + gtk_option_menu_set_history (GTK_OPTION_MENU (clist_omenu), 3); /* vbox for the list itself */ box2 = gtk_vbox_new (FALSE, 10); gtk_container_border_width (GTK_CONTAINER (box2), 10); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0); - gtk_widget_show (box2); /* * the rest of the clist configuration */ - gtk_clist_set_row_height (GTK_CLIST (clist), 20); - + + /* gtk_signal_connect (GTK_OBJECT (clist), "select_row", (GtkSignalFunc) select_clist, - NULL); + undo_button); gtk_signal_connect (GTK_OBJECT (clist), "unselect_row", (GtkSignalFunc) unselect_clist, - NULL); + undo_button); + */ + + gtk_clist_set_row_height (GTK_CLIST (clist), 18); + gtk_widget_set_usize (clist, -1, 300); gtk_clist_set_column_width (GTK_CLIST (clist), 0, 100); for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++) gtk_clist_set_column_width (GTK_CLIST (clist), i, 80); - gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_BROWSE); - gtk_clist_set_policy (GTK_CLIST (clist), - GTK_POLICY_AUTOMATIC, + gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED); + gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_clist_set_column_justification (GTK_CLIST (clist), 1, GTK_JUSTIFY_RIGHT); - gtk_clist_set_column_justification (GTK_CLIST (clist), 2, GTK_JUSTIFY_CENTER); + gtk_clist_set_column_justification (GTK_CLIST (clist), 1, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_justification (GTK_CLIST (clist), 2, + GTK_JUSTIFY_CENTER); for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++) { @@ -3481,7 +3562,7 @@ create_clist (void) sprintf (text[1], "Right"); sprintf (text[2], "Center"); - for (i = 0; i < 100; i++) + for (i = 0; i < 10; i++) { sprintf (text[0], "Row %d", clist_rows++); gtk_clist_append (GTK_CLIST (clist), texts); @@ -3489,17 +3570,13 @@ create_clist (void) gtk_container_border_width (GTK_CONTAINER (clist), 5); gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0); - gtk_widget_show (clist); - separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); - gtk_widget_show (separator); box2 = gtk_vbox_new (FALSE, 10); gtk_container_border_width (GTK_CONTAINER (box2), 10); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0); - gtk_widget_show (box2); button = gtk_button_new_with_label ("close"); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", @@ -3509,21 +3586,17 @@ create_clist (void) gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_widget_grab_default (button); - - gtk_widget_show (button); } if (!GTK_WIDGET_VISIBLE (window)) - gtk_widget_show (window); + gtk_widget_show_all (window); else { clist_rows = 0; gtk_widget_destroy (window); } - } - /* * GtkCTree */ @@ -3621,26 +3694,6 @@ static GtkWidget *spin2; static GtkWidget *spin3; static GdkColor *col_bg; -#define RADIOMENUTOGGLED(_rmi_, __i) { \ - GSList * __g; \ - __i = 0; \ - __g = gtk_radio_menu_item_group(_rmi_); \ - while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \ - __g = __g->next; \ - __i++; \ - }\ -} - -#define RADIOBUTTONTOGGLED(_rb_, __i) { \ - GSList * __g; \ - __i = 0; \ - __g = gtk_radio_button_group(_rb_); \ - while( __g && !((GtkToggleButton *)(__g->data))->active) { \ - __g = __g->next; \ - __i++; \ - }\ -} - void after_press (GtkCTree *ctree, gpointer data) { char buf[80]; @@ -3708,7 +3761,7 @@ gint button_press (GtkCTree *ctree, GdkEventButton *event, gpointer data) else gtk_ctree_expand_recursive (ctree, work); after_press (ctree, NULL); - gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree), + gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree), "button_press_event"); } break; @@ -3907,7 +3960,7 @@ void toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree) RADIOMENUTOGGLED ((GtkRadioMenuItem *) (((GtkOptionMenu *)omenu)->menu_item), i); - gtk_ctree_set_selection_mode (ctree, (GtkSelectionMode) (3-i)); + gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3-i)); after_press (ctree, NULL); } @@ -3996,14 +4049,14 @@ void rebuild_tree (GtkWidget *widget, GtkCTree *ctree) n = ((pow (b, d) - 1) / (b - 1)) * (p + 1); - if (n > 200000) + if (n > 100000) { g_print ("%d total items? Try less\n",n); return; } gtk_clist_freeze (GTK_CLIST (ctree)); - gtk_ctree_clear (ctree); + gtk_clist_clear (GTK_CLIST (ctree)); books = 1; pages = 0; @@ -4117,9 +4170,20 @@ void create_ctree (void) GTK_SIGNAL_FUNC (after_press), NULL); gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move", GTK_SIGNAL_FUNC (after_move), NULL); + gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection", + GTK_SIGNAL_FUNC (after_press), NULL); + gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row", + GTK_SIGNAL_FUNC (after_press), NULL); + gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all", + GTK_SIGNAL_FUNC (after_press), NULL); + gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all", + GTK_SIGNAL_FUNC (after_press), NULL); + gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical", + GTK_SIGNAL_FUNC (after_press), NULL); + gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0); gtk_clist_column_titles_passive (GTK_CLIST (ctree)); - gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_MULTIPLE); + gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED); gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC); gtk_clist_set_column_width (GTK_CLIST (ctree), 0, 200); @@ -4299,7 +4363,6 @@ void create_ctree (void) GTK_SIGNAL_FUNC (toggle_sel_mode), ctree); group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); gtk_menu_append (GTK_MENU (menu), menu_item); - gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE); gtk_widget_show (menu_item); menu_item = gtk_radio_menu_item_new_with_label (group, "Extended"); @@ -4307,12 +4370,13 @@ void create_ctree (void) GTK_SIGNAL_FUNC (toggle_sel_mode), ctree); group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); gtk_menu_append (GTK_MENU (menu), menu_item); + gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE); gtk_widget_show (menu_item); gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu); gtk_box_pack_start (GTK_BOX (hbox), omenu, FALSE, TRUE, 0); - gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), 2); + gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), 3); gtk_widget_realize (window); @@ -4403,7 +4467,6 @@ void create_ctree (void) gtk_widget_destroy (window); } - /* * GtkColorSelect */ |