📄 box.c
字号:
label = gtk_label_new( "Padding: " ); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); settingsData.pad_entry = entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); sprintf( buf, "%d", ((BoxData *) current->data)->padding ); gtk_entry_set_text( GTK_ENTRY(entry), buf ); hbox = gtk_hbox_new (FALSE, 1); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new( "Spacing: " ); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); settingsData.space_entry = entry = gtk_entry_new(); sprintf( buf, "%d", ((BoxData *) current->data)->spacing ); gtk_entry_set_text( GTK_ENTRY(entry), buf ); gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); // fill in the buttons button = gtk_button_new_with_label ("OK"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(ClickedCallback), NULL); button = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(CancelCallback), dialog_window); gtk_widget_show_all (dialog_window);}// menu-related codeGtkItemFactory *item_factory;// make sure settings menu checkboxes jive with settings of current boxvoidResetSettingsMenuItems( void ){ GtkCheckMenuItem *item; item = (GtkCheckMenuItem *) gtk_item_factory_get_widget(item_factory, "/Settings/Homogeneous"); item->active = ((BoxData *) current->data)->homogeneous; item = (GtkCheckMenuItem *) gtk_item_factory_get_widget(item_factory, "/Settings/Expand"); item->active = ((BoxData *) current->data)->expand; item = (GtkCheckMenuItem *) gtk_item_factory_get_widget(item_factory, "/Settings/Fill"); item->active = ((BoxData *) current->data)->fill;}// callback for Options menu itemsstatic void handle_option( gpointer data, guint callback_action, GtkWidget *w ){ GtkCheckMenuItem *item = (GtkCheckMenuItem *) w; gboolean homogeneous; switch( callback_action ) { case 1: ((BoxData *) current->data)->expand = item->active; break; case 2: ((BoxData *) current->data)->fill = item->active; break; case 3: ((BoxData *) current->data)->homogeneous = homogeneous = item->active; gtk_box_set_homogeneous(GTK_BOX(((BoxData *) current->data)->container), homogeneous); break; case 4: GetPaddingAndSpacing(); break; } UpdateChildren();}static voidMoveClickedCallback(GtkWidget *widget, gpointer unused){ char *data; int start, end; data = gtk_entry_get_text( GTK_ENTRY(settingsData.pad_entry) ); start = atoi( data ); data = gtk_entry_get_text( GTK_ENTRY(settingsData.space_entry) ); end = atoi( data ); gtk_widget_destroy( settingsData.dialog );}// move child widgetstatic void move_child( gpointer data, guint callback_action, GtkWidget *w ){ GtkWidget *button, *label, *entry, *hbox, *dialog_window; char buf[ 64 ]; // create the dialog and set attributes settingsData.dialog = dialog_window = gtk_dialog_new(); gtk_window_set_modal(GTK_WINDOW(dialog_window), TRUE); gtk_window_position(GTK_WINDOW (dialog_window), GTK_WIN_POS_MOUSE); gtk_window_set_title(GTK_WINDOW(dialog_window), "Move Child"); // fill in the content area hbox = gtk_hbox_new (FALSE, 1); gtk_box_set_homogeneous( GTK_BOX( hbox ), FALSE ); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new( "Start: " ); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); settingsData.pad_entry = entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); sprintf( buf, "%d", ((BoxData *) current->data)->padding ); gtk_entry_set_text( GTK_ENTRY(entry), buf ); hbox = gtk_hbox_new (FALSE, 1); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new( "End: " ); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); settingsData.space_entry = entry = gtk_entry_new(); sprintf( buf, "%d", ((BoxData *) current->data)->spacing ); gtk_entry_set_text( GTK_ENTRY(entry), buf ); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); // fill in the buttons button = gtk_button_new_with_label ("OK"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(MoveClickedCallback), NULL); button = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dialog_window)->action_area), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(CancelCallback), dialog_window); gtk_widget_show_all (dialog_window);}static voidshow_about( gpointer data, guint callback_action, GtkWidget *w ){ char buf[128]; sprintf( buf, "Gtk+ Box Office Version %d.%d Copyright 2000, Syd Logan", VERSION_MAJOR, VERSION_MINOR ); MessageBox(buf);}// menu definition based on item factorystatic GtkItemFactoryEntry menu_items[] = { { "/_File", NULL, NULL, 0, "<Branch>" }, { "/File/Quit", "<control>Q", gtk_main_quit, 0, NULL }, { "/Settings", NULL, NULL, 0, "<Branch>" }, { "/Settings/Expand", NULL, handle_option, 1, "<CheckItem>" }, { "/Settings/Fill", NULL, handle_option, 2, "<CheckItem>" }, { "/Settings/Homogeneous", NULL, handle_option, 3, "<CheckItem>" }, { "/Settings/sep1", NULL, NULL, 0, "<Separator>" }, { "/Settings/Padding and Spacing...", NULL, handle_option, 4, "" }, { "/_Traverse", NULL, NULL, 0, "<Branch>" }, { "/Traverse/Up", NULL, go_up, 0, NULL }, { "/Traverse/Down", NULL, go_down, 0, NULL }, { "/Traverse/Next", NULL, go_next, 0, NULL }, { "/Traverse/Previous", NULL, go_previous, 0, NULL }, { "/Add _Box", NULL, NULL, 0, "<Branch>" }, { "/Add Box/Vertical Box, Start", NULL, add_vert_box, 0, NULL }, { "/Add Box/Vertical Box, End", NULL, add_vert_box, 1, NULL }, { "/Add Box/Horizontal Box, Start", NULL, add_horz_box, 0, NULL }, { "/Add Box/Horizontal Box, End", NULL, add_horz_box, 1, NULL }, { "/Add _Child", NULL, NULL, 0, "<Branch>" }, { "/Add Child/Pack Start", NULL, add_button_to_box_start, 0, NULL }, { "/Add Child/Pack End", NULL, add_button_to_box_end, 0, NULL }, { "/Add Child/Move child", NULL, move_child, 0, NULL }, { "/_View", NULL, NULL, 0, "<Branch>" }, { "/View/Tree", NULL, dump_tree, 0, NULL }, { "/_Help", NULL, NULL, 0, "<LastBranch>" }, { "/Help/About...", NULL, show_about, 0, NULL }};// create menu bar and menus using item factoryvoid get_main_menu( GtkWidget *window, GtkWidget **menubar ){ GtkAccelGroup *accel_group; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); GtkWidget *widget; accel_group = gtk_accel_group_new (); item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group ); gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL); gtk_accel_group_attach (accel_group, GTK_OBJECT (window)); if (menubar) *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}// mainint main( int argc, char *argv[] ){ GtkWidget *window, *menubar, *button, *widget, *vbox; GdkColormap *default_colormap; char buf[64]; BoxData *boxData; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), "WM destroy"); sprintf( buf, "Gtk+ Box Office %d.%d", VERSION_MAJOR, VERSION_MINOR ); gtk_window_set_title(GTK_WINDOW(window), buf); gtk_widget_set_usize(GTK_WIDGET(window), 640, 480); vbox = gtk_vbox_new (FALSE, 1); gtk_container_add(GTK_CONTAINER (window), vbox); gtk_widget_show( vbox ); get_main_menu(window, &menubar); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); gtk_widget_show(menubar); boxData = g_malloc( sizeof( BoxData ) ); root = current = g_node_new( (gpointer) boxData ); container = boxData->container = gtk_vbox_new (FALSE, 0); boxData->homogeneous = FALSE; boxData->fill = TRUE; boxData->expand = TRUE; boxData->padding = 0; boxData->spacing = 0; ResetSettingsMenuItems(); gtk_container_add(GTK_CONTAINER(vbox), container); gtk_widget_show(container); gtk_widget_show(window); gtk_main (); return(0);}/* * Simple MessageBox */voidMessageBox( char *message ){ static GtkWidget *label, *button, *dialog_window = (GtkWidget *) NULL; if ( dialog_window == (GtkWidget *) NULL ) { dialog_window = gtk_dialog_new(); gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &dialog_window); gtk_window_set_title (GTK_WINDOW (dialog_window), "Message"); gtk_container_border_width (GTK_CONTAINER (dialog_window), 0); button = gtk_button_new_with_label ("OK"); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start ( GTK_BOX (GTK_DIALOG (dialog_window)->action_area), button, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_hide_all), GTK_OBJECT (dialog_window)); label = gtk_label_new (message); gtk_misc_set_padding (GTK_MISC (label), 10, 10); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox), label, FALSE, FALSE, 0); } else gtk_label_set_text( GTK_LABEL(label), message ); gtk_window_position (GTK_WINDOW (dialog_window), GTK_WIN_POS_MOUSE); gtk_widget_grab_default (button); gtk_widget_show_all (dialog_window);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -