static void do_format_toggle(OptionStructure *opt, int value, void *data) { ProjectUI *ui = (ProjectUI *) data; int orientation; double px, py; int page_units; char buf[32]; if (value == PAGE_FORMAT_CUSTOM) { WidgetSetSensitive(ui->page_x->form, TRUE); WidgetSetSensitive(ui->page_y->form, TRUE); WidgetSetSensitive(ui->page_orient->menu, FALSE); return; } else { WidgetSetSensitive(ui->page_x->form, FALSE); WidgetSetSensitive(ui->page_y->form, FALSE); WidgetSetSensitive(ui->page_orient->menu, TRUE); } switch (value) { case PAGE_FORMAT_USLETTER: px = 612.0; py = 792.0; break; case PAGE_FORMAT_A4: px = 595.0; py = 842.0; break; default: return; } page_units = GetOptionChoice(ui->page_size_unit); orientation = GetOptionChoice(ui->page_orient); switch (page_units) { case PAGE_UNITS_IN: px /= 72.0; py /= 72.0; break; case PAGE_UNITS_CM: px /= 72.0/CM_PER_INCH; py /= 72.0/CM_PER_INCH; break; } if ((orientation == PAGE_ORIENT_LANDSCAPE && px > py) || (orientation == PAGE_ORIENT_PORTRAIT && px < py) ) { sprintf (buf, "%.2f", px); TextSetString(ui->page_x, buf); sprintf (buf, "%.2f", py); TextSetString(ui->page_y, buf); } else { sprintf (buf, "%.2f", py); TextSetString(ui->page_x, buf); sprintf (buf, "%.2f", px); TextSetString(ui->page_y, buf); } }
void raise_explorer(GUI *gui, Quark *q) { GraceApp *gapp = gui->P; set_wait_cursor(); if (!gui->eui) { ExplorerUI *eui; Widget menubar, menupane, panel, form, fr; eui = xmalloc(sizeof(ExplorerUI)); gui->eui = eui; eui->a_icon = XpmToPixmap(active_xpm); eui->h_icon = XpmToPixmap(hidden_xpm); eui->top = CreateDialog(app_shell, "Explorer"); menubar = CreateMenuBar(eui->top); WidgetManage(menubar); FormAddVChild(eui->top, menubar); menupane = CreateMenu(menubar, "File", 'F', FALSE); CreateMenuButtonA(menupane, "Close", 'C', "<Key>Escape", "Esc", destroy_dialog_cb, eui->top); menupane = CreateMenu(menubar, "Edit", 'E', FALSE); eui->edit_undo_bt = CreateMenuButtonA(menupane, "Undo", 'U', "Ctrl<Key>z", "Ctrl+Z", undo_cb, gapp); eui->edit_redo_bt = CreateMenuButtonA(menupane, "Redo", 'R', "Ctrl Shift<Key>z", "Ctrl+Shift+Z", redo_cb, gapp); menupane = CreateMenu(menubar, "Insert", 'I', FALSE); eui->insert_frame_bt = CreateMenuButton(menupane, "Frame", '\0', add_frame_cb, eui); WidgetSetSensitive(eui->insert_frame_bt, FALSE); eui->insert_graph_bt = CreateMenuButton(menupane, "Graph", '\0', add_graph_cb, eui); WidgetSetSensitive(eui->insert_graph_bt, FALSE); eui->insert_ssd_bt = CreateMenuButton(menupane, "SSData", '\0', add_ssd_cb, eui); WidgetSetSensitive(eui->insert_ssd_bt, FALSE); eui->insert_set_bt = CreateMenuButton(menupane, "Set", '\0', add_set_cb, eui); WidgetSetSensitive(eui->insert_set_bt, FALSE); eui->insert_axisgrid_bt = CreateMenuButton(menupane, "Axis grid", '\0', add_axisgrid_cb, eui); WidgetSetSensitive(eui->insert_axisgrid_bt, FALSE); eui->insert_axis_bt = CreateMenuButton(menupane, "Axis", '\0', add_axis_cb, eui); WidgetSetSensitive(eui->insert_axis_bt, FALSE); eui->insert_object_pane = CreateMenu(menupane, "Annotating objects", 'o', FALSE); WidgetSetSensitive(eui->insert_object_pane, FALSE); eui->insert_text_bt = CreateMenuButton(eui->insert_object_pane, "Text", '\0', add_object_cb, eui); eui->insert_line_bt = CreateMenuButton(eui->insert_object_pane, "Line", '\0', add_object_cb, eui); eui->insert_box_bt = CreateMenuButton(eui->insert_object_pane, "Box", '\0', add_object_cb, eui); eui->insert_arc_bt = CreateMenuButton(eui->insert_object_pane, "Arc", '\0', add_object_cb, eui); menupane = CreateMenu(menubar, "Options", 'O', FALSE); eui->instantupdate = CreateMenuToggle(menupane, "Instantaneous update", 'u', NULL, NULL); ToggleButtonSetState(eui->instantupdate, gui->instant_update); menupane = CreateMenu(menubar, "Help", 'H', TRUE); CreateMenuHelpButton(menupane, "On explorer", 'e', eui->top, "doc/UsersGuide.html#explorer"); panel = CreatePanedWindow(eui->top); form = CreateForm(panel); PlaceGridChild(panel, form, 0, 0); /* in case if CreatePanedWindow creates a grid */ eui->tree = CreateTree(form); AddTreeHighlightItemsCB(eui->tree, highlight_cb, eui); AddTreeContextMenuCB(eui->tree, menu_cb, eui); AddTreeDropItemsCB(eui->tree, drop_cb, eui); FormAddVChild(form, eui->tree); fr = CreateFrame(form, NULL); eui->idstr = CreateText(fr, "ID string:"); AddTextActivateCB(eui->idstr, text_explorer_cb, eui); FormAddVChild(form, fr); FormFixateVChild(fr); eui->scrolled_window = CreateScrolledWindow(panel); PlaceGridChild(panel, eui->scrolled_window, 1, 0); /* in case if CreatePanedWindow creates a grid */ PanedWindowSetMinWidth(form, 150); WidgetSetWidth(form, 250); WidgetManage(form); #ifdef HAVE_LESSTIF # if !defined(SF_BUG_993209_FIXED) && !defined(SF_BUG_993209_NOT_FIXED) # error "You should check whether SF bug #993209 is fixed in your version of LessTif." # error "Then define either SF_BUG_993209_FIXED or SF_BUG_993209_NOT_FIXED, accordingly." # error "See http://sourceforge.net/tracker/index.php?func=detail&aid=993209&group_id=8596&atid=108596." # endif # ifdef SF_BUG_993209_NOT_FIXED /* A dirty workaround */ eui->scrolled_window = CreateVContainer(eui->scrolled_window); # endif #endif eui->project_ui = create_project_ui(eui); WidgetUnmanage(eui->project_ui->top); eui->ssd_ui = create_ssd_ui(eui); WidgetUnmanage(eui->ssd_ui->top); eui->frame_ui = create_frame_ui(eui); WidgetUnmanage(eui->frame_ui->top); eui->graph_ui = create_graph_ui(eui); WidgetUnmanage(eui->graph_ui->top); eui->set_ui = create_set_ui(eui); WidgetUnmanage(eui->set_ui->top); eui->axisgrid_ui = create_axisgrid_ui(eui); WidgetUnmanage(eui->axisgrid_ui->top); eui->axis_ui = create_axis_ui(eui); WidgetUnmanage(eui->axis_ui->top); eui->object_ui = create_object_ui(eui); WidgetUnmanage(eui->object_ui->top); eui->atext_ui = create_atext_ui(eui); WidgetUnmanage(eui->atext_ui->top); eui->region_ui = create_region_ui(eui); WidgetUnmanage(eui->region_ui->top); eui->aacbuts = CreateAACDialog(eui->top, panel, explorer_aac, eui); WidgetManage(eui->tree); /* Menu popup */ eui->popup = CreatePopupMenu(eui->tree); eui->popup_hide_bt = CreateMenuButton(eui->popup, "Hide", '\0', hide_cb, eui); eui->popup_show_bt = CreateMenuButton(eui->popup, "Show", '\0', show_cb, eui); CreateMenuSeparator(eui->popup); eui->popup_delete_bt = CreateMenuButton(eui->popup, "Delete", '\0', delete_cb, eui); eui->popup_duplicate_bt = CreateMenuButton(eui->popup, "Duplicate", '\0', duplicate_cb, eui); /* Project menu popup */ eui->project_popup = CreatePopupMenu(eui->tree); eui->project_popup_show_bt = CreateMenuButton(eui->project_popup, "Show", '\0', project_show_cb, eui); CreateMenuSeparator(eui->project_popup); eui->project_popup_save_bt = CreateMenuButton(eui->project_popup, "Save", '\0', project_save_cb, eui); eui->project_popup_save_as_bt = CreateMenuButton(eui->project_popup, "Save as...", '\0', project_save_as_cb, eui); eui->project_popup_revert_to_saved_bt = CreateMenuButton(eui->project_popup, "Revert to saved", '\0', project_revert_to_saved_cb, eui); CreateMenuSeparator(eui->project_popup); eui->project_popup_close_bt = CreateMenuButton(eui->project_popup, "Close", '\0', project_close_cb, eui); init_quark_tree(eui); if (!q && gapp->gp) { select_quark_explorer(gproject_get_top(gapp->gp)); } } #ifdef QT_GUI /* TODO: use resources */ WidgetSetSize(gui->eui->top, 650, 600); #endif DialogRaise(gui->eui->top); if (q) { select_quark_explorer(q); } update_undo_buttons(gapp->gp); unset_wait_cursor(); }
static int highlight_cb(TreeEvent *event) { ExplorerUI *ui = (ExplorerUI *) event->anydata; TreeItemList items; int count; Quark *q = NULL; int fid = -1; int parent_fid = -1; int homogeneous_selection = TRUE; TreeGetHighlighted(event->w, &items); count = items.count; ui->homogeneous_parent = TRUE; if (count > 0) { int i; q = TreeGetQuark(items.items[0]); fid = quark_fid_get(q); parent_fid = quark_fid_get(quark_parent_get(q)); for (i = 1; i < count; i++) { Quark *iq = TreeGetQuark(items.items[i]); if ((int) quark_fid_get(iq) != fid) { homogeneous_selection = FALSE; } if ((int) quark_fid_get(quark_parent_get(iq)) != parent_fid) { ui->homogeneous_parent = FALSE; } } } xfree(items.items); if (!count || !homogeneous_selection) { WidgetSetSensitive(ui->aacbuts[0], FALSE); WidgetSetSensitive(ui->aacbuts[1], FALSE); manage_plugin(ui, NULL); } else { Widget managed_top; WidgetSetSensitive(ui->aacbuts[0], TRUE); WidgetSetSensitive(ui->aacbuts[1], TRUE); switch (fid) { case QFlavorProject: update_project_ui(ui->project_ui, q); managed_top = ui->project_ui->top; break; case QFlavorSSD: update_ssd_ui(ui->ssd_ui, q); managed_top = ui->ssd_ui->top; break; case QFlavorFrame: update_frame_ui(ui->frame_ui, q); managed_top = ui->frame_ui->top; break; case QFlavorGraph: update_graph_ui(ui->graph_ui, q); managed_top = ui->graph_ui->top; break; case QFlavorSet: update_set_ui(ui->set_ui, q); managed_top = ui->set_ui->top; break; case QFlavorAGrid: update_axisgrid_ui(ui->axisgrid_ui, q); managed_top = ui->axisgrid_ui->top; break; case QFlavorAxis: update_axis_ui(ui->axis_ui, q); managed_top = ui->axis_ui->top; break; case QFlavorDObject: update_object_ui(ui->object_ui, q); managed_top = ui->object_ui->top; break; case QFlavorAText: update_atext_ui(ui->atext_ui, q); managed_top = ui->atext_ui->top; break; case QFlavorRegion: update_region_ui(ui->region_ui, q); managed_top = ui->region_ui->top; break; default: managed_top = NULL; break; } manage_plugin(ui, managed_top); } WidgetSetSensitive(ui->insert_frame_bt, FALSE); WidgetSetSensitive(ui->insert_graph_bt, FALSE); WidgetSetSensitive(ui->insert_set_bt, FALSE); WidgetSetSensitive(ui->insert_ssd_bt, FALSE); WidgetSetSensitive(ui->insert_axisgrid_bt, FALSE); WidgetSetSensitive(ui->insert_axis_bt, FALSE); WidgetSetSensitive(ui->insert_object_pane, FALSE); if (count == 1) { WidgetSetSensitive(ui->idstr->form, TRUE); TextSetString(ui->idstr, QIDSTR(q)); switch (fid) { case QFlavorProject: WidgetSetSensitive(ui->insert_frame_bt, TRUE); WidgetSetSensitive(ui->insert_object_pane, TRUE); break; case QFlavorFrame: WidgetSetSensitive(ui->insert_graph_bt, TRUE); WidgetSetSensitive(ui->insert_object_pane, TRUE); break; case QFlavorGraph: WidgetSetSensitive(ui->insert_ssd_bt, TRUE); WidgetSetSensitive(ui->insert_axisgrid_bt, TRUE); WidgetSetSensitive(ui->insert_object_pane, TRUE); break; case QFlavorAGrid: WidgetSetSensitive(ui->insert_axis_bt, TRUE); break; case QFlavorAxis: WidgetSetSensitive(ui->insert_object_pane, TRUE); break; } if (get_parent_ssd(q) && (fid == QFlavorGraph || fid == QFlavorSSD)) { WidgetSetSensitive(ui->insert_set_bt, TRUE); } } else { WidgetSetSensitive(ui->idstr->form, FALSE); TextSetString(ui->idstr, NULL); } return TRUE; }
static int menu_cb(TreeEvent *event) { ExplorerUI *ui = (ExplorerUI *) event->anydata; TreeItemList items; int count; Quark *q = NULL; Quark *p = NULL; int parent_child_selection = FALSE; int all_shown = TRUE; int all_hidden = TRUE; TreeGetHighlighted(event->w, &items); count = items.count; if (count > 0) { int i, j; q = TreeGetQuark(items.items[0]); for (i = 0; i < count; i++) { Quark *iq = TreeGetQuark(items.items[i]); p = quark_parent_get(iq); while (p) { for (j = 0; j < count; j++) { if (TreeGetQuark(items.items[j]) == p) { parent_child_selection = TRUE; } } p = quark_parent_get(p); } if (quark_is_active(iq)) { all_hidden = FALSE; } else { all_shown = FALSE; } } if (count == 1 && quark_fid_get(q) == QFlavorProject) { WidgetSetSensitive(ui->project_popup_show_bt, FALSE); WidgetSetSensitive(ui->project_popup_save_bt, FALSE); WidgetSetSensitive(ui->project_popup_save_as_bt, FALSE); WidgetSetSensitive(ui->project_popup_revert_to_saved_bt, FALSE); WidgetSetSensitive(ui->project_popup_close_bt, FALSE); if (quark_is_active(q)) { WidgetSetSensitive(ui->project_popup_show_bt, FALSE); } else { WidgetSetSensitive(ui->project_popup_show_bt, TRUE); } WidgetSetSensitive(ui->project_popup_save_bt, TRUE); WidgetSetSensitive(ui->project_popup_save_as_bt, TRUE); WidgetSetSensitive(ui->project_popup_revert_to_saved_bt, TRUE); if (gapp->gpcount > 1) { WidgetSetSensitive(ui->project_popup_close_bt, TRUE); } else { WidgetSetSensitive(ui->project_popup_close_bt, FALSE); } PopupMenuShow(ui->project_popup, event->udata); } else { WidgetSetSensitive(ui->popup_hide_bt, !all_hidden); WidgetSetSensitive(ui->popup_show_bt, !all_shown); if (parent_child_selection) { WidgetSetSensitive(ui->popup_delete_bt, FALSE); WidgetSetSensitive(ui->popup_duplicate_bt, FALSE); } else { WidgetSetSensitive(ui->popup_delete_bt, TRUE); WidgetSetSensitive(ui->popup_duplicate_bt, TRUE); } PopupMenuShow(ui->popup, event->udata); } } xfree(items.items); return TRUE; }
static void wrap_year_cb(Widget but, int onoff, void *data) { Widget wrap_year = (Widget) data; WidgetSetSensitive(wrap_year, onoff); }
void update_project_ui(ProjectUI *ui, Quark *q) { Project *pr = project_get_data(q); if (pr) { int y, m, d, h, mm, sec; char date_string[64], wrap_year_string[64], buf[32]; double factor; int format; SetSpinChoice(ui->prec, project_get_prec(q)); TextSetString(ui->description, project_get_description(q)); switch (GetOptionChoice(ui->page_size_unit)) { case PAGE_UNITS_IN: factor = 1.0/72.0; break; case PAGE_UNITS_CM: factor = CM_PER_INCH/72.0; break; default: factor = 1.0; } sprintf (buf, "%.2f", factor*pr->page_wpp); TextSetString(ui->page_x, buf); sprintf (buf, "%.2f", factor*pr->page_hpp); TextSetString(ui->page_y, buf); if ((pr->page_wpp == 612 && pr->page_hpp == 792) || (pr->page_hpp == 612 && pr->page_wpp == 792)) { format = PAGE_FORMAT_USLETTER; } else if ((pr->page_wpp == 595 && pr->page_hpp == 842) || (pr->page_hpp == 595 && pr->page_wpp == 842)) { format = PAGE_FORMAT_A4; } else { format = PAGE_FORMAT_CUSTOM; } if (format == PAGE_FORMAT_CUSTOM) { WidgetSetSensitive(ui->page_x->form, TRUE); WidgetSetSensitive(ui->page_y->form, TRUE); WidgetSetSensitive(ui->page_orient->menu, FALSE); } else { WidgetSetSensitive(ui->page_x->form, FALSE); WidgetSetSensitive(ui->page_y->form, FALSE); WidgetSetSensitive(ui->page_orient->menu, TRUE); } SetOptionChoice(ui->page_format, format); if (pr->page_wpp > pr->page_hpp) { SetOptionChoice(ui->page_orient, PAGE_ORIENT_LANDSCAPE); } else { SetOptionChoice(ui->page_orient, PAGE_ORIENT_PORTRAIT); } SetOptionChoice(ui->bg_color, pr->bgcolor); SetToggleButtonState(ui->bg_fill, pr->bgfill); SetSpinChoice(ui->fsize_scale, pr->fscale); SetSpinChoice(ui->lwidth_scale, pr->lscale); jdate_to_datetime(q, 0.0, ROUND_SECOND, &y, &m, &d, &h, &mm, &sec); sprintf(date_string, "%d-%02d-%02d %02d:%02d:%02d", y, m, d, h, mm, sec); TextSetString(ui->refdate, date_string); SetToggleButtonState(ui->two_digits_years, pr->two_digits_years); sprintf(wrap_year_string, "%04d", pr->wrap_year); TextSetString(ui->wrap_year, wrap_year_string); WidgetSetSensitive(ui->wrap_year->form, pr->two_digits_years ? TRUE:FALSE); } }
void create_fonttool(TextStructure *cstext_parent) { static fonttool_ui *ui = NULL; if (ui == NULL) { ui = xmalloc(sizeof(fonttool_ui)); memset(ui, 0, sizeof(fonttool_ui)); ui->fonttool_panel = CreateDialog(app_shell, "Font tool"); ui->font_select = CreateFontChoice(ui->fonttool_panel, "Font:"); FormAddVChild(ui->fonttool_panel, ui->font_select->menu); ui->font_table = CreateTable("fontTable", ui->fonttool_panel, FONT_TOOL_ROWS, FONT_TOOL_COLS, 8, 16); TableFontInit(ui->font_table); TableSetDefaultColWidth(ui->font_table, 2); TableSetDefaultColAlignment(ui->font_table, ALIGN_BEGINNING); TableUpdateVisibleRowsCols(ui->font_table); AddTableDrawCellCB(ui->font_table, DrawCB, ui); AddTableEnterCellCB(ui->font_table, EnterCB, ui); AddOptionChoiceCB(ui->font_select, update_fonttool_cb, ui); FormAddVChild(ui->fonttool_panel, ui->font_table); ui->cstext = CreateCSText(ui->fonttool_panel, "CString:"); AddTextValidateCB(ui->cstext, EditStringCB, ui); ui->aac_buts = CreateAACDialog(ui->fonttool_panel, ui->cstext->form, fonttool_aac_cb, ui); FormFixateVChild(ui->cstext->form); update_fonttool_cb(NULL, 0, ui); } if (cstext_parent == ui->cstext) { /* avoid recursion */ return; } ui->cstext_parent = cstext_parent; if (ui->cstext_parent == NULL) { TextSetString(ui->cstext, ""); WidgetSetSensitive(ui->aac_buts[0], FALSE); WidgetSetSensitive(ui->aac_buts[1], FALSE); } else { char *s = TextGetString(ui->cstext_parent); int pos = TextGetCursorPos(ui->cstext_parent); TextSetString(ui->cstext, s); TextSetCursorPos(ui->cstext, pos); xfree(s); WidgetSetSensitive(ui->aac_buts[0], TRUE); WidgetSetSensitive(ui->aac_buts[1], TRUE); } DialogRaise(ui->fonttool_panel); }