void RevertCmd::Execute () { Editor* ed = GetEditor(); Component* comp = ed->GetComponent(); Catalog* catalog = unidraw->GetCatalog(); const char* name = catalog->GetName(comp); ModifStatusVar* mv = (ModifStatusVar*) ed->GetState("ModifStatusVar"); if (name != nil && (mv == nil || mv->GetModifStatus())) { char buf[CHARBUFSIZE]; strcpy(buf, name); ConfirmDialog dialog("Really revert to last version saved?"); ed->InsertDialog(&dialog); char confirmation = dialog.Confirm(); ed->RemoveDialog(&dialog); if (confirmation == 'y') { Component* orig = comp; catalog->Forget(orig); if (unidraw->GetCatalog()->Retrieve(buf, comp)) { ed->SetComponent(comp); unidraw->CloseDependents(orig); unidraw->Update(); CompNameVar* cv = (CompNameVar*) ed->GetState("CompNameVar"); if (cv != nil) cv->SetComponent(comp); if (mv != nil) mv->SetComponent(comp); Component* root = orig->GetRoot(); delete root; } else { ConfirmDialog dialog( "Couldn't revert! (File nonexistent?)", "Save changes?" ); ed->InsertDialog(&dialog); char confirmation = dialog.Confirm(); ed->RemoveDialog(&dialog); UpdateCompNameVars(); if (mv != nil) mv->Notify(); if (confirmation == 'y') { SaveCompAsCmd saveCompAs(ed); saveCompAs.Execute(); } } } } }
void CloseEditorCmd::Execute () { Editor* ed = GetEditor(); Iterator i; unidraw->First(i); unidraw->Next(i); if (!unidraw->Done(i)) { ModifStatusVar* mv = (ModifStatusVar*) ed->GetState("ModifStatusVar"); if (mv != nil && mv->GetModifStatus() && !FoundAnyExcept(ed)) { ConfirmDialog dialog("Save changes?"); ed->InsertDialog(&dialog); char resp = dialog.Confirm(); ed->RemoveDialog(&dialog); if (resp == '\007') { return; } else if (resp == 'y') { SaveCompCmd saveComp(ed); saveComp.Execute(); if (mv->GetModifStatus()) { return; // save dialog was aborted } } } unidraw->Close(ed); } }
void GridSpacingCmd::Execute () { float xincr, yincr; Editor* ed = GetEditor(); if (_dialog == nil) { _dialog = new GridDialog(); } ed->InsertDialog(_dialog); bool accepted = _dialog->Accept(); ed->RemoveDialog(_dialog); if (accepted) { _dialog->GetValues(xincr, yincr); if (xincr != 0.0 && yincr != 0.0) { Viewer* viewer; for (int i = 0; (viewer = ed->GetViewer(i)) != nil; ++i) { viewer->GetGrid()->SetSpacing(xincr, yincr); viewer->Draw(); } } } }
void AboutCmd::Execute () { Editor* ed = GetEditor(); AcknowledgeDialog dialog(VERSION); ed->InsertDialog(&dialog); dialog.Acknowledge(); ed->RemoveDialog(&dialog); }
void PreciseRotateCmd::Execute () { float angle = 0.0; Editor* ed = GetEditor(); if (_dialog == nil) { _dialog = new RotateDialog(); } ed->InsertDialog(_dialog); boolean accepted = _dialog->Accept(); ed->RemoveDialog(_dialog); if (accepted) { _dialog->GetValue(angle); if (angle != 0.0) { RotateCmd* rotateCmd = new RotateCmd(ed, angle); rotateCmd->Execute(); rotateCmd->Log(); } } }
void PreciseScaleCmd::Execute () { float x = 0.0, y = 0.0; Editor* ed = GetEditor(); if (_dialog == nil) { _dialog = new ScaleDialog(); } ed->InsertDialog(_dialog); boolean accepted = _dialog->Accept(); ed->RemoveDialog(_dialog); if (accepted) { _dialog->GetValues(x, y); if (x != 0.0 && y != 0.0) { ScaleCmd* scaleCmd = new ScaleCmd(ed, x, y); scaleCmd->Execute(); scaleCmd->Log(); } } }
void PreciseMoveCmd::Execute () { float dx = 0.0, dy = 0.0; Editor* ed = GetEditor(); if (_dialog == nil) { _dialog = new MoveDialog(); } ed->InsertDialog(_dialog); boolean accepted = _dialog->Accept(); ed->RemoveDialog(_dialog); if (accepted) { _dialog->GetValues(dx, dy); if (dx != 0.0 || dy != 0.0) { MoveCmd* moveCmd = new MoveCmd(ed, dx, dy); moveCmd->Execute(); moveCmd->Log(); } } }
void SaveCompAsCmd::Execute () { Editor* ed = GetEditor(); char buf[CHARBUFSIZE]; const char* domain = unidraw->GetCatalog()->GetAttribute("domain"); domain = (domain == nil) ? "component" : domain; sprintf(buf, "Save this %s as:", domain); boolean reset_caption = false; Style* style = new Style(Session::instance()->style()); style->attribute("subcaption", buf); style->attribute("open", "Save"); if (chooser_ == nil) { chooser_ = DialogKit::instance()->file_chooser(".", style); Resource::ref(chooser_); } while (chooser_->post_for(ed->GetWindow())) { const String* str = chooser_->selected(); NullTerminatedString ns(*str); const char* name = ns.string(); Catalog* catalog = unidraw->GetCatalog(); boolean ok = true; if (catalog->Exists(name) && catalog->Writable(name)) { char buf[CHARBUFSIZE]; sprintf(buf, "\"%s\" already exists.", name); ConfirmDialog dialog(buf, "Overwrite?"); ed->InsertDialog(&dialog); char confirmation = dialog.Confirm(); ed->RemoveDialog(&dialog); if (confirmation == 'n') { ok = false; } else if (confirmation != 'y') { break; } } if (ok) { CompNameVar* cnv = (CompNameVar*) ed->GetState("CompNameVar"); const char* oldname = (cnv == nil) ? nil : cnv->GetName(); Component* comp = ed->GetComponent(); if (catalog->Exists(name) && !catalog->Writable(name)) { style->attribute( "caption", "Couldn't save! (File not writable.)" ); } else { if (oldname == nil) { comp = comp->GetRoot(); } else { catalog->Retrieve(oldname, comp); catalog->Forget(comp); } StateVar* sv = ed->GetState("ModifStatusVar"); ModifStatusVar* mv = (ModifStatusVar*) sv; if (catalog->Save(comp, name)) { if (mv != nil) mv->SetModifStatus(false); unidraw->ClearHistory(comp); UpdateCompNameVars(); break; } else { if (mv != nil) mv->Notify(); UpdateCompNameVars(); style->attribute("caption", "Couldn't save!"); reset_caption = true; } } } } if (reset_caption) { style->attribute("caption", ""); } }