/*--------------------------------------------------------------------------*/ static void add_select_download_page( GnomeDruid *wdruid, GdkPixbuf *logo ) { GtkWidget *wvbox; GdkColor druid_bg_color = DRUID_BG_COLOR; GdkColor druid_title_color = DRUID_TITLE_COLOR; GtkWidget *whbox, *wcombo; GList *name_list = NULL; GList *p; Site *site; gb_debug (DEBUG_UPDATE, "START"); download_page = gnome_druid_page_standard_new_with_vals (_("Select download site"), logo, NULL); gnome_druid_page_standard_set_background(GNOME_DRUID_PAGE_STANDARD(download_page), &druid_bg_color); gnome_druid_page_standard_set_logo_background(GNOME_DRUID_PAGE_STANDARD(download_page), &druid_bg_color); gnome_druid_page_standard_set_title_foreground( GNOME_DRUID_PAGE_STANDARD(download_page), &druid_title_color); gnome_druid_append_page( wdruid, GNOME_DRUID_PAGE(download_page) ); wvbox = GNOME_DRUID_PAGE_STANDARD(download_page)->vbox; whbox = gtk_hbox_new( FALSE, 10 ); gtk_container_set_border_width( GTK_CONTAINER(whbox), 20 ); gtk_box_pack_start( GTK_BOX(wvbox), whbox, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX(whbox), gtk_label_new( _("Download site:") ), FALSE, TRUE, 0 ); if ( site_list == NULL ) { site_list = read_site_list(); } for ( p=site_list; p!= NULL; p=p->next ) { site = (Site *)p->data; name_list = g_list_append( name_list, site->name ); } wcombo = gtk_combo_new(); gtk_combo_set_popdown_strings( GTK_COMBO(wcombo), name_list ); g_list_free( name_list ); name_list = NULL; site_entry = GTK_COMBO(wcombo)->entry; gtk_entry_set_editable( GTK_ENTRY(site_entry), FALSE ); gtk_box_pack_start( GTK_BOX(whbox), wcombo, TRUE, TRUE, 0 ); gb_debug (DEBUG_UPDATE, "END"); }
static GtkWidget * gb_gnome_druid_page_standard_get_child (GtkWidget * widget, const gchar * child_name) { if (!strcmp (child_name, GladeChildGnomeDruidVBox)) return GNOME_DRUID_PAGE_STANDARD (widget)->vbox; else return NULL; }
/* * Gets the properties of the widget. This is used for both displaying the * properties in the property editor, and also for saving the properties. */ static void gb_gnome_druid_page_standard_get_properties (GtkWidget *widget, GbWidgetGetArgData * data) { GnomeDruidPageStandard *page; GdkColor *title_color, *background_color, *logo_background_color; gboolean title_color_set, background_color_set, logo_background_color_set; page = GNOME_DRUID_PAGE_STANDARD (widget); /* We do this to make sure the colors are set. */ gtk_widget_ensure_style (widget); gb_widget_output_translatable_string (data, Title, page->title); g_object_get (G_OBJECT (widget), "title-foreground-set", &title_color_set, "title-foreground-gdk", &title_color, "background-set", &background_color_set, "background-gdk", &background_color, "logo-background-set", &logo_background_color_set, "logo-background-gdk", &logo_background_color, NULL); if (data->action == GB_SHOWING || title_color_set) gb_widget_output_color (data, TitleColor, title_color); if (data->action == GB_SHOWING || background_color_set) gb_widget_output_color (data, BackgroundColor, background_color); if (data->action == GB_SHOWING || logo_background_color_set) gb_widget_output_color (data, LogoBackgroundColor, logo_background_color); gdk_color_free (title_color); gdk_color_free (background_color); gdk_color_free (logo_background_color); /* FIXME: GNOME 2 bug workaround. It doesn't install the properties for these, so we have to do it ourselves. */ if (data->action == GB_SHOWING || gtk_object_get_data (GTK_OBJECT (widget), ContentsBackgroundColor)) gb_widget_output_color (data, ContentsBackgroundColor, &page->contents_background); gb_widget_output_pixmap_filename (data, LogoImage, gtk_object_get_data (GTK_OBJECT (widget), LogoImage)); gb_widget_output_pixmap_filename (data, TopWatermark, gtk_object_get_data (GTK_OBJECT (widget), TopWatermark)); }
/* * 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; }
at_job_t *make_new_at_job() { GtkWidget *druid, *page_start, *page_at1, *page_at2, *page_finish; GtkWidget *hbox, *frame, *align, *bigvbox; at_druid_info *info; struct tm *tp; time_t t; char *fname; GdkPixbuf *logo = NULL; fname = gnome_pixmap_file("gnome-clock.png"); if (fname) logo = gdk_pixbuf_new_from_file(fname, NULL); g_free(fname); time(&t); tp = localtime(&t); info = g_new(at_druid_info, 1); druid = gnome_druid_new_with_window("New One-Time Job", NULL, TRUE, &info->win); page_start = gnome_druid_page_edge_new_with_vals( GNOME_EDGE_START, FALSE, "Create new one-time job", "This series of dialogs will step\n" "you through the process of creating\n" "a new one-time job.", logo, NULL, NULL); page_at1 = gnome_druid_page_standard_new_with_vals( "Choose a time and date", logo, NULL); page_at2 = gnome_druid_page_standard_new_with_vals( "Select command", logo, NULL); page_finish = gnome_druid_page_edge_new_with_vals( GNOME_EDGE_FINISH, FALSE, "Confirm new job", NULL, logo, NULL, NULL); bigvbox = gtk_vbox_new(FALSE, 0); align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0); gtk_container_add(GTK_CONTAINER(align), bigvbox); gtk_box_pack_start(GTK_BOX(GNOME_DRUID_PAGE_STANDARD(page_at1)->vbox), align, TRUE, TRUE, 0); info->cal = gtk_calendar_new(); gtk_box_pack_start(GTK_BOX(bigvbox), info->cal, FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); frame = gtk_frame_new("Time"); gtk_container_set_border_width(GTK_CONTAINER(frame), 8); gtk_box_pack_start(GTK_BOX(bigvbox), frame, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); info->hour = make_new_spinner("Hour:", tp->tm_hour, 0, 23, 5, hbox); info->minute = make_new_spinner("Minute:", tp->tm_min, 0, 59, 5, hbox); info->command = make_job_page(GNOME_DRUID_PAGE_STANDARD(page_at2)->vbox); gtk_signal_connect_object(GTK_OBJECT(page_finish), "finish", GTK_SIGNAL_FUNC(at_commit_job), (gpointer)info); gtk_signal_connect_object(GTK_OBJECT(info->win), "destroy", GTK_SIGNAL_FUNC(g_free), (gpointer)info); gtk_signal_connect(GTK_OBJECT(page_finish), "prepare", GTK_SIGNAL_FUNC(prepare_last_page), (gpointer)info); gtk_signal_connect(GTK_OBJECT(info->command), "changed", GTK_SIGNAL_FUNC(cmd_changed), (gpointer)druid); gnome_druid_append_page(GNOME_DRUID(druid), GNOME_DRUID_PAGE(page_start)); gnome_druid_append_page(GNOME_DRUID(druid), GNOME_DRUID_PAGE(page_at1)); gnome_druid_append_page(GNOME_DRUID(druid), GNOME_DRUID_PAGE(page_at2)); gnome_druid_append_page(GNOME_DRUID(druid), GNOME_DRUID_PAGE(page_finish)); gnome_druid_set_page(GNOME_DRUID(druid), GNOME_DRUID_PAGE(page_start)); gtk_window_set_modal(GTK_WINDOW(info->win), TRUE); gtk_widget_show_all(info->win); g_object_unref(logo); return NULL; }
/*--------------------------------------------------------------------------*/ static void add_downloading_page( GnomeDruid *wdruid, GdkPixbuf *logo ) { GtkWidget *wpage, *wvbox, *wvbox2, *wvbox3, *wvbox4; GtkWidget *whbox2, *whbox3, *whbox4; GtkWidget *wlabel1, *wlabel2, *wframe; GdkColor druid_bg_color = DRUID_BG_COLOR; GdkColor druid_title_color = DRUID_TITLE_COLOR; gb_debug (DEBUG_UPDATE, "START"); wpage = gnome_druid_page_standard_new_with_vals (_("Downloading..."), logo, NULL); gnome_druid_page_standard_set_background(GNOME_DRUID_PAGE_STANDARD(wpage), &druid_bg_color); gnome_druid_page_standard_set_logo_background(GNOME_DRUID_PAGE_STANDARD(wpage), &druid_bg_color); gnome_druid_page_standard_set_title_foreground(GNOME_DRUID_PAGE_STANDARD(wpage), &druid_title_color); gnome_druid_append_page( wdruid, GNOME_DRUID_PAGE(wpage) ); wvbox = GNOME_DRUID_PAGE_STANDARD(wpage)->vbox; wvbox2 = gtk_vbox_new( FALSE, 10 ); gtk_container_set_border_width( GTK_CONTAINER(wvbox2), 20 ); gtk_box_pack_start( GTK_BOX(wvbox), wvbox2, TRUE, FALSE, 0 ); wlabel1 = gtk_label_new( _("Please wait while GBonds downloads new redemption data.") ); gtk_box_pack_start( GTK_BOX(wvbox2), wlabel1, FALSE, TRUE, 0 ); wframe = gtk_frame_new( NULL ); gtk_box_pack_start( GTK_BOX(wvbox2), wframe, FALSE, TRUE, 0 ); whbox2 = gtk_hbox_new( FALSE, 0 ); gtk_container_set_border_width( GTK_CONTAINER(whbox2), 5 ); gtk_container_add( GTK_CONTAINER(wframe), whbox2 ); status_label = gtk_label_new( _("Status") ); gtk_label_set_justify( GTK_LABEL(status_label), GTK_JUSTIFY_LEFT ); gtk_box_pack_start( GTK_BOX(whbox2), status_label, FALSE, TRUE, 0 ); wvbox3 = gtk_vbox_new( FALSE, 2 ); gtk_box_pack_start( GTK_BOX(wvbox2), wvbox3, TRUE, FALSE, 0 ); whbox3 = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_start( GTK_BOX(wvbox3), whbox3, FALSE, TRUE, 0 ); file_label = gtk_label_new( _("File") ); gtk_label_set_justify( GTK_LABEL(file_label), GTK_JUSTIFY_LEFT ); gtk_box_pack_start( GTK_BOX(whbox3), file_label, FALSE, TRUE, 0 ); file_progress = gtk_progress_bar_new(); gtk_progress_bar_set_text( GTK_PROGRESS_BAR(file_progress), "" ); gtk_box_pack_start( GTK_BOX(wvbox3), file_progress, FALSE, TRUE, 0 ); wvbox4 = gtk_vbox_new( FALSE, 2 ); gtk_box_pack_start( GTK_BOX(wvbox2), wvbox4, TRUE, FALSE, 0 ); whbox4 = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_start( GTK_BOX(wvbox4), whbox4, FALSE, TRUE, 0 ); wlabel2 = gtk_label_new( _("Total") ); gtk_label_set_justify( GTK_LABEL(wlabel2), GTK_JUSTIFY_LEFT ); gtk_box_pack_start( GTK_BOX(whbox4), wlabel2, FALSE, TRUE, 0 ); total_progress = gtk_progress_bar_new(); gtk_progress_bar_set_text( GTK_PROGRESS_BAR(total_progress), "" ); gtk_box_pack_start( GTK_BOX(wvbox4), total_progress, FALSE, TRUE, 0 ); g_signal_connect_after( G_OBJECT(wpage), "prepare", G_CALLBACK(prepare_downloading_page), NULL ); gb_debug (DEBUG_UPDATE, "END"); }
/* * Writes the source code needed to create this widget. * You have to output everything necessary to create the widget here, though * there are some convenience functions to help. */ static void gb_gnome_druid_page_standard_write_source (GtkWidget * widget, GbWidgetWriteSourceData * data) { GnomeDruidPageStandard *page; gchar *filename, *title; gchar *wname, *child_name; GdkColor title_color, background_color, logo_background_color; gboolean title_color_set, background_color_set, logo_background_color_set; page = GNOME_DRUID_PAGE_STANDARD (widget); /* We do this to make sure the colors are set. */ gtk_widget_ensure_style (widget); if (data->create_widget) { source_add (data, " %s = gnome_druid_page_standard_new ();\n", data->wname); } gb_widget_write_standard_source (widget, data); g_object_get (G_OBJECT (widget), "title-foreground-set", &title_color_set, "title-foreground-gdk", &title_color, "background-set", &background_color_set, "background-gdk", &background_color, "logo-background-set", &logo_background_color_set, "logo-background-gdk", &logo_background_color, "title", &title, NULL); if (background_color_set) { source_add_decl (data, " GdkColor %s_bg_color = { 0, %i, %i, %i };\n", data->real_wname, background_color.red, background_color.green, background_color.blue); source_add (data, " gnome_druid_page_standard_set_background (GNOME_DRUID_PAGE_STANDARD (%s), &%s_bg_color);\n", data->wname, data->real_wname); } if (logo_background_color_set) { source_add_decl (data, " GdkColor %s_logo_bg_color = { 0, %i, %i, %i };\n", data->real_wname, logo_background_color.red, logo_background_color.green, logo_background_color.blue); source_add (data, " gnome_druid_page_standard_set_logo_background (GNOME_DRUID_PAGE_STANDARD (%s), &%s_logo_bg_color);\n", data->wname, data->real_wname); } if (title_color_set) { source_add_decl (data, " GdkColor %s_title_color = { 0, %i, %i, %i };\n", data->real_wname, title_color.red, title_color.green, title_color.blue); source_add (data, " gnome_druid_page_standard_set_title_foreground (GNOME_DRUID_PAGE_STANDARD (%s), &%s_title_color);\n", data->wname, data->real_wname); } if (gtk_object_get_data (GTK_OBJECT (widget), ContentsBackgroundColor)) { GdkColor *color = &page->contents_background; source_add_decl (data, " GdkColor %s_contents_bg_color = { 0, %i, %i, %i };\n", data->real_wname, color->red, color->green, color->blue); source_add (data, " gnome_druid_page_standard_set_contents_background (GNOME_DRUID_PAGE_STANDARD (%s), &%s_contents_bg_color);\n", data->wname, data->real_wname); } if (title && *title) { gboolean translatable, context; gchar *comments; glade_util_get_translation_properties (widget, Title, &translatable, &comments, &context); source_add_translator_comments (data, translatable, comments); source_add (data, " gnome_druid_page_standard_set_title (GNOME_DRUID_PAGE_STANDARD (%s), %s);\n", data->wname, source_make_string_full (title, data->use_gettext && translatable, context)); } g_free (title); filename = gtk_object_get_data (GTK_OBJECT (widget), LogoImage); if (filename && filename[0]) { source_ensure_decl (data, " GdkPixbuf *tmp_pixbuf;\n"); source_add (data, " tmp_pixbuf = create_pixbuf (\"%s/%s\");\n" " if (tmp_pixbuf)\n" " {\n" " gnome_druid_page_standard_set_logo (GNOME_DRUID_PAGE_STANDARD (%s),\n" " tmp_pixbuf);\n" " gdk_pixbuf_unref (tmp_pixbuf);\n" " }\n", data->program_name, g_basename (filename), data->wname); } filename = gtk_object_get_data (GTK_OBJECT (widget), TopWatermark); if (filename && filename[0]) { source_ensure_decl (data, " GdkPixbuf *tmp_pixbuf;\n"); source_add (data, " tmp_pixbuf = create_pixbuf (\"%s/%s\");\n" " if (tmp_pixbuf)\n" " {\n" " gnome_druid_page_standard_set_top_watermark (GNOME_DRUID_PAGE_STANDARD (%s),\n" " tmp_pixbuf);\n" " gdk_pixbuf_unref (tmp_pixbuf);\n" " }\n", data->program_name, g_basename (filename), data->wname); } /* We output the source code for the children here, since the code should not include calls to create the widgets. We need to specify that the names used are like: "GTK_COMBO (<combo-name>)->entry". We need to remember the dialog's name since data->wname will be overwritten. */ wname = g_strdup (data->wname); source_add (data, "\n"); child_name = (char*) gtk_widget_get_name (GNOME_DRUID_PAGE_STANDARD (widget)->vbox); child_name = source_create_valid_identifier (child_name); source_add (data, " %s = GNOME_DRUID_PAGE_STANDARD (%s)->vbox;\n", child_name, wname); g_free (child_name); data->create_widget = FALSE; gb_widget_write_source (GNOME_DRUID_PAGE_STANDARD (widget)->vbox, data); g_free (wname); data->write_children = FALSE; }
static void gb_gnome_druid_page_standard_set_properties (GtkWidget * widget, GbWidgetSetArgData * data) { GnomeDruidPageStandard *page; gchar *string, *old_filename; GdkColor *color; GdkPixbuf *image; page = GNOME_DRUID_PAGE_STANDARD (widget); string = gb_widget_input_string (data, Title); if (data->apply) gnome_druid_page_standard_set_title (page, string); color = gb_widget_input_color (data, BackgroundColor); if (data->apply) gnome_druid_page_standard_set_bg_color (page, color); color = gb_widget_input_color (data, LogoBackgroundColor); if (data->apply) gnome_druid_page_standard_set_logo_bg_color (page, color); color = gb_widget_input_color (data, TitleColor); if (data->apply) gnome_druid_page_standard_set_title_color (page, color); color = gb_widget_input_color (data, ContentsBackgroundColor); if (data->apply) { gtk_object_set_data (GTK_OBJECT (widget), ContentsBackgroundColor, "Y"); gnome_druid_page_standard_set_contents_background (page, color); } string = gb_widget_input_pixmap_filename (data, LogoImage); if (data->apply) { if (string && string[0] == '\0') string = NULL; old_filename = gtk_object_get_data (GTK_OBJECT (widget), LogoImage); glade_project_remove_pixmap (data->project, old_filename); gtk_object_set_data_full (GTK_OBJECT (widget), LogoImage, g_strdup (string), string ? g_free : NULL); glade_project_add_pixmap (data->project, string); image = string ? gdk_pixbuf_new_from_file (string, NULL) : NULL; gnome_druid_page_standard_set_logo (page, image); if (image) gdk_pixbuf_unref (image); } if (data->action == GB_LOADING) g_free (string); string = gb_widget_input_pixmap_filename (data, TopWatermark); if (data->apply) { if (string && string[0] == '\0') string = NULL; old_filename = gtk_object_get_data (GTK_OBJECT (widget), TopWatermark); glade_project_remove_pixmap (data->project, old_filename); gtk_object_set_data_full (GTK_OBJECT (widget), TopWatermark, g_strdup (string), string ? g_free : NULL); glade_project_add_pixmap (data->project, string); image = string ? gdk_pixbuf_new_from_file (string, NULL) : NULL; gnome_druid_page_standard_set_top_watermark (page, image); if (image) gdk_pixbuf_unref (image); } if (data->action == GB_LOADING) g_free (string); }