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@408: OrnamentedObj::OrnamentedObj(QGraphicsScene* s) :LinkableMapObj(s) insilmaril@0: { insilmaril@408: // cout << "Const OrnamentedObj (s)\n"; insilmaril@0: init (); insilmaril@0: } insilmaril@0: insilmaril@408: OrnamentedObj::OrnamentedObj (OrnamentedObj* lmo) : LinkableMapObj (lmo->scene) insilmaril@0: { insilmaril@0: copy (lmo); insilmaril@0: } insilmaril@0: insilmaril@0: OrnamentedObj::~OrnamentedObj() insilmaril@0: { insilmaril@442: delete heading; insilmaril@442: delete systemFlags; insilmaril@442: delete standardFlags; insilmaril@442: delete frame; insilmaril@0: } insilmaril@0: insilmaril@0: insilmaril@0: void OrnamentedObj::init () insilmaril@0: { insilmaril@408: heading = new HeadingObj(scene); insilmaril@0: heading->move (absPos.x(), absPos.y()); insilmaril@0: insilmaril@0: note.setNote(""); insilmaril@0: note.setFontHint (textEditor->getFontHintDefault() ); insilmaril@417: isNoteInEditor=false; insilmaril@0: insilmaril@408: systemFlags=new FlagRowObj(scene); insilmaril@0: systemFlags->clone(systemFlagsDefault); insilmaril@0: systemFlags->setName ("systemFlags"); insilmaril@0: insilmaril@408: standardFlags=new FlagRowObj(scene); insilmaril@0: standardFlags->clone(standardFlagsDefault); insilmaril@0: standardFlags->setName ("standardFlags"); insilmaril@243: insilmaril@442: frame = new FrameObj (scene); insilmaril@442: insilmaril@243: hideExport=false; insilmaril@260: hidden=false; insilmaril@243: insilmaril@243: url=""; insilmaril@243: vymLink=""; insilmaril@243: 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@243: 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@227: ornamentsBBox=other->ornamentsBBox; insilmaril@227: insilmaril@243: hideExport=other->hideExport; insilmaril@243: url=other->url; insilmaril@243: 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@398: if (mapEditor->getMapLinkColorHint()==HeadingColor) insilmaril@0: LinkableMapObj::setLinkColor (heading->getColor()); insilmaril@0: else insilmaril@398: LinkableMapObj::setLinkColor (mapEditor->getMapDefLinkColor()); insilmaril@0: } insilmaril@0: insilmaril@243: void OrnamentedObj::setColor (QColor col) insilmaril@243: { insilmaril@243: heading->setColor(col); insilmaril@243: setLinkColor(); insilmaril@243: } insilmaril@243: insilmaril@0: QColor OrnamentedObj::getColor () insilmaril@0: { insilmaril@0: return heading->getColor(); insilmaril@0: } insilmaril@0: insilmaril@442: FrameType OrnamentedObj::getFrameType() insilmaril@442: { insilmaril@442: return frame->getFrameType(); insilmaril@442: } insilmaril@442: insilmaril@442: void OrnamentedObj::setFrameType(const FrameType &t) insilmaril@442: { insilmaril@442: frame->setFrameType(t); insilmaril@442: if (t == NoFrame) insilmaril@442: linkpos=LinkBottom; insilmaril@442: else insilmaril@442: linkpos=LinkMiddle; insilmaril@442: insilmaril@442: calcBBoxSize(); insilmaril@442: positionBBox(); insilmaril@442: requestReposition(); insilmaril@442: } insilmaril@442: insilmaril@442: void OrnamentedObj::setFrameType(const QString &t) insilmaril@442: { insilmaril@442: frame->setFrameType(t); insilmaril@442: if (frame->getFrameType() == NoFrame) insilmaril@442: linkpos=LinkBottom; insilmaril@442: else insilmaril@442: linkpos=LinkMiddle; insilmaril@442: insilmaril@442: calcBBoxSize(); insilmaril@442: positionBBox(); insilmaril@442: requestReposition(); insilmaril@442: } insilmaril@442: insilmaril@442: void OrnamentedObj::setFramePenColor(QColor col) insilmaril@442: { insilmaril@442: frame->setPenColor (col); insilmaril@442: } insilmaril@442: insilmaril@442: QColor OrnamentedObj::getFramePenColor() insilmaril@442: { insilmaril@442: return frame->getPenColor (); insilmaril@442: } insilmaril@442: insilmaril@442: void OrnamentedObj::setFrameBrushColor(QColor col) insilmaril@442: { insilmaril@442: frame->setBrushColor (col); insilmaril@442: } insilmaril@442: insilmaril@442: QColor OrnamentedObj::getFrameBrushColor() insilmaril@442: { insilmaril@442: return frame->getBrushColor (); insilmaril@442: } insilmaril@0: insilmaril@177: void OrnamentedObj::positionContents() insilmaril@0: { insilmaril@177: double d=frame->getBorder()/2; insilmaril@177: double x=absPos.x(); insilmaril@177: double y=absPos.y(); insilmaril@227: insilmaril@227: double ox,oy; // Offset due to padding insilmaril@227: insilmaril@227: ox=leftPad + d; insilmaril@227: oy=topPad + d; insilmaril@227: insilmaril@227: systemFlags-> move (ox +x , oy + y ); insilmaril@0: insilmaril@0: // vertical align heading to bottom insilmaril@227: heading->move (ox + x + systemFlags->getBBox().width(), insilmaril@227: oy + y + ornamentsBBox.height() - heading->getHeight() insilmaril@0: ); insilmaril@227: standardFlags->move (ox +x + heading->getWidth() + systemFlags->getBBox().width() , oy + y ); insilmaril@227: insilmaril@408: ornamentsBBox.moveTopLeft ( QPointF ((int)(ox+x),(int)(oy+y))); insilmaril@408: clickBox.moveTopLeft (QPointF ((int)(ox + x), (int)(oy + y))); insilmaril@177: } insilmaril@0: insilmaril@177: void OrnamentedObj::move (double x, double y) insilmaril@177: { insilmaril@177: MapObj::move (x,y); insilmaril@177: positionContents(); insilmaril@0: updateLink(); insilmaril@0: requestReposition(); insilmaril@0: } insilmaril@0: insilmaril@408: void OrnamentedObj::move (QPointF 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@408: void OrnamentedObj::moveBy (QPointF 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@408: setRelPos (QPointF((int)x,(int)y)); insilmaril@388: if (parObj) insilmaril@388: { insilmaril@408: QPointF p=parObj->getChildPos(); insilmaril@388: move (p.x()+x, p.y() +y); insilmaril@388: } insilmaril@0: } insilmaril@0: insilmaril@408: void OrnamentedObj::move2RelPos(QPointF p) insilmaril@0: { insilmaril@218: move2RelPos (p.x(),p.y()); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::setNote(QString s) insilmaril@0: { insilmaril@0: note.setNote(s); insilmaril@417: updateNoteFlag(); insilmaril@0: } insilmaril@0: insilmaril@0: void OrnamentedObj::setNote(NoteObj n) insilmaril@0: { insilmaril@0: note=n; insilmaril@417: updateNoteFlag(); insilmaril@0: } insilmaril@0: insilmaril@0: QString OrnamentedObj::getNote() insilmaril@0: { insilmaril@0: return note.getNote(); insilmaril@0: } insilmaril@0: insilmaril@187: QString OrnamentedObj::getNoteASCII() insilmaril@187: { insilmaril@187: return note.getNoteASCII(); insilmaril@187: } insilmaril@187: insilmaril@187: QString OrnamentedObj::getNoteOpenDoc() insilmaril@187: { insilmaril@187: return note.getNoteOpenDoc(); insilmaril@187: } insilmaril@187: insilmaril@243: void OrnamentedObj::setURL(QString s) insilmaril@243: { insilmaril@243: url=s; insilmaril@243: if (!url.isEmpty()) insilmaril@243: systemFlags->activate("url"); insilmaril@243: else insilmaril@243: systemFlags->deactivate("url"); insilmaril@243: calcBBoxSize(); // recalculate bbox insilmaril@243: positionBBox(); // rearrange contents insilmaril@243: forceReposition(); insilmaril@243: } insilmaril@243: insilmaril@243: QString OrnamentedObj::getURL() insilmaril@243: { insilmaril@243: return url; insilmaril@243: } insilmaril@243: insilmaril@243: void OrnamentedObj::setVymLink(QString s) insilmaril@243: { insilmaril@243: if (!s.isEmpty()) insilmaril@243: { insilmaril@243: // We need the relative (from loading) insilmaril@243: // or absolute path (from User event) insilmaril@243: // and build the absolute path. insilmaril@243: // Note: If we have relative, use path of insilmaril@243: // current map to build absolute path insilmaril@243: QDir d(s); insilmaril@243: if (!d.path().startsWith ("/")) insilmaril@243: { insilmaril@243: QString p=mapEditor->getDestPath(); insilmaril@243: int i=p.findRev("/",-1); insilmaril@243: d.setPath(p.left(i)+"/"+s); insilmaril@243: d.convertToAbs(); insilmaril@243: } insilmaril@243: vymLink=d.path(); insilmaril@243: systemFlags->activate("vymLink"); insilmaril@243: } insilmaril@243: else insilmaril@243: { insilmaril@243: systemFlags->deactivate("vymLink"); insilmaril@243: vymLink=""; insilmaril@243: } insilmaril@243: calcBBoxSize(); // recalculate bbox insilmaril@243: positionBBox(); // rearrange contents insilmaril@243: forceReposition(); insilmaril@243: } insilmaril@243: insilmaril@243: QString OrnamentedObj::getVymLink() insilmaril@243: { insilmaril@243: return vymLink; insilmaril@243: } insilmaril@243: insilmaril@243: insilmaril@103: void OrnamentedObj::toggleStandardFlag(QString f, bool exclusive) insilmaril@0: { insilmaril@103: 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@366: void OrnamentedObj::deactivateStandardFlag(QString f) insilmaril@366: { insilmaril@366: standardFlags->deactivate(f); insilmaril@366: calcBBoxSize(); insilmaril@366: positionBBox(); insilmaril@366: move (absPos.x(), absPos.y() ); insilmaril@366: forceReposition(); insilmaril@366: } insilmaril@366: insilmaril@296: bool OrnamentedObj::isSetStandardFlag (QString f) insilmaril@296: { insilmaril@296: return standardFlags->isActive(f); insilmaril@296: } insilmaril@296: insilmaril@408: QString OrnamentedObj::getSystemFlagName(const QPointF &p) insilmaril@0: { insilmaril@0: return systemFlags->getFlagName(p); insilmaril@0: } insilmaril@0: insilmaril@236: bool OrnamentedObj::isActiveFlag (const QString & fname) insilmaril@236: { insilmaril@236: if (standardFlags->isActive (fname) ) return true; insilmaril@236: return false; insilmaril@236: } insilmaril@236: insilmaril@417: void OrnamentedObj::getNoteFromTextEditor () insilmaril@417: { insilmaril@417: note.setFilenameHint (textEditor->getFilename()); insilmaril@417: note.setFontHint (textEditor->getFontHint() ); insilmaril@417: setNote( textEditor->getText() ); insilmaril@417: } insilmaril@417: insilmaril@0: void OrnamentedObj::updateNoteFlag() insilmaril@0: { insilmaril@417: bool noteEmpty; insilmaril@417: if (isNoteInEditor) insilmaril@417: noteEmpty=textEditor->isEmpty(); insilmaril@417: else insilmaril@417: noteEmpty=note.isEmpty(); insilmaril@0: insilmaril@417: if (!noteEmpty) insilmaril@417: { insilmaril@417: if (systemFlags->isActive ("note")) return; insilmaril@417: systemFlags->activate("note"); insilmaril@417: } insilmaril@417: else insilmaril@417: { insilmaril@417: if (!systemFlags->isActive ("note")) return; insilmaril@417: systemFlags->deactivate("note"); insilmaril@417: } insilmaril@417: mapEditor->setChanged(); insilmaril@417: calcBBoxSize(); insilmaril@417: positionBBox(); insilmaril@417: move (absPos.x(), absPos.y() ); insilmaril@417: forceReposition(); insilmaril@0: insilmaril@417: } insilmaril@0: insilmaril@366: void OrnamentedObj::updateFlagsToolbar() insilmaril@366: { insilmaril@366: standardFlags->updateToolbar(); insilmaril@366: } insilmaril@366: insilmaril@243: void OrnamentedObj::setHideInExport(bool b) insilmaril@243: { insilmaril@260: if (parObj) insilmaril@260: { insilmaril@260: // Don't allow to MapCenter to be hidden insilmaril@260: hideExport=b; insilmaril@260: if (b) insilmaril@260: systemFlags->activate("hideInExport"); insilmaril@260: else insilmaril@260: systemFlags->deactivate("hideInExport"); insilmaril@260: calcBBoxSize(); insilmaril@260: positionBBox(); insilmaril@260: requestReposition(); insilmaril@260: } insilmaril@243: } insilmaril@243: insilmaril@243: bool OrnamentedObj::hideInExport() insilmaril@243: { insilmaril@243: return hideExport; insilmaril@243: } insilmaril@243: insilmaril@260: bool OrnamentedObj::isHidden() insilmaril@260: { insilmaril@260: return hidden; insilmaril@260: } insilmaril@260: insilmaril@243: QString OrnamentedObj::getOrnAttr() insilmaril@243: { insilmaril@243: QString posAttr; insilmaril@252: insilmaril@388: if (depth==0) insilmaril@388: posAttr= insilmaril@408: attribut("absPosX",QString().setNum(absPos.x())) + insilmaril@408: attribut("absPosY",QString().setNum(absPos.y())); insilmaril@243: else insilmaril@252: { insilmaril@395: if (depth==1 || typeid (*this)==typeid (FloatImageObj)) insilmaril@388: posAttr= insilmaril@408: attribut("relPosX",QString().setNum(relPos.x())) + insilmaril@408: attribut("relPosY",QString().setNum(relPos.y())); insilmaril@252: else insilmaril@252: posAttr=""; insilmaril@252: } insilmaril@243: insilmaril@243: QString urlAttr; insilmaril@243: if (!url.isEmpty()) insilmaril@243: urlAttr=attribut ("url",url); insilmaril@243: insilmaril@243: QString vymLinkAttr; insilmaril@243: if (!vymLink.isEmpty()) insilmaril@243: vymLinkAttr=attribut ("vymLink",convertToRel(mapEditor->getDestPath(),vymLink) ); insilmaril@243: insilmaril@243: QString hideExpAttr; insilmaril@243: if (hideExport) insilmaril@243: hideExpAttr= attribut("hideInExport","true"); insilmaril@243: else insilmaril@243: hideExpAttr=""; insilmaril@243: insilmaril@243: return posAttr +urlAttr +vymLinkAttr +getLinkAttr() +hideExpAttr; insilmaril@243: } insilmaril@243: