//Callback functions //****************************************************************************** void btn_clicked(GtkButton *button, gpointer icon_id) { GtkTreeModel *treemodel; GtkTreeIter iter; GdkPixbuf *pixbuf; GtkTreeSelection *sel; gchar *icon_name; t_launcher *launcher; sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(_dlg->treeview1) ); if ( gtk_tree_selection_get_selected(sel, &treemodel, &iter) ) { gtk_tree_model_get(treemodel, &iter, 2, &launcher, -1); if ( (gint)icon_id == XFCE_ICON_CATEGORY_EXTERN ) { gtk_window_set_modal(GTK_WINDOW(_icon_window), FALSE); gtk_widget_hide(GTK_WIDGET(_icon_window)); icon_name = get_icon_file(); //gtk_widget_show(GTK_WIDGET(_icon_window)); //useless if (icon_name) { if (launcher->icon_name) g_free(launcher->icon_name); launcher->icon_name = icon_name; launcher->icon_id = (gint)icon_id; } }else launcher->icon_id = (gint)icon_id; launcher_update_icon(launcher); pixbuf = _create_pixbuf(launcher->icon_id, icon_name, 16); gtk_list_store_set(GTK_LIST_STORE(treemodel), &iter, 0, pixbuf, -1); UNREF(pixbuf); } }
CMasterBiasDlg::CMasterBiasDlg(GtkWindow *pParent):m_pParent(pParent), m_InFiles(0), m_FileList(NULL), m_FilePath(NULL) { GtkWidget *vbox, *xbox, *bbox; GSList *group; GtkFileFilter *filters[2]; // Dialog with buttons m_pDlg = gtk_file_chooser_dialog_new("Master bias frame", pParent, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_file_chooser_standard_tooltips(GTK_FILE_CHOOSER(m_pDlg)); gtk_dialog_set_tooltip_by_response(GTK_DIALOG(m_pDlg), GTK_RESPONSE_ACCEPT, "Create a master bias frame and save it to the specified file"); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(m_pDlg), true); // Filters filters[0] = gtk_file_filter_new(); gtk_file_filter_add_pattern(filters[0], "*." FILE_EXTENSION_FITS); gtk_file_filter_set_name(filters[0], "FITS files"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(m_pDlg), filters[0]); filters[1] = gtk_file_filter_new(); gtk_file_filter_add_pattern(filters[1], "*"); gtk_file_filter_set_name(filters[1], "All files"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(m_pDlg), filters[1]); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(m_pDlg), filters[0]); // Dialog icon gchar *icon = get_icon_file("masterbias"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Frame selection xbox = gtk_vbox_new(FALSE, 8); m_ProcFrame = gtk_frame_new("Process"); gtk_box_pack_start(GTK_BOX(xbox), m_ProcFrame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 4); gtk_container_add(GTK_CONTAINER(m_ProcFrame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 4); m_AllBtn = gtk_radio_button_new_with_label(NULL, "all files in current project"); gtk_widget_set_tooltip_text(m_AllBtn, "Include all frames in the current project"); gtk_box_pack_start(GTK_BOX(vbox), m_AllBtn, TRUE, TRUE, 0); group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(m_AllBtn)); m_SelBtn = gtk_radio_button_new_with_label(group, "selected files only"); gtk_widget_set_tooltip_text(m_SelBtn, "Include frames that are selected in the main window"); gtk_box_pack_start(GTK_BOX(vbox), m_SelBtn, TRUE, TRUE, 0); // Options bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_START); gtk_box_pack_start(GTK_BOX(xbox), bbox, FALSE, TRUE, 0); m_OptionsBtn = gtk_button_new_with_label("Options"); gtk_widget_set_tooltip_text(m_OptionsBtn, "Edit project settings"); gtk_box_pack_start(GTK_BOX(bbox), m_OptionsBtn, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(m_OptionsBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(m_pDlg), xbox); gtk_widget_show_all(xbox); }
// // Open preview in standalone window // void CPreview::ShowFileModal(void) { GdkRectangle rc; char buf[FILENAME_MAX+128]; GtkWindow *pParent = GTK_WINDOW(GetTopLevel()); if (m_FileType!=TYPE_IMAGE && m_FileType!=TYPE_CAT && m_FileType!=TYPE_PHOT && m_FileType!=TYPE_TABLE) return; // Dialog with buttons GtkWidget *pDlg = gtk_dialog_new_with_buttons("", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(pDlg)); // Dialog size GdkScreen *scr = gtk_window_get_screen(pParent); int mon = gdk_screen_get_monitor_at_window(scr, GTK_WIDGET(pParent)->window); gdk_screen_get_monitor_geometry(scr, mon, &rc); if (rc.width>0 && rc.height>0) gtk_window_set_default_size(GTK_WINDOW(pDlg), RoundToInt(0.7*rc.width), RoundToInt(0.7*rc.height)); // Dialog icon char *icon = get_icon_file("preview"); gtk_window_set_icon(GTK_WINDOW(pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Preview widget GtkWidget *preview = cmpack_preview_new_with_model(m_Data); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pDlg)->vbox), preview, TRUE, TRUE, 0); if (m_FileType == TYPE_TABLE) { cmpack_preview_set_x_axis(CMPACK_PREVIEW(preview), FALSE, FALSE, m_MinX, m_MaxX, m_EpsX); cmpack_preview_set_y_axis(CMPACK_PREVIEW(preview), FALSE, m_ReverseY, m_MinY, m_MaxY, m_EpsY); } bool chart_invert = CConfig::GetBool(CConfig::NEGATIVE_CHARTS); cmpack_preview_set_negative(CMPACK_PREVIEW(preview), chart_invert); bool rows_upward = CConfig::GetBool(CConfig::ROWS_UPWARD); cmpack_preview_set_image_orientation(CMPACK_PREVIEW(preview), rows_upward ? CMPACK_ROWS_UPWARDS : CMPACK_ROWS_DOWNWARDS); // Display the preview dialog gchar *basename = g_path_get_basename(m_Path); sprintf(buf, "%s - %s", basename, g_AppTitle); g_free(basename); gtk_window_set_title(GTK_WINDOW(pDlg), buf); gtk_widget_show_all(pDlg); gtk_dialog_run(GTK_DIALOG(pDlg)); gtk_widget_destroy(pDlg); }
CChooseApertureSimpleDlg::CChooseApertureSimpleDlg(GtkWindow *pParent):m_FrameSet(NULL), m_ApertureIndex(-1) { GtkWidget *scrwnd; GtkTreeViewColumn *col; GtkCellRenderer *renderer; GtkTreeSelection *selection; // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Choose aperture", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("muniwin"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // List of apertures m_Apertures = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); m_AperView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(m_Apertures)); col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, "Apertures"); gtk_tree_view_append_column(GTK_TREE_VIEW(m_AperView), col); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, renderer, FALSE); gtk_tree_view_column_add_attribute(col, renderer, "text", 1); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(m_AperView)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selection_changed), this); scrwnd = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwnd), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrwnd), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(scrwnd), m_AperView); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), scrwnd, FALSE, TRUE, 0); gtk_widget_set_size_request(scrwnd, 140, 300); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CMessagesDlg::CMessagesDlg(GtkWindow *pParent) { GtkWidget *text_view, *scrolled_window; GdkRectangle rc; // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Message log", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog size GdkScreen *scr = gtk_window_get_screen(pParent); int mon = gdk_screen_get_monitor_at_window(scr, GTK_WIDGET(pParent)->window); gdk_screen_get_monitor_geometry(scr, mon, &rc); if (rc.width>0 && rc.height>0) gtk_window_set_default_size(GTK_WINDOW(m_pDlg), RoundToInt(0.7*rc.width), RoundToInt(0.7*rc.height)); // Dialog icon gchar *icon = get_icon_file("messagelog"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // List box text_view = gtk_text_view_new_with_buffer(ms_Buffer); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD_CHAR); gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), false); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), false); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(scrolled_window), text_view); gtk_widget_set_size_request(scrolled_window, 640, 480); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), scrolled_window, TRUE, TRUE, 0); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CAboutDlg::CAboutDlg(GtkWindow *pParent) { float x; char buf[2048]; GtkWidget *tbox, *label, *scrolled_window, *text_view; // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("About Muniwin", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("about"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Notebook m_Notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), m_Notebook, TRUE, TRUE, 0); gtk_widget_set_size_request(m_Notebook, 400, 240); // Page "General" tbox = gtk_table_new(4, 1, FALSE); gtk_container_set_border_width(GTK_CONTAINER(tbox), 8); gtk_table_set_row_spacings(GTK_TABLE(tbox), 8); gtk_notebook_append_page(GTK_NOTEBOOK(m_Notebook), tbox, gtk_label_new("General")); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), "<span size=\"xx-large\" weight=\"bold\">Muniwin</span>"); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 0, 1); label = gtk_label_new(NULL); sprintf(buf, "<span size=\"x-large\" weight=\"bold\">Stable version %s</span>", VERSION); gtk_label_set_markup(GTK_LABEL(label), buf); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 1, 2); label = gtk_label_new(NULL); sprintf(buf, "<span size=\"large\">%s</span>", ProjectDescription); gtk_label_set_markup(GTK_LABEL(label), buf); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 2, 3); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), "<span size=\"x-large\" underline=\"single\" foreground=\"blue\">http://c-munipack.sourceforge.net</span>"); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 3, 4); // Page "Versions" tbox = gtk_table_new(5, 2, false); gtk_container_set_border_width(GTK_CONTAINER(tbox), 8); gtk_table_set_row_spacings(GTK_TABLE(tbox), 8); gtk_table_set_col_spacings(GTK_TABLE(tbox), 16); gtk_notebook_append_page(GTK_NOTEBOOK(m_Notebook), tbox, gtk_label_new("Versions")); AddVersion(GTK_TABLE(tbox), 0, g_AppTitle, VERSION); AddVersion(GTK_TABLE(tbox), 1, "C-Munipack", cmpack_versionid()); sprintf(buf, "%.03f", ffvers(&x)); AddVersion(GTK_TABLE(tbox), 2, "CFITSIO", buf); AddVersion(GTK_TABLE(tbox), 3, "Expat", XML_ExpatVersion()); sprintf(buf, "%d.%d.%d", gtk_major_version, gtk_minor_version, gtk_micro_version); AddVersion(GTK_TABLE(tbox), 4, "GTK+", buf); sprintf(buf, "%d.%d.%d", glib_major_version, glib_minor_version, glib_micro_version); AddVersion(GTK_TABLE(tbox), 5, "GLib", buf); #if HAVE_LIBGSTREAMER_0_10 gchar *gstver = gst_version_string(); AddVersion(GTK_TABLE(tbox), 6, "GStreamer", gstver); free(gstver); #endif // Page "License" scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_notebook_append_page(GTK_NOTEBOOK(m_Notebook), scrolled_window, gtk_label_new("License")); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_ETCHED_IN); text_view = gtk_text_view_new_with_buffer(NULL); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD); gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), false); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), false); gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)), CopyrightText, -1); gtk_container_add(GTK_CONTAINER(scrolled_window), text_view); // Page "Credits" scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_notebook_append_page(GTK_NOTEBOOK(m_Notebook), scrolled_window, gtk_label_new("Credits")); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_ETCHED_IN); text_view = gtk_text_view_new_with_buffer(NULL); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD); gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), false); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), false); gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)), CreditsText, -1); gtk_container_add(GTK_CONTAINER(scrolled_window), text_view); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CMatchingDlg::CMatchingDlg(GtkWindow *pParent):m_pParent(pParent), m_FileList(NULL), m_FrameCols(NULL), m_CatalogCols(NULL), m_ChartData(NULL), m_ImageData(NULL), m_CatFile(NULL), m_SelectionName(NULL), m_Updating(false) { int i, w, width, mon; GtkWidget *tbox, *tbar, *frame, *hbox; GdkRectangle rc; GSList *group; m_Negative = CConfig::GetBool(CConfig::NEGATIVE_CHARTS); m_RowsUpward = CConfig::GetBool(CConfig::ROWS_UPWARD); // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Match stars", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); gtk_dialog_set_tooltip_by_response(GTK_DIALOG(m_pDlg), GTK_RESPONSE_ACCEPT, "Start the process"); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("matchstars"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Dialog layout GtkWidget *vbox = gtk_vbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); // Dialog size GdkScreen *scr = gtk_window_get_screen(pParent); mon = gdk_screen_get_monitor_at_window(scr, GTK_WIDGET(pParent)->window); gdk_screen_get_monitor_geometry(scr, mon, &rc); if (rc.width>0 && rc.height>0) gtk_window_set_default_size(GTK_WINDOW(m_pDlg), RoundToInt(0.7*rc.width), RoundToInt(0.7*rc.height)); // Initial state m_SelectMode = (tSelectMode)g_Project->GetInt("MatchingDlg", "Select", REFERENCE_FRAME); m_DMFrame = (tDisplayMode)g_Project->GetInt("MatchingDlg", "Display", DISPLAY_CHART); m_DMCatalog = (tDisplayMode)g_Project->GetInt("MatchingDlg", "Display2", DISPLAY_CHART); m_FrameSort = g_Project->GetInt("MatchingDlg", "Sort", FCOL_STARS); // List of frames m_Frames = gtk_list_store_new(FNCOLS, G_TYPE_INT, G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_INT); // List of catalog files m_Catalogs = gtk_list_store_new(CNCOLS, G_TYPE_STRING, G_TYPE_STRING); // Reference frame or catalog file? m_UseFrame = gtk_vbox_new(TRUE, 4); gtk_box_pack_start(GTK_BOX(vbox), m_UseFrame, FALSE, TRUE, 0); GtkWidget *label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), "<b>As a reference file, use:</b>"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(m_UseFrame), label, FALSE, TRUE, 0); m_FrameBtn = gtk_radio_button_new_with_label(NULL, "a frame from the current project"); gtk_widget_set_tooltip_text(m_FrameBtn, "Use one of the source frames as a reference frame"); g_signal_connect(G_OBJECT(m_FrameBtn), "toggled", G_CALLBACK(button_clicked), this); gtk_box_pack_start(GTK_BOX(m_UseFrame), m_FrameBtn, TRUE, TRUE, 0); group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(m_FrameBtn)); m_CatalogBtn = gtk_radio_button_new_with_label(group, "a catalog file from the disk"); gtk_widget_set_tooltip_text(m_CatalogBtn, "Use a catalog file as a reference frame"); g_signal_connect(G_OBJECT(m_CatalogBtn), "toggled", G_CALLBACK(button_clicked), this); gtk_box_pack_start(GTK_BOX(m_UseFrame), m_CatalogBtn, TRUE, TRUE, 0); // Separator gtk_box_pack_start(GTK_BOX(m_UseFrame), gtk_label_new(NULL), FALSE, TRUE, 0); m_SelLabel = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(m_SelLabel), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), m_SelLabel, FALSE, TRUE, 0); tbox = gtk_table_new(2, 3, FALSE); gtk_table_set_col_spacings(GTK_TABLE(tbox), 0); gtk_table_set_col_spacing(GTK_TABLE(tbox), 1, 8); gtk_table_set_row_spacings(GTK_TABLE(tbox), 0); gtk_table_set_row_spacing(GTK_TABLE(tbox), 1, 8); gtk_box_pack_start(GTK_BOX(vbox), tbox, TRUE, TRUE, 0); // List of reference frames m_FrameView = gtk_tree_view_new(); width = 8; for (i=0; FrameColumns[i].caption!=NULL; i++) { GtkTreeViewColumn *col = gtk_tree_view_column_new(); // Set column name and alignment gtk_tree_view_column_set_title(col, FrameColumns[i].caption); gtk_tree_view_append_column(GTK_TREE_VIEW(m_FrameView), col); // Add text renderer GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, renderer, TRUE); g_object_set(renderer, "xalign", FrameColumns[i].align, NULL); if (FrameColumns[i].datafn) gtk_tree_view_column_set_cell_data_func(col, renderer, FrameColumns[i].datafn, NULL, NULL); else gtk_tree_view_column_add_attribute(col, renderer, "text", FrameColumns[i].column); g_signal_connect(G_OBJECT(col), "clicked", G_CALLBACK(frame_column_clicked), this); tColData *data = (tColData*)g_malloc(sizeof(tColData)); data->col = col; data->data = &FrameColumns[i]; m_FrameCols = g_slist_append(m_FrameCols, data); if (FrameColumns[i].maxtext) w = text_width(m_FrameView, FrameColumns[i].maxtext); else w = text_width(m_FrameView, FrameColumns[i].caption); width += w + 24; } gtk_tree_view_set_model(GTK_TREE_VIEW(m_FrameView), GTK_TREE_MODEL(m_Frames)); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(m_FrameView), true); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(m_FrameView)), GTK_SELECTION_SINGLE); m_FrameBox = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(m_FrameBox), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(m_FrameBox), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(m_FrameBox), m_FrameView); gtk_widget_set_size_request(m_FrameView, width, -1); gtk_table_attach(GTK_TABLE(tbox), m_FrameBox, 0, 1, 0, 2, GTK_FILL, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 0, 0); // Register callback for selection change GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(m_FrameView)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selection_changed), this); // Catalog files m_CatalogView = gtk_tree_view_new(); for (i=0; CatalogColumns[i].caption!=NULL; i++) { GtkTreeViewColumn *col = gtk_tree_view_column_new(); // Set column name and alignment gtk_tree_view_column_set_title(col, CatalogColumns[i].caption); gtk_tree_view_append_column(GTK_TREE_VIEW(m_CatalogView), col); // Add text renderer GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, renderer, TRUE); g_object_set(renderer, "xalign", CatalogColumns[i].align, NULL); if (CatalogColumns[i].datafn) gtk_tree_view_column_set_cell_data_func(col, renderer, CatalogColumns[i].datafn, NULL, NULL); else gtk_tree_view_column_add_attribute(col, renderer, "text", CatalogColumns[i].column); tColData *data = (tColData*)g_malloc(sizeof(tColData)); data->col = col; data->data = &CatalogColumns[i]; m_CatalogCols = g_slist_append(m_CatalogCols, data); } gtk_tree_view_set_model(GTK_TREE_VIEW(m_CatalogView), GTK_TREE_MODEL(m_Catalogs)); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(m_CatalogView), true); m_CatalogBox = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(m_CatalogBox), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(m_CatalogBox), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(m_CatalogBox), m_CatalogView); gtk_widget_set_size_request(m_CatalogView, width, -1); gtk_table_attach(GTK_TABLE(tbox), m_CatalogBox, 1, 2, 0, 2, GTK_FILL, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 0, 0); // Register callback for selection change selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(m_CatalogView)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selection_changed), this); // Toolbox tbar = gtk_toolbar_new(); gtk_toolbar_set_style(GTK_TOOLBAR(tbar), GTK_TOOLBAR_TEXT); m_ShowChart = toolbar_new_radio_button(tbar, NULL, "Chart", "Display objects on a flat background"); g_signal_connect(G_OBJECT(m_ShowChart), "toggled", G_CALLBACK(button_clicked), this); m_ShowImage = toolbar_new_radio_button(tbar, m_ShowChart, "Image", "Display an image only"); g_signal_connect(G_OBJECT(m_ShowImage), "toggled", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(tbox), tbar, 2, 3, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); // Frame preview frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); m_Preview = cmpack_chart_view_new(); gtk_container_add(GTK_CONTAINER(frame), m_Preview); gtk_widget_set_size_request(frame, 160, 120); gtk_table_attach_defaults(GTK_TABLE(tbox), frame, 2, 3, 1, 2); // Bottom toolbox hbox = gtk_hbox_new(FALSE, 8); m_OptionsBtn = gtk_button_new_with_label("Options"); gtk_widget_set_tooltip_text(m_OptionsBtn, "Edit project settings"); gtk_box_pack_start(GTK_BOX(hbox), m_OptionsBtn, 0, 0, 0); g_signal_connect(G_OBJECT(m_OptionsBtn), "clicked", G_CALLBACK(button_clicked), this); m_PathLabel = gtk_label_new("Search path:"); gtk_box_pack_start(GTK_BOX(hbox), m_PathLabel, FALSE, TRUE, 0); m_PathEntry = gtk_entry_new(); gtk_widget_set_tooltip_text(m_PathEntry, "Path to the folder with catalog files"); gtk_editable_set_editable(GTK_EDITABLE(m_PathEntry), false); gtk_box_pack_start(GTK_BOX(hbox), m_PathEntry, TRUE, TRUE, 0); m_PathBtn = gtk_button_new_with_label("Change folder"); gtk_widget_set_tooltip_text(m_PathBtn, "Change folder with catalog files"); g_signal_connect(G_OBJECT(m_PathBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_box_pack_start(GTK_BOX(hbox), m_PathBtn, FALSE, TRUE, 0); gtk_table_attach(GTK_TABLE(tbox), hbox, 0, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CChooseApertureDlg::CChooseApertureDlg(GtkWindow *pParent):m_FrameSet(NULL), m_Table(NULL), m_GraphData(NULL), m_ApertureIndex(-1), m_Row(-1), m_Column(-1) { GdkRectangle rc; GtkWidget *hbox, *vbox, *scrwnd; GtkTreeViewColumn *col; GtkCellRenderer *renderer; GtkTreeSelection *selection; // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Choose aperture", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog size GdkScreen *scr = gdk_screen_get_default(); gdk_screen_get_monitor_geometry(scr, 0, &rc); if (rc.width>0 && rc.height>0) gtk_window_set_default_size(GTK_WINDOW(m_pDlg), RoundToInt(0.6*rc.width), RoundToInt(0.5*rc.height)); // Dialog icon gchar *icon = get_icon_file("muniwin"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Preview box hbox = gtk_hbox_new(FALSE, 8); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), hbox, TRUE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 8); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); // List of apertures m_Apertures = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); m_AperView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(m_Apertures)); gtk_widget_set_tooltip_text(m_AperView, "Click on a item to select an aperture"); col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, "Apertures"); gtk_tree_view_append_column(GTK_TREE_VIEW(m_AperView), col); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, renderer, FALSE); gtk_tree_view_column_add_attribute(col, renderer, "text", 1); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(m_AperView)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selection_changed), this); scrwnd = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwnd), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrwnd), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(scrwnd), m_AperView); gtk_box_pack_start(GTK_BOX(vbox), scrwnd, FALSE, TRUE, 0); gtk_widget_set_size_request(scrwnd, 140, 300); // List of data columns m_Channels = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); m_DataView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(m_Channels)); col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, "Data sets"); gtk_tree_view_append_column(GTK_TREE_VIEW(m_DataView), col); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_add_attribute(col, renderer, "text", 1); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(m_DataView)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selection_changed), this); scrwnd = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwnd), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrwnd), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(scrwnd), m_DataView); gtk_box_pack_start(GTK_BOX(vbox), scrwnd, TRUE, TRUE, 0); gtk_widget_set_size_request(scrwnd, -1, 120); // Graph m_GraphView = cmpack_graph_view_new_with_model(NULL); gtk_widget_set_tooltip_text(m_GraphView, "Click on a point to select an aperture"); cmpack_graph_view_set_mouse_control(CMPACK_GRAPH_VIEW(m_GraphView), FALSE); cmpack_graph_view_set_scales(CMPACK_GRAPH_VIEW(m_GraphView), TRUE, TRUE); cmpack_graph_view_set_activation_mode(CMPACK_GRAPH_VIEW(m_GraphView), CMPACK_ACTIVATION_CLICK); g_signal_connect(G_OBJECT(m_GraphView), "item-activated", G_CALLBACK(item_activated), this); gtk_widget_set_size_request(m_GraphView, 200, -1); gtk_box_pack_start(GTK_BOX(hbox), m_GraphView, TRUE, TRUE, 0); gtk_widget_show_all(hbox); }
CNewFilesDlg::CNewFilesDlg(GtkWindow *pParent):m_pParent(pParent), m_InFiles(0), m_OutFiles(0), m_FrameList(NULL) { GtkWidget *tbox; GSList *group; // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Process new frames", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("newfiles"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Frame tbox = gtk_table_new(8, 4, FALSE); gtk_container_add (GTK_CONTAINER(GTK_DIALOG(m_pDlg)->vbox), tbox); gtk_container_set_border_width(GTK_CONTAINER(tbox), 8); gtk_table_set_col_spacings(GTK_TABLE(tbox), 4); gtk_table_set_row_spacings(GTK_TABLE(tbox), 8); gtk_table_set_col_spacing(GTK_TABLE(tbox), 0, 32); m_AllBtn = gtk_radio_button_new_with_label(NULL, "Process all unprocessed frames in the current project"); gtk_widget_set_tooltip_text(m_AllBtn, "Process all unprocessed frames in the current project"); g_signal_connect(G_OBJECT(m_AllBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_AllBtn, 0, 4, 0, 1); group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(m_AllBtn)); m_FilesBtn = gtk_radio_button_new_with_label(group, "Process new files in the directory:"); gtk_widget_set_tooltip_text(m_FilesBtn, "Find new frames in specified location, append them to the project and process them"); g_signal_connect(G_OBJECT(m_FilesBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_FilesBtn, 0, 4, 1, 2); // Directory path m_DirEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_DirEdit, "Path to the directory where new frames are searched for"); gtk_table_attach(GTK_TABLE(tbox), m_DirEdit, 1, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_size_request(m_DirEdit, 320, -1); m_DirBtn = gtk_button_new_with_label("Browse"); gtk_widget_set_tooltip_text(m_DirBtn, "Change search directory"); g_signal_connect(G_OBJECT(m_DirBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(tbox), m_DirBtn, 3, 4, 2, 3, GTK_FILL, GTK_FILL, 0, 0); // Include subdirectories m_SubDirs = gtk_check_button_new_with_label("Include subdirectories"); gtk_widget_set_tooltip_text(m_SubDirs, "Search frames also in all sub-directories in the selected folder"); gtk_table_attach_defaults(GTK_TABLE(tbox), m_SubDirs, 1, 4, 3, 4); m_ProcLabel = gtk_label_new("Process only files which meet the following conditions:"); gtk_misc_set_alignment(GTK_MISC(m_ProcLabel), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), m_ProcLabel, 1, 4, 4, 5); // File name m_NameCheck = gtk_check_button_new_with_label("File name prefix"); gtk_widget_set_tooltip_text(m_NameCheck, "Use only files that start with a specified string"); g_signal_connect(G_OBJECT(m_NameCheck), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach(GTK_TABLE(tbox), m_NameCheck, 1, 2, 5, 6, GTK_FILL, GTK_FILL, 0, 0); m_NameEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_NameEdit, "File name prefix"); gtk_table_attach_defaults(GTK_TABLE(tbox), m_NameEdit, 2, 3, 5, 6); // Filter m_FilterCheck = gtk_check_button_new_with_label("Filter"); gtk_widget_set_tooltip_text(m_FilterCheck, "Use only frames that have been acquired with specified color filter"); g_signal_connect(G_OBJECT(m_FilterCheck), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach(GTK_TABLE(tbox), m_FilterCheck, 1, 2, 6, 7, GTK_FILL, GTK_FILL, 0, 0); m_FilterEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_FilterEdit, "Color filter designation"); gtk_table_attach_defaults(GTK_TABLE(tbox), m_FilterEdit, 2, 3, 6, 7); // Object name m_ObjectCheck = gtk_check_button_new_with_label("Object name"); gtk_widget_set_tooltip_text(m_ObjectCheck, "Use only frames of specified object"); g_signal_connect(G_OBJECT(m_ObjectCheck), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach(GTK_TABLE(tbox), m_ObjectCheck, 1, 2, 7, 8, GTK_FILL, GTK_FILL, 0, 0); m_ObjectEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_ObjectEdit, "Object's designation"); gtk_table_attach_defaults(GTK_TABLE(tbox), m_ObjectEdit, 2, 3, 7, 8); m_OptLabel = gtk_label_new("Run this tool on background:"); gtk_misc_set_alignment(GTK_MISC(m_OptLabel), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), m_OptLabel, 1, 4, 8, 9); // Background process m_BgCheck = gtk_check_button_new_with_label("Periodically check and process new frames in the directory"); gtk_widget_set_tooltip_text(m_BgCheck, "Start a new background process that checks for new files in specified directory, add them to the current project and process."); g_signal_connect(G_OBJECT(m_BgCheck), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach(GTK_TABLE(tbox), m_BgCheck, 1, 4, 9, 10, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CExpressDlg::CExpressDlg(GtkWindow *pParent):m_pParent(pParent), m_ConvertBtn(NULL), m_ChannelCombo(NULL), m_TimeCorrBtn(NULL), m_SecondsEdit(NULL), m_SecondsBtn(NULL), m_BiasCorrBtn(NULL), m_BiasFrameEdit(NULL), m_BiasFrameBtn(NULL), m_DarkCorrBtn(NULL), m_DarkFrameEdit(NULL), m_DarkFrameBtn(NULL), m_FlatCorrBtn(NULL), m_FlatFrameEdit(NULL), m_FlatFrameBtn(NULL), m_PhotometryBtn(NULL), m_MatchingBtn(NULL), m_RefBtn(NULL), m_RefFrameCombo(NULL), m_RefFrameBtn(NULL), m_CatBtn(NULL), m_CatFrameEdit(NULL), m_CatFrameBtn(NULL), m_TimeCorr(0), m_Updating(false), m_Matching(false) { int row = 0; tProjectType type = g_Project->ProjectType(); GtkWidget *table; GSList *group; GtkCellRenderer *renderer; GtkTreeIter iter; memset(&m_Params, 0, sizeof(tProcParams)); m_Channels = gtk_list_store_new(2, GTK_TYPE_INT, GTK_TYPE_STRING); for (int i=0; RAWChannels[i].caption; i++) { if (!RAWChannels[i].debug || type==PROJECT_TEST) { gtk_list_store_append(m_Channels, &iter); gtk_list_store_set(m_Channels, &iter, 0, RAWChannels[i].type, 1, RAWChannels[i].caption, -1); } } m_Frames = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Express reduction", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); gtk_dialog_set_tooltip_by_response(GTK_DIALOG(m_pDlg), GTK_RESPONSE_ACCEPT, "Start the process"); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("reduction"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Dialog layout table = gtk_table_new(4, 3, FALSE); gtk_widget_set_size_request(table, 360, -1); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), table, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 8); gtk_table_set_row_spacings(GTK_TABLE(table), 4); gtk_table_set_col_spacings(GTK_TABLE(table), 4); gtk_table_set_row_spacing(GTK_TABLE(table), 2, 12); gtk_table_set_col_spacing(GTK_TABLE(table), 0, 16); // All frames / selected frames GtkWidget *label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), "<b>Process</b>"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 3, row, row+1); m_AllBtn = gtk_radio_button_new_with_label(NULL, "all files in current project"); gtk_widget_set_tooltip_text(m_AllBtn, "Process all frames in the current project"); g_signal_connect(G_OBJECT(m_AllBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_AllBtn, 0, 3, row+1, row+2); group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(m_AllBtn)); m_SelBtn = gtk_radio_button_new_with_label(group, "selected files only"); gtk_widget_set_tooltip_text(m_SelBtn, "Process frames that are selected in the main window"); g_signal_connect(G_OBJECT(m_SelBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_SelBtn, 0, 3, row+2, row+3); row += 3; // Actions label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), "<b>Execute</b>"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 3, row, row+1); row++; // Fetch / convert m_ConvertBtn = gtk_check_button_new_with_label("Fetch/convert files"); gtk_widget_set_tooltip_text(m_ConvertBtn, "Start reduction with a fresh copy of the source frames"); g_signal_connect(G_OBJECT(m_ConvertBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_ConvertBtn, 0, 3, row, row+1); m_ChannelCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(m_Channels)); gtk_widget_set_tooltip_text(m_ChannelCombo, "Color to grayscale conversion mode"); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(m_ChannelCombo), renderer, TRUE); gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(m_ChannelCombo), renderer, "text", 1); gtk_table_attach(GTK_TABLE(table), m_ChannelCombo, 1, 2, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); row+=2; // Time correction if (type==PROJECT_REDUCE || type==PROJECT_COMBINING || type==PROJECT_TEST) { m_TimeCorrBtn = gtk_check_button_new_with_label("Time correction"); gtk_widget_set_tooltip_text(m_TimeCorrBtn, "Adjust the date and time of observation (time correction)"); g_signal_connect(G_OBJECT(m_TimeCorrBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_TimeCorrBtn, 0, 3, row, row+1); m_SecondsEdit = gtk_entry_new(); gtk_entry_set_editable(GTK_ENTRY(m_SecondsEdit), false); gtk_table_attach(GTK_TABLE(table), m_SecondsEdit, 1, 2, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); m_SecondsBtn = gtk_button_new_with_label("More"); gtk_widget_set_tooltip_text(m_SecondsBtn, "Specify time correction in a separate dialog"); g_signal_connect(G_OBJECT(m_SecondsBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(table), m_SecondsBtn, 2, 3, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); row+=2; } // Bias correction if (g_Project->Profile()->GetBool(CProfile::ADVANCED_CALIBRATION)) { if (type==PROJECT_MASTER_DARK || type==PROJECT_MASTER_FLAT || type==PROJECT_REDUCE || type==PROJECT_COMBINING || type==PROJECT_TEST) { m_BiasCorrBtn = gtk_check_button_new_with_label("Bias-frame correction"); gtk_widget_set_tooltip_text(m_BiasCorrBtn, "Apply the bias correction"); g_signal_connect(G_OBJECT(m_BiasCorrBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_BiasCorrBtn, 0, 3, row, row+1); m_BiasFrameEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_BiasFrameEdit, "Path to the bias frame"); gtk_table_attach(GTK_TABLE(table), m_BiasFrameEdit, 1, 2, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); m_BiasFrameBtn = gtk_button_new_with_label("Browse"); gtk_widget_set_tooltip_text(m_BiasCorrBtn, "Choose a bias frame in a separate dialog"); g_signal_connect(G_OBJECT(m_BiasFrameBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(table), m_BiasFrameBtn, 2, 3, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); row+=2; } } // Dark correction if (type==PROJECT_MASTER_FLAT || type==PROJECT_REDUCE || type==PROJECT_COMBINING || type==PROJECT_TEST) { m_DarkCorrBtn = gtk_check_button_new_with_label("Dark-frame correction"); gtk_widget_set_tooltip_text(m_DarkCorrBtn, "Apply the dark correction"); g_signal_connect(G_OBJECT(m_DarkCorrBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_DarkCorrBtn, 0, 3, row, row+1); m_DarkFrameEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_DarkFrameEdit, "Path to the dark frame"); gtk_table_attach(GTK_TABLE(table), m_DarkFrameEdit, 1, 2, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); m_DarkFrameBtn = gtk_button_new_with_label("Browse"); gtk_widget_set_tooltip_text(m_DarkFrameBtn, "Choose a dark frame in a separate dialog"); g_signal_connect(G_OBJECT(m_DarkFrameBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(table), m_DarkFrameBtn, 2, 3, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); row+=2; } // Flat correction if (type==PROJECT_REDUCE || type==PROJECT_COMBINING || type==PROJECT_TEST) { m_FlatCorrBtn = gtk_check_button_new_with_label("Flat-frame correction"); gtk_widget_set_tooltip_text(m_FlatCorrBtn, "Apply the flat correction"); g_signal_connect(G_OBJECT(m_FlatCorrBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_FlatCorrBtn, 0, 3, row, row+1); m_FlatFrameEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_FlatFrameEdit, "Path to the flat frame"); gtk_table_attach(GTK_TABLE(table), m_FlatFrameEdit, 1, 2, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); m_FlatFrameBtn = gtk_button_new_with_label("Browse"); gtk_widget_set_tooltip_text(m_FlatFrameBtn, "Choose a flat frame in a separate dialog"); g_signal_connect(G_OBJECT(m_FlatFrameBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(table), m_FlatFrameBtn, 2, 3, row+1, row+2, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); row+=2; } // Photometry if (type==PROJECT_REDUCE || type==PROJECT_COMBINING || type==PROJECT_TEST) { m_PhotometryBtn = gtk_check_button_new_with_label("Photometry"); gtk_widget_set_tooltip_text(m_PhotometryBtn, "Run photometry"); g_signal_connect(G_OBJECT(m_PhotometryBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_PhotometryBtn, 0, 3, row, row+1); row++; } // Matching if (type==PROJECT_REDUCE || type==PROJECT_COMBINING || type==PROJECT_TEST) { m_MatchingBtn = gtk_check_button_new_with_label("Matching"); gtk_widget_set_tooltip_text(m_MatchingBtn, "Run matching"); g_signal_connect(G_OBJECT(m_MatchingBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_MatchingBtn, 0, 3, row, row+1); m_RefBtn = gtk_radio_button_new_with_label(NULL, "using reference frame"); gtk_widget_set_tooltip_text(m_RefBtn, "Use one of the source frames as a reference frame"); g_signal_connect(G_OBJECT(m_RefBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_RefBtn, 1, 3, row+1, row+2); m_RefFrameCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(m_Frames)); gtk_widget_set_tooltip_text(m_RefFrameCombo, "A frame that shall be used as a reference frame"); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(m_RefFrameCombo), renderer, TRUE); gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(m_RefFrameCombo), renderer, "text", 1); gtk_table_attach(GTK_TABLE(table), m_RefFrameCombo, 1, 2, row+2, row+3, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); m_RefFrameBtn = gtk_button_new_with_label("Browse"); gtk_widget_set_tooltip_text(m_RefFrameBtn, "Choose a reference frame in a separate dialog"); g_signal_connect(G_OBJECT(m_RefFrameBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(table), m_RefFrameBtn, 2, 3, row+2, row+3, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(m_RefBtn)); m_CatBtn = gtk_radio_button_new_with_label(group, "using catalog file"); gtk_widget_set_tooltip_text(m_CatBtn, "Use a catalog file as a reference frame"); g_signal_connect(G_OBJECT(m_CatBtn), "toggled", G_CALLBACK(button_toggled), this); gtk_table_attach_defaults(GTK_TABLE(table), m_CatBtn, 1, 3, row+3, row+4); m_CatFrameEdit = gtk_entry_new(); gtk_widget_set_tooltip_text(m_CatFrameEdit, "Path to the catalog file that shall be used as a reference frame"); gtk_table_attach(GTK_TABLE(table), m_CatFrameEdit, 1, 2, row+4, row+5, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); m_CatFrameBtn = gtk_button_new_with_label("Browse"); gtk_widget_set_tooltip_text(m_CatFrameBtn, "Choose a catalog file in a separate dialog"); g_signal_connect(G_OBJECT(m_CatFrameBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach(GTK_TABLE(table), m_CatFrameBtn, 2, 3, row+4, row+5, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), GTK_FILL, 0, 0); row+=5; } gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CChartDlg::CChartDlg(GtkWindow *pParent):m_pParent(pParent), m_ChartData(NULL), m_ImageData(NULL) { GtkWidget *scrwnd, *tbox; GdkRectangle rc; m_DisplayMode = (tDisplayMode)g_Project->GetInt("ChartDlg", "Mode", DISPLAY_IMAGE, 0, DISPLAY_FULL); m_Negative = CConfig::GetBool(CConfig::NEGATIVE_CHARTS); m_RowsUpward = CConfig::GetBool(CConfig::ROWS_UPWARD); // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Chart", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, GTK_STOCK_SAVE, GTK_RESPONSE_NONE, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); gtk_dialog_set_tooltip_by_response(GTK_DIALOG(m_pDlg), GTK_RESPONSE_NONE, "Export the chart to a file"); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("muniwin"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Dialog size GdkScreen *scr = gtk_window_get_screen(pParent); int mon = gdk_screen_get_monitor_at_window(scr, GTK_WIDGET(pParent)->window); gdk_screen_get_monitor_geometry(scr, mon, &rc); if (rc.width>0 && rc.height>0) gtk_window_set_default_size(GTK_WINDOW(m_pDlg), RoundToInt(0.7*rc.width), RoundToInt(0.7*rc.height)); // Toolbar tbox = gtk_toolbar_new(); gtk_toolbar_set_style(GTK_TOOLBAR(tbox), GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(GTK_TOOLBAR(tbox), GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), tbox, FALSE, FALSE, 0); m_ViewLabel = toolbar_new_label(tbox, "View"); m_ShowImage = toolbar_new_radio_button(tbox, NULL, "Image", "Display an image only"); g_signal_connect(G_OBJECT(m_ShowImage), "toggled", G_CALLBACK(button_clicked), this); m_ShowChart = toolbar_new_radio_button(tbox, m_ShowImage, "Chart", "Display objects on a flat background"); g_signal_connect(G_OBJECT(m_ShowChart), "toggled", G_CALLBACK(button_clicked), this); m_ShowMixed = toolbar_new_radio_button(tbox, m_ShowImage, "Mixed", "Display objects over an image"); g_signal_connect(G_OBJECT(m_ShowMixed), "toggled", G_CALLBACK(button_clicked), this); toolbar_new_separator(tbox); toolbar_new_label(tbox, "Zoom"); m_ZoomFit = toolbar_new_button_from_stock(tbox, GTK_STOCK_ZOOM_FIT, "Fit the frame to the window"); g_signal_connect(G_OBJECT(m_ZoomFit), "clicked", G_CALLBACK(button_clicked), this); m_ZoomOut = toolbar_new_button_from_stock(tbox, GTK_STOCK_ZOOM_OUT, "Zoom out"); g_signal_connect(G_OBJECT(m_ZoomOut), "clicked", G_CALLBACK(button_clicked), this); m_ZoomIn = toolbar_new_button_from_stock(tbox, GTK_STOCK_ZOOM_IN, "Zoom in"); g_signal_connect(G_OBJECT(m_ZoomIn), "clicked", G_CALLBACK(button_clicked), this); // Chart m_Chart = cmpack_chart_view_new(); scrwnd = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwnd), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrwnd), GTK_SHADOW_ETCHED_IN); gtk_container_add(GTK_CONTAINER(scrwnd), m_Chart); gtk_widget_set_size_request(m_Chart, 300, 200); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(m_pDlg)->vbox), scrwnd, TRUE, TRUE, 0); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }
CAirMassDlg::CAirMassDlg(GtkWindow *pParent):m_Updating(false), m_JDValue(0), m_InvalidUTC(false) { GtkWidget *tbox, *label; // Dialog with buttons m_pDlg = gtk_dialog_new_with_buttons("Air mass coefficient", pParent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_dialog_widget_standard_tooltips(GTK_DIALOG(m_pDlg)); g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this); // Dialog icon gchar *icon = get_icon_file("airmass"); gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL)); g_free(icon); // Object coordinates tbox = gtk_table_new(8, 3, FALSE); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(m_pDlg)->vbox), tbox); gtk_container_set_border_width(GTK_CONTAINER(tbox), 8); gtk_table_set_row_spacings(GTK_TABLE(tbox), 4); gtk_table_set_row_spacing(GTK_TABLE(tbox), 1, 16); gtk_table_set_row_spacing(GTK_TABLE(tbox), 3, 16); gtk_table_set_row_spacing(GTK_TABLE(tbox), 5, 16); gtk_table_set_col_spacings(GTK_TABLE(tbox), 8); // Object coordinates label = gtk_label_new("Object - right ascension"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 0, 1); m_RA = gtk_entry_new_with_max_length(16); gtk_widget_set_tooltip_text(m_RA, "Object's right ascension in hours, minutes and seconds, e.g. 12 34 56"); g_signal_connect(G_OBJECT(m_RA), "changed", G_CALLBACK(entry_changed), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_RA, 1, 2, 0, 1); label = gtk_label_new("[h m s]"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 2, 3, 0, 1); m_ObjBtn = gtk_button_new_with_label("More"); gtk_widget_set_tooltip_text(m_ObjBtn, "Load object coordinates from presets or variable star catalogs"); g_signal_connect(G_OBJECT(m_ObjBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_ObjBtn, 3, 4, 0, 1); label = gtk_label_new("- declination"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 1, 2); m_Dec = gtk_entry_new_with_max_length(16); gtk_widget_set_tooltip_text(m_Dec, "Object's declination in degrees, minutes and seconds, e.g. -12 34 56"); g_signal_connect(G_OBJECT(m_Dec), "changed", G_CALLBACK(entry_changed), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_Dec, 1, 2, 1, 2); label = gtk_label_new("[\xC2\xB1""d m s]"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 2, 3, 1, 2); // Observer's coordinates label = gtk_label_new("Observer - longitude"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 2, 3); m_Lon = gtk_entry_new_with_max_length(16); gtk_widget_set_tooltip_text(m_Lon, "Observer's longitude in degrees, minutes and seconds, use E or W suffix to indicate hemisphere, e.g. 12 34 56 E"); g_signal_connect(G_OBJECT(m_Lon), "changed", G_CALLBACK(entry_changed), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_Lon, 1, 2, 2, 3); label = gtk_label_new("[d m s E/W]"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 2, 3, 2, 3); m_LocBtn = gtk_button_new_with_label("More"); gtk_widget_set_tooltip_text(m_LocBtn, "Load observer's coordinates from presets"); g_signal_connect(G_OBJECT(m_LocBtn), "clicked", G_CALLBACK(button_clicked), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_LocBtn, 3, 4, 2, 3); label = gtk_label_new("- latitude"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 3, 4); m_Lat = gtk_entry_new_with_max_length(16); gtk_widget_set_tooltip_text(m_Lat, "Observer's latitude in degrees, minutes and seconds, use N or S suffix to indicate hemisphere, e.g. 56 34 12 N"); g_signal_connect(G_OBJECT(m_Lat), "changed", G_CALLBACK(entry_changed), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_Lat, 1, 2, 3, 4); label = gtk_label_new("[d m s N/S]"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 2, 3, 3, 4); // Date and time of observation label = gtk_label_new("Date and time (UTC)"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 4, 5); m_UTC = gtk_entry_new_with_max_length(32); gtk_widget_set_tooltip_text(m_UTC, "Coordinated Universal Time or observation"); g_signal_connect(G_OBJECT(m_UTC), "changed", G_CALLBACK(entry_changed), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_UTC, 1, 2, 4, 5); label = gtk_label_new("[y-m-d h:m:s]"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 2, 3, 4, 5); label = gtk_label_new("Julian date"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 5, 6); m_JD = gtk_entry_new_with_max_length(32); gtk_widget_set_tooltip_text(m_JD, "Julian date and time or observation"); g_signal_connect(G_OBJECT(m_JD), "changed", G_CALLBACK(entry_changed), this); gtk_table_attach_defaults(GTK_TABLE(tbox), m_JD, 1, 2, 5, 6); label = gtk_label_new("[24xxxxx.xxx]"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 2, 3, 5, 6); // Output value label = gtk_label_new("Air mass coefficient"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 6, 7); m_AMass = gtk_entry_new(); gtk_widget_set_tooltip_text(m_AMass, "Air mass coefficient"); gtk_editable_set_editable(GTK_EDITABLE(m_AMass), false); gtk_table_attach_defaults(GTK_TABLE(tbox), m_AMass, 1, 2, 6, 7); gtk_widget_set_size_request(m_AMass, 200, -1); label = gtk_label_new("Altitude"); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(tbox), label, 0, 1, 7, 8); m_Alt = gtk_entry_new(); gtk_widget_set_tooltip_text(m_Alt, "Apparent altitude of the object in degrees"); gtk_editable_set_editable(GTK_EDITABLE(m_Alt), false); gtk_table_attach_defaults(GTK_TABLE(tbox), m_Alt, 1, 2, 7, 8); gtk_widget_show_all(GTK_DIALOG(m_pDlg)->vbox); }