/* * Creates a new GtkWidget of class GtkScrolledWindow, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. * If the widget needs a special destroy handler, add a signal here. */ GtkWidget * gb_scrolled_window_new (GbWidgetNewData * data) { GtkWidget *new_widget = gtk_scrolled_window_new (NULL, NULL); if (data->action != GB_LOADING) gtk_container_add (GTK_CONTAINER (new_widget), editor_new_placeholder ()); return new_widget; }
/* * Creates a new GtkWidget of class GtkEventBox, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. * If the widget needs a special destroy handler, add a signal here. */ GtkWidget * gb_event_box_new (GbWidgetNewData * data) { GtkWidget *new_widget = gtk_event_box_new (); if (data->action != GB_LOADING) gtk_container_add (GTK_CONTAINER (new_widget), editor_new_placeholder ()); return new_widget; }
/* * Creates a new GtkWidget of class GtkHandleBox, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. * If the widget needs a special destroy handler, add a signal here. */ GtkWidget * gb_handle_box_new (GbWidgetNewData * data) { GtkWidget *new_widget = gtk_handle_box_new (); /* We set the snap edge to top, which matches the default handle position, since we don't support the default value of -1. */ gtk_handle_box_set_snap_edge (GTK_HANDLE_BOX (new_widget), GTK_POS_TOP); if (data->action != GB_LOADING) gtk_container_add (GTK_CONTAINER (new_widget), editor_new_placeholder ()); return new_widget; }
/* * Creates a new GtkWidget of class GtkToggleButton, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. * If the widget needs a special destroy handler, add a signal here. */ GtkWidget * gb_toggle_button_new (GbWidgetNewData * data) { GtkWidget *new_widget; if (data->action == GB_CREATING) new_widget = gtk_toggle_button_new_with_label (data->name); else { new_widget = gtk_toggle_button_new (); gtk_container_add (GTK_CONTAINER (new_widget), editor_new_placeholder()); } return new_widget; }
static void gb_gnome_app_setup_initial_app (GtkWidget *widget) { GtkWidget *placeholder, *toolbar; /* We create a standard menubar and toolbar which the user can edit or simply delete anything they don't want. */ glade_gnome_setup_initial_menus (widget); /* We need to get rid of the accelerators, since they aren't used, and they would override our default accelerators. */ gtk_window_remove_accel_group (GTK_WINDOW (widget), GNOME_APP (widget)->accel_group); /* FIXME: GnomeLibs bug workaround. It sets the initial border width to -2, which causes us lots of problems. */ #if 0 gtk_container_set_border_width (GTK_CONTAINER (GNOME_APP (widget)->menubar), 0); #endif gb_widget_create_from (GNOME_APP (widget)->menubar, "GtkMenubar"); gb_widget_create_from (GNOME_APP (widget)->menubar->parent, "BonoboDockItem"); /* Toolbar */ toolbar = gtk_toolbar_new (); gnome_app_set_toolbar (GNOME_APP (widget), GTK_TOOLBAR (toolbar)); gb_widget_create_from (toolbar, "GtkToolbar"); gb_widget_create_from (toolbar->parent, "BonoboDockItem"); gb_gnome_app_add_toolbar_button (GTK_TOOLBAR (toolbar), GTK_STOCK_NEW, _("New File")); gb_gnome_app_add_toolbar_button (GTK_TOOLBAR (toolbar), GTK_STOCK_OPEN, _("Open File")); gb_gnome_app_add_toolbar_button (GTK_TOOLBAR (toolbar), GTK_STOCK_SAVE, _("Save File")); /* Statusbar */ gnome_app_set_statusbar (GNOME_APP (widget), gb_widget_new ("GnomeAppBar", widget)); gb_widget_set_child_name (GNOME_APP (widget)->statusbar, GladeChildGnomeAppBar); /* We need to size the placeholders or the dialog is very small. */ placeholder = editor_new_placeholder (); gtk_widget_set_usize (placeholder, 300, 200); gnome_app_set_contents (GNOME_APP (widget), placeholder); }
/* * Creates a new GtkWidget of class GtkWindow, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. * If the widget needs a special destroy handler, add a signal here. */ GtkWidget * gb_window_new (GbWidgetNewData * data) { GtkWidget *new_widget, *placeholder; new_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (new_widget), data->name); gtk_window_set_policy (GTK_WINDOW (new_widget), FALSE, TRUE, FALSE); gtk_signal_connect (GTK_OBJECT (new_widget), "delete_event", GTK_SIGNAL_FUNC (editor_close_window), NULL); /* We need to size the placeholder or the window is very small. */ if (data->action != GB_LOADING) { placeholder = editor_new_placeholder (); gtk_widget_set_usize (placeholder, 400, 300); gtk_container_add (GTK_CONTAINER (new_widget), placeholder); } return new_widget; }
static void gb_bonobo_dock_item_add_item (BonoboDockItem * existing_dock_item, gboolean after) { BonoboDock *dock; BonoboDockBand *dock_band; GtkWidget *dock_item, *placeholder; BonoboDockPlacement placement; gint band_num, position, offset; if (!gb_bonobo_dock_item_find_position (BONOBO_DOCK_ITEM (existing_dock_item), &placement, &band_num, &position, &offset)) { g_warning ("Dock band not found"); return; } dock_band = BONOBO_DOCK_BAND (GTK_WIDGET (existing_dock_item)->parent); dock = BONOBO_DOCK (GTK_WIDGET (dock_band)->parent); /* Create the new dock item. */ dock_item = gb_widget_new ("BonoboDockItem", NULL); placeholder = editor_new_placeholder (); gtk_container_add (GTK_CONTAINER (dock_item), placeholder); /* Now add it at the required position. */ if (after) position++; bonobo_dock_add_item (dock, BONOBO_DOCK_ITEM (dock_item), placement, band_num, position, 0, FALSE); gtk_widget_show (dock_item); /* Show the properties of the new dock item. */ gb_widget_show_properties (dock_item); }
/* * Creates a new GtkWidget of class GnomeDruidPageStandard, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. */ static GtkWidget* gb_gnome_druid_page_standard_new (GbWidgetNewData *data) { GtkWidget *new_widget, *placeholder; if (data->action == GB_CREATING) { new_widget = gnome_druid_page_standard_new_with_vals ("", NULL, NULL); placeholder = editor_new_placeholder (); gtk_box_pack_start (GTK_BOX (GNOME_DRUID_PAGE_STANDARD (new_widget)->vbox), placeholder, TRUE, TRUE, 0); } else { new_widget = gnome_druid_page_standard_new_with_vals ("", NULL, NULL); } gb_widget_create_from (GNOME_DRUID_PAGE_STANDARD (new_widget)->vbox, "druid-vbox"); gb_widget_set_child_name (GNOME_DRUID_PAGE_STANDARD (new_widget)->vbox, GladeChildGnomeDruidVBox); gtk_widget_show_all (new_widget); return new_widget; }
/* * Creates a new GtkWidget of class GnomeDialog, performing any specialized * initialization needed for the widget to work correctly in this environment. * If a dialog box is used to initialize the widget, return NULL from this * function, and call data->callback with your new widget when it is done. * If the widget needs a special destroy handler, add a signal here. */ static GtkWidget* gb_gnome_dialog_new (GbWidgetNewData *data) { GtkWidget *new_widget, *placeholder; GList *elem; if (data->action == GB_CREATING) { /* When creating a new dialog, we add a few standard buttons, which the user can change/delete easily. */ new_widget = gnome_dialog_new (NULL, GTK_STOCK_CANCEL, GTK_STOCK_OK, NULL); /* Now turn the buttons into GbWidgets so the user can edit them. */ elem = GNOME_DIALOG (new_widget)->buttons; gb_widget_create_from (GTK_WIDGET (elem->data), "button"); gtk_object_set_data (GTK_OBJECT (elem->data), GladeButtonStockIDKey, GTK_STOCK_CANCEL); elem = elem->next; gb_widget_create_from (GTK_WIDGET (elem->data), "button"); gtk_object_set_data (GTK_OBJECT (elem->data), GladeButtonStockIDKey, GTK_STOCK_OK); /* We need to size the placeholders or the dialog is very small. */ placeholder = editor_new_placeholder (); gtk_widget_set_usize (placeholder, 300, 200); gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (new_widget)->vbox), placeholder, TRUE, TRUE, 0); } else { /* When loading we create the bare dialog with no buttons. */ new_widget = gnome_dialog_new (NULL, NULL); } gb_widget_create_from (GNOME_DIALOG (new_widget)->vbox, data->action == GB_CREATING ? "dialog-vbox" : NULL); gb_widget_set_child_name (GNOME_DIALOG (new_widget)->vbox, GladeChildDialogVBox); gb_widget_create_from (GNOME_DIALOG (new_widget)->action_area, data->action == GB_CREATING ? "dialog-action_area" : NULL); gb_widget_set_child_name (GNOME_DIALOG (new_widget)->action_area, GladeChildDialogActionArea); /* We connect a close signal handler which always returns TRUE so that the built-in close functionality is skipped. */ gtk_signal_connect (GTK_OBJECT (new_widget), "close", GTK_SIGNAL_FUNC (gtk_true), NULL); /* Now we connect our normal delete_event handler. */ gtk_signal_connect (GTK_OBJECT (new_widget), "delete_event", GTK_SIGNAL_FUNC (editor_close_window), NULL); gtk_object_set_data (GTK_OBJECT (new_widget), TypeHint, GINT_TO_POINTER (GLADE_TYPE_HINT_DIALOG_INDEX)); return new_widget; }
/* This updates the box size to the given value, adding placeholders or deleting widgets as necessary. */ void gb_box_set_size (GtkWidget * widget, gint size) { GtkWidget *new_child; gint current_size = g_list_length (GTK_BOX (widget)->children); gint i; if (current_size < size) { /* This avoids any problems with redrawing the selection. */ editor_clear_selection (NULL); for (i = 0; i < size - current_size; i++) { if (GTK_IS_BUTTON_BOX (widget)) { new_child = gb_widget_new ("GtkButton", widget); GTK_WIDGET_SET_FLAGS (new_child, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (widget), new_child, TRUE, TRUE, 0); tree_add_widget (new_child); } else { new_child = editor_new_placeholder (); gtk_box_pack_start (GTK_BOX (widget), new_child, TRUE, TRUE, 0); } } } else if (current_size > size) { GList *children, *elem; GtkWidget *child; gchar *error = NULL; /* Get a list of children in the order they appear in the box, start at the end and move backwards until we find a widget that can be destroyed. If we can't find any, show a message box. */ children = gtk_container_get_children (GTK_CONTAINER (widget)); elem = g_list_last (children); while (elem) { child = elem->data; error = editor_can_delete_widget (child); if (!error) { gtk_container_remove (GTK_CONTAINER (widget), child); current_size--; if (current_size == size) break; } elem = elem->prev; } g_list_free (children); if (current_size > size) { glade_util_show_message_box (error ? error : _("Can't delete any children."), widget); } } }