static int load_project_file(GraceApp *gapp, const char *fn, int as_template) { GProject *gp; Quark *project, *gr, **graphs; int i, ngraphs; AMem *amem; if (gapp->gp && gproject_get_top(gapp->gp) && quark_dirtystate_get(gproject_get_top(gapp->gp)) && !yesno("Abandon unsaved changes?", NULL, NULL, NULL)) { return RETURN_FAILURE; } gproject_free(gapp->gp); gp = load_any_project(gapp, fn); if (!gp) { errmsg("Failed loading project file"); return RETURN_FAILURE; } project = gproject_get_top(gp); gapp->rt->print_file[0] = '\0'; gapp_set_project(gapp, gp); if (as_template) { grfile_free(gp->grf); gp->grf = NULL; } amem = quark_get_amem(project); /* Set undo limit of 16MB */ amem_set_undo_limit(amem, 0x1000000L); /* Get initial memory snapshot */ amem_snapshot(amem); /* try to switch to the first active graph */ ngraphs = project_get_graphs(project, &graphs); for (i = 0; i < ngraphs; i++) { gr = graphs[i]; if (select_graph(gr) == RETURN_SUCCESS) { break; } } xfree(graphs); #ifndef NONE_GUI select_quark_explorer(project); update_all(); #endif if (project) { return RETURN_SUCCESS; } else { return RETURN_FAILURE; } }
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 void popup_any_cb(ExplorerUI *eui, int type) { TreeItemList items; int count, i; Quark *qnew = NULL; Quark *q; GProject *gp; int gpcount = 0; GProject **gplist; TreeGetHighlighted(eui->tree, &items); count = items.count; if (!count) { xfree(items.items); return; } gplist = xmalloc(gapp->gpcount*sizeof(GProject)); if (!gplist) { return; } for (i = 0; i < count; i++) { q = TreeGetQuark(items.items[i]); gp = gproject_from_quark(q); add_to_list(gplist, &gpcount, gp); switch (type) { case HIDE_CB: quark_set_active(q, FALSE); break; case SHOW_CB: quark_set_active(q, TRUE); break; case DELETE_CB: quark_free(q); break; case DUPLICATE_CB: quark_copy(q); break; case ADD_FRAME_CB: qnew = frame_new(q); break; case ADD_GRAPH_CB: qnew = graph_new(q); break; case ADD_SSD_CB: qnew = gapp_ssd_new(q); break; case ADD_SET_CB: qnew = gapp_set_new(q); break; case ADD_AXISGRID_CB: qnew = axisgrid_new(q); break; case ADD_AXIS_CB: qnew = axis_new(q); break; case ADD_LINE_CB: qnew = object_new_complete(q, DO_LINE); break; case ADD_BOX_CB: qnew = object_new_complete(q, DO_BOX); break; case ADD_ARC_CB: qnew = object_new_complete(q, DO_ARC); break; case ADD_TEXT_CB: qnew = atext_new(q); break; } } xfree(items.items); for (i = 0; i < gpcount; i++) { explorer_snapshot(gapp, gplist[i], TRUE); } xfree(gplist); if (qnew) { select_quark_explorer(qnew); } }