|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T i
Length: 20141 (0x4ead) Types: TextFile Names: »ibeditor.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00« └─⟦de8ce1454⟧ └─⟦this⟧ »contrib/lib/iv/src/bin/ibuild/ibeditor.c«
/* * Copyright (c) 1991 Stanford University * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * Implementation of EditorComp * $Header: /master/3.0/iv/src/bin/ibuild/RCS/ibeditor.c,v 1.2 91/09/27 14:08:11 tang Exp $ */ #include "ibclasses.h" #include "ibbutton.h" #include "ibcmds.h" #include "ibdialogs.h" #include "ibed.h" #include "ibgraphic.h" #include "ibeditor.h" #include "ibpanelctrl.h" #include "ibvars.h" #include "ibvarviews.h" #include <Unidraw/catalog.h> #include <Unidraw/clipboard.h> #include <Unidraw/editor.h> #include <Unidraw/iterator.h> #include <Unidraw/manips.h> #include <Unidraw/selection.h> #include <Unidraw/viewer.h> #include <Unidraw/unidraw.h> #include <Unidraw/ulist.h> #include <stream.h> #include <string.h> /*****************************************************************************/ EditorComp::EditorComp (IBGraphic* gr) : MonoSceneClass(gr) { _viewerVar = nil; _curCtrlVar = nil; _keymap = nil; _selection = nil; _compname = nil; if (gr != nil) { SubclassNameVar* subclass = GetClassNameVar(); subclass->SetName("Editor"); subclass->SetBaseClass("Editor"); subclass->SetMachGen(true); subclass->GenNewName(); subclass->SetAbstract(true); } } EditorComp::~EditorComp () { delete _viewerVar; delete _curCtrlVar; delete _keymap; delete _selection; delete _compname; } ClassId EditorComp::GetClassId () { return EDITOR_COMP; } boolean EditorComp::IsA (ClassId id) { return EDITOR_COMP == id || MonoSceneClass::IsA(id); } void EditorComp::Instantiate () { MonoSceneClass::Instantiate(); if (_viewerVar == nil) { _viewerVar = new MemberNameVar("", false, false); } if (_keymap == nil) { _keymap = new MemberNameVar("keymap"); _keymap->GenNewName(); } if (_selection == nil) { _selection = new MemberNameVar("selection"); _selection->GenNewName(); } if (_compname == nil) { _compname = new MemberNameVar("grcomp"); _compname->GenNewName(); } if (_curCtrlVar == nil) { _curCtrlVar = new ButtonStateVar("curCtrl"); _curCtrlVar->GenNewName(); _curCtrlVar->HideSetting(); } } void EditorComp::Interpret (Command* cmd) { if (cmd->IsA(GETCONFLICT_CMD)) { GetConflictCmd* gcmd = (GetConflictCmd*) cmd; if (gcmd->IsGlobal()) { GetExtraConflict(gcmd); MonoSceneComp::Interpret(cmd); } else if (!gcmd->GetScope()) { gcmd->SetScope(true); GetExtraConflict(gcmd); MonoSceneComp::Interpret(cmd); } } else { MonoSceneClass::Interpret(cmd); } } void EditorComp::GetExtraConflict(GetConflictCmd* gcmd) { const char* cname = gcmd->GetCName(); UList* conflictlist = gcmd->GetConflict(); const char* curCtrl = _curCtrlVar->GetName(); const char* key = _keymap->GetName(); const char* select = _selection->GetName(); const char* comp = _compname->GetName(); if (strcmp(curCtrl, cname) == 0) { conflictlist->Append(new UList(_curCtrlVar->GetButtonSharedName())); } if (strcmp(key, cname) == 0) { conflictlist->Append(new UList(_keymap)); } if (strcmp(select, cname) == 0) { conflictlist->Append(new UList(_selection)); } if (strcmp(comp, cname) == 0) { conflictlist->Append(new UList(_compname)); } } void EditorComp::SetState(const char* name, StateVar* stateVar) { if ( strcmp(name, "ViewerVar") == 0 || strcmp(name, "RelatedVar") == 0 ) { MemberNameVar* memberVar = (MemberNameVar*) stateVar; *_viewerVar = *memberVar; } else if (strcmp(name, "Keymap") == 0) { _keymap = (MemberNameVar*) stateVar; } else if (strcmp(name, "Selection") == 0) { _selection = (MemberNameVar*) stateVar; } else if (strcmp(name, "CompName") == 0) { _compname = (MemberNameVar*) stateVar; } else if (strcmp(name, "CurCtrlVar") == 0) { _curCtrlVar = (ButtonStateVar*) stateVar; } else { MonoSceneClass::SetState(name, stateVar); } } StateVar* EditorComp::GetState (const char* name) { StateVar* stateVar = nil; if (strcmp(name, "ViewerVar") == 0) { stateVar = _viewerVar; } else if (strcmp(name, "Keymap") == 0) { stateVar = _keymap; } else if (strcmp(name, "Selection") == 0) { stateVar = _selection; } else if (strcmp(name, "CompName") == 0) { stateVar = _compname; } else if (strcmp(name, "CurCtrlVar") == 0) { stateVar = _curCtrlVar; } else { stateVar = MonoSceneClass::GetState(name); } return stateVar; } InteractorComp& EditorComp::operator = (InteractorComp& comp) { if (comp.IsA(IBVIEWER_COMP)) { MemberNameVar* viewerVar = comp.GetMemberNameVar(); *_viewerVar = *comp.GetMemberNameVar(); comp.SetState("EditorVar", GetMemberNameVar()); } else if (comp.IsA(EDITOR_COMP)) { EditorComp* edcomp = (EditorComp*) ∁ MemberNameVar* viewerVar = edcomp->GetViewerVar(); ButtonStateVar* curCtrlVar = edcomp->GetButtonStateVar(); MemberNameVar* keymap = edcomp->GetKeyMap(); MemberNameVar* selection = edcomp->GetSelection(); MemberNameVar* compname = edcomp->GetCompName(); *_viewerVar = *viewerVar; *_curCtrlVar = *curCtrlVar; *_keymap = *keymap; *_selection = *selection; *_compname = *compname; } else if (comp.IsA(PANELCONTROL_COMP)) { ButtonStateVar* curCtrlVar = comp.GetButtonStateVar(); *_curCtrlVar = *curCtrlVar; comp.SetState("EditorVar", GetMemberNameVar()); } return *this; } boolean EditorComp::IsRelatableTo (InteractorComp* comp) { boolean ok = false; if ( comp->IsA(IBVIEWER_COMP) || comp->IsA(EDITOR_COMP) || comp->IsA(PANELCONTROL_COMP) || comp->IsA(COMMANDCONTROL_COMP) ) { ok = true; } return ok; } void EditorComp::Read (istream& in) { Catalog* catalog = unidraw->GetCatalog(); delete _curCtrlVar; delete _keymap; delete _selection; delete _compname; delete _viewerVar; _viewerVar = (MemberNameVar*) catalog->ReadStateVar(in); _keymap = (MemberNameVar*) catalog->ReadStateVar(in); _selection = (MemberNameVar*) catalog->ReadStateVar(in); _compname = (MemberNameVar*) catalog->ReadStateVar(in); _curCtrlVar = (ButtonStateVar*) catalog->ReadStateVar(in); MonoSceneClass::Read(in); } void EditorComp::Write (ostream& out) { Catalog* catalog = unidraw->GetCatalog(); catalog->WriteStateVar(_viewerVar, out); catalog->WriteStateVar(_keymap, out); catalog->WriteStateVar(_selection, out); catalog->WriteStateVar(_compname, out); catalog->WriteStateVar(_curCtrlVar, out); MonoSceneClass::Write(out); } /*****************************************************************************/ EditorView::EditorView (EditorComp* subj) : MonoSceneClassView(subj) { } EditorComp* EditorView::GetEditorComp () { return (EditorComp*) GetSubject(); } ClassId EditorView::GetClassId () { return EDITOR_VIEW; } boolean EditorView::IsA (ClassId id) { return EDITOR_VIEW == id || MonoSceneClassView::IsA(id); } InfoDialog* EditorView::GetInfoDialog () { IBEditor* ibed = (IBEditor*) GetViewer()->GetEditor(); InfoDialog* info = MonoSceneClassView::GetInfoDialog(); ButtonState* state = info->GetState(); EditorComp* edcomp = GetEditorComp(); MemberNameVar* viewerVar = edcomp->GetViewerVar(); ButtonStateVar* curCtrlVar = edcomp->GetButtonStateVar(); MemberNameVar* keymap = edcomp->GetKeyMap(); MemberNameVar* selection = edcomp->GetSelection(); MemberNameVar* compname = edcomp->GetCompName(); info->Include(new RelatedVarView( viewerVar, state, edcomp, "Viewer Name: ") ); info->Include(new MemberNameVarView( keymap, state, edcomp, "KeyMap: ") ); info->Include(new MemberNameVarView( selection, state, edcomp, "Selection: ") ); info->Include(new MemberNameVarView( compname, state, edcomp, "GraphicComp: ") ); info->Include(new CtrlStateVarView(curCtrlVar, state, edcomp, ibed)); return info; } /*****************************************************************************/ EditorCode::EditorCode (EditorComp* subj) : MonoSceneClassCode(subj) { } EditorComp* EditorCode::GetEditorComp() { return (EditorComp*) GetSubject(); } ClassId EditorCode::GetClassId () { return EDITOR_CODE; } boolean EditorCode::IsA(ClassId id) { return EDITOR_CODE == id || MonoSceneClassCode::IsA(id); } boolean EditorCode::Definition (ostream& out) { char coreclass[CHARBUFSIZE]; boolean ok = true; EditorComp* edcomp = GetEditorComp(); SubclassNameVar* snamer = edcomp->GetClassNameVar(); MemberNameVar* mnamer = edcomp->GetMemberNameVar(); const char* subclass = snamer->GetName(); const char* baseclass = snamer->GetBaseClass(); const char* mname = mnamer->GetName(); MemberNameVar* viewerVar = edcomp->GetViewerVar(); const char* vname = viewerVar->GetName(); GetCoreClassName(coreclass); CodeView* kidview = GetKidView(); MemberNameVar* kidname = kidview->GetIntComp()->GetMemberNameVar(); InteractorComp* dummy; if (*vname == '\0') { strcat(_errbuf, mname); strcat(_errbuf, " has undefined Viewer.\n"); return false; } else if (!Search(viewerVar, dummy)) { strcat(_errbuf, mname); strcat( _errbuf, "'s Viewer is not in the same hierachy.\n" ); return false; } if (_emitForward) { if (strcmp(subclass, _classname) == 0) { if (!_namelist->Search("GraphicComp")) { _namelist->Append("GraphicComp"); out << "class GraphicComp;\n"; } if (!_namelist->Search("ControlState")) { _namelist->Append("ControlState"); out << "class ControlState;\n"; } } ok = ok && MonoSceneClassCode::Definition(out); } else if (_emitBSDecls || _emitBSInits) { if (strcmp(subclass, _classname) == 0) { ButtonStateVar* ctrlvar = edcomp->GetButtonStateVar(); const char* ctrl = ctrlvar->GetName(); if (!_bsdeclslist->Search(ctrl)) { _bsdeclslist->Append(ctrl); } if (!_bsinitslist->Search(ctrl)) { _bsinitslist->Append(ctrl); } ok = ok && Iterate(out); } } else if (_emitExpHeader) { if (strcmp(subclass, _classname) == 0) { if (!_namelist->Search("editor")) { _namelist->Append("editor"); out << "#include <Unidraw/editor.h>\n"; out << "#include <Unidraw/keymap.h>\n"; out << "#include <Unidraw/Components/grcomp.h>\n"; out << "#include <Unidraw/uctrl.h>\n"; out << "#include <Unidraw/selection.h>\n"; out << "#include <Unidraw/Tools/tool.h>\n"; } if (!_namelist->Search("control")) { _namelist->Append("control"); out << "#include <InterViews/control.h>\n"; } } ok = ok && CodeView::Definition(out); } else if (_emitCorehHeader) { if (strcmp(subclass, _classname) == 0) { if (!_namelist->Search("editor")) { _namelist->Append("editor"); out << "#include <Unidraw/editor.h>\n"; } } else { ok = ok && kidview->Definition(out); } } else { ok = ok && MonoSceneClassCode::Definition(out); } return ok && out.good(); } boolean EditorCode::CoreConstDecls(ostream& out) { boolean ok = true; EditorComp* edcomp = GetEditorComp(); MemberNameVar* compname = edcomp->GetCompName(); MemberNameVar* selection = edcomp->GetSelection(); MemberNameVar* keymap = edcomp->GetKeyMap(); MemberNameVar* vnamer = edcomp->GetViewerVar(); ButtonStateVar* ctrlvar = edcomp->GetButtonStateVar(); const char* ctrl = ctrlvar->GetName(); const char* comp = compname->GetName(); const char* select = selection->GetName(); const char* key = keymap->GetName(); const char* vname = vnamer->GetName(); CodeView* kidview = GetKidView(); out << "(const char*);\n"; out << " virtual Component* GetComponent();\n"; out << " virtual Viewer* GetViewer(int = 0);\n"; out << " virtual KeyMap* GetKeyMap();\n"; out << " virtual Tool* GetCurTool();\n"; out << " virtual Selection* GetSelection();\n\n"; out << " virtual void SetComponent(Component*);\n"; out << " virtual void SetViewer(Viewer*, int = 0);\n"; out << " virtual void SetKeyMap(KeyMap*);\n"; out << " virtual void SetSelection(Selection*);\n\n"; ok = ok && EmitFunctionDecls(kidview, out); out << "protected:\n"; out << " Interactor* Interior();\n"; out << "protected:\n"; if (compname->GetExport()) { out << " GraphicComp* " << comp << ";\n"; } if (selection->GetExport()) { out << " Selection* " << select << ";\n"; } if (keymap->GetExport()) { out << " KeyMap* " << key << ";\n"; } if (ctrlvar->GetExport()) { out << " ControlState* " << ctrl << ";\n"; } _emitExport = true; ok = ok && EmitBSDecls(this, out); ok = ok && EmitInstanceDecls(kidview, out); _emitExport = false; out << "private:\n"; if (!compname->GetExport()) { out << " GraphicComp* " << comp << ";\n"; } if (!selection->GetExport()) { out << " Selection* " << select << ";\n"; } if (!keymap->GetExport()) { out << " KeyMap* " << key << ";\n"; } if (!ctrlvar->GetExport()) { out << " ControlState* " << ctrl << ";\n"; } if (!vnamer->GetExport()) { out << " Viewer* " << vname << ";\n"; } return out.good(); } boolean EditorCode::CoreConstInits(ostream& out) { boolean ok = true; EditorComp* edcomp = GetEditorComp(); SubclassNameVar* snamer = edcomp->GetClassNameVar(); MemberNameVar* mnamer = edcomp->GetMemberNameVar(); MemberNameVar* compname = edcomp->GetCompName(); MemberNameVar* selection = edcomp->GetSelection(); MemberNameVar* keymap = edcomp->GetKeyMap(); ButtonStateVar* ctrlvar = edcomp->GetButtonStateVar(); const char* subclass = snamer->GetName(); const char* baseclass = snamer->GetBaseClass(); const char* mname = mnamer->GetName(); const char* ctrl = ctrlvar->GetName(); const char* comp = compname->GetName(); const char* select = selection->GetName(); const char* key = keymap->GetName(); MemberNameVar* viewerVar = edcomp->GetViewerVar(); const char* vname = viewerVar->GetName(); CodeView* kidview = GetKidView(); MemberNameVar* kidname = kidview->GetIntComp()->GetMemberNameVar(); char coreclass[CHARBUFSIZE]; GetCoreClassName(coreclass); out << "(const char* name) {\n"; out << " ManagedWindow* window = new ApplicationWindow(this);\n"; out << " window->name(name);\n"; out << " window->icon_name(name);\n"; out << " SetWindow(window);\n"; out << " SetInstance(name);\n"; out << " perspective = new Perspective;\n"; out << " " << comp << " = new GraphicComps;\n"; out << " " << ctrl << " = new ControlState;\n"; out << " " << select << " = new Selection;\n"; out << " " << key << " = new KeyMap;\n"; out << " Insert(Interior());\n"; out << " Propagate(false);\n"; out << " " << key << "->Execute(CODE_SELECT);\n"; out << "}\n\n"; out << "Interactor* " << coreclass; out << "::Interior() {\n"; ok = ok && EmitBSInits(this, out); ok = ok && EmitInstanceInits(kidview, out); out << " return " << kidname->GetName() << ";\n};\n\n"; out << "Component* " << subclass; out << "_core::GetComponent () { return " << comp << "; }\n"; out << "Viewer* " << subclass; out << "_core::GetViewer (int id) { return (id == 0) ? "; out << vname << ": nil; }\n"; out << "Selection* " << subclass; out << "_core::GetSelection () { return " << select << "; }\n"; out << "KeyMap* " << subclass; out << "_core::GetKeyMap () { return " << key << "; }\n\n"; out << "Tool* " << subclass << "_core::GetCurTool () {\n"; out << " Tool* tool = nil;\n"; out << " UControl* c = (UControl*) " << ctrl << "->Selection();\n"; out << " if (c != nil) {\n"; out << " tool = (Tool*) c->GetControlInfo()->GetOwner();\n"; out << " }\n"; out << " return tool;\n"; out << "}\n\n"; out << "void " << subclass << "_core::SetComponent(Component* comp) {\n"; out << " if (comp == nil || comp->IsA(GRAPHIC_COMP)) {\n"; out << " " << comp << " = (GraphicComp*) comp;\n"; out << " }\n"; out << "}\n\n"; out << "void " << subclass << "_core::SetViewer(Viewer* vname, int) {\n"; out << " " << vname << " = vname;\n"; out << "}\n\n"; out << "void " << subclass << "_core::SetKeyMap(KeyMap* key) {\n"; out << " " << key << " = key;\n"; out << "}\n\n"; out << "void " << subclass << "_core::SetSelection(Selection* select) {\n"; out << " " << select << " = select;\n"; out << "}\n\n\n"; ok = ok && EmitFunctionInits(kidview, out); return out.good(); } boolean EditorCode::EmitIncludeHeaders(ostream& out) { if (!_namelist->Search("editor")) { _namelist->Append("editor"); out << "#include <Unidraw/classes.h>\n"; out << "#include <Unidraw/creator.h>\n"; out << "#include <Unidraw/globals.h> \n"; out << "#include <Unidraw/grid.h> \n"; out << "#include <Unidraw/keymap.h>\n"; out << "#include <Unidraw/kybd.h>\n"; out << "#include <Unidraw/page.h>\n"; out << "#include <Unidraw/selection.h>\n"; out << "#include <Unidraw/uctrl.h>\n"; out << "#include <Unidraw/unidraw.h>\n"; out << "#include <Unidraw/Components/grview.h> \n"; out << "#include <Unidraw/Tools/tool.h>\n"; } if (!_namelist->Search("ctrlinfo")) { _namelist->Append("ctrlinfo"); out << "#include <Unidraw/ctrlinfo.h> \n"; } if (!_namelist->Search("grcomp")) { _namelist->Append("grcomp"); out << "#include <Unidraw/Components/grcomp.h>\n"; } if (!_namelist->Search("control")) { _namelist->Append("control"); out << "#include <InterViews/control.h>\n"; } if (!_namelist->Search("window")) { _namelist->Append("window"); out << "#include <InterViews/window.h>\n"; } return out.good(); }