📄 testgtk.c
字号:
/* create separator */ separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0); gtk_widget_show(separator); /* create button box */ box2 = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0); gtk_container_border_width(GTK_CONTAINER(box2), 5); gtk_widget_show(box2); button = gtk_button_new_with_label("Close"); gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0); gtk_signal_connect_object(GTK_OBJECT (button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT(window)); gtk_widget_show(button); gtk_widget_show(window);}static voidcb_create_tree(GtkWidget* w){ guint selection_mode = GTK_SELECTION_SINGLE; guint view_line; guint draw_line; guint no_root_item; guint nb_item; guint recursion_level; /* get selection mode choice */ if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active) selection_mode = GTK_SELECTION_SINGLE; else if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active) selection_mode = GTK_SELECTION_BROWSE; else selection_mode = GTK_SELECTION_MULTIPLE; /* get options choice */ draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active; view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active; no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active; /* get levels */ nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner)); recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner)); if (pow (nb_item, recursion_level) > 10000) { g_print ("%g total items? That will take a very long time. Try less\n", pow (nb_item, recursion_level)); return; } create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);}void create_tree_mode_window(void){ static GtkWidget* window; GtkWidget* box1; GtkWidget* box2; GtkWidget* box3; GtkWidget* box4; GtkWidget* box5; GtkWidget* button; GtkWidget* frame; GtkWidget* separator; GtkWidget* label; GtkWidget* spinner; GtkAdjustment *adj; if (!window) { /* create toplevel window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters"); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &window); box1 = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), box1); /* create upper box - selection box */ box2 = gtk_vbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0); gtk_container_border_width(GTK_CONTAINER(box2), 5); box3 = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0); /* create selection mode frame */ frame = gtk_frame_new("Selection Mode"); gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0); box4 = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), box4); gtk_container_border_width(GTK_CONTAINER(box4), 5); /* create radio button */ button = gtk_radio_button_new_with_label(NULL, "SINGLE"); gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0); sTreeSampleSelection.single_button = button; button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)), "BROWSE"); gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0); sTreeSampleSelection.browse_button = button; button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)), "MULTIPLE"); gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0); sTreeSampleSelection.multiple_button = button; sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); /* create option mode frame */ frame = gtk_frame_new("Options"); gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0); box4 = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), box4); gtk_container_border_width(GTK_CONTAINER(box4), 5); /* create check button */ button = gtk_check_button_new_with_label("Draw line"); gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE); sTreeSampleSelection.draw_line_button = button; button = gtk_check_button_new_with_label("View Line mode"); gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE); sTreeSampleSelection.view_line_button = button; button = gtk_check_button_new_with_label("Without Root item"); gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0); sTreeSampleSelection.no_root_item_button = button; /* create recursion parameter */ frame = gtk_frame_new("Size Parameters"); gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0); box4 = gtk_hbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(frame), box4); gtk_container_border_width(GTK_CONTAINER(box4), 5); /* create number of item spin button */ box5 = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0); label = gtk_label_new("Number of items : "); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0); adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0, 5.0, 0.0); spinner = gtk_spin_button_new (adj, 0, 0); gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0); sTreeSampleSelection.nb_item_spinner = spinner; /* create recursion level spin button */ box5 = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0); label = gtk_label_new("Depth : "); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0); adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0, 5.0, 0.0); spinner = gtk_spin_button_new (adj, 0, 0); gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0); sTreeSampleSelection.recursion_spinner = spinner; /* create horizontal separator */ separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0); /* create bottom button box */ box2 = gtk_hbox_new(TRUE, 10); gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0); gtk_container_border_width(GTK_CONTAINER(box2), 5); button = gtk_button_new_with_label("Create Tree"); gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT (button), "clicked", (GtkSignalFunc) cb_create_tree, NULL); button = gtk_button_new_with_label("Close"); gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT (window)); } if (!GTK_WIDGET_VISIBLE (window)) gtk_widget_show_all (window); else gtk_widget_destroy (window);}/* * GtkHandleBox */static voidhandle_box_child_signal (GtkHandleBox *hb, GtkWidget *child, const gchar *action){ printf ("%s: child <%s> %sed\n", gtk_type_name (GTK_OBJECT_TYPE (hb)), gtk_type_name (GTK_OBJECT_TYPE (child)), action);}static voidcreate_handle_box (void){ static GtkWidget* window = NULL; GtkWidget *handle_box; GtkWidget *handle_box2; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *toolbar; GtkWidget *label; GtkWidget *separator; if (!window) { window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Handle Box Test"); gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &window); gtk_container_border_width (GTK_CONTAINER (window), 20); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show (vbox); label = gtk_label_new ("Above"); gtk_container_add (GTK_CONTAINER (vbox), label); gtk_widget_show (label); separator = gtk_hseparator_new (); gtk_container_add (GTK_CONTAINER (vbox), separator); gtk_widget_show (separator); hbox = gtk_hbox_new (FALSE, 10); gtk_container_add (GTK_CONTAINER (vbox), hbox); gtk_widget_show (hbox); separator = gtk_hseparator_new (); gtk_container_add (GTK_CONTAINER (vbox), separator); gtk_widget_show (separator); label = gtk_label_new ("Below"); gtk_container_add (GTK_CONTAINER (vbox), label); gtk_widget_show (label); handle_box = gtk_handle_box_new (); gtk_container_add (GTK_CONTAINER (hbox), handle_box); gtk_signal_connect (GTK_OBJECT (handle_box), "child_attached", GTK_SIGNAL_FUNC (handle_box_child_signal), "attached"); gtk_signal_connect (GTK_OBJECT (handle_box), "child_detached", GTK_SIGNAL_FUNC (handle_box_child_signal), "detached"); gtk_widget_show (handle_box); toolbar = make_toolbar (window); gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); gtk_container_add (GTK_CONTAINER (handle_box), toolbar); gtk_widget_show (toolbar); handle_box = gtk_handle_box_new (); gtk_container_add (GTK_CONTAINER (hbox), handle_box); gtk_signal_connect (GTK_OBJECT (handle_box), "child_attached", GTK_SIGNAL_FUNC (handle_box_child_signal), "attached"); gtk_signal_connect (GTK_OBJECT (handle_box), "child_detached", GTK_SIGNAL_FUNC (handle_box_child_signal), "detached"); gtk_widget_show (handle_box); handle_box2 = gtk_handle_box_new (); gtk_container_add (GTK_CONTAINER (handle_box), handle_box2); gtk_signal_connect (GTK_OBJECT (handle_box2), "child_attached", GTK_SIGNAL_FUNC (handle_box_child_signal), "attached"); gtk_signal_connect (GTK_OBJECT (handle_box2), "child_detached", GTK_SIGNAL_FUNC (handle_box_child_signal), "detached"); gtk_widget_show (handle_box2); label = gtk_label_new ("Fooo!"); gtk_container_add (GTK_CONTAINER (handle_box2), label); gtk_widget_show (label); } if (!GTK_WIDGET_VISIBLE (window)) gtk_widget_show (window); else gtk_widget_destroy (window);}/* * Reparent demo */static voidreparent_label (GtkWidget *widget, GtkWidget *new_parent){ GtkWidget *label; label = gtk_object_get_user_data (GTK_OBJECT (widget)); gtk_widget_reparent (label, new_parent);}static voidset_parent_signal (GtkWidget *child, GtkWidget *old_parent, gpointer func_data){ g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n", gtk_type_name (GTK_OBJECT_TYPE (child)), child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL", old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL", GPOINTER_TO_INT (func_data));}static voidcreate_reparent (void){ static GtkWidget *window = NULL; GtkWidget *box1; GtkWidget *box2; GtkWidget *box3; GtkWidget *frame; GtkWidget *button; GtkWidget *label; GtkWidget *separator; if (!window) { window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &window); gtk_window_set_title (GTK_WINDOW (window), "reparent"); gtk_container_border_width (GTK_CONTAINER (window), 0); box1 = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), box1); box2 = gtk_hbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (box2), 10); gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0); label = gtk_label_new ("Hello World"); frame = gtk_frame_new ("Frame 1"); gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0); box3 = gtk_vbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (box3), 5); gtk_container_add (GTK_CONTAINER (frame), box3); button = gtk_button_new_with_label ("switch"); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(reparent_label), box3); gtk_object_set_user_data (GTK_OBJECT (button), label); gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (label), "parent_set", GTK_SIGNAL_FUNC (set_parent_signal), GINT_TO_POINTER (42)); frame = gtk_frame_new ("Frame 2"); gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0); box3 = gtk_vbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (box3), 5); gtk_container_add (GTK_CONTAINER (frame), box3); button = gtk_button_new_with_label ("switch"); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(reparent_label), box3); gtk_object_set_user_data (GTK_OBJECT (button), label); gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); 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); button = gtk_button_new_with_label ("close");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -