void file_dialog(gchar *title, gchar *name, gint type, gpointer secondary_handler(gchar *, struct model_pak *), gint filter) { gpointer dialog; GSList *flist; GList *elist; GtkWidget *window, *swin, *hbox, *combo, *label; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; struct model_pak *data=NULL; struct file_pak *fdata; /* if save type, check we have a loaded model */ if (secondary_handler == (gpointer) file_save_as) { data = sysenv.active_model; if (!data) return; } /* get a dialog if possible */ dialog = dialog_request(FILE_SELECT, "File dialog", NULL, NULL, NULL); if (!dialog) return; window = dialog_window(dialog); /* make and set up the dialog window */ gtk_window_set_title(GTK_WINDOW(window), title); gtk_window_set_default_size(GTK_WINDOW(window), 600, 400); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(GTK_BOX(GTK_DIALOG(window)->vbox)),10); /* TOP ROW - cwd printed */ hbox = gtk_hbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox),hbox,FALSE,FALSE,0); label = gtk_label_new("Current path: "); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); curr_path = gtk_label_new("dummy"); gtk_box_pack_start(GTK_BOX(hbox), curr_path, FALSE, FALSE, 0); /* option to save as cartesian or fractional coords */ if (secondary_handler == (gpointer) file_save_as) { g_assert(data != NULL); if (data->periodic) { hbox = gtk_hbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox,FALSE,FALSE,0); new_check_button("Save as cartesian coordinates", toggle_save_type, data, !data->fractional, hbox); } } /* SECOND ROW - sub directory & file listings */ hbox = gtk_hbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), PANEL_SPACING); /* scrolled model pane */ swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(hbox), swin, TRUE, TRUE, 0); /* path treestore/treeview */ file_path_ts = gtk_list_store_new(FILE_PATH_NCOLS, G_TYPE_STRING); file_path_tv = gtk_tree_view_new_with_model(GTK_TREE_MODEL(file_path_ts)); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), file_path_tv); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Tree", renderer, "text", FILE_PATH, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(file_path_tv), column); /* NB: use this method instead of selections to handle events */ /* as selections will core dump if the handler clears the store */ g_signal_connect(file_path_tv, "row_activated", G_CALLBACK(file_path_activate), NULL); /* scrolled model pane */ swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(hbox), swin, TRUE, TRUE, 0); /* filename treestore/treeview */ file_name_ts = gtk_list_store_new(FILE_NAME_NCOLS, G_TYPE_STRING); file_name_tv = gtk_tree_view_new_with_model(GTK_TREE_MODEL(file_name_ts)); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), file_name_tv); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Files", renderer, "text", FILE_NAME, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(file_name_tv), column); /* setup the selection handler */ select = gtk_tree_view_get_selection(GTK_TREE_VIEW(file_name_tv)); gtk_tree_selection_set_mode(select, GTK_SELECTION_BROWSE); /* single click - update entry */ g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(cb_file_name_changed), NULL); /* double click - automatic load */ if (secondary_handler == (gpointer) file_load) g_signal_connect(file_name_tv, "row_activated", G_CALLBACK(file_name_activate), NULL); /* THIRD ROW - filename currently selected & file extension filter */ hbox = gtk_hbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox, FALSE, FALSE, 0); /* filename */ file_name = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), file_name, TRUE, TRUE, 0); if (name) gtk_entry_set_text(GTK_ENTRY(file_name), name); gtk_entry_set_editable(GTK_ENTRY(file_name), TRUE); /* hook a <CR> event to the load action */ g_signal_connect(GTK_OBJECT(file_name), "activate", GTK_SIGNAL_FUNC(file_event_handler), secondary_handler); /* build the recognized extension list */ elist = NULL; flist = sysenv.file_list; while(flist != NULL) { fdata = flist->data; /* include in menu? */ if (fdata->menu) elist = g_list_append(elist, fdata->label); flist = g_slist_next(flist); } /* combo box for file filter */ combo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(combo)->entry), FALSE); gtk_combo_set_popdown_strings(GTK_COMBO(combo), elist); /* set the currently selected type (BEFORE the changed event is connected) */ fdata = get_file_info(GINT_TO_POINTER(filter), BY_FILE_ID); if (fdata) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), fdata->label); gtk_box_pack_start(GTK_BOX (hbox), combo, TRUE, TRUE, 0); g_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->entry), "changed", GTK_SIGNAL_FUNC(type_change), NULL); gtk_widget_set_size_request(combo, 6*sysenv.gtk_fontsize, -1); /* terminating buttons */ switch (type) { case FILE_LOAD: gui_stock_button(GTK_STOCK_OPEN, file_event_handler, secondary_handler, GTK_DIALOG(window)->action_area); break; case FILE_SAVE: gui_stock_button(GTK_STOCK_SAVE, file_event_handler, secondary_handler, GTK_DIALOG(window)->action_area); break; } gui_stock_button(GTK_STOCK_CANCEL, dialog_destroy, dialog, GTK_DIALOG(window)->action_area); /* all done */ gtk_widget_show_all(window); sysenv.file_type = filter; update_file_pane(); }
void calendar_create_fullyear_window (GUI *appGUI) { GtkWidget *vbox1, *vbox2; GtkWidget *hseparator; GtkWidget *hbuttonbox; GtkWidget *close_button; GtkWidget *hbox1; GtkWidget *prev_button; GtkWidget *info_button; GtkObject *fy_spinbutton_adj; GtkWidget *next_button; GtkWidget *fycal_scrolledwindow; GtkWidget *fycal_viewport; GtkWidget *fycal_alternative_view_checkbutton; GtkWidget *vseparator; GtkWidget *label; GtkWidget *fycal_label, *fycal_vbox; #ifdef HAVE_LIBICAL GtkWidget *button; #endif /* HAVE_LIBICAL */ gchar tmpbuf[BUFFER_SIZE], buffer[BUFFER_SIZE]; gint i, j, x, y, idx; GDate *cdate; guint month, year; cdate = g_date_new (); g_return_if_fail (cdate != NULL); g_date_set_time_t (cdate, time (NULL)); appGUI->cal->fullyear_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (appGUI->cal->fullyear_window), _("Full-year calendar")); gtk_window_set_position (GTK_WINDOW (appGUI->cal->fullyear_window), GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_default_size (GTK_WINDOW (appGUI->cal->fullyear_window), config.fy_window_size_x, config.fy_window_size_y); gtk_window_set_modal (GTK_WINDOW (appGUI->cal->fullyear_window), TRUE); g_signal_connect (G_OBJECT (appGUI->cal->fullyear_window), "delete_event", G_CALLBACK (fullyear_window_close_cb), appGUI); gtk_window_set_transient_for (GTK_WINDOW (appGUI->cal->fullyear_window), GTK_WINDOW (appGUI->main_window)); gtk_container_set_border_width (GTK_CONTAINER (appGUI->cal->fullyear_window), 8); g_signal_connect (G_OBJECT (appGUI->cal->fullyear_window), "key_press_event", G_CALLBACK (fullyear_key_press_cb), appGUI); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (appGUI->cal->fullyear_window), vbox1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 4); g_snprintf (tmpbuf, BUFFER_SIZE, "<b>%s:</b>", _("Year")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, TRUE, 0); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_padding (GTK_MISC (label), 0, 4); fy_spinbutton_adj = gtk_adjustment_new (get_gdate_current_year (), JULIAN_GREGORIAN_YEAR, 9999, 1, 10, 10); appGUI->cal->fy_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (fy_spinbutton_adj), 1, 0); gtk_widget_show (appGUI->cal->fy_spinbutton); g_signal_connect(appGUI->cal->fy_spinbutton, "value-changed", G_CALLBACK(change_year_spin_button_cb), appGUI); gtk_box_pack_start (GTK_BOX (hbox1), appGUI->cal->fy_spinbutton, FALSE, FALSE, 8); gtk_widget_set_size_request (appGUI->cal->fy_spinbutton, 80, -1); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (appGUI->cal->fy_spinbutton), TRUE); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (appGUI->cal->fy_spinbutton), GTK_UPDATE_IF_VALID); if (config.default_stock_icons) { info_button = gui_stock_button (GTK_STOCK_INFO, FALSE); } else { info_button = gui_stock_button (OSMO_STOCK_BUTTON_INFO, FALSE); } GTK_WIDGET_UNSET_FLAGS(info_button, GTK_CAN_FOCUS); gtk_widget_show (info_button); g_signal_connect (info_button, "clicked", G_CALLBACK (year_info_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, info_button, _("Year info"), NULL); gtk_button_set_relief (GTK_BUTTON (info_button), GTK_RELIEF_NONE); gtk_box_pack_start (GTK_BOX (hbox1), info_button, FALSE, FALSE, 2); vseparator = gtk_vseparator_new (); gtk_widget_show (vseparator); gtk_box_pack_start (GTK_BOX (hbox1), vseparator, FALSE, FALSE, 8); if (config.default_stock_icons) { prev_button = gui_stock_button (GTK_STOCK_GO_BACK, FALSE); } else { prev_button = gui_stock_button (OSMO_STOCK_BUTTON_PREV_YEAR, FALSE); } GTK_WIDGET_UNSET_FLAGS (prev_button, GTK_CAN_FOCUS); gtk_widget_show (prev_button); g_signal_connect (prev_button, "clicked", G_CALLBACK (change_to_previous_year_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, prev_button, _("Previous year"), NULL); gtk_button_set_relief (GTK_BUTTON (prev_button), GTK_RELIEF_NONE); gtk_box_pack_start (GTK_BOX (hbox1), prev_button, FALSE, FALSE, 2); if (config.default_stock_icons) { appGUI->cal->cyear_button = gui_stock_button (GTK_STOCK_HOME, FALSE); } else { appGUI->cal->cyear_button = gui_stock_button (OSMO_STOCK_BUTTON_TODAY, FALSE); } GTK_WIDGET_UNSET_FLAGS (appGUI->cal->cyear_button, GTK_CAN_FOCUS); gtk_widget_show (appGUI->cal->cyear_button); g_signal_connect (appGUI->cal->cyear_button, "clicked", G_CALLBACK (change_to_current_year_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, appGUI->cal->cyear_button, _("Current year"), NULL); gtk_button_set_relief (GTK_BUTTON (appGUI->cal->cyear_button), GTK_RELIEF_NONE); gtk_box_pack_start (GTK_BOX (hbox1), appGUI->cal->cyear_button, FALSE, FALSE, 2); if (config.default_stock_icons) { next_button = gui_stock_button (GTK_STOCK_GO_FORWARD, FALSE); } else { next_button = gui_stock_button (OSMO_STOCK_BUTTON_NEXT_YEAR, FALSE); } GTK_WIDGET_UNSET_FLAGS(next_button, GTK_CAN_FOCUS); gtk_widget_show (next_button); g_signal_connect (next_button, "clicked", G_CALLBACK (change_to_next_year_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, next_button, _("Next year"), NULL); gtk_button_set_relief (GTK_BUTTON (next_button), GTK_RELIEF_NONE); gtk_box_pack_start (GTK_BOX (hbox1), next_button, FALSE, FALSE, 2); vseparator = gtk_vseparator_new (); gtk_widget_show (vseparator); gtk_box_pack_start (GTK_BOX (hbox1), vseparator, FALSE, FALSE, 8); fycal_alternative_view_checkbutton = gtk_check_button_new_with_mnemonic (_("Alternative view")); GTK_WIDGET_UNSET_FLAGS (fycal_alternative_view_checkbutton, GTK_CAN_FOCUS); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fycal_alternative_view_checkbutton), config.fy_alternative_view); g_signal_connect (G_OBJECT (fycal_alternative_view_checkbutton), "toggled", G_CALLBACK (alternative_view_cb), appGUI); gtk_box_pack_start (GTK_BOX (hbox1), fycal_alternative_view_checkbutton, FALSE, FALSE, 2); gtk_widget_show (fycal_alternative_view_checkbutton); #ifdef HAVE_LIBICAL if (appGUI->calendar_only == FALSE) { button = gtk_button_new_with_label (_("Browse iCal events")); GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS); gtk_widget_show (button); gtk_box_pack_end (GTK_BOX (hbox1), button, FALSE, FALSE, 2); g_signal_connect (button, "clicked", G_CALLBACK (browse_ical_events_cb), appGUI); } #endif /* HAVE_LIBICAL */ fycal_scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (fycal_scrolledwindow); gtk_box_pack_start (GTK_BOX (vbox1), fycal_scrolledwindow, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (fycal_scrolledwindow), 4); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (fycal_scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); fycal_viewport = gtk_viewport_new (NULL, NULL); gtk_widget_show (fycal_viewport); gtk_container_add (GTK_CONTAINER (fycal_scrolledwindow), fycal_viewport); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_container_add (GTK_CONTAINER (fycal_viewport), vbox2); /*-------------------------------------------------------------------------------------*/ /* First view */ if (config.fy_simple_view == TRUE) { appGUI->cal->fycal_table_1 = gtk_table_new (MAX_MONTHS + 2, FULL_YEAR_COLS + 1, FALSE); } else { appGUI->cal->fycal_table_1 = gtk_table_new (MAX_MONTHS + 4, FULL_YEAR_COLS + 3, FALSE); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fycal_alternative_view_checkbutton)) == FALSE) { gtk_widget_show (appGUI->cal->fycal_table_1); } gtk_box_pack_start (GTK_BOX (vbox2), appGUI->cal->fycal_table_1, TRUE, TRUE, 0); vseparator = gtk_vseparator_new (); gtk_widget_show (vseparator); if (config.fy_simple_view == TRUE) { gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), vseparator, 1, 2, 0, 14, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); } else { gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), vseparator, 1, 2, 0, 16, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); } hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), hseparator, 2, 39, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), hseparator, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); if (config.fy_simple_view == FALSE) { vseparator = gtk_vseparator_new (); gtk_widget_show (vseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), vseparator, FULL_YEAR_COLS + 2, FULL_YEAR_COLS + 3, 0, 16, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), hseparator, 2, 39, MAX_MONTHS + 2, MAX_MONTHS + 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), hseparator, 0, 1, MAX_MONTHS + 2, MAX_MONTHS + 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), hseparator, FULL_YEAR_COLS + 3, FULL_YEAR_COLS + 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), hseparator, FULL_YEAR_COLS + 3, FULL_YEAR_COLS + 4, MAX_MONTHS + 2, MAX_MONTHS + 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); } g_date_set_day (cdate, 1); for (month = G_DATE_JANUARY; month <= G_DATE_DECEMBER; month++) { g_date_set_month (cdate, month); g_date_strftime (buffer, BUFFER_SIZE, config.fy_simple_view ? "%b" : "%B", cdate); g_snprintf (tmpbuf, BUFFER_SIZE, (month % 2) ? "%s" : "<span foreground='medium blue'>%s</span>", buffer); label = gtk_label_new (NULL); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), label, 0, 1, month + 1, month + 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_padding (GTK_MISC (label), 8, 0); gtk_label_set_markup (GTK_LABEL (label), tmpbuf); if (config.fy_simple_view == FALSE) { label = gtk_label_new (NULL); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), label, FULL_YEAR_COLS + 3, FULL_YEAR_COLS + 4, month + 1, month + 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_padding (GTK_MISC (label), 8, 0); gtk_label_set_markup (GTK_LABEL (label), tmpbuf); } } /* start with monday */ g_date_set_dmy (cdate, 1, 1, 2007); for (i = 0; i < FULL_YEAR_COLS; i++) { g_date_set_day (cdate, (i % DAYS_PER_WEEK) + 1); g_date_strftime (buffer, BUFFER_SIZE, "%a", cdate); if (i % 7 + 1 == G_DATE_SATURDAY || i % 7 + 1 == G_DATE_SUNDAY) { g_snprintf (tmpbuf, BUFFER_SIZE, "<span foreground='firebrick'>%s</span>", buffer); } else { g_snprintf (tmpbuf, BUFFER_SIZE, "%s", buffer); } label = gtk_label_new (NULL); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), label, i + 2, i + 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_padding (GTK_MISC (label), 4, 0); gtk_label_set_angle (GTK_LABEL (label), 90); gtk_label_set_markup (GTK_LABEL (label), tmpbuf); if (config.fy_simple_view == FALSE) { label = gtk_label_new (NULL); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), label, i + 2, i + 3, MAX_MONTHS + 3, MAX_MONTHS + 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_padding (GTK_MISC (label), 4, 0); gtk_label_set_angle (GTK_LABEL (label), 90); gtk_label_set_markup (GTK_LABEL (label), tmpbuf); } } for (month = G_DATE_JANUARY; month <= G_DATE_DECEMBER; month++) { for (j = 0; j < FULL_YEAR_COLS; j++) { i = month - 1; idx = i * FULL_YEAR_COLS + j; appGUI->cal->calendar_buttons[idx] = gtk_button_new (); GTK_WIDGET_UNSET_FLAGS (appGUI->cal->calendar_buttons[idx], GTK_CAN_FOCUS); gtk_button_set_relief (GTK_BUTTON (appGUI->cal->calendar_buttons[idx]), GTK_RELIEF_NONE); gtk_widget_show (appGUI->cal->calendar_buttons[idx]); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_1), appGUI->cal->calendar_buttons[idx], j+2, j+3, i+2, i+3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); } } display_calendar (get_current_year (), appGUI); gtk_widget_set_sensitive (appGUI->cal->cyear_button, FALSE); /*-------------------------------------------------------------------------------------*/ /* Second view */ appGUI->cal->fycal_table_2 = gtk_table_new (3, 4, FALSE); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fycal_alternative_view_checkbutton)) == TRUE) { gtk_widget_show (appGUI->cal->fycal_table_2); } gtk_box_pack_start (GTK_BOX (vbox2), appGUI->cal->fycal_table_2, TRUE, TRUE, 0); for (i = y = 0; y < 3; y++) { for (x = 0; x < 4; x++, i++) { fycal_vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (fycal_vbox); gtk_table_attach (GTK_TABLE (appGUI->cal->fycal_table_2), fycal_vbox, x, x + 1, y, y + 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); fycal_label = gtk_label_new (NULL); gtk_widget_show (fycal_label); gtk_box_pack_start (GTK_BOX (fycal_vbox), fycal_label, FALSE, FALSE, 0); appGUI->cal->fy_calendars[i] = gui_calendar_new (); gtk_widget_show (appGUI->cal->fy_calendars[i]); GTK_WIDGET_UNSET_FLAGS (appGUI->cal->fy_calendars[i], GTK_CAN_FOCUS); gui_calendar_set_display_options (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), (config.display_options & (GUI_CALENDAR_SHOW_DAY_NAMES | GUI_CALENDAR_WEEK_START_MONDAY)) | GUI_CALENDAR_NO_MONTH_CHANGE); gui_calendar_enable_cursor (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), FALSE); gui_calendar_set_event_marker_type (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.event_marker_type); gui_calendar_set_event_marker_color (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.mark_color); gui_calendar_set_selector_color (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.selection_color); gui_calendar_set_header_color (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.header_color); gui_calendar_set_weekend_color (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.weekend_color); gui_calendar_set_day_note_marker_type (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.day_note_marker); gui_calendar_set_today_marker_type (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.today_marker_type); gui_calendar_set_today_marker_color (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.mark_current_day_color); gui_calendar_set_today_marker_alpha (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), config.mark_current_day_alpha); year = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (appGUI->cal->fy_spinbutton)); month = i + 1; gui_calendar_select_month (GUI_CALENDAR (appGUI->cal->fy_calendars[i]), month - 1, year); mark_events (appGUI->cal->fy_calendars[i], month - 1, year, appGUI); g_date_set_dmy (cdate, 1, month, year); g_date_strftime (buffer, BUFFER_SIZE, "%B", cdate); gtk_label_set_text (GTK_LABEL (fycal_label), buffer); gtk_box_pack_start (GTK_BOX (fycal_vbox), appGUI->cal->fy_calendars[i], FALSE, FALSE, 0); } } /*-------------------------------------------------------------------------------------*/ hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox1), hseparator, FALSE, TRUE, 4); hbuttonbox = gtk_hbutton_box_new (); gtk_widget_show (hbuttonbox); gtk_box_pack_start (GTK_BOX (vbox1), hbuttonbox, FALSE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END); gtk_box_set_spacing (GTK_BOX (hbuttonbox), 4); if (config.default_stock_icons) { close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); } else { close_button = gtk_button_new_from_stock (OSMO_STOCK_BUTTON_CLOSE); } gtk_widget_show (close_button); g_signal_connect (close_button, "clicked", G_CALLBACK (button_fullyear_window_close_cb), appGUI); gtk_container_add (GTK_CONTAINER (hbuttonbox), close_button); gtk_widget_show (appGUI->cal->fullyear_window); }
void select_date_cb (GtkWidget *widget, gpointer data) { GtkWidget *vbox1; GtkWidget *hbox1; GtkWidget *alignment; GtkWidget *today_button; GtkWidget *nodate_button; GtkWidget *close_button; GUI *appGUI = (GUI *)data; appGUI->tsk->td_calendar_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(appGUI->tsk->td_calendar_window), GTK_WIN_POS_MOUSE); gtk_window_set_modal(GTK_WINDOW(appGUI->tsk->td_calendar_window), TRUE); gtk_window_set_transient_for(GTK_WINDOW(appGUI->tsk->td_calendar_window), GTK_WINDOW(appGUI->tsk->tasks_add_window)); gtk_window_set_decorated(GTK_WINDOW(appGUI->tsk->td_calendar_window), FALSE); g_signal_connect (G_OBJECT (appGUI->tsk->td_calendar_window), "key_press_event", G_CALLBACK (sd_key_press_cb), appGUI); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (appGUI->tsk->td_calendar_window), vbox1); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_box_pack_start (GTK_BOX (vbox1), alignment, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (alignment), 4); appGUI->tsk->td_calendar = gui_calendar_new(); gui_calendar_set_cursor_type(GUI_CALENDAR(appGUI->tsk->td_calendar), CURSOR_BLOCK); gtk_widget_show(appGUI->tsk->td_calendar); g_signal_connect (GTK_OBJECT (appGUI->tsk->td_calendar), "day_selected_double_click", G_CALLBACK (day_selected_cb), appGUI); gtk_container_add (GTK_CONTAINER (alignment), appGUI->tsk->td_calendar); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_box_pack_start (GTK_BOX (vbox1), alignment, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (alignment), 4); hbox1 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (alignment), hbox1); today_button = gtk_button_new_with_mnemonic (_("Today")); gtk_widget_show (today_button); gtk_box_pack_start (GTK_BOX (hbox1), today_button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (today_button), "clicked", G_CALLBACK (set_today_calendar_cb), appGUI); nodate_button = gtk_button_new_with_mnemonic (_("No date")); gtk_widget_show (nodate_button); gtk_box_pack_start (GTK_BOX (hbox1), nodate_button, FALSE, FALSE, 4); g_signal_connect (G_OBJECT (nodate_button), "clicked", G_CALLBACK (nodate_calendar_cb), appGUI); if (config.default_stock_icons) { close_button = gui_stock_button(GTK_STOCK_CLOSE, FALSE); } else { close_button = gui_stock_button(OSMO_STOCK_BUTTON_CLOSE, FALSE); } GTK_WIDGET_UNSET_FLAGS(close_button, GTK_CAN_FOCUS); gtk_button_set_relief (GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_widget_show (close_button); gtk_box_pack_end (GTK_BOX (hbox1), close_button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (close_button), "clicked", G_CALLBACK (button_close_calendar_cb), appGUI); gtk_widget_show (appGUI->tsk->td_calendar_window); gui_calendar_set_display_options (GUI_CALENDAR (appGUI->tsk->td_calendar), GUI_CALENDAR_SHOW_HEADING | GUI_CALENDAR_SHOW_DAY_NAMES | GUI_CALENDAR_WEEK_START_MONDAY); }
void gui_create_tasks(GUI *appGUI) { GtkWidget *vbox1; GtkWidget *vbox2; GtkWidget *table; GtkWidget *label; GtkWidget *top_scrolledwindow; GtkWidget *hseparator; GtkWidget *close_button; GtkCellRenderer *renderer; GtkWidget *top_viewport; GtkWidget *bottom_viewport; GtkTextBuffer *text_buffer; GError *error = NULL; GtkActionGroup *action_group = NULL; gchar tmpbuf[BUFFER_SIZE]; const gchar *ui_info = " <toolbar name=\"toolbar\">\n" " <toolitem name=\"add\" action=\"add\" />\n" " <toolitem name=\"delete\" action=\"delete\" />\n" " <separator name=\"sep1\" />\n" " <toolitem name=\"edit\" action=\"edit\" />\n" " </toolbar>\n"; GtkActionEntry entries[] = { { "add", OSMO_STOCK_TASKS_ADD, _("New task"), NULL, _("New task"), NULL }, { "edit", OSMO_STOCK_TASKS_EDIT, _("Edit task"), NULL, _("Edit task"), NULL }, { "delete", OSMO_STOCK_TASKS_REMOVE, _("Remove task"), NULL, _("Remove task"), NULL }, }; guint n_entries = G_N_ELEMENTS (entries); appGUI->tsk->filter_index = 0; label = gtk_label_new(NULL); gtk_label_set_angle (GTK_LABEL(label), -90.0); sprintf(tmpbuf, "<b>%s</b>", _("Tasks")); gtk_label_set_markup (GTK_LABEL (label), tmpbuf); vbox1 = gtk_vbox_new (FALSE, 1); gtk_widget_show (vbox1); gtk_container_set_border_width (GTK_CONTAINER (vbox1), 8); gtk_notebook_append_page(GTK_NOTEBOOK(appGUI->notebook), vbox1, label); appGUI->tsk->vbox = GTK_BOX(vbox1); /*-------------------------------------------------------------------------------------*/ action_group = gtk_action_group_new ("_actions"); gtk_action_group_add_actions (action_group, entries, n_entries, NULL); gtk_action_group_set_sensitive(action_group, TRUE); appGUI->tsk->tasks_uim_widget = gtk_ui_manager_new (); gtk_ui_manager_insert_action_group (appGUI->tsk->tasks_uim_widget, action_group, 0); g_signal_connect (appGUI->tsk->tasks_uim_widget, "add_widget", G_CALLBACK (add_tasks_toolbar_widget), appGUI); if (!gtk_ui_manager_add_ui_from_string (appGUI->tsk->tasks_uim_widget, ui_info, -1, &error)) { g_message ("building toolbar failed: %s", error->message); g_error_free (error); } gtk_ui_manager_ensure_update (appGUI->tsk->tasks_uim_widget); gtk_toolbar_set_style (appGUI->tsk->tasks_toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_tooltips (appGUI->tsk->tasks_toolbar, config.enable_tooltips); /*-------------------------------------------------------------------------------------*/ /* assign callbacks */ g_signal_connect (G_OBJECT(gtk_ui_manager_get_widget (appGUI->tsk->tasks_uim_widget, "/toolbar/add")), "clicked", G_CALLBACK(tasks_add_item_cb), appGUI); g_signal_connect (G_OBJECT(gtk_ui_manager_get_widget (appGUI->tsk->tasks_uim_widget, "/toolbar/edit")), "clicked", G_CALLBACK(tasks_edit_item_cb), appGUI); g_signal_connect (G_OBJECT(gtk_ui_manager_get_widget (appGUI->tsk->tasks_uim_widget, "/toolbar/delete")), "clicked", G_CALLBACK(tasks_remove_item_cb), appGUI); /*-------------------------------------------------------------------------------------*/ gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->tsk->tasks_uim_widget, "/toolbar/edit"), FALSE); gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->tsk->tasks_uim_widget, "/toolbar/delete"), FALSE); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox1), hseparator, FALSE, TRUE, 6); table = gtk_table_new (1, 4, FALSE); gtk_widget_show (table); gtk_box_pack_start (GTK_BOX (vbox1), table, FALSE, TRUE, 0); gtk_table_set_col_spacings (GTK_TABLE (table), 8); sprintf(tmpbuf, "<b>%s:</b>", _("Category filter")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); appGUI->tsk->cf_combobox = gtk_combo_box_new_text (); gtk_widget_show (appGUI->tsk->cf_combobox); gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (appGUI->tsk->cf_combobox), FALSE); GTK_WIDGET_UNSET_FLAGS(appGUI->tsk->cf_combobox, GTK_CAN_FOCUS); gtk_table_attach (GTK_TABLE (table), appGUI->tsk->cf_combobox, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); g_signal_connect(appGUI->tsk->cf_combobox, "changed", G_CALLBACK(category_filter_cb), appGUI); g_signal_connect(G_OBJECT(appGUI->tsk->cf_combobox), "focus", G_CALLBACK(category_combo_box_focus_cb), NULL); appGUI->tsk->n_items_label = gtk_label_new (""); gtk_widget_show (appGUI->tsk->n_items_label); gtk_widget_set_size_request (appGUI->tsk->n_items_label, 100, -1); gtk_table_attach (GTK_TABLE (table), appGUI->tsk->n_items_label, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (appGUI->tsk->n_items_label), TRUE); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox1), hseparator, FALSE, TRUE, 6); /*-------------------------------------------------------------------------------------*/ appGUI->tsk->tasks_paned = gtk_vpaned_new(); gtk_widget_show (appGUI->tsk->tasks_paned); gtk_paned_set_position(GTK_PANED(appGUI->tsk->tasks_paned), 99999); gtk_box_pack_start(GTK_BOX(vbox1), appGUI->tsk->tasks_paned, TRUE, TRUE, 0); top_viewport = gtk_viewport_new (NULL, NULL); gtk_widget_show (top_viewport); gtk_viewport_set_shadow_type (GTK_VIEWPORT (top_viewport), GTK_SHADOW_NONE); gtk_paned_pack1 (GTK_PANED (appGUI->tsk->tasks_paned), top_viewport, FALSE, TRUE); top_scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (top_scrolledwindow); gtk_container_add (GTK_CONTAINER (top_viewport), top_scrolledwindow); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (top_scrolledwindow), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (top_scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); appGUI->tsk->tasks_list_store = gtk_list_store_new(TASKS_NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); appGUI->tsk->tasks_filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(appGUI->tsk->tasks_list_store), NULL); gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER(appGUI->tsk->tasks_filter), (GtkTreeModelFilterVisibleFunc)tasks_list_filter_cb, appGUI, NULL); appGUI->tsk->tasks_sort = gtk_tree_model_sort_new_with_model(GTK_TREE_MODEL(appGUI->tsk->tasks_filter)); appGUI->tsk->tasks_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(appGUI->tsk->tasks_sort)); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(appGUI->tsk->tasks_list), config.tasks_rules_hint); gtk_widget_show (appGUI->tsk->tasks_list); GTK_WIDGET_SET_FLAGS (appGUI->tsk->tasks_list, GTK_CAN_DEFAULT); gtk_widget_modify_fg(GTK_WIDGET(appGUI->tsk->tasks_list), GTK_STATE_SELECTED, (& GTK_WIDGET(appGUI->tsk->tasks_list)->style->base[GTK_STATE_SELECTED])); gtk_widget_modify_fg(GTK_WIDGET(appGUI->tsk->tasks_list), GTK_STATE_NORMAL, (& GTK_WIDGET(appGUI->tsk->tasks_list)->style->bg[GTK_STATE_NORMAL])); g_signal_connect(G_OBJECT(appGUI->tsk->tasks_list), "button_press_event", G_CALLBACK(list_dbclick_cb), appGUI); appGUI->tsk->tasks_list_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (appGUI->tsk->tasks_list)); g_signal_connect(G_OBJECT(appGUI->tsk->tasks_list_selection), "changed", G_CALLBACK(tasks_item_selected), appGUI); /* create columns */ renderer = gtk_cell_renderer_toggle_new(); appGUI->tsk->tasks_columns[COLUMN_DONE] = gtk_tree_view_column_new_with_attributes (_("Done"), renderer, "active", COLUMN_DONE, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_DONE]); g_signal_connect (renderer, "toggled", G_CALLBACK (done_toggled), appGUI); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_DUE_DATE] = gtk_tree_view_column_new_with_attributes(_("Due date"), renderer, "text", COLUMN_DUE_DATE, "strikethrough", COLUMN_DONE, "foreground", COLUMN_COLOR, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_DUE_DATE], config.visible_due_date_column); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_DUE_DATE]); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_DUE_DATE_JULIAN] = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", COLUMN_DUE_DATE_JULIAN, "strikethrough", COLUMN_DONE, "foreground", COLUMN_COLOR, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_DUE_DATE_JULIAN], FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_DUE_DATE_JULIAN]); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_START_DATE_JULIAN] = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", COLUMN_START_DATE_JULIAN, "strikethrough", COLUMN_DONE, "foreground", COLUMN_COLOR, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_START_DATE_JULIAN], FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_START_DATE_JULIAN]); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_PRIORITY] = gtk_tree_view_column_new_with_attributes(_("Priority"), renderer, "text", COLUMN_PRIORITY, "strikethrough", COLUMN_DONE, "foreground", COLUMN_COLOR, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_PRIORITY], config.visible_priority_column); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_PRIORITY]); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_CATEGORY] = gtk_tree_view_column_new_with_attributes(_("Category"), renderer, "text", COLUMN_CATEGORY, "strikethrough", COLUMN_DONE, "foreground", COLUMN_COLOR, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_CATEGORY], config.visible_category_column); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_CATEGORY]); renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_cell_renderer_set_fixed_size(renderer, 0, -1); appGUI->tsk->tasks_columns[COLUMN_SUMMARY] = gtk_tree_view_column_new_with_attributes(_("Summary"), renderer, "text", COLUMN_SUMMARY, "strikethrough", COLUMN_DONE, "foreground", COLUMN_COLOR, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_SUMMARY]); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_DESCRIPTION] = gtk_tree_view_column_new_with_attributes(_("Description"), renderer, "text", COLUMN_DESCRIPTION, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_DESCRIPTION], FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_DESCRIPTION]); renderer = gtk_cell_renderer_text_new(); appGUI->tsk->tasks_columns[COLUMN_COLOR] = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", COLUMN_COLOR, NULL); gtk_tree_view_column_set_visible (appGUI->tsk->tasks_columns[COLUMN_COLOR], FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->tsk->tasks_list), appGUI->tsk->tasks_columns[COLUMN_COLOR]); /* configure list options */ gtk_container_add (GTK_CONTAINER (top_scrolledwindow), appGUI->tsk->tasks_list); gtk_tree_view_set_enable_search (GTK_TREE_VIEW(appGUI->tsk->tasks_list), FALSE); /* configure sorting */ gtk_tree_sortable_set_sort_func((GtkTreeSortable *)appGUI->tsk->tasks_sort, 0, (GtkTreeIterCompareFunc)custom_tasks_sort_function, NULL, NULL); gtk_tree_sortable_set_sort_column_id((GtkTreeSortable *)appGUI->tsk->tasks_sort, COLUMN_DUE_DATE, config.tasks_sorting_order); gtk_tree_sortable_set_sort_column_id((GtkTreeSortable *)appGUI->tsk->tasks_sort, COLUMN_PRIORITY, config.tasks_sorting_order); gtk_tree_sortable_set_sort_column_id((GtkTreeSortable *)appGUI->tsk->tasks_sort, COLUMN_DONE, config.tasks_sorting_order); /*----------------------------------------------------------------------------*/ bottom_viewport = gtk_viewport_new (NULL, NULL); gtk_widget_show (bottom_viewport); gtk_viewport_set_shadow_type (GTK_VIEWPORT (bottom_viewport), GTK_SHADOW_NONE); gtk_paned_pack2 (GTK_PANED (appGUI->tsk->tasks_paned), bottom_viewport, TRUE, TRUE); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_container_set_border_width (GTK_CONTAINER (vbox2), 0); gtk_container_add (GTK_CONTAINER (bottom_viewport), vbox2); appGUI->tsk->panel_hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox2), appGUI->tsk->panel_hbox, FALSE, FALSE, 0); gtk_widget_show(appGUI->tsk->panel_hbox); sprintf(tmpbuf, "%s:", _("Task details")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (appGUI->tsk->panel_hbox), label, FALSE, FALSE, 0); if (config.default_stock_icons) { close_button = gui_stock_button(GTK_STOCK_CLOSE, FALSE); } else { close_button = gui_stock_button(OSMO_STOCK_BUTTON_CLOSE, FALSE); } GTK_WIDGET_UNSET_FLAGS(close_button, GTK_CAN_FOCUS); gtk_button_set_relief (GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_tooltips_set_tip (appGUI->osmo_tooltips, close_button, _("Close description panel"), NULL); gtk_box_pack_end (GTK_BOX (appGUI->tsk->panel_hbox), close_button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (close_button), "clicked", G_CALLBACK (panel_close_desc_cb), appGUI); appGUI->tsk->panel_scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (appGUI->tsk->panel_scrolledwindow); gtk_box_pack_start (GTK_BOX (vbox2), appGUI->tsk->panel_scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (appGUI->tsk->panel_scrolledwindow), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (appGUI->tsk->panel_scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); appGUI->tsk->tasks_desc_textview = gtk_text_view_new (); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (appGUI->tsk->tasks_desc_textview), GTK_WRAP_WORD); gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(appGUI->tsk->tasks_desc_textview), 4); gtk_text_view_set_left_margin(GTK_TEXT_VIEW(appGUI->tsk->tasks_desc_textview), 4); gtk_text_view_set_right_margin(GTK_TEXT_VIEW(appGUI->tsk->tasks_desc_textview), 4); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(appGUI->tsk->tasks_desc_textview), FALSE); gtk_text_view_set_editable(GTK_TEXT_VIEW(appGUI->tsk->tasks_desc_textview), FALSE); gtk_widget_show (appGUI->tsk->tasks_desc_textview); gtk_container_add (GTK_CONTAINER (appGUI->tsk->panel_scrolledwindow), appGUI->tsk->tasks_desc_textview); text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(appGUI->tsk->tasks_desc_textview)); gtk_text_buffer_create_tag (text_buffer, "italic", "style", PANGO_STYLE_ITALIC, NULL); appGUI->tsk->font_tag_object = gtk_text_buffer_create_tag (text_buffer, "info_font", "font", (gchar *) config.task_info_font, NULL); }
void gui_help_dialog(void) { gpointer dialog; GtkCellRenderer *r; GtkTreeViewColumn *c; GtkListStore *list; GtkTreeSelection *select; GtkWidget *window, *swin, *hbox, *tree, *view; /* create dialog */ dialog = dialog_request(MANUAL, "Manual", NULL, NULL, NULL); if (!dialog) return; window = dialog_window(dialog); gtk_window_set_default_size(GTK_WINDOW(window), 800, 500); /* split pane display */ hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox, TRUE, TRUE, 1); /* left pane - topics browser */ swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_NEVER, GTK_POLICY_NEVER); gtk_box_pack_start(GTK_BOX(hbox), swin, FALSE, TRUE, 0); /* list */ list = gtk_list_store_new(1, G_TYPE_STRING); tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list)); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), tree); r = gtk_cell_renderer_text_new(); c = gtk_tree_view_column_new_with_attributes(" ", r, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), c); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); /* auto sort the topic list */ gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(GTK_TREE_MODEL(list)), help_sort_topics, NULL, NULL); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(GTK_TREE_MODEL(list)), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING); /* set the width of the topics pane */ gtk_widget_set_size_request(swin, 15*sysenv.gtk_fontsize, -1); /* right pane - text */ swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(hbox), swin, TRUE, TRUE, 0); view = gtk_text_view_new(); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); gtk_container_add(GTK_CONTAINER(swin), view); /* configure the text viewing area */ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD); /* NB: GTK_JUSTIFY_FILL was not supported at the time this was written */ /* gtk_text_view_set_justification(GTK_TEXT_VIEW(view), GTK_JUSTIFY_FILL); */ gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), PANEL_SPACING); gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view), PANEL_SPACING); /* NB: these are associated with the text buffer and must be reallocated each */ /* time a new text buffer is created */ help_tag_bold=NULL; help_tag_italic=NULL; help_tag_invisible=NULL; help_tag_fixed=NULL; /* topic selection handler */ select = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(gui_help_topic_selected), view); /* terminating button */ gui_stock_button(GTK_STOCK_CLOSE, dialog_destroy, dialog, GTK_DIALOG(window)->action_area); /* populate the manual page */ gui_help_refresh(list); /* expose the dialog */ gtk_widget_show_all(window); }
void gui_dock_dialog(void) { gchar *text; gpointer dialog; GtkWidget *window, *label, *spin; GtkWidget *frame, *vbox, *vbox1, *hbox, *hbox2, *vbox_left, *vbox_right; struct model_pak *model; /* checks */ model = sysenv.active_model; if (!model) { gui_text_show(ERROR, "Please load a surface first.\n"); return; } if (model->periodic != 2) { gui_text_show(ERROR, "Your model is not a surface.\n"); return; } /* request a dialog */ dialog = dialog_request(DOCKING, "Docking setup", NULL, NULL, model); if (!dialog) return; window = dialog_window(dialog); /* title display */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), PANEL_SPACING); hbox = gtk_hbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); text = g_strdup_printf("Docking setup: %s", model->basename); label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); g_free(text); /* NEW - split pane display */ hbox2 = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), hbox2, TRUE, TRUE, 0); vbox_left = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), vbox_left, FALSE, FALSE, PANEL_SPACING); vbox_right = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), vbox_right, FALSE, FALSE, PANEL_SPACING); /* translational sampling */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_left), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); vbox1 = gtk_vbox_new(FALSE, 0); gui_direct_check("Translational sampling", &dock_grid_on, dock_toggle_refresh, vbox1, vbox); gtk_box_pack_start(GTK_BOX(vbox), vbox1, FALSE, FALSE, PANEL_SPACING); /* axes sampling fraction */ hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, PANEL_SPACING); label = gtk_label_new("axes fractions"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, PANEL_SPACING); spin = gui_direct_spin(NULL, &dock_cell[0], 0.0, 1.0, 0.05, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(hbox), spin, FALSE, FALSE, PANEL_SPACING); spin = gui_direct_spin(NULL, &dock_cell[1], 0.0, 1.0, 0.05, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(hbox), spin, FALSE, FALSE, PANEL_SPACING); /* grid points */ hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, PANEL_SPACING); label = gtk_label_new("grid size"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, PANEL_SPACING); spin = gui_direct_spin(NULL, &dock_grid[0], 1, 10, 1, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(hbox), spin, FALSE, FALSE, PANEL_SPACING); spin = gui_direct_spin(NULL, &dock_grid[1], 1, 10, 1, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(hbox), spin, FALSE, FALSE, PANEL_SPACING); /* rotational sampling */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_left), frame, TRUE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); vbox1 = gtk_vbox_new(TRUE, PANEL_SPACING); gui_direct_check("Rotational sampling", &dock_rotate_on, dock_toggle_refresh, vbox1, vbox); gtk_box_pack_start(GTK_BOX(vbox), vbox1, FALSE, FALSE, PANEL_SPACING); gui_direct_spin(" x axis ", &dock_rotate[0], 1, 60, 1, NULL, NULL, vbox1); gui_direct_spin(" y axis ", &dock_rotate[1], 1, 60, 1, NULL, NULL, vbox1); gui_direct_spin(" z axis ", &dock_rotate[2], 1, 60, 1, NULL, NULL, vbox1); /* rigid body docking */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_right), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); vbox1 = gtk_vbox_new(TRUE, PANEL_SPACING); gui_direct_check("Treat as a rigid body", &dock_rigid_on, dock_toggle_refresh, vbox1, vbox); gtk_box_pack_start(GTK_BOX(vbox), vbox1, FALSE, FALSE, PANEL_SPACING); gui_direct_check("Allow translation in x", &dock_rigid_x, NULL, NULL, vbox1); gui_direct_check("Allow translation in y", &dock_rigid_y, NULL, NULL, vbox1); gui_direct_check("Allow translation in z", &dock_rigid_z, NULL, NULL, vbox1); /* control options */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_right), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); hbox = gtk_hbox_new(FALSE, PANEL_SPACING); gui_direct_check("Create project files then stop", &dock_no_execute, NULL, NULL, vbox); /* CURRRENT - executing the project has not been implemented yet */ gtk_widget_set_sensitive(GTK_WIDGET(vbox), FALSE); /* control buttons */ gui_stock_button(GTK_STOCK_EXECUTE, docking_project_create, model, GTK_DIALOG(window)->action_area); gui_stock_button(GTK_STOCK_CLOSE, dialog_destroy, dialog, GTK_DIALOG(window)->action_area); gtk_widget_show_all(window); }
void gui_analysis_dialog(void) { gpointer dialog; GtkWidget *window, *combo, *label; GtkWidget *frame, *main_hbox, *main_vbox, *hbox, *vbox; GtkWidget *gui_menu_calc, *gui_vbox_rdf; GSList *list, *item; GList *match_list=NULL, *calc_list=NULL; struct model_pak *model; struct analysis_pak *analysis; /* checks and setup */ model = sysenv.active_model; if (!model) return; if (!model->animation) return; if (analysis_init(model)) return; analysis = model->analysis; /* create new dialog */ dialog = dialog_request(MD_ANALYSIS, "MD analysis", NULL, NULL, model); if (!dialog) return; window = dialog_window(dialog); /* --- main box */ main_hbox = gtk_hbox_new(TRUE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), main_hbox, TRUE, TRUE, 0); /* --- left pane */ main_vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox, TRUE, TRUE, 0); /* --- analysis dialogs are specific to the active model when initiated */ frame = gtk_frame_new("Model"); gtk_box_pack_start(GTK_BOX(main_vbox), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), PANEL_SPACING); hbox = gtk_hbox_new(TRUE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(frame), hbox); label = gtk_label_new(model->basename); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); /* --- calculation menu */ frame = gtk_frame_new("Calculate"); gtk_box_pack_start(GTK_BOX(main_vbox), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), PANEL_SPACING); vbox = gtk_vbox_new(TRUE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(frame), vbox); /* --- menu items */ if (g_file_test(model->gulp.trj_file, G_FILE_TEST_EXISTS)) { calc_list = g_list_prepend(calc_list, "Potential E"); calc_list = g_list_prepend(calc_list, "Kinetic E"); calc_list = g_list_prepend(calc_list, "Temperature"); calc_list = g_list_prepend(calc_list, "VACF"); } else { calc_list = g_list_prepend(calc_list, "Measurements"); } calc_list = g_list_prepend(calc_list, "RDF"); calc_list = g_list_prepend(calc_list, "Pair count"); gui_menu_calc = gui_pulldown_new("Perform ", calc_list, FALSE, vbox); dialog_child_set(dialog, "gui_menu_calc", gui_menu_calc); /* --- right pane */ gui_vbox_rdf = gtk_vbox_new(FALSE, 0); dialog_child_set(dialog, "gui_vbox_rdf", gui_vbox_rdf); gtk_box_pack_start(GTK_BOX(main_hbox), gui_vbox_rdf, TRUE, TRUE, 0); /* --- interval setup */ frame = gtk_frame_new("Analysis Interval"); gtk_box_pack_start(GTK_BOX(gui_vbox_rdf), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), PANEL_SPACING); vbox = gtk_vbox_new(TRUE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(frame), vbox); /* TODO - some warning about the RDF being valid only for < L/2? */ /* see Allan & Tildesley pg 199 */ gui_direct_spin("Start", &analysis->start, 0.0, 10.0*model->rmax, 0.1, NULL, NULL, vbox); gui_direct_spin("Stop", &analysis->stop, 0.1, 10.0*model->rmax, 0.1, NULL, NULL, vbox); gui_direct_spin("Step", &analysis->step, 0.1, model->rmax, 0.1, NULL, NULL, vbox); /* --- RDF atom setup */ frame = gtk_frame_new("Analysis Atoms"); gtk_box_pack_start(GTK_BOX(gui_vbox_rdf), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), PANEL_SPACING); vbox = gtk_vbox_new(TRUE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(frame), vbox); /* setup unique element label list */ list = find_unique(LABEL, model); match_list = g_list_append(match_list, "Any"); for (item=list ; item ; item=g_slist_next(item)) { match_list = g_list_append(match_list, item->data); } g_slist_free(list); /* match 1 */ combo = gtk_combo_new(); gtk_combo_set_popdown_strings(GTK_COMBO(combo), match_list); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(combo)->entry), TRUE); gtk_box_pack_start(GTK_BOX(vbox), combo, TRUE, TRUE, 0); g_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->entry), "changed", GTK_SIGNAL_FUNC(md_atom_changed), (gpointer) &analysis->atom1); /* match 2 */ combo = gtk_combo_new(); gtk_combo_set_popdown_strings(GTK_COMBO(combo), match_list); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(combo)->entry), TRUE); gtk_box_pack_start(GTK_BOX(vbox), combo, TRUE, TRUE, 0); g_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->entry), "changed", GTK_SIGNAL_FUNC(md_atom_changed), (gpointer) &analysis->atom2); /* terminating buttons */ gui_stock_button(GTK_STOCK_EXECUTE, exec_analysis_task, dialog, GTK_DIALOG(window)->action_area); gui_stock_button(GTK_STOCK_CLOSE, dialog_destroy, dialog, GTK_DIALOG(window)->action_area); gtk_widget_show_all(window); }
void gui_animate_dialog(void) { gpointer dialog; GtkWidget *window, *main_vbox, *table, *vbox, *hbox; GtkWidget *notebook, *page, *label, *entry, *scale; GList *list; /* prevent recording whilst in animation */ gui_mode_switch(FREE); /* dialog setup */ dialog = dialog_request(ANIM, "Animation and Rendering", NULL, NULL, NULL); if (!dialog) return; window = dialog_window(dialog); gtk_widget_set_size_request(window, 350, -1); /* notebook frame */ main_vbox = gtk_vbox_new(FALSE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), main_vbox); /* create notebook */ vbox = gui_frame_vbox(NULL, FALSE, FALSE, main_vbox); notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(vbox),notebook,FALSE,TRUE,0); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), TRUE); /* page */ page = gtk_vbox_new(FALSE, PANEL_SPACING); label = gtk_label_new("Control"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); vbox = gtk_vbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(page),vbox,FALSE,FALSE,0); /* format pulldown */ animate_phonons=FALSE; list = NULL; list = g_list_append(list, "Frames"); list = g_list_append(list, "Phonons"); hbox = gtk_hbox_new(FALSE, 0); label = gtk_label_new("Display "); gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); entry = gui_pulldown_new(NULL, list, 0, hbox); g_list_free(list); g_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(gui_animate_type_change), (gpointer) entry); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); /* phonon options */ box_phonon_options = gtk_vbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(vbox),box_phonon_options,FALSE,FALSE,0); gui_direct_spin("Phonon scaling ", &sysenv.render.phonon_scaling, 0.1, 9.9, 0.1, NULL, NULL, box_phonon_options); gui_direct_spin("Phonon resolution ", &sysenv.render.phonon_resolution, 10.0, 100.0, 1.0, NULL, NULL, box_phonon_options); gtk_box_pack_start(GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0); /* CURRENT - FPS */ gui_direct_spin("Apparent FPS for animation ", &gui_animate_fps, 1, 50, 1, NULL, NULL, vbox); /* connectivity options */ gui_direct_check("Recalculate connectivity", &sysenv.render.connect_redo, NULL, NULL, vbox); /* gui_checkbox("Don't recalculate scale", NULL, vbox); gui_checkbox("Loop", NULL, vbox); */ /* actions at start of each cycle */ /* new_radio_group(0, vbox, FF); button = add_radio_button("Confine atoms to PBC", (gpointer) atom_pbc, data); if (data->anim_confine == PBC_CONFINE_ATOMS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); button = add_radio_button("Confine mols to PBC", (gpointer) mol_pbc, data); if (data->anim_confine == PBC_CONFINE_MOLS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); button = add_radio_button("Cell confinement off", (gpointer) no_pbc, data); if (data->anim_confine == PBC_CONFINE_NONE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); */ /* page */ page = gtk_vbox_new(FALSE, PANEL_SPACING); label = gtk_label_new("Render"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); vbox = gtk_vbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(page),vbox,FALSE,FALSE,0); gui_direct_spin("Width", &sysenv.render.width, 100, 2000, 100, NULL, NULL, vbox); gui_direct_spin("Height", &sysenv.render.height, 100, 2000, 100, NULL, NULL, vbox); gtk_box_pack_start(GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0); gui_direct_check("Shadowless", &sysenv.render.shadowless, NULL, NULL, vbox); gui_direct_check("Create povray input then stop", &sysenv.render.no_povray_exec, NULL, NULL, vbox); gui_direct_check("Cleanup temporary files", &sysenv.render.no_keep_tempfiles, NULL, NULL, vbox); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); gui_button(" Render ", gui_animate_render, NULL, hbox, TF); /* page */ page = gtk_vbox_new(FALSE, PANEL_SPACING); label = gtk_label_new("Movie"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); vbox = gtk_vbox_new(FALSE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(page),vbox,FALSE,FALSE,0); table = gtk_table_new(4, 4, FALSE); gtk_box_pack_start(GTK_BOX(vbox),table,FALSE,FALSE,0); /* name label */ label = gtk_label_new("Filename"); gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1); /* name entry */ /* entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), sysenv.render.animate_file); */ entry = gui_text_entry(NULL, &sysenv.render.animate_file, TRUE, FALSE, NULL); gtk_table_attach_defaults(GTK_TABLE(table),entry,1,2,0,1); /* format label */ label = gtk_label_new("Format"); gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,1,2); /* format pulldown */ list=NULL; list = g_list_append(list, "mpg"); list = g_list_append(list, "mp4"); list = g_list_append(list, "flv"); list = g_list_append(list, "avi"); hbox = gtk_hbox_new(FALSE, 0); entry_movie_type = gui_pulldown_new(NULL, list, 0, hbox); g_list_free(list); g_signal_connect(GTK_OBJECT(entry_movie_type), "changed", GTK_SIGNAL_FUNC(gui_animate_movie_type_change), (gpointer) entry); gtk_table_attach_defaults(GTK_TABLE(table),hbox,1,2,1,2); /* update hook */ g_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(event_render_modify), (gpointer) entry); g_object_set_data(G_OBJECT(entry), "id", (gpointer) ANIM_NAME); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); gui_button(" Create ", gui_animate_movie, NULL, hbox, TF); /* slider for current frame */ vbox = gui_frame_vbox(NULL, FALSE, FALSE, main_vbox); scale = gtk_hscale_new_with_range(1.0, 100.0, 1.0); gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); gtk_box_pack_start(GTK_BOX(vbox), scale, TRUE, TRUE, 0); g_signal_connect(GTK_OBJECT(scale), "value_changed", GTK_SIGNAL_FUNC(gui_animate_frame_select), NULL); gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); /* animation limits */ vbox = gui_frame_vbox(NULL, FALSE, FALSE, main_vbox); gui_text_entry("First ", &entry_frame_start, TRUE, FALSE, vbox); gui_text_entry("Last ", &entry_frame_stop, TRUE, FALSE, vbox); gui_text_entry("Step ", &entry_frame_step, TRUE, FALSE, vbox); /* control buttons */ hbox = gtk_hbox_new(TRUE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 0); gui_icon_button("GDIS_REWIND", NULL, gui_animate_first, NULL, hbox); gui_icon_button("GDIS_STEP_BACKWARD", NULL, gui_animate_back, NULL, hbox); gui_icon_button("GDIS_PLAY", NULL, gui_animate_play, NULL, hbox); gui_icon_button("GDIS_PAUSE", NULL, gui_animate_stop, NULL, hbox); gui_icon_button("GDIS_STEP_FORWARD", NULL, gui_animate_next, NULL, hbox); gui_icon_button("GDIS_FASTFORWARD", NULL, gui_animate_last, NULL, hbox); gui_stock_button(GTK_STOCK_HELP, gui_help_show, "Animation and Rendering", GTK_DIALOG(window)->action_area); /* terminating button */ gui_stock_button(GTK_STOCK_CLOSE, dialog_destroy, dialog, GTK_DIALOG(window)->action_area); /* display the dialog */ gtk_widget_show_all(window); gtk_widget_hide(box_phonon_options); }
void gui_animate_dialog(void) { gchar *tmp, *title; gpointer dialog; GtkWidget *window, *frame, *vbox, *hbox, *hbox2, *anim_box; GtkWidget *notebook, *page, *button, *label, *entry, *scale; GSList *group=NULL; struct model_pak *data; /* checks */ data = sysenv.active_model; if (!data) return; if (!data->animation) return; /* CURRENT */ /* anim_read_all_frames(data); */ /* prevent recording whilst in animation */ gui_mode_switch(FREE); /* dialog setup */ title = g_strdup_printf("Animation: %s", data->basename); dialog = dialog_request(ANIM, title, NULL, animate_cleanup, data); g_free(title); if (!dialog) return; window = dialog_window(dialog); /* notebook frame */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), PANEL_SPACING); /* create notebook */ notebook = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); gtk_container_add(GTK_CONTAINER(frame), notebook); gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), TRUE); /* page 1 */ page = gtk_vbox_new(FALSE, PANEL_SPACING); label = gtk_label_new("Control"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); /* general animation stuff */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page),frame,FALSE,FALSE,0); /* create a vbox in the frame */ vbox = gtk_vbox_new(TRUE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(frame), vbox); /* num frames */ hbox = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), PANEL_SPACING); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new("Number of frames:"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); tmp = g_strdup_printf("%9d", data->num_frames); label = gtk_label_new(tmp); g_free(tmp); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0); /* desired delay */ gui_direct_spin("Animation delay", &data->anim_speed, 1.0, 40.0, 1.0, NULL, NULL, vbox); gui_direct_spin("Animation step size ", &data->anim_step, 1.0, data->num_frames, 1.0, NULL, NULL, vbox); gui_direct_check("Don't recalculate connectivity", &data->anim_fix, NULL, NULL, vbox); gui_direct_check("Don't recalculate scale", &data->anim_noscale, NULL, NULL, vbox); gui_direct_check("Loop", &data->anim_loop, NULL, NULL, vbox); /* page 2 */ page = gtk_vbox_new(FALSE, PANEL_SPACING); label = gtk_label_new("Processing"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); /* cycle options */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page),frame,FALSE,FALSE,0); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), PANEL_SPACING); /* actions at start of each cycle */ new_radio_group(0, vbox, FF); button = add_radio_button("Confine atoms to PBC", (gpointer) atom_pbc, data); if (data->anim_confine == PBC_CONFINE_ATOMS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); button = add_radio_button("Confine mols to PBC", (gpointer) mol_pbc, data); if (data->anim_confine == PBC_CONFINE_MOLS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); button = add_radio_button("Cell confinement off", (gpointer) no_pbc, data); if (data->anim_confine == PBC_CONFINE_NONE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); /* page 3 */ page = gtk_vbox_new(FALSE, PANEL_SPACING); label = gtk_label_new("Rendering"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label); /* cycle options */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), PANEL_SPACING); anim_box = gtk_vbox_new(TRUE, 0); gui_direct_check("Create movie", &sysenv.render.animate, anim_render, anim_box, vbox); gtk_box_pack_end(GTK_BOX(vbox), anim_box, TRUE, TRUE, 0); /* sensitive box */ vbox = gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(anim_box), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), PANEL_SPACING); /* start off with a button */ button = gtk_radio_button_new_with_label (NULL, "Animated GIF"); g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(event_render_modify), (gpointer) button); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, TRUE, 0); g_object_set_data(G_OBJECT(button), "id", (gpointer) ANIM_GIF); /* make a radio group */ group = gtk_radio_button_group(GTK_RADIO_BUTTON(button)); /* do the rest of the buttons */ button = gtk_radio_button_new_with_label(group, "MPEG"); g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(event_render_modify), (gpointer) button); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); g_object_set_data(G_OBJECT(button), "id", (gpointer) ANIM_MPEG); /* movie creation parameters */ gui_direct_spin("MPEG quality", &sysenv.render.mpeg_quality, 1, 100, 1, NULL, NULL, vbox); gui_direct_spin("Delay (ms)", &sysenv.render.delay, 0, 100, 5, NULL, NULL, vbox); /* file entry */ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,TRUE,0); label = gtk_label_new("Filename "); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); entry = gtk_entry_new(); gtk_box_pack_end(GTK_BOX (hbox), entry, FALSE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(entry), sysenv.render.animate_file); /* update hook */ g_signal_connect(GTK_OBJECT(entry), "changed", GTK_SIGNAL_FUNC(event_render_modify), (gpointer) entry); g_object_set_data(G_OBJECT(entry), "id", (gpointer) ANIM_NAME); /* misc options */ /* gui_direct_check("Create povray input files then stop", &sysenv.render.no_povray_exec, NULL, NULL, vbox); gui_direct_check("Delete intermediate input/image files", &sysenv.render.no_keep_tempfiles, NULL, NULL, vbox); */ /* set initial state */ if (!sysenv.render.animate) gtk_widget_set_sensitive(anim_box, FALSE); /* NEW - slider for current frame */ frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, PANEL_SPACING); gtk_container_add(GTK_CONTAINER(frame), vbox); scale = gui_direct_hscale(0, data->num_frames-1, 1, &data->cur_frame, select_frame, data, vbox); gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_DISCONTINUOUS); /* control buttons */ hbox2 = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, PANEL_SPACING); hbox = gtk_hbox_new(TRUE, PANEL_SPACING); gtk_box_pack_start(GTK_BOX(hbox2), hbox, TRUE, FALSE, 0); gui_icon_button("GDIS_REWIND", NULL, anim_rewind, dialog, hbox); gui_icon_button("GDIS_STEP_BACKWARD", NULL, anim_step_backward, dialog, hbox); gui_icon_button("GDIS_PLAY", NULL, anim_start, dialog, hbox); gui_icon_button("GDIS_PAUSE", NULL, anim_stop, dialog, hbox); gui_icon_button("GDIS_STEP_FORWARD", NULL, anim_step_forward, dialog, hbox); gui_icon_button("GDIS_FASTFORWARD", NULL, anim_fastforward, dialog, hbox); gui_stock_button(GTK_STOCK_CLOSE, dialog_destroy, dialog, GTK_DIALOG(window)->action_area); /* display the dialog */ gtk_widget_show_all(window); gui_relation_update(data); }
void gui_create_tasks_page (GtkWidget *vbox, GUI *appGUI) { GtkWidget *vbox5, *vbox6; GtkWidget *vbox7, *vbox11, *vbox12; GtkWidget *label; GtkWidget *hbox1; GtkWidget *frame; GtkWidget *table; GtkWidget *alignment; GtkWidget *ti_font_button; GtkWidget *scrolledwindow; GtkWidget *tasks_category_table; GtkCellRenderer *renderer; GtkTreeViewColumn *column; gchar tmpbuf[BUFFER_SIZE]; GdkColor color; appGUI->opt->tasks_vbox = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), appGUI->opt->tasks_vbox, FALSE, FALSE, 0); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (appGUI->opt->tasks_vbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); sprintf(tmpbuf, "<b>%s</b>", _("Appearance")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_padding (GTK_MISC (label), 0, 4); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (frame), alignment); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 12, 0); vbox5 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox5); gtk_container_add (GTK_CONTAINER (alignment), vbox5); table = gtk_table_new (3, 4, FALSE); gtk_widget_show (table); gtk_box_pack_start (GTK_BOX (vbox5), table, FALSE, FALSE, 0); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 8); hbox1 = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox1); gtk_table_attach (GTK_TABLE (table), hbox1, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); appGUI->opt->due_today_color_picker = gtk_color_button_new (); gtk_widget_show (appGUI->opt->due_today_color_picker); g_signal_connect (G_OBJECT (appGUI->opt->due_today_color_picker), "color-set", G_CALLBACK(due_today_color_changed_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, appGUI->opt->due_today_color_picker, _("Color of items that are due today"), NULL); gdk_color_parse(config.due_today_color, &color); gtk_color_button_set_color (GTK_COLOR_BUTTON (appGUI->opt->due_today_color_picker), &color); gtk_box_pack_start (GTK_BOX (hbox1), appGUI->opt->due_today_color_picker, FALSE, FALSE, 0); appGUI->opt->due_7days_color_picker = gtk_color_button_new (); gtk_widget_show (appGUI->opt->due_7days_color_picker); g_signal_connect (G_OBJECT (appGUI->opt->due_7days_color_picker), "color-set", G_CALLBACK(due_7days_color_changed_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, appGUI->opt->due_7days_color_picker, _("Color of items that are due in the next 7 days"), NULL); gdk_color_parse(config.due_7days_color, &color); gtk_color_button_set_color (GTK_COLOR_BUTTON (appGUI->opt->due_7days_color_picker), &color); gtk_box_pack_start (GTK_BOX (hbox1), appGUI->opt->due_7days_color_picker, FALSE, FALSE, 0); appGUI->opt->past_due_color_picker = gtk_color_button_new (); gtk_widget_show (appGUI->opt->past_due_color_picker); g_signal_connect (G_OBJECT (appGUI->opt->past_due_color_picker), "color-set", G_CALLBACK(past_due_color_changed_cb), appGUI); gtk_tooltips_set_tip (appGUI->osmo_tooltips, appGUI->opt->past_due_color_picker, _("Color of items that are past due"), NULL); gdk_color_parse(config.past_due_color, &color); gtk_color_button_set_color (GTK_COLOR_BUTTON (appGUI->opt->past_due_color_picker), &color); gtk_box_pack_start (GTK_BOX (hbox1), appGUI->opt->past_due_color_picker, FALSE, FALSE, 0); appGUI->opt->ti_font_entry = gtk_entry_new (); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->ti_font_entry, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->ti_font_entry); gtk_table_attach (GTK_TABLE (table), appGUI->opt->ti_font_entry, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); if (config.default_stock_icons) { ti_font_button = gui_stock_button (GTK_STOCK_SELECT_FONT, FALSE); } else { ti_font_button = gui_stock_button (OSMO_STOCK_BUTTON_SELECT_FONT, FALSE); } GTK_WIDGET_UNSET_FLAGS(ti_font_button, GTK_CAN_FOCUS); gtk_widget_show (ti_font_button); g_signal_connect (G_OBJECT (ti_font_button), "clicked", G_CALLBACK (ti_font_select_cb), appGUI); gtk_table_attach (GTK_TABLE (table), ti_font_button, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); sprintf(tmpbuf, "%s:", _("Task info font")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); sprintf(tmpbuf, "%s:", _("Colors")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); appGUI->opt->tasks_enable_rules_hint_checkbutton = gtk_check_button_new_with_mnemonic (_("Draw rows in alternating colors")); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->tasks_enable_rules_hint_checkbutton, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->tasks_enable_rules_hint_checkbutton); g_signal_connect (G_OBJECT (appGUI->opt->tasks_enable_rules_hint_checkbutton), "toggled", G_CALLBACK (tasks_enable_rules_hint_checkbutton_cb), appGUI); gtk_table_attach (GTK_TABLE (table), appGUI->opt->tasks_enable_rules_hint_checkbutton, 0, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (appGUI->opt->tasks_vbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); sprintf(tmpbuf, "<b>%s</b>", _("Visible columns")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_padding (GTK_MISC (label), 0, 4); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (frame), alignment); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 12, 0); vbox12 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox12); gtk_container_add (GTK_CONTAINER (alignment), vbox12); table = gtk_table_new (1, 3, FALSE); gtk_widget_show (table); gtk_box_pack_start (GTK_BOX (vbox12), table, FALSE, FALSE, 0); gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), 8); appGUI->opt->vc_due_date_checkbutton = gtk_check_button_new_with_mnemonic (_("Due date")); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->vc_due_date_checkbutton, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->vc_due_date_checkbutton); g_signal_connect (G_OBJECT (appGUI->opt->vc_due_date_checkbutton), "toggled", G_CALLBACK (visible_columns_changed_cb), appGUI); gtk_table_attach (GTK_TABLE (table), appGUI->opt->vc_due_date_checkbutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); appGUI->opt->vc_priority_checkbutton = gtk_check_button_new_with_mnemonic (_("Priority")); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->vc_priority_checkbutton, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->vc_priority_checkbutton); g_signal_connect (G_OBJECT (appGUI->opt->vc_priority_checkbutton), "toggled", G_CALLBACK (visible_columns_changed_cb), appGUI); gtk_table_attach (GTK_TABLE (table), appGUI->opt->vc_priority_checkbutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); appGUI->opt->vc_category_checkbutton = gtk_check_button_new_with_mnemonic (_("Category")); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->vc_category_checkbutton, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->vc_category_checkbutton); g_signal_connect (G_OBJECT (appGUI->opt->vc_category_checkbutton), "toggled", G_CALLBACK (visible_columns_changed_cb), appGUI); gtk_table_attach (GTK_TABLE (table), appGUI->opt->vc_category_checkbutton, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (appGUI->opt->tasks_vbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); sprintf(tmpbuf, "<b>%s</b>", _("Categories")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_padding (GTK_MISC (label), 0, 4); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (frame), alignment); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 12, 0); vbox6 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox6); gtk_container_add (GTK_CONTAINER (alignment), vbox6); tasks_category_table = gtk_table_new (4, 3, FALSE); gtk_widget_show (tasks_category_table); gtk_box_pack_start (GTK_BOX (vbox6), tasks_category_table, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (tasks_category_table), 8); gtk_table_set_row_spacings (GTK_TABLE (tasks_category_table), 8); gtk_table_set_col_spacings (GTK_TABLE (tasks_category_table), 4); appGUI->opt->tasks_category_entry = gtk_entry_new (); gtk_widget_show (appGUI->opt->tasks_category_entry); gtk_table_attach (GTK_TABLE (tasks_category_table), appGUI->opt->tasks_category_entry, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); g_signal_connect (G_OBJECT (appGUI->opt->tasks_category_entry), "key_release_event", G_CALLBACK (tasks_category_entry_key_release_cb), appGUI); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_table_attach (GTK_TABLE (tasks_category_table), scrolledwindow, 0, 3, 0, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN); appGUI->opt->tasks_category_store = gtk_list_store_new(1, G_TYPE_STRING); appGUI->opt->tasks_category_treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(appGUI->opt->tasks_category_store)); appGUI->opt->tasks_category_select = gtk_tree_view_get_selection(GTK_TREE_VIEW(appGUI->opt->tasks_category_treeview)); gtk_widget_show (appGUI->opt->tasks_category_treeview); g_signal_connect(G_OBJECT(appGUI->opt->tasks_category_select), "changed", G_CALLBACK(tasks_category_selected_cb), appGUI); gtk_container_add (GTK_CONTAINER (scrolledwindow), appGUI->opt->tasks_category_treeview); gtk_container_set_border_width (GTK_CONTAINER (appGUI->opt->tasks_category_treeview), 4); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (appGUI->opt->tasks_category_treeview), FALSE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (appGUI->opt->tasks_category_treeview), TRUE); gtk_tree_view_set_enable_search (GTK_TREE_VIEW (appGUI->opt->tasks_category_treeview), FALSE); gtk_widget_set_size_request (appGUI->opt->tasks_category_treeview, -1, 80); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(appGUI->opt->tasks_category_treeview), column); if (config.default_stock_icons) { appGUI->opt->tasks_category_add_button = gui_stock_button(GTK_STOCK_ADD, FALSE); } else { appGUI->opt->tasks_category_add_button = gui_stock_button(OSMO_STOCK_BUTTON_ADD, FALSE); } GTK_WIDGET_UNSET_FLAGS(appGUI->opt->tasks_category_add_button, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->tasks_category_add_button); gtk_table_attach (GTK_TABLE (tasks_category_table), appGUI->opt->tasks_category_add_button, 1, 2, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); g_signal_connect(appGUI->opt->tasks_category_add_button, "clicked", G_CALLBACK(tasks_category_add_cb), appGUI); gtk_widget_set_sensitive(appGUI->opt->tasks_category_add_button, FALSE); if (config.default_stock_icons) { appGUI->opt->tasks_category_remove_button = gui_stock_button(GTK_STOCK_REMOVE, FALSE); } else { appGUI->opt->tasks_category_remove_button = gui_stock_button(OSMO_STOCK_BUTTON_REMOVE, FALSE); } GTK_WIDGET_UNSET_FLAGS(appGUI->opt->tasks_category_remove_button, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->tasks_category_remove_button); gtk_table_attach (GTK_TABLE (tasks_category_table), appGUI->opt->tasks_category_remove_button, 2, 3, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); g_signal_connect(appGUI->opt->tasks_category_remove_button, "clicked", G_CALLBACK(tasks_category_remove_cb), appGUI); gtk_widget_set_sensitive(appGUI->opt->tasks_category_remove_button, FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (appGUI->opt->tasks_vbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); sprintf(tmpbuf, "<b>%s</b>", _("Sorting")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_padding (GTK_MISC (label), 0, 4); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (frame), alignment); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 12, 0); vbox7 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox7); gtk_container_add (GTK_CONTAINER (alignment), vbox7); table = gtk_table_new (1, 5, FALSE); gtk_widget_show (table); gtk_box_pack_start (GTK_BOX (vbox7), table, FALSE, FALSE, 0); gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), 8); sprintf(tmpbuf, "%s:", _("Order")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); sprintf(tmpbuf, "%s:", _("Mode")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); appGUI->opt->tasks_sort_order_combobox = gtk_combo_box_new_text (); gtk_widget_show (appGUI->opt->tasks_sort_order_combobox); g_signal_connect (G_OBJECT (appGUI->opt->tasks_sort_order_combobox), "changed", G_CALLBACK(tasks_sort_order_changed_cb), appGUI); gtk_table_attach (GTK_TABLE (table), appGUI->opt->tasks_sort_order_combobox, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_order_combobox), _("Ascending")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_order_combobox), _("Descending")); gtk_combo_box_set_active (GTK_COMBO_BOX(appGUI->opt->tasks_sort_order_combobox), config.tasks_sorting_order); appGUI->opt->tasks_sort_mode_combobox = gtk_combo_box_new_text (); gtk_widget_show (appGUI->opt->tasks_sort_mode_combobox); g_signal_connect (G_OBJECT (appGUI->opt->tasks_sort_mode_combobox), "changed", G_CALLBACK(tasks_sort_mode_changed_cb), appGUI); gtk_table_attach (GTK_TABLE (table), appGUI->opt->tasks_sort_mode_combobox, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); sprintf (tmpbuf, "%s, %s, %s", _("Done"), _("Due date"), _("Priority")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_mode_combobox), tmpbuf); sprintf (tmpbuf, "%s, %s, %s", _("Done"), _("Priority"), _("Due date")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_mode_combobox), tmpbuf); sprintf (tmpbuf, "%s, %s, %s", _("Priority"), _("Due date"), _("Done")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_mode_combobox), tmpbuf); sprintf (tmpbuf, "%s, %s, %s", _("Priority"), _("Done"), _("Due date")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_mode_combobox), tmpbuf); sprintf (tmpbuf, "%s, %s, %s", _("Due date"), _("Priority"), _("Done")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_mode_combobox), tmpbuf); sprintf (tmpbuf, "%s, %s, %s", _("Due date"), _("Done"), _("Priority")); gtk_combo_box_append_text (GTK_COMBO_BOX (appGUI->opt->tasks_sort_mode_combobox), tmpbuf); gtk_combo_box_set_active (GTK_COMBO_BOX(appGUI->opt->tasks_sort_mode_combobox), config.tasks_sorting_mode); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (appGUI->opt->tasks_vbox), frame, FALSE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); sprintf(tmpbuf, "<b>%s</b>", _("Tasks options")); label = gtk_label_new (tmpbuf); gtk_widget_show (label); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_padding (GTK_MISC (label), 0, 4); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (frame), alignment); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 12, 12, 0); vbox11 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox11); gtk_container_add (GTK_CONTAINER (alignment), vbox11); appGUI->opt->ct_hide_items_checkbutton = gtk_check_button_new_with_mnemonic (_("Hide completed tasks")); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->ct_hide_items_checkbutton, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->ct_hide_items_checkbutton); g_signal_connect (G_OBJECT (appGUI->opt->ct_hide_items_checkbutton), "toggled", G_CALLBACK (hide_delete_changed_cb), appGUI); gtk_box_pack_start (GTK_BOX (vbox11), appGUI->opt->ct_hide_items_checkbutton, FALSE, FALSE, 4); g_signal_connect (G_OBJECT (appGUI->opt->ct_hide_items_checkbutton), "toggled", G_CALLBACK (hide_items_cb), appGUI); appGUI->opt->ct_delete_items_checkbutton = gtk_check_button_new_with_mnemonic (_("Delete completed tasks without confirmation")); GTK_WIDGET_UNSET_FLAGS(appGUI->opt->ct_delete_items_checkbutton, GTK_CAN_FOCUS); gtk_widget_show (appGUI->opt->ct_delete_items_checkbutton); g_signal_connect (G_OBJECT (appGUI->opt->ct_delete_items_checkbutton), "toggled", G_CALLBACK (hide_delete_changed_cb), appGUI); gtk_box_pack_start (GTK_BOX (vbox11), appGUI->opt->ct_delete_items_checkbutton, FALSE, FALSE, 4); g_signal_connect (G_OBJECT (appGUI->opt->ct_delete_items_checkbutton), "toggled", G_CALLBACK (delete_items_cb), appGUI); }