void RemoveLayout(struct layout *lay) { struct layout **layp = &layouts; for (; *layp; layp = &(*layp)->lay_next) { if (*layp == lay) { *layp = lay->lay_next; break; } } laytab[lay->lay_number] = (struct layout *)0; if (display && D_layout == lay) D_layout = (struct layout *)0; FreeLayoutCv(&lay->lay_canvas); if (lay->lay_title) free(lay->lay_title); free(lay); if (layouts) LoadLayout((display && D_layout) ? D_layout : *layp ? *layp : layouts); Activate(0); }
void AutosaveLayout(Layout *lay) { Canvas *fcv; if (!lay || !lay->lay_autosave) return; FreeLayoutCv(&lay->lay_canvas); fcv = D_forecv; DupLayoutCv(&D_canvas, &lay->lay_canvas, true); lay->lay_forecv = D_forecv; D_forecv = fcv; }
void FreeLayoutCv(Canvas *cv) { Canvas *cnext, *c = cv; for (; cv; cv = cnext) { if (cv->c_slperp) { FreeLayoutCv(cv->c_slperp); free(cv->c_slperp); cv->c_slperp = 0; } cnext = cv->c_slnext; cv->c_slnext = 0; if (cv != c) free(cv); } }
void SaveLayout(char *name, Canvas *cv) { Layout *lay; Canvas *fcv; for (lay = layouts; lay; lay = lay->lay_next) if (!strcmp(lay->lay_title, name)) break; if (lay) FreeLayoutCv(&lay->lay_canvas); else lay = CreateLayout(name, 0); if (!lay) return; fcv = D_forecv; DupLayoutCv(cv, &lay->lay_canvas, true); lay->lay_forecv = D_forecv; D_forecv = fcv; D_layout = lay; }