|
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: 7896 (0x1ed8) Types: TextFile Names: »ibdeck.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00« └─⟦de8ce1454⟧ └─⟦this⟧ »contrib/lib/iv/src/bin/ibuild/ibdeck.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 Deck component and derived classes. * $Header: /master/3.0/iv/src/bin/ibuild/RCS/ibdeck.c,v 1.2 91/09/27 14:07:53 tang Exp $ */ #include "ibclasses.h" #include "ibcmds.h" #include "ibdeck.h" #include "ibvars.h" #include <Unidraw/iterator.h> #include <Unidraw/ulist.h> #include <Unidraw/Graphic/graphic.h> #include <Unidraw/Graphic/picture.h> #include <InterViews/shape.h> #include <InterViews/transformer.h> #include <stream.h> #include <string.h> /*****************************************************************************/ DeckComp::DeckComp () { GetClassNameVar()->SetName("Deck"); GetClassNameVar()->SetBaseClass("Deck"); } ClassId DeckComp::GetClassId () { return DECK_COMP; } boolean DeckComp::IsA (ClassId id){return DECK_COMP==id || SceneComp::IsA(id);} void DeckComp::Resize () { Iterator i; float cx, cy; GetGraphic()->GetCenter(cx, cy); CanvasVar* cvar = GetCanvasVar(); int xmax = cvar->Width(); int ymax = cvar->Height(); PointObj lb(round(cx - xmax/2), round(cy - ymax/2)); for (First(i); !Done(i); Next(i)) { Shape* s = GetIComp(i)->GetShapeVar()->GetShape(); int l, r, b, t; int width = xmax+1; width = max(width, s->width - s->hshrink); width = min(width, s->width + s->hstretch); int height = ymax+1; height = max(height, s->height - s->vshrink); height = min(height, s->height + s->vstretch); l = (xmax+1-width)/2; r = xmax - l; b = (ymax+1-height)/2; t = ymax - b; l += lb._x; b += lb._y; r += lb._x; t += lb._y; Place(GetIComp(i), l, b, r, t); } } void DeckComp::Reconfig () { int hnat = 0, hmin = 0, hmax = hfil; int vnat = 0, vmin = 0, vmax = vfil; Iterator i; for (First(i); !Done(i); Next(i)) { GetIComp(i)->Reconfig(); } for (First(i); !Done(i); Next(i)) { Shape* s = GetIComp(i)->GetShapeVar()->GetShape(); hnat = max(hnat, s->width); hmin = max(hmin, s->width - s->hshrink); hmax = min(hmax, s->width + s->hstretch); vnat = max(vnat, s->height); vmin = max(vmin, s->height - s->vshrink); vmax = min(vmax, s->height + s->vstretch); } Shape* shape = GetShapeVar()->GetShape(); shape->width = hnat; shape->hshrink = max(0, shape->width - hmin); shape->hstretch = max(0, hmax - shape->width); shape->height = vnat; shape->vshrink = max(0, shape->height - vmin); shape->vstretch = max(0, vmax - shape->height); } /*************************************************************************/ DeckView::DeckView (DeckComp* subj) : SceneView(subj) { } DeckComp* DeckView::GetDeckComp () { return (DeckComp*) GetSubject();} ClassId DeckView::GetClassId () { return DECK_VIEW; } boolean DeckView::IsA (ClassId id) { return DECK_VIEW == id || SceneView::IsA(id); } /*****************************************************************************/ ClassId DeckCode::GetClassId () { return DECK_CODE; } boolean DeckCode::IsA (ClassId id) {return DECK_CODE==id || CodeView::IsA(id);} DeckCode::DeckCode (DeckComp* subj) : CodeView(subj) { } DeckComp* DeckCode::GetDeckComp () { return (DeckComp*) GetSubject(); } boolean DeckCode::Definition (ostream& out) { boolean ok = true; Iterator i; if ( _emitInstanceDecls || _emitForward || _emitProperty || _emitClassHeaders || _emitHeaders ) { ok = ok && CodeView::Definition(out); ok = ok && Iterate(out); } else if (_emitExpHeader) { InteractorComp* icomp = GetIntComp(); MemberNameVar* mnamer = icomp->GetMemberNameVar(); SubclassNameVar* snamer = icomp->GetClassNameVar(); if (!snamer->IsSubclass()) { if (_scope && mnamer->GetExport() && !_namelist->Search("deck")) { _namelist->Append("deck"); out << "#include <InterViews/deck.h>\n"; } } else { ok = ok && CodeView::Definition(out); } ok = ok && Iterate(out); } else if (_emitCorehHeader) { InteractorComp* icomp = GetIntComp(); SubclassNameVar* snamer = icomp->GetClassNameVar(); const char* subclass = snamer->GetName(); if (snamer->IsSubclass() && strcmp(subclass, _classname) == 0) { if (!_namelist->Search("deck")) { _namelist->Append("deck"); out << "#include <InterViews/deck.h>\n"; } } else { ok = ok && Iterate(out); } } else if (_emitInstanceInits) { InteractorComp* icomp = GetIntComp(); const char* mname = icomp->GetMemberNameVar()->GetName(); if (!_instancelist->Find((void*) mname)) { _instancelist->Append(new UList((void*)mname)); BeginInstantiate(out); out << "("; InstanceName(out, ")"); EndInstantiate(out); } ok = ok && Iterate(out); if (AllKidsDefined() && !_lock) { _lock = true; for (icomp->Last(i); !icomp->Done(i); icomp->Prev(i)) { InteractorComp* kid = (InteractorComp*) icomp->GetComp(i); const char* instance = kid->GetMemberNameVar()->GetName(); out << " " << mname << "->Insert("; out << instance << ");\n"; } } } else if ( _emitBSDecls || _emitBSInits || _emitFunctionDecls || _emitFunctionInits ) { ok = ok && Iterate(out); } else if ( _emitCoreDecls || _emitCoreInits || _emitClassDecls || _emitClassInits ) { ok = ok && CodeView::Definition(out); ok = ok && Iterate(out); } else if (_emitMain) { ok = ok && CodeView::Definition(out); } return ok; } boolean DeckCode::CoreConstDecls(ostream& out) { out << "(const char*);\n"; return out.good(); } boolean DeckCode::CoreConstInits(ostream& out) { InteractorComp* icomp = GetIntComp(); SubclassNameVar* snamer = icomp->GetClassNameVar(); const char* baseclass = snamer->GetBaseClass(); out << "(\n const char* name\n) : " << baseclass; out << "(name) {}\n\n"; return out.good(); } boolean DeckCode::ConstDecls(ostream& out) { out << "(const char*);\n"; return out.good(); } boolean DeckCode::ConstInits(ostream& out) { char coreclass[CHARBUFSIZE]; GetCoreClassName(coreclass); out << "(\n const char* name\n) : " << coreclass; out << "(name) {}\n\n"; return out.good(); } boolean DeckCode::EmitIncludeHeaders(ostream& out) { SubclassNameVar* snamer = GetIntComp()->GetClassNameVar(); if (!snamer->IsSubclass() && !_namelist->Search("deck")) { _namelist->Append("deck"); out << "#include <InterViews/deck.h> \n"; } return out.good(); }