|
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: 27735 (0x6c57) Types: TextFile Names: »ibpanelctrl.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00« └─⟦de8ce1454⟧ └─⟦this⟧ »contrib/lib/iv/src/bin/ibuild/ibpanelctrl.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 PanelCtrl * $Header: /master/3.0/iv/src/bin/ibuild/RCS/ibpanelctrl.c,v 1.2 91/09/27 14:11:09 tang Exp $ */ #include "ibbutton.h" #include "ibclasses.h" #include "ibgrcomp.h" #include "ibcmds.h" #include "ibdialogs.h" #include "ibed.h" #include "ibeditor.h" #include "ibmanips.h" #include "ibtext.h" #include "ibtools.h" #include "ibvars.h" #include "ibvarviews.h" #include "ibpanelctrl.h" #include "ibcommandctrl.h" #include <Unidraw/catalog.h> #include <Unidraw/clipboard.h> #include <Unidraw/iterator.h> #include <Unidraw/page.h> #include <Unidraw/statevars.h> #include <Unidraw/selection.h> #include <Unidraw/viewer.h> #include <Unidraw/ulist.h> #include <Unidraw/unidraw.h> #include <Unidraw/Tools/tool.h> #include <Unidraw/Graphic/pspaint.h> #include <InterViews/brush.h> #include <InterViews/event.h> #include <InterViews/painter.h> #include <InterViews/rubrect.h> #include <InterViews/shape.h> #include <InterViews/transformer.h> #include <OS/math.h> #include <stream.h> #include <string.h> /*****************************************************************************/ static const int HPAD = 4; // horizontal padding around control labels static const int VPAD = 1; // vertical padding around control labels static const int SEP = 8; // separation between label & equiv static const int MINHT = 15; // minimum height of control labels static const int MINWD = 15; // minimum width of control labels static PSFont keyfont("fixed", "fixed", "12"); /*****************************************************************************/ PanelCtrlComp::PanelCtrlComp (PanelCtrlGraphic* gr) : GrBlockComp(gr) { _curCtrlVar = nil; _keylabel = nil; _toolname = nil; _edVar = nil; if (gr != nil) { SubclassNameVar* subclass = GetClassNameVar(); Orientation orient = gr->GetOrientation(); const char* name = gr->GetName(); subclass->SetName(name); subclass->SetBaseClass(name); ITextComp* itext = new ITextComp(new TextGraphic(name, stdgraphic)); itext->Instantiate(); GetTop()->Append(itext); Catalog* catalog = unidraw->GetCatalog(); PSColor* fg = catalog->FindColor("Black"); PSColor* bg = catalog->FindColor("White"); _keylabel = new ITextComp(new TextGraphic("?", stdgraphic)); _keylabel->Instantiate(); Graphic* keygr = _keylabel->GetGraphic(); keygr->SetColors(fg, bg); keygr->SetFont(&keyfont); SceneComp::Append(_keylabel); } } PanelCtrlComp::~PanelCtrlComp () { delete _curCtrlVar; delete _toolname; delete _edVar; if (_keylabel != nil) SceneComp::Remove(_keylabel); delete _keylabel; } ClassId PanelCtrlComp::GetClassId () { return PANELCONTROL_COMP; } boolean PanelCtrlComp::IsA (ClassId id) { return PANELCONTROL_COMP == id || GrBlockComp::IsA(id); } PanelCtrlGraphic* PanelCtrlComp::GetPanelCtrlGraphic() { return (PanelCtrlGraphic*) GetGrBlockGraphic(); } void PanelCtrlComp::Instantiate () { GrBlockComp::Instantiate(); if (_curCtrlVar == nil) { _curCtrlVar = new ButtonStateVar("curCtrl"); _curCtrlVar->GenNewName(); _curCtrlVar->HideSetting(); } if (_toolname == nil) { _toolname = new TrackNameVar("GraphicCompTool"); } if (_edVar == nil) { _edVar = new MemberNameVar("", false, false); } } void PanelCtrlComp::Reconfig () { Shape* shape = GetShapeVar()->GetShape(); Orientation orient = GetPanelCtrlGraphic()->GetOrientation(); int x0, y0, x1, y1; TextComp* textcomp = (TextComp*) GetKeyLabel()->GetTarget(); TextGraphic* textgr = textcomp->GetText(); const char* kl = textgr->GetOriginal(); GetTop()->GetGraphic()->GetBox(x0, y0, x1, y1); shape->width = x1 - x0; shape->height = y1 - y0; if (*kl == '\0') { shape->width += 2*HPAD; shape->height += 2*VPAD; } else { PSFont* f = stdgraphic->GetFont(); shape->width += 2 * f->Width(kl) + HPAD; shape->height += f->Height(); } shape->height = max(shape->height, MINHT); if (orient == Horizontal) { shape->Rigid(0, shape->width, 0, vfil); } else if (orient == Vertical) { shape->Rigid(0, hfil, shape->height, 0); } } void PanelCtrlComp::Resize () { Iterator i; PanelCtrlGraphic* pcgr = GetPanelCtrlGraphic(); TextComp* textcomp = (TextComp*) GetKeyLabel()->GetTarget(); TextGraphic* textgr = textcomp->GetText(); const char* kl = textgr->GetOriginal(); pcgr->SetPattern(psclear); pcgr->Align(Center, textgr, Center); Picture* topgr = (Picture*) GetTop()->GetGraphic(); if (!topgr->IsEmpty()) { topgr->Align(Center, pcgr, Center); pcgr->Align(BottomRight, textgr, BottomRight); textgr->Translate(-2.0, 0.0); } else { pcgr->Align(BottomRight, textgr, BottomRight); textgr->Translate(-2.0, 0.0); } textcomp->Notify(); SubNotify(); } void PanelCtrlComp::Interpret(Command* cmd) { if (cmd->IsA(GETCONFLICT_CMD)) { GetConflictCmd* gcmd = (GetConflictCmd*) cmd; const char* cname = gcmd->GetCName(); UList* conflictlist = gcmd->GetConflict(); const char* curCtrl = _curCtrlVar->GetName(); if (strcmp(curCtrl, cname) == 0) { conflictlist->Append(new UList(_curCtrlVar->GetButtonSharedName())); } } else if ( cmd->IsA(COLOR_CMD) || cmd->IsA(FONT_CMD) || cmd->IsA(BRUSH_CMD) && !cmd->IsA(GLUEVISIBILITY_CMD) ) { Iterator i; GraphicComp* top = GetTop(); for (top->First(i); !top->Done(i); top->Next(i)) { top->GetComp(i)->Interpret(cmd); } Propagate(cmd); } else { GrBlockComp::Interpret(cmd); } } void PanelCtrlComp::Uninterpret(Command* cmd) { if ( cmd->IsA(COLOR_CMD) || cmd->IsA(FONT_CMD) || cmd->IsA(BRUSH_CMD) && !cmd->IsA(GLUEVISIBILITY_CMD) ) { Iterator i; GraphicComp* top = GetTop(); for (top->First(i); !top->Done(i); top->Next(i)) { top->GetComp(i)->Uninterpret(cmd); } Unpropagate(cmd); } else { GrBlockComp::Uninterpret(cmd); } } void PanelCtrlComp::SetState(const char* name, StateVar* stateVar) { if (strcmp(name, "CurCtrlVar") == 0) { ButtonStateVar* curCtrlVar = (ButtonStateVar*) stateVar; *_curCtrlVar = *curCtrlVar; } else if (strcmp(name, "ToolName") == 0) { _toolname = (TrackNameVar*) stateVar; } else if ( strcmp(name, "EditorVar") == 0 || strcmp(name, "RelatedVar") == 0 ) { MemberNameVar* memberVar = (MemberNameVar*) stateVar; *_edVar = *memberVar; } else { GrBlockComp::SetState(name, stateVar); } } StateVar* PanelCtrlComp::GetState (const char* name) { StateVar* stateVar = nil; if (strcmp(name, "CurCtrlVar") == 0) { stateVar = _curCtrlVar; } else if (strcmp(name, "ToolName") == 0) { stateVar = _toolname; } else if (strcmp(name, "EditorVar") == 0) { stateVar = _edVar; } else { stateVar = GrBlockComp::GetState(name); } return stateVar; } InteractorComp& PanelCtrlComp::operator = (InteractorComp& comp) { if (comp.IsA(EDITOR_COMP)) { EditorComp* edcomp = (EditorComp*) ∁ ButtonStateVar* curCtrlVar = edcomp->GetButtonStateVar(); *_curCtrlVar = *curCtrlVar; *_edVar = *edcomp->GetMemberNameVar(); } else if (comp.IsA(PANELCONTROL_COMP)) { PanelCtrlComp* pcComp = (PanelCtrlComp*) ∁ ButtonStateVar* curCtrlVar = pcComp->GetButtonStateVar(); *_curCtrlVar = *curCtrlVar; *_edVar = *pcComp->GetEditorVar(); } else if (comp.IsA(COMMANDCONTROL_COMP)) { CommandCtrlComp* comComp = (CommandCtrlComp*) ∁ *_edVar = *comComp->GetEditorVar(); } return *this; } boolean PanelCtrlComp::IsRelatableTo (InteractorComp* comp) { boolean ok = false; if (comp->IsA(EDITOR_COMP) || comp->IsA(PANELCONTROL_COMP)) { ok = true; } return ok; } void PanelCtrlComp::Read (istream& in) { Catalog* catalog = unidraw->GetCatalog(); PSColor* fg = catalog->FindColor("Black"); PSColor* bg = catalog->FindColor("White"); GrBlockComp::Read(in); delete _curCtrlVar; delete _keylabel; delete _toolname; delete _edVar; _keylabel = (ITextComp*) catalog->ReadComponent(in); _curCtrlVar = (ButtonStateVar*) catalog->ReadStateVar(in); _toolname = (TrackNameVar*) catalog->ReadStateVar(in); _edVar = (MemberNameVar*) catalog->ReadStateVar(in); Graphic* keygr = _keylabel->GetGraphic(); keygr->SetColors(fg, bg); keygr->SetFont(&keyfont); SceneComp::Append(_keylabel); } void PanelCtrlComp::Write (ostream& out) { Catalog* catalog = unidraw->GetCatalog(); GrBlockComp::Write(out); catalog->WriteComponent(_keylabel, out); catalog->WriteStateVar(_curCtrlVar, out); catalog->WriteStateVar(_toolname, out); catalog->WriteStateVar(_edVar, out); } /*****************************************************************************/ PanelCtrlView::PanelCtrlView ( PanelCtrlComp* subj ) : GrBlockView(subj) { _keylabel = nil; } PanelCtrlComp* PanelCtrlView::GetPanelCtrlComp () { return (PanelCtrlComp*) GetSubject(); } ClassId PanelCtrlView::GetClassId () { return PANELCONTROL_VIEW; } boolean PanelCtrlView::IsA (ClassId id) { return PANELCONTROL_VIEW == id || GrBlockView::IsA(id); } Manipulator* PanelCtrlView::CreateManipulator ( Viewer* v, Event& e, Transformer* rel, Tool* tool ) { Manipulator* m = nil; if (tool->IsA(IBGRAPHIC_COMP_TOOL)) { m = InteractorView::CreateManipulator(v, e, rel, tool); } else if (tool->IsA(GRAPHIC_COMP_TOOL)) { Coord x0, y0, x1, y1, halfw, halfh; Editor* ed = v->GetEditor(); GraphicView* views = v->GetGraphicView(); PanelCtrlComp* comp = GetPanelCtrlComp(); Shape* shape = comp->GetShapeVar()->GetShape(); FontVar* fontVar = (FontVar*) ed->GetState("FontVar"); Graphic* topgr = comp->GetTop()->GetGraphic(); PSFont* font = topgr->GetFont(); if (font != nil) { font->ref(); } topgr->SetFont(fontVar->GetFont()); comp->Reconfig(); topgr->SetFont(font); if (font != nil) { font->unref(); } x0 = 0; y0 = 0; x1 = shape->width; y1 = shape->height; Selection* s = v->GetSelection(); SlidingRect* sr; s->Clear(); if (rel != nil) { rel->Transform(x0, y0); rel->Transform(x1, y1); halfw = Math::abs(x1 - x0) / 2; halfh = Math::abs(y1 - y0) / 2; } v->Constrain(e.x, e.y); sr = new SlidingRect( nil, nil, e.x - halfw, e.y - halfh, e.x + halfw, e.y + halfh, e.x, e.y ); m = new DragManip(v, sr, rel, tool, Gravity); } else if (tool->IsA(TAB_TOOL)) { Iterator i; First(i); GraphicView* gv = GetView(i); if (gv != nil) { m = gv->CreateManipulator(v, e, rel, tool); } } else { m = GrBlockView::CreateManipulator(v, e, rel, tool); } return m; } Command* PanelCtrlView::InterpretManipulator(Manipulator* m) { Command* cmd = nil; Tool* tool = m->GetTool(); if (tool->IsA(TAB_TOOL)) { Iterator i; First(i); GraphicView* gv = GetView(i); if (gv != nil) { cmd = gv->InterpretManipulator(m); } } else { cmd = GrBlockView::InterpretManipulator(m); } return cmd; } void PanelCtrlView::Interpret(Command* cmd) { if (cmd->IsA(TAB_CMD)) { TabTool tabTool; GetViewer()->UseTool(&tabTool); GrBlockView::Interpret(cmd); } else { GrBlockView::Interpret(cmd); } } Graphic* PanelCtrlView::GetGraphic () { Graphic* g = GraphicView::GetGraphic(); if (g == nil) { g = GrBlockView::GetGraphic(); ITextComp* keycomp = GetPanelCtrlComp()->GetKeyLabel(); _keylabel = (IView*) keycomp->Create(COMPONENT_VIEW); keycomp->Attach(_keylabel); Append(_keylabel); _keylabel->Update(); } return g; } void PanelCtrlView::Update () { if (_keylabel != nil) { Viewer* viewer = GetViewer(); if (Includes(_keylabel)) { Iterator i; SetView(_keylabel, i); Remove(i); } GrBlockView::Update(); if (viewer == nil || viewer->GetGraphicView() != this) { Append(_keylabel); _keylabel->Update(); } } else { GrBlockView::Update(); } } InfoDialog* PanelCtrlView::GetInfoDialog () { IBEditor* ibed = (IBEditor*) GetViewer()->GetEditor(); InfoDialog* info = InteractorView::GetInfoDialog(); ButtonState* state = info->GetState(); PanelCtrlComp* pcComp = GetPanelCtrlComp(); ButtonStateVar* curCtrlVar = pcComp->GetButtonStateVar(); TrackNameVar* toolname = pcComp->GetToolName(); MemberNameVar* edVar = pcComp->GetEditorVar(); info->Include(new RelatedVarView( edVar, state, pcComp, "Editor Name: ") ); NameChooserView* toolChooser = new NameChooserView( toolname, state, ibed, "Library tools:", "Tool Name: " ); toolChooser->Append("ConnectTool"); toolChooser->Append("GraphicCompTool"); toolChooser->Append("MagnifyTool"); toolChooser->Append("MoveTool"); toolChooser->Append("ReshapeTool"); toolChooser->Append("RotateTool"); toolChooser->Append("ScaleTool"); toolChooser->Append("SelectTool"); toolChooser->Append("StretchTool"); info->Include(toolChooser); info->Include(new CtrlStateVarView(curCtrlVar, state, pcComp, ibed)); return info; } GraphicComp* PanelCtrlView::CreateProtoComp ( Editor* ed, Coord l, Coord b, Coord r, Coord t ) { ColorVar* colVar = (ColorVar*) ed->GetState("ColorVar"); FontVar* fontVar = (FontVar*) ed->GetState("FontVar"); float mcx, mcy, cx, cy; PanelCtrlComp* pccomp = (PanelCtrlComp*) GetPanelCtrlComp()->Copy(); Graphic* topgr = pccomp->GetTop()->GetGraphic(); mcx = (r-l)/2.0; mcy = (t-b)/2.0; topgr->SetColors(colVar->GetFgColor(), colVar->GetBgColor()); topgr->SetFont(fontVar->GetFont()); topgr->GetCenter(cx, cy); topgr->Translate(mcx-cx, mcy-cy); return pccomp; } /*****************************************************************************/ PanelCtrlCode::PanelCtrlCode (PanelCtrlComp* subj) : GrBlockCode(subj) { } PanelCtrlComp* PanelCtrlCode::GetPanelCtrlComp() { return (PanelCtrlComp*) GetSubject(); } ClassId PanelCtrlCode::GetClassId () { return PANELCONTROL_CODE; } boolean PanelCtrlCode::IsA(ClassId id) { return PANELCONTROL_CODE == id || GrBlockCode::IsA(id); } boolean PanelCtrlCode::SingleKid () { Iterator i; First(i); Next(i); return Done(i); } void PanelCtrlCode::HashKeyCode(char* keycode) { int l = strlen(keycode); if (l == 0 || l > 2) { strcpy(keycode, " "); } else if (l == 2) { if (keycode[0] == '^' && keycode[1] >= 'A' && keycode[1] <= 'Z') { sprintf(keycode, "\\0%2o", keycode[1]-64); } else { strcpy(keycode, " "); } } } boolean PanelCtrlCode::Definition (ostream& out) { char coreclass[CHARBUFSIZE]; char Keycode[CHARBUFSIZE]; boolean ok = true; Iterator i; PanelCtrlComp* pcComp = GetPanelCtrlComp(); SubclassNameVar* snamer = pcComp->GetClassNameVar(); MemberNameVar* mnamer = pcComp->GetMemberNameVar(); TextComp* textcomp = (TextComp*) pcComp->GetKeyLabel()->GetTarget(); TextGraphic* textgr = textcomp->GetText(); ButtonStateVar* curCtrlVar = pcComp->GetButtonStateVar(); MemberNameVar* edVar = pcComp->GetEditorVar(); const char* edname = edVar->GetName(); const char* text = textgr->GetOriginal(); const char* tool = pcComp->GetToolName()->GetName(); const char* ctrl = curCtrlVar->GetName(); const char* subclass = snamer->GetName(); const char* baseclass = snamer->GetBaseClass(); const char* mname = mnamer->GetName(); strcpy(Keycode, text); HashKeyCode(Keycode); InteractorComp* dummy; GetCoreClassName(coreclass); if (*edname == '\0') { strcat(_errbuf, mname); strcat(_errbuf, " has undefined Editor.\n"); return false; } else if (!Search(edVar, dummy)) { strcat(_errbuf, mname); strcat( _errbuf, "'s Editor is not in the same hierachy.\n" ); return false; } _emitGraphicComp = true; if ( _emitInstanceDecls || _emitClassHeaders || _emitHeaders || _emitProperty || _emitForward ) { ok = ok && GrBlockCode::Definition(out); } else if (_emitExpHeader) { if (!snamer->IsSubclass()) { if (_scope && mnamer->GetExport()&&!_namelist->Search("uctrls")) { _namelist->Append("uctrls"); out << "#include <Unidraw/uctrls.h> \n"; } } else { ok = ok && CodeView::Definition(out); } ok = ok && Iterate(out); } else if (_emitCorehHeader) { if (snamer->IsSubclass() && strcmp(subclass, _classname) == 0) { if (!_namelist->Search("control")) { _namelist->Append("control"); out << "#include <InterViews/control.h>\n"; } if (!_namelist->Search("uctrls")) { _namelist->Append("uctrls"); out << "#include <Unidraw/uctrls.h>\n"; } } ok = ok && Iterate(out); } else if (_emitInstanceInits) { if (!_instancelist->Find((void*)mname)) { _instancelist->Append(new UList((void*)mname)); ok = ok && EmitGraphicState(out); for(First(i); !Done(i); Next(i)) { CodeView* kid = (CodeView*) GetView(i); ok = ok && EmitInstanceDecls(kid, out); } ok = ok && Iterate(out); const char* kidname = nil; if (!SingleKid()) { out << " GraphicComps* " << mname; out << "_comp = new GraphicComps;\n"; for(First(i); !Done(i); Next(i)) { CodeView* kid = (CodeView*) GetView(i); MemberNameVar* kmnamer=kid->GetIComp()->GetMemberNameVar(); const char* kmname = kmnamer->GetName(); out << " " << mname << "_comp->Append("; out << kmname << "_comp);\n"; } } else { First(i); CodeView* kidv = (CodeView*) GetView(i); MemberNameVar* kmnamer=kidv->GetIComp()->GetMemberNameVar(); kidname = kmnamer->GetName(); } out << " ControlInfo* " << mname; out << "_info = new ControlInfo("; if (kidname == nil) { out << mname; } else { out << kidname; } out << "_comp, \"" << text << "\", \"" << Keycode << "\");\n"; out << " Tool* " << mname << "_tool = new "; if (*tool == '\0' || strcmp(tool, "GraphicCompTool") == 0) { out << "GraphicCompTool(" << mname << "_info, (GraphicComp*) "; if (kidname == nil) { out << mname; } else { out << kidname; } out << "_comp->Copy());\n"; } else { out << tool << "(" << mname << "_info);\n"; } BeginInstantiate(out); out << "("; InstanceName(out); out << mname << "_info, " << ctrl << ")"; EndInstantiate(out); out << " GetKeyMap()->Register("; out << mname << ");\n"; } } else if (_emitBSDecls) { ButtonStateVar* bsVar = pcComp->GetButtonStateVar(); const char* name = bsVar->GetName(); if (_emitExport) { if (bsVar->GetExport() && !_bsdeclslist->Search(name)) { _bsdeclslist->Append(name); out << " ControlState* " << name << ";\n"; } } else { if (!bsVar->GetExport() && !_bsdeclslist->Search(name)) { _bsdeclslist->Append(name); out << " ControlState* " << name << ";\n"; } } } else if (_emitBSInits) { ButtonStateVar* bsVar = pcComp->GetButtonStateVar(); const char* name = bsVar->GetName(); boolean export = bsVar->GetExport(); if (!_bsinitslist->Search(name)) { _bsinitslist->Append(name); if (export) { out << " " << name; } else { out << " ControlState*" << name; } out << " = new ControlState;\n"; } } else if (_emitFunctionDecls || _emitFunctionInits) { ok = true; } else if ( _emitCoreDecls || _emitCoreInits || _emitClassDecls || _emitClassInits ) { ok = ok && GrBlockCode::Definition(out); } else if (_emitMain) { ok = ok && GrBlockCode::Definition(out); } _emitGraphicComp = true; return out.good() && ok; } boolean PanelCtrlCode::CoreConstDecls(ostream& out) { out << "(const char*, ControlInfo*, ControlState* = nil);\n"; return out.good(); } boolean PanelCtrlCode::CoreConstInits(ostream& out) { InteractorComp* icomp = GetIntComp(); SubclassNameVar* snamer = icomp->GetClassNameVar(); const char* baseclass = snamer->GetBaseClass(); out << "(\n const char* name, ControlInfo* info, ControlState* state"; out << "\n) : "; out << baseclass << "(name, info, state) {\n"; out << " perspective = new Perspective;\n"; out << "}\n\n"; return out.good(); } boolean PanelCtrlCode::ConstDecls(ostream& out) { out << "(const char*, ControlInfo*, ControlState* = nil);\n"; return out.good(); } boolean PanelCtrlCode::ConstInits(ostream& out) { char coreclass[CHARBUFSIZE]; GetCoreClassName(coreclass); out << "(\n const char* name, ControlInfo* info, ControlState* state"; out << "\n) : "; out << coreclass << "(name, info, state) {}\n\n"; return out.good(); } boolean PanelCtrlCode::EmitIncludeHeaders(ostream& out) { GrBlockCode::EmitIncludeHeaders(out); PanelCtrlComp* pcComp = GetPanelCtrlComp(); const char* tool = pcComp->GetToolName()->GetName(); SubclassNameVar* snamer = pcComp->GetClassNameVar(); if (!snamer->IsSubclass() && !_namelist->Search("uctrls")) { _namelist->Append("uctrls"); out << "#include <Unidraw/uctrls.h> \n\n"; } if (strcmp(snamer->GetName(), _classname) != 0) { 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("grcomptool")) { _namelist->Append("grcomptool"); out << "#include <Unidraw/Tools/grcomptool.h>\n"; } if (strcmp(tool, "ConnectTool") == 0) { if (!_namelist->Search("connect")) { _namelist->Append("connect"); out << "#include <Unidraw/Tools/connect.h>\n"; } } if (strcmp(tool, "MagnifyTool") == 0) { if (!_namelist->Search("magnify")) { _namelist->Append("magnify"); out << "#include <Unidraw/Tools/magnify.h>\n"; } } if (strcmp(tool, "MoveTool") == 0) { if (!_namelist->Search("move")) { _namelist->Append("move"); out << "#include <Unidraw/Tools/move.h>\n"; } } if (strcmp(tool, "ReshapeTool") == 0) { if (!_namelist->Search("reshape")) { _namelist->Append("reshape"); out << "#include <Unidraw/Tools/reshape.h>\n"; } } if (strcmp(tool, "RotateTool") == 0) { if (!_namelist->Search("rotate")) { _namelist->Append("rotate"); out << "#include <Unidraw/Tools/rotate.h>\n"; } } if (strcmp(tool, "ScaleTool") == 0){ if (!_namelist->Search("scale")) { _namelist->Append("scale"); out << "#include <Unidraw/Tools/scale.h>\n"; } } if (strcmp(tool, "SelectTool") == 0) { if (!_namelist->Search("select")) { _namelist->Append("select"); out << "#include <Unidraw/Tools/select.h>\n"; } } if (strcmp(tool, "StretchTool") == 0) { if (!_namelist->Search("stretch")) { _namelist->Append("stretch"); out << "#include <Unidraw/Tools/stretch.h>\n"; } } } return out.good(); } /*****************************************************************************/ PanelCtrlGraphic::PanelCtrlGraphic ( const char* name, Orientation orient, CanvasVar* c, Graphic* g ) : IBViewerGraphic(c, g) { _name = strnew(name); _orient = orient; } PanelCtrlGraphic::~PanelCtrlGraphic () { delete _name; } Graphic* PanelCtrlGraphic::Copy () { Graphic* copy = new PanelCtrlGraphic(_name, _orient, nil, this); return copy; } ClassId PanelCtrlGraphic::GetClassId () { return PANELCONTROL_GRAPHIC; } boolean PanelCtrlGraphic::IsA (ClassId id) { return PANELCONTROL_GRAPHIC == id; } void PanelCtrlGraphic::Read (istream& in) { Catalog* catalog = unidraw->GetCatalog(); IBViewerGraphic::Read(in); delete _name; _name = catalog->ReadString(in); in >> _orient; } void PanelCtrlGraphic::Write (ostream& out) { Catalog* catalog = unidraw->GetCatalog(); IBViewerGraphic::Write(out); catalog->WriteString(_name, out); out << " " << _orient << " "; }