static void gnome_druid_remove (GtkContainer *widget, GtkWidget *child) { GnomeDruid *druid; GList *list; g_return_if_fail (widget != NULL); g_return_if_fail (GNOME_IS_DRUID (widget)); g_return_if_fail (child != NULL); druid = GNOME_DRUID (widget); list = g_list_find (druid->_priv->children, child); /* Is it a page? */ if (list != NULL) { /* If we are mapped and visible, we want to deal with changing the page. */ if ((GTK_WIDGET_MAPPED (GTK_WIDGET (widget))) && (list->data == (gpointer) druid->_priv->current)) { if (list->next != NULL) gnome_druid_set_page (druid, GNOME_DRUID_PAGE (list->next->data)); else if (list->prev != NULL) gnome_druid_set_page (druid, GNOME_DRUID_PAGE (list->prev->data)); else /* Removing the only child, just set current to NULL */ druid->_priv->current = NULL; } } druid->_priv->children = g_list_remove (druid->_priv->children, child); gtk_widget_unparent (child); }
static void gb_gnome_druid_insert_page_before (GtkWidget * menuitem, GnomeDruidPage *page) { GtkWidget *parent, *new_page; GnomeDruidPage *prev_page; GList *children, *elem; parent = GTK_WIDGET (page)->parent; g_return_if_fail (GNOME_IS_DRUID (parent)); children = gtk_container_get_children (GTK_CONTAINER (parent)); elem = g_list_find (children, page); g_return_if_fail (elem != NULL); new_page = gb_widget_new ("GnomeDruidPageStandard", parent); gtk_widget_show_all (new_page); if (elem->prev) prev_page = GNOME_DRUID_PAGE (elem->prev->data); else prev_page = NULL; g_list_free (children); gnome_druid_insert_page (GNOME_DRUID (parent), prev_page, GNOME_DRUID_PAGE (new_page)); gb_gnome_druid_show_page (parent, new_page); gnome_druid_set_page (GNOME_DRUID (parent), GNOME_DRUID_PAGE (new_page)); tree_add_widget (GTK_WIDGET (new_page)); }
/*--------------------------------------------------------------------------*/ static void no_download( void ) { gchar *date_min, *date_max, *finish_msg; gbTableModel *table_model; gb_debug (DEBUG_UPDATE, "START"); /* customize finish page for this outcome */ gnome_druid_page_edge_set_title( GNOME_DRUID_PAGE_EDGE(finish_page), _( "No new data available" ) ); table_model = gb_table_get_model (); date_min = gb_date_fmt (gb_table_model_get_rdate_min (table_model)); date_max = gb_date_fmt (gb_table_model_get_rdate_max (table_model)); finish_msg = g_strdup_printf( _( "No new redemption data available from selected\n" "download site.\n\n" "GBonds is still configured with redemption data\n" "for %s - %s.\n" ), date_min, date_max ); gnome_druid_page_edge_set_text( GNOME_DRUID_PAGE_EDGE(finish_page), finish_msg ); g_free( date_min ); g_free( date_max ); g_free( finish_msg ); remote_dir_handle = NULL; /* Now jump to the finish page */ gnome_druid_set_page( GNOME_DRUID(update_druid), GNOME_DRUID_PAGE(finish_page) ); gb_debug (DEBUG_UPDATE, "END"); }
static void gnome_druid_next_callback (GtkWidget *button, GnomeDruid *druid) { GList *list; g_return_if_fail (druid->_priv->current != NULL); if (druid->_priv->show_finish == FALSE) { if (gnome_druid_page_next (druid->_priv->current)) return; /* Make sure that we have a next list item */ list = g_list_find (druid->_priv->children, druid->_priv->current); /* this would be a bug */ g_assert (list != NULL); list = list->next; while (list != NULL && ! GTK_WIDGET_VISIBLE (list->data)) list = list->next; if ( ! list) return; gnome_druid_set_page (druid, GNOME_DRUID_PAGE (list->data)); } else { gnome_druid_page_finish (druid->_priv->current); } }
static void gb_gnome_druid_add_finish_page (GtkWidget * menuitem, GnomeDruid *druid) { GtkWidget *new_page; new_page = gnome_druid_page_edge_new_aa (GNOME_EDGE_FINISH); gb_widget_create_from (new_page, "GnomeDruidPageFinish"); gtk_widget_show_all (new_page); gnome_druid_append_page (druid, GNOME_DRUID_PAGE (new_page)); gb_gnome_druid_show_page (GTK_WIDGET (druid), new_page); gnome_druid_set_page (druid, GNOME_DRUID_PAGE (new_page)); tree_add_widget (GTK_WIDGET (new_page)); }
gboolean on_userlist_import_page_1_next (GnomeDruidPage * druidpage, GtkWidget * widget, gpointer user_data) { GtkWidget *radio_import_server, *radio_import_file; GnomeDruid *druid = GNOME_DRUID (glade_xml_get_widget (gladexml_import_userlist, "ImportUserlistDruid")); GnomeDruidPage *page_last = GNOME_DRUID_PAGE (glade_xml_get_widget (gladexml_import_userlist, "userlist_import_page_last")); radio_import_server = glade_xml_get_widget (gladexml_import_userlist, "RadioImportServer"); radio_import_file = glade_xml_get_widget (gladexml_import_userlist, "RadioImportFile"); g_assert (radio_import_file); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_import_server))) { GtkWidget *progress_window; if (!gnomegadu_gadugadu_session) { GtkDialog *msgdialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "<span weight=\"bold\"size=\"larger\">Brak połączenia</span>\n\nPołącz się z siecią Gadu-Gadu i spróbuj ponownie."); gtk_dialog_run (GTK_DIALOG (msgdialog)); gtk_widget_destroy (GTK_WIDGET (msgdialog)); return TRUE; } gladexml_import_userlist_progress = glade_xml_new (PACKAGE_DATA_DIR "/gnomegadu.glade", "ImportUserlistServerProgressWindow", NULL); glade_xml_signal_autoconnect (gladexml_import_userlist_progress); g_assert (gladexml_import_userlist_progress); progress_window = glade_xml_get_widget (gladexml_import_userlist_progress, "ImportUserlistServerProgressWindow"); g_assert(progress_window); gtk_widget_show_all (GTK_WIDGET(progress_window)); gg_userlist_request (gnomegadu_gadugadu_session, GG_USERLIST_GET, NULL); gnome_druid_set_page (druid, page_last); gnome_druid_set_buttons_sensitive (druid, TRUE, FALSE, TRUE, FALSE); gnome_druid_set_show_finish (druid, TRUE); } else { //gtk_file_chooser_get_filename () //gnomegadu_import_userlist_from_file(); } return FALSE; }
gboolean on_userlist_import_page_last_back (GnomeDruidPage * druidpage, GtkWidget * widget, gpointer user_data) { GtkWidget *radio_import_server, *radio_import_file; GnomeDruid *druid = GNOME_DRUID (glade_xml_get_widget (gladexml_import_userlist, "ImportUserlistDruid")); GnomeDruidPage *page1 = GNOME_DRUID_PAGE (glade_xml_get_widget (gladexml_import_userlist, "userlist_import_page_1")); radio_import_server = glade_xml_get_widget (gladexml_import_userlist, "RadioImportServer"); radio_import_file = glade_xml_get_widget (gladexml_import_userlist, "RadioImportFile"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_import_server))) { gnome_druid_set_page (druid, page1); return TRUE; } return FALSE; }
static void on_druid_dialog_ok (GtkWidget * widget, GbWidgetNewData * data) { GtkWidget *new_widget, *spinbutton, *window, *page; gint pages, i; window = gtk_widget_get_toplevel (widget); /* Only call callback if placeholder/fixed widget is still there */ if (gb_widget_can_finish_new (data)) { spinbutton = gtk_object_get_data (GTK_OBJECT (window), "pages"); g_return_if_fail (spinbutton != NULL); pages = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinbutton)); new_widget = gnome_druid_new (); page = gnome_druid_page_edge_new_aa (GNOME_EDGE_START); gb_widget_create_from (page, "GnomeDruidPageStart"); gnome_druid_append_page (GNOME_DRUID (new_widget), GNOME_DRUID_PAGE (page)); gnome_druid_set_page (GNOME_DRUID (new_widget), GNOME_DRUID_PAGE (page)); for (i = 0; i < pages - 2; i++) { page = gb_widget_new ("GnomeDruidPageStandard", new_widget); gnome_druid_append_page (GNOME_DRUID (new_widget), GNOME_DRUID_PAGE (page)); } if (pages >= 2) { page = gnome_druid_page_edge_new_aa (GNOME_EDGE_FINISH); gb_widget_create_from (page, "GnomeDruidPageFinish"); gnome_druid_append_page (GNOME_DRUID (new_widget), GNOME_DRUID_PAGE (page)); } gtk_widget_show_all (new_widget); gb_widget_initialize (new_widget, data); (*data->callback) (new_widget, data); } gtk_widget_destroy (window); }
static void gb_gnome_druid_insert_page_after (GtkWidget * menuitem, GnomeDruidPage *page) { GtkWidget *parent, *new_page; parent = GTK_WIDGET (page)->parent; g_return_if_fail (GNOME_IS_DRUID (parent)); new_page = gb_widget_new ("GnomeDruidPageStandard", parent); gtk_widget_show_all (new_page); gnome_druid_insert_page (GNOME_DRUID (parent), GNOME_DRUID_PAGE (page), GNOME_DRUID_PAGE (new_page)); gb_gnome_druid_show_page (parent, new_page); gnome_druid_set_page (GNOME_DRUID (parent), GNOME_DRUID_PAGE (new_page)); tree_add_widget (GTK_WIDGET (new_page)); }
/** * gnome_druid_insert_page: * @druid: A #GnomeDruid widget. * @back_page: The page prior to the page to be inserted. * @page: The page to insert. * * Description: This will insert @page after @back_page into the list of * internal pages that the @druid has. If @back_page is not present in the * list or %NULL, @page will be prepended to the list. Since #GnomeDruid is * just a container, you will need to also call gtk_widget_show() on the page, * otherwise the page will not be shown. **/ void gnome_druid_insert_page (GnomeDruid *druid, GnomeDruidPage *back_page, GnomeDruidPage *page) { GList *list; g_return_if_fail (druid != NULL); g_return_if_fail (GNOME_IS_DRUID (druid)); g_return_if_fail (page != NULL); g_return_if_fail (GNOME_IS_DRUID_PAGE (page)); list = g_list_find (druid->_priv->children, back_page); if (list == NULL) { druid->_priv->children = g_list_prepend (druid->_priv->children, page); } else { GList *new_el = g_list_alloc (); new_el->next = list->next; new_el->prev = list; if (new_el->next) new_el->next->prev = new_el; new_el->prev->next = new_el; new_el->data = (gpointer) page; } gtk_widget_set_parent (GTK_WIDGET (page), GTK_WIDGET (druid)); if (GTK_WIDGET_REALIZED (GTK_WIDGET (druid))) gtk_widget_realize (GTK_WIDGET (page)); if (GTK_WIDGET_VISIBLE (GTK_WIDGET (druid)) && GTK_WIDGET_VISIBLE (GTK_WIDGET (page))) { if (GTK_WIDGET_MAPPED (GTK_WIDGET (page))) gtk_widget_unmap (GTK_WIDGET (page)); gtk_widget_queue_resize (GTK_WIDGET (druid)); } /* if it's the first and only page, we want to bring it to the foreground. */ if (druid->_priv->children->next == NULL) gnome_druid_set_page (druid, page); }
static void gnome_druid_back_callback (GtkWidget *button, GnomeDruid *druid) { GList *list; g_return_if_fail (druid->_priv->current != NULL); if (gnome_druid_page_back (druid->_priv->current)) return; /* Make sure that we have a next list item */ list = g_list_find (druid->_priv->children, druid->_priv->current); g_return_if_fail (list->prev != NULL); list = list->prev; while (list != NULL && ! GTK_WIDGET_VISIBLE (list->data)) list = list->prev; if ( ! list) return; gnome_druid_set_page (druid, GNOME_DRUID_PAGE (list->data)); }
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 download_done( DownloadCallbackData *data ) { GList *p; GnomeVFSFileInfo *info, tmp_info = {0}; gchar *hash_name; gchar *hash_path, *hash_text_uri; gchar *file_path, *file_text_uri; gchar *date_min, *date_max, *finish_msg; gchar *data_dir; gbTableModel *table_model; gb_debug (DEBUG_UPDATE, "START"); /* Rename downloaded files (undo name hash) */ data_dir = gb_util_get_home_data_dir(); for ( p=data->list; p != NULL; p=p->next ) { info = (GnomeVFSFileInfo *)p->data; hash_name = hash_filename( info->name ); hash_path = g_build_filename( data_dir, hash_name, NULL ); hash_text_uri = gnome_vfs_get_uri_from_local_path( hash_path ); file_path = g_build_filename( data_dir, info->name, NULL ); file_text_uri = gnome_vfs_get_uri_from_local_path( file_path ); gnome_vfs_get_file_info (hash_text_uri, &tmp_info, GNOME_VFS_FILE_INFO_DEFAULT); if ( info->size == tmp_info.size ) { gnome_vfs_move( hash_text_uri, file_text_uri, FALSE ); } else { g_warning ("%s: Temporary file size (%" GNOME_VFS_OFFSET_FORMAT_STR ") does not match remote size (%" GNOME_VFS_OFFSET_FORMAT_STR ").", info->name, tmp_info.size, info->size); gnome_vfs_unlink (hash_text_uri); } g_free( hash_name ); g_free( hash_path ); g_free( hash_text_uri ); g_free( file_path ); g_free( file_text_uri ); } g_free( data_dir ); /* Now reread redemption tables */ table_model = gb_table_get_model (); gb_table_model_update (table_model); /* customize finish page for this outcome */ gnome_druid_page_edge_set_title( GNOME_DRUID_PAGE_EDGE(finish_page), _( "Download done" ) ); date_min = gb_date_fmt (gb_table_model_get_rdate_min (table_model)); date_max = gb_date_fmt (gb_table_model_get_rdate_max (table_model)); finish_msg = g_strdup_printf( _( "GBonds has successfully downloaded " "%d new redemption files.\n\n" "GBonds is now configured with redemption data\n" "for %s - %s.\n" ), data->n, date_min, date_max ); gnome_druid_page_edge_set_text( GNOME_DRUID_PAGE_EDGE(finish_page), finish_msg ); g_free( date_min ); g_free( date_max ); g_free( finish_msg ); remote_dir_handle = NULL; /* Now jump to the finish page */ gnome_druid_set_page( GNOME_DRUID(update_druid), GNOME_DRUID_PAGE(finish_page) ); gb_debug (DEBUG_UPDATE, "END"); }