insilmaril@0: #include "ornamentedobj.h" insilmaril@0: #include "texteditor.h" insilmaril@0: #include "mapeditor.h" insilmaril@0: #include "linkablemapobj.h" insilmaril@0: insilmaril@0: extern TextEditor *textEditor; insilmaril@0: extern FlagRowObj *systemFlagsDefault; insilmaril@0: extern FlagRowObj *standardFlagsDefault; insilmaril@0: insilmaril@0: insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: // OrnamentedObj insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: insilmaril@0: OrnamentedObj::OrnamentedObj():LinkableMapObj() insilmaril@0: { insilmaril@0: // cout << "Const OrnamentedObj ()\n"; insilmaril@0: init (); insilmaril@0: } insilmaril@0: insilmaril@2: OrnamentedObj::OrnamentedObj(Q3Canvas* c) :LinkableMapObj(c) insilmaril@0: { insilmaril@0: // cout << "Const OrnamentedObj\n"; insilmaril@0: init (); insilmaril@0: } insilmaril@0: insilmaril@0: OrnamentedObj::OrnamentedObj (OrnamentedObj* lmo) : LinkableMapObj (lmo->canvas) insilmaril@0: { insilmaril@0: copy (lmo); insilmaril@0: } insilmaril@0: insilmaril@0: OrnamentedObj::~OrnamentedObj() insilmaril@0: { insilmaril@0: delete (heading); insilmaril@0: delete (systemFlags); insilmaril@0: delete (standardFlags); insilmaril@0: insilmaril@0: } insilmaril@0: insilmaril@0: insilmaril@0: void OrnamentedObj::init () insilmaril@0: { insilmaril@0: heading = new HeadingObj(canvas); insilmaril@0: heading->move (absPos.x(), absPos.y()); insilmaril@0: insilmaril@0: note.setNote(""); insilmaril@0: note.setFontHint (textEditor->getFontHintDefault() ); insilmaril@0: insilmaril@0: systemFlags=new FlagRowObj(canvas); insilmaril@0: systemFlags->clone(systemFlagsDefault); insilmaril@0: systemFlags->setName ("systemFlags"); insilmaril@0: insilmaril@0: standardFlags=new FlagRowObj(canvas); insilmaril@0: standardFlags->clone(standardFlagsDefault); insilmaril@0: standardFlags->setName ("standardFlags"); insilmaril@0: insilmaril@2: hideExport=false; insilmaril@2: hidden=false; insilmaril@0: insilmaril@2: url=""; insilmaril@2: vymLink=""; insilmaril@2: insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::copy (OrnamentedObj* other) insilmaril@0: { insilmaril@0: LinkableMapObj::copy(other); insilmaril@0: heading->copy(other->heading); insilmaril@2: setColor (other->heading->getColor()); insilmaril@0: insilmaril@0: note.copy (other->note); insilmaril@0: systemFlags->copy (other->systemFlags); insilmaril@0: standardFlags->copy (other->standardFlags); insilmaril@0: insilmaril@2: ornamentsBBox=other->ornamentsBBox; insilmaril@2: insilmaril@2: hideExport=other->hideExport; insilmaril@2: url=other->url; insilmaril@2: vymLink=other->vymLink; insilmaril@0: } insilmaril@0: insilmaril@0: QString OrnamentedObj::getHeading() insilmaril@0: { insilmaril@0: return heading->text(); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::setLinkColor() insilmaril@0: { insilmaril@0: if (mapEditor->getLinkColorHint()==HeadingColor) insilmaril@0: LinkableMapObj::setLinkColor (heading->getColor()); insilmaril@0: else insilmaril@0: LinkableMapObj::setLinkColor (mapEditor->getDefLinkColor()); insilmaril@0: } insilmaril@0: insilmaril@2: void OrnamentedObj::setColor (QColor col) insilmaril@2: { insilmaril@2: heading->setColor(col); insilmaril@2: setLinkColor(); insilmaril@2: } insilmaril@2: insilmaril@0: QColor OrnamentedObj::getColor () insilmaril@0: { insilmaril@0: return heading->getColor(); insilmaril@0: } insilmaril@0: insilmaril@0: insilmaril@2: void OrnamentedObj::positionContents() insilmaril@2: { insilmaril@2: double d=frame->getBorder()/2; insilmaril@2: double x=absPos.x(); insilmaril@2: double y=absPos.y(); insilmaril@2: insilmaril@2: double ox,oy; // Offset due to padding insilmaril@2: insilmaril@2: ox=leftPad + d; insilmaril@2: oy=topPad + d; insilmaril@2: insilmaril@2: systemFlags-> move (ox +x , oy + y ); insilmaril@2: insilmaril@2: // vertical align heading to bottom insilmaril@2: heading->move (ox + x + systemFlags->getBBox().width(), insilmaril@2: oy + y + ornamentsBBox.height() - heading->getHeight() insilmaril@2: ); insilmaril@2: standardFlags->move (ox +x + heading->getWidth() + systemFlags->getBBox().width() , oy + y ); insilmaril@2: insilmaril@2: ornamentsBBox.moveTopLeft ( QPoint ((int)(ox+x),(int)(oy+y))); insilmaril@2: clickBox.moveTopLeft (QPoint ((int)(ox + x), (int)(oy + y))); insilmaril@2: } insilmaril@2: insilmaril@0: void OrnamentedObj::move (double x, double y) insilmaril@0: { insilmaril@0: MapObj::move (x,y); insilmaril@2: positionContents(); insilmaril@0: updateLink(); insilmaril@0: requestReposition(); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::move (QPoint p) insilmaril@0: { insilmaril@0: move (p.x(), p.y()); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::moveBy (double x, double y) insilmaril@0: { insilmaril@0: insilmaril@0: MapObj::moveBy (x,y); insilmaril@0: frame->moveBy (x,y); insilmaril@0: systemFlags->moveBy (x,y); insilmaril@0: standardFlags->moveBy (x,y); insilmaril@0: heading->moveBy (x,y); insilmaril@0: updateLink(); insilmaril@0: requestReposition(); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::moveBy (QPoint p) insilmaril@0: { insilmaril@0: moveBy (p.x(), p.y()); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::move2RelPos(double x, double y) insilmaril@0: { insilmaril@0: if (!parObj) return; insilmaril@0: move (parObj->getChildPos().x()+x, parObj->getChildPos().y()+y); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::move2RelPos(QPoint p) insilmaril@0: { insilmaril@2: move2RelPos (p.x(),p.y()); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::setNote(QString s) insilmaril@0: { insilmaril@0: note.setNote(s); insilmaril@0: if (!note.isEmpty()) insilmaril@0: systemFlags->activate("note"); insilmaril@0: else insilmaril@0: systemFlags->deactivate("note"); insilmaril@0: calcBBoxSize(); insilmaril@0: positionBBox(); insilmaril@0: move (absPos.x(), absPos.y() ); insilmaril@0: forceReposition(); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::setNote(NoteObj n) insilmaril@0: { insilmaril@0: note=n; insilmaril@0: if (!note.isEmpty()) insilmaril@0: systemFlags->activate("note"); insilmaril@0: else insilmaril@0: systemFlags->deactivate("note"); insilmaril@0: calcBBoxSize(); insilmaril@0: positionBBox(); insilmaril@0: move (absPos.x(), absPos.y() ); insilmaril@0: forceReposition(); insilmaril@0: insilmaril@0: } insilmaril@0: insilmaril@0: QString OrnamentedObj::getNote() insilmaril@0: { insilmaril@0: return note.getNote(); insilmaril@0: } insilmaril@0: insilmaril@2: QString OrnamentedObj::getNoteASCII() insilmaril@0: { insilmaril@2: return note.getNoteASCII(); insilmaril@2: } insilmaril@2: insilmaril@2: QString OrnamentedObj::getNoteOpenDoc() insilmaril@2: { insilmaril@2: return note.getNoteOpenDoc(); insilmaril@2: } insilmaril@2: insilmaril@2: void OrnamentedObj::setURL(QString s) insilmaril@2: { insilmaril@2: url=s; insilmaril@2: if (!url.isEmpty()) insilmaril@2: systemFlags->activate("url"); insilmaril@2: else insilmaril@2: systemFlags->deactivate("url"); insilmaril@2: calcBBoxSize(); // recalculate bbox insilmaril@2: positionBBox(); // rearrange contents insilmaril@2: forceReposition(); insilmaril@2: } insilmaril@2: insilmaril@2: QString OrnamentedObj::getURL() insilmaril@2: { insilmaril@2: return url; insilmaril@2: } insilmaril@2: insilmaril@2: void OrnamentedObj::setVymLink(QString s) insilmaril@2: { insilmaril@2: if (!s.isEmpty()) insilmaril@2: { insilmaril@2: // We need the relative (from loading) insilmaril@2: // or absolute path (from User event) insilmaril@2: // and build the absolute path. insilmaril@2: // Note: If we have relative, use path of insilmaril@2: // current map to build absolute path insilmaril@2: QDir d(s); insilmaril@2: if (!d.path().startsWith ("/")) insilmaril@2: { insilmaril@2: QString p=mapEditor->getDestPath(); insilmaril@2: int i=p.findRev("/",-1); insilmaril@2: d.setPath(p.left(i)+"/"+s); insilmaril@2: d.convertToAbs(); insilmaril@2: } insilmaril@2: vymLink=d.path(); insilmaril@2: systemFlags->activate("vymLink"); insilmaril@2: } insilmaril@2: else insilmaril@2: { insilmaril@2: systemFlags->deactivate("vymLink"); insilmaril@2: vymLink=""; insilmaril@2: } insilmaril@2: calcBBoxSize(); // recalculate bbox insilmaril@2: positionBBox(); // rearrange contents insilmaril@2: forceReposition(); insilmaril@2: } insilmaril@2: insilmaril@2: QString OrnamentedObj::getVymLink() insilmaril@2: { insilmaril@2: return vymLink; insilmaril@2: } insilmaril@2: insilmaril@2: insilmaril@2: void OrnamentedObj::toggleStandardFlag(QString f, bool exclusive) insilmaril@2: { insilmaril@2: standardFlags->toggle(f,exclusive); insilmaril@0: calcBBoxSize(); insilmaril@0: positionBBox(); insilmaril@0: move (absPos.x(), absPos.y() ); insilmaril@0: forceReposition(); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::activateStandardFlag(QString f) insilmaril@0: { insilmaril@0: standardFlags->activate(f); insilmaril@0: calcBBoxSize(); insilmaril@0: positionBBox(); insilmaril@0: move (absPos.x(), absPos.y() ); insilmaril@0: forceReposition(); insilmaril@0: } insilmaril@0: insilmaril@2: bool OrnamentedObj::isSetStandardFlag (QString f) insilmaril@2: { insilmaril@2: return standardFlags->isActive(f); insilmaril@2: } insilmaril@2: insilmaril@0: QString OrnamentedObj::getSystemFlagName(const QPoint &p) insilmaril@0: { insilmaril@0: return systemFlags->getFlagName(p); insilmaril@0: } insilmaril@0: insilmaril@2: bool OrnamentedObj::isActiveFlag (const QString & fname) insilmaril@2: { insilmaril@2: if (standardFlags->isActive (fname) ) return true; insilmaril@2: return false; insilmaril@2: } insilmaril@2: insilmaril@0: void OrnamentedObj::updateNoteFlag() insilmaril@0: { insilmaril@2: if (selected) insilmaril@2: { insilmaril@2: // text in NoteEditor has changed, notify MapEditor insilmaril@2: mapEditor->setChanged(); insilmaril@0: insilmaril@2: // save text insilmaril@2: setNote( textEditor->getText() ); insilmaril@0: insilmaril@2: // save font insilmaril@2: note.setFontHint (textEditor->getFontHint() ); insilmaril@2: } insilmaril@0: } insilmaril@0: insilmaril@2: void OrnamentedObj::setHideInExport(bool b) insilmaril@2: { insilmaril@2: if (parObj) insilmaril@2: { insilmaril@2: // Don't allow to MapCenter to be hidden insilmaril@2: hideExport=b; insilmaril@2: if (b) insilmaril@2: systemFlags->activate("hideInExport"); insilmaril@2: else insilmaril@2: systemFlags->deactivate("hideInExport"); insilmaril@2: calcBBoxSize(); insilmaril@2: positionBBox(); insilmaril@2: requestReposition(); insilmaril@2: } insilmaril@2: } insilmaril@2: insilmaril@2: bool OrnamentedObj::hideInExport() insilmaril@2: { insilmaril@2: return hideExport; insilmaril@2: } insilmaril@2: insilmaril@2: bool OrnamentedObj::isHidden() insilmaril@2: { insilmaril@2: return hidden; insilmaril@2: } insilmaril@2: insilmaril@2: QString OrnamentedObj::getOrnAttr() insilmaril@2: { insilmaril@2: QString posAttr; insilmaril@2: insilmaril@2: if (useRelPos) insilmaril@2: posAttr=attribut("relPosX",QString().setNum(relPos.x(),10)) + insilmaril@2: attribut("relPosY",QString().setNum(relPos.y(),10)); insilmaril@2: else insilmaril@2: { insilmaril@2: if (depth==0 || depth==1) posAttr= insilmaril@2: attribut("absPosX",QString().setNum(absPos.x(),10)) + insilmaril@2: attribut("absPosY",QString().setNum(absPos.y(),10)); insilmaril@2: else insilmaril@2: posAttr=""; insilmaril@2: } insilmaril@2: insilmaril@2: QString urlAttr; insilmaril@2: if (!url.isEmpty()) insilmaril@2: urlAttr=attribut ("url",url); insilmaril@2: insilmaril@2: QString vymLinkAttr; insilmaril@2: if (!vymLink.isEmpty()) insilmaril@2: vymLinkAttr=attribut ("vymLink",convertToRel(mapEditor->getDestPath(),vymLink) ); insilmaril@2: insilmaril@2: QString hideExpAttr; insilmaril@2: if (hideExport) insilmaril@2: hideExpAttr= attribut("hideInExport","true"); insilmaril@2: else insilmaril@2: hideExpAttr=""; insilmaril@2: insilmaril@2: return posAttr +urlAttr +vymLinkAttr +getLinkAttr() +hideExpAttr; insilmaril@2: } insilmaril@2: