Example #1
0
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;
    }
}
Example #2
0
GProject *gproject_new(Quark *parent, const Grace *grace, int mmodel)
{
    GProject *gp = xmalloc(sizeof(GProject));
    if (gp) {
        memset(gp, 0, sizeof(GProject));
        gp->q = project_new(parent, grace->qfactory, mmodel);
        if (!gp->q) {
            gproject_free(gp);
            return NULL;
        }
    }
    
    return gp;
}
Example #3
0
void gapp_free(GraceApp *gapp)
{
    unsigned int i;

    if (!gapp) {
        return;
    }
    
    for (i = 0; i < gapp->gpcount; i++) {
        gproject_free(gapp->gplist[i]);
    }
    xfree(gapp->gplist);

    quark_free(gapp->pc);
    gui_free(gapp->gui);
    runtime_free(gapp->rt);
    grace_free(gapp->grace);
    
    xfree(gapp);
}
Example #4
0
int gapp_delete_gproject(GraceApp *gapp, GProject *gp)
{
    unsigned int i, j = 0;
    GProject **p;
    GProject *gpr;

    if (!gapp || !gp) {
        return RETURN_FAILURE;
    }

    p = xmalloc((gapp->gpcount - 1)*sizeof(GProject));
    if (!p) {
        return RETURN_FAILURE;
    }

    for (i = 0; i < gapp->gpcount; i++) {
        gpr = gapp->gplist[i];

        if (gpr != gp) {
            p[j] = gpr;
            j++;
        }
    }

    xfree(gapp->gplist);

    gapp->gplist = p;
    gapp->gpcount--;

    if (gapp->gp == gp) {
        gapp->gp = NULL;
    }

    gproject_free(gp);

    return RETURN_SUCCESS;
}