insilmaril@0: #ifndef MAPEDITOR_H insilmaril@0: #define MAPEDITOR_H insilmaril@0: insilmaril@0: #include insilmaril@0: #include insilmaril@0: #include insilmaril@0: #include insilmaril@0: #include insilmaril@0: #include insilmaril@0: insilmaril@0: #include "mapcenterobj.h" insilmaril@0: #include "misc.h" insilmaril@0: insilmaril@0: class MapEditor : public QCanvasView , public xmlObj { insilmaril@0: Q_OBJECT insilmaril@0: insilmaril@0: public: insilmaril@0: MapEditor(QWidget* parent=0, bool interactive=false, const char* name=0, WFlags f=0); insilmaril@0: ~MapEditor(); insilmaril@0: QColor color(); insilmaril@0: QColor backgroundColor(); insilmaril@0: MapCenterObj* getMapCenter(); insilmaril@0: QCanvas* getCanvas(); insilmaril@0: void adjustCanvasSize();// adjust canvas size to map and scrollview insilmaril@0: bool blockReposition(); // block while load or undo insilmaril@0: insilmaril@0: private: insilmaril@0: void makeTmpDirs(); // create temporary directories insilmaril@0: void delTmpDirs(); // delete temporary directories insilmaril@0: void makeSubDirs(const QString&); insilmaril@0: // create subdirs in dir insilmaril@0: QString saveToDir(const QString&,const QString &,bool, const QPoint insilmaril@0: &,SaveMode); insilmaril@0: void saveState(); // save actual state to backup insilmaril@0: void saveState(const SaveMode&, LinkableMapObj *); insilmaril@0: insilmaril@0: private slots: insilmaril@0: void finishedLineEditNoSave(); insilmaril@0: insilmaril@0: public: insilmaril@0: bool isDefault(); // false, if map was changed once insilmaril@0: bool isUnsaved(); // save necessary insilmaril@0: bool hasChanged(); // undo possible insilmaril@0: void setChanged(); // called from NoteEditor via LMO insilmaril@0: void closeMap(); insilmaril@0: void setFilePath (QString); insilmaril@0: void setFilePath (QString,QString); insilmaril@0: QString getFilePath (); // Full path e.g. "/home/tux/map.xml" insilmaril@0: QString getFileName (); // e.g. "map.xml" insilmaril@0: QString getMapName (); // e.g. "map" insilmaril@0: QString getDestPath (); // e.g. "/home/tux/map.vym" insilmaril@0: int load (QString&, const LoadMode &); // newmap, import/replace selection insilmaril@0: int save(const SaveMode &); // Save map insilmaril@0: void setZipped(bool); // save map zipped insilmaril@0: bool saveZipped(); // 1 if file will be saved zipped insilmaril@0: void print(); // print canvas insilmaril@0: private: insilmaril@0: QPixmap getPixmap(); insilmaril@0: public: insilmaril@0: void exportImage (QString fn); // export as PNG insilmaril@0: void exportImage (QString fn, int); // export in given format insilmaril@0: void exportASCII(); insilmaril@0: void exportXML(const QString&); // export to directory insilmaril@0: void clear(); // clear map insilmaril@0: void undo(); // undo last action insilmaril@0: void copy(); // copy branch to clipboard insilmaril@0: private: insilmaril@0: LinkableMapObj* pasteNoSave(); // paste clipboard to branch insilmaril@0: void cutNoSave(); // cut to clipboard insilmaril@0: public: insilmaril@0: void paste(); // paste clipboard to branch and backup insilmaril@0: void cut(); // cut to clipboard and backup insilmaril@0: void moveBranchUp(); insilmaril@0: void moveBranchDown(); insilmaril@0: void editHeading(); insilmaril@0: void addNewBranch(int); // pos allows to add above/below selection insilmaril@0: void deleteSelection(); insilmaril@0: LinkableMapObj* getSelection(); // returns selection insilmaril@83: LinkableMapObj* findObj (QString); insilmaril@83: bool select(const QString &); // Select insilmaril@0: void unselect(); // before changing current noteedit insilmaril@0: void reselect(); // after changing current noteedit insilmaril@0: private: insilmaril@0: void selectNextBranch(); // Increment number of branch insilmaril@0: void selectPrevBranch(); // Decrement number of branch insilmaril@0: public: insilmaril@0: void selectUpperBranch(); insilmaril@0: void selectLowerBranch(); insilmaril@0: void selectLeftBranch(); insilmaril@0: void selectRightBranch(); insilmaril@0: void selectFirstBranch(); insilmaril@0: void selectLastBranch(); insilmaril@0: void setColor(QColor); insilmaril@0: void selectBackgroundColor(); insilmaril@0: void setBackgroundColor(QColor); insilmaril@0: QColor pickColor(); insilmaril@0: void colorItem(); insilmaril@0: void colorBranch(); insilmaril@0: void toggleStandardFlag(QString); insilmaril@0: virtual void setViewCenter(); // needed for zooming insilmaril@0: BranchObj* findText(QString,bool); // Find object insilmaril@0: void findReset(); // Reset Find insilmaril@0: void openURL(); // open URL in external browser insilmaril@0: void editURL(); // edit the URL insilmaril@0: void editHeading2URL(); // copy heading to URL insilmaril@0: void editBugzilla2URL(); // create URL to Bugzilla insilmaril@0: void editVymLink(); // edit link to another map insilmaril@0: void deleteVymLink(); // delete link to another map insilmaril@0: QString getVymLink(); // return path to map insilmaril@0: void editMapInfo(); // dialog to enter author, ... insilmaril@0: void updateActions(); // update e.g. format buttons insilmaril@0: void setLinkStyle (LinkStyle); // Set style of link insilmaril@0: LinkStyle getLinkStyle (); // requested in LMO insilmaril@0: void setLinkColor(QColor); // default color of links insilmaril@0: void setLinkColorHint(); // color of links insilmaril@0: void setLinkColorHint(LinkColorHint); // color of links insilmaril@0: LinkColorHint getLinkColorHint(); insilmaril@0: QColor getDefLinkColor(); insilmaril@0: void toggleLinkColorHint(); // after changing linkStyles insilmaril@0: void selectLinkColor(); insilmaril@0: void toggleScroll(); insilmaril@0: void unScrollAll(); insilmaril@0: void loadFloatImage (); insilmaril@0: void saveFloatImage (int); insilmaril@0: void toggleFloatExport(); insilmaril@0: void setFrame(const FrameType &); insilmaril@0: private: insilmaril@0: void importDir(BranchObj *,QDir); insilmaril@0: public: insilmaril@0: void importDir(); insilmaril@89: void followLink (int); insilmaril@94: void editLink (int); insilmaril@0: void testFunction(); // FIXME just testing insilmaril@0: insilmaril@0: protected: insilmaril@0: void ensureSelectionVisible(); insilmaril@0: virtual void updateViewCenter(); // needed for zooming insilmaril@0: virtual void contentsContextMenuEvent ( QContextMenuEvent *e ); insilmaril@0: virtual void contentsMousePressEvent(QMouseEvent*); insilmaril@0: virtual void contentsMouseReleaseEvent(QMouseEvent*); insilmaril@0: virtual void contentsMouseDoubleClickEvent(QMouseEvent*); insilmaril@0: virtual void contentsMouseMoveEvent(QMouseEvent*); insilmaril@0: insilmaril@0: private: insilmaril@0: QCanvas* mapCanvas; insilmaril@0: MapCenterObj* mapCenter; insilmaril@0: insilmaril@0: bool adjustCanvasRequested; // collect requests until end of user event insilmaril@0: BranchObj *editingBO; // entering Text into BO insilmaril@0: QLineEdit* lineedit; insilmaril@0: insilmaril@0: QColor actColor; // actual color insilmaril@0: QColor deflinkcolor; // default color for links insilmaril@0: LinkColorHint linkcolorhint;// use heading color or own color insilmaril@0: LinkStyle linkstyle; // default style for links insilmaril@0: insilmaril@0: QCursor handOpenCursor; // cursor while moving canvas view insilmaril@0: QCursor pickColorCursor; // cursor while picking color insilmaril@83: bool pickingColor; insilmaril@83: bool drawingLink; // true while creating a link insilmaril@93: bool copyingObj; // true while creating a link insilmaril@83: LinkObj* tmpLink; insilmaril@0: insilmaril@0: LinkableMapObj* selection; // select a LinkableMapObj insilmaril@0: LinkableMapObj* selectionLast; // last selection insilmaril@0: MapObj* movingObj; // moving a MapObj insilmaril@83: MapObj* linkingObj_src; // part of a link insilmaril@0: QPoint movingObj_start; // rel. pos of mouse to absPos insilmaril@0: QPoint movingCont_start; // inital pos of moving Content or insilmaril@0: QPoint movingVec; // how far has Content moved insilmaril@0: QPoint movingCenter; // used when zooming insilmaril@0: QPrinter* printer; // Printing insilmaril@0: insilmaril@0: bool mapDefault; // Flag if map is untouched insilmaril@0: bool mapChanged; // Flag if undo is possible insilmaril@0: bool mapUnsaved; // Flag if map should be saved insilmaril@0: QString backupXML; // backup (XML) for undo insilmaril@0: LinkableMapObj* undoSelection; // replace this LMO with vympart from backup insilmaril@0: // if != NULL insilmaril@0: insilmaril@0: bool printFrame; // Print frame around map insilmaril@0: bool printFooter; // Print footer below map insilmaril@0: insilmaril@0: bool zipped; // should map be zipped insilmaril@0: QString fileName; // short name of file (for tab) insilmaril@0: QString filePath; // path to file which will be saved insilmaril@0: QString fileDir; // dir where file is saved insilmaril@0: QString destPath; // path to .vym file (needed for vymlinks) insilmaril@0: QString mapName; // fileName without ".vym" insilmaril@0: QString lastImageDir; // save dir for adding images insilmaril@0: insilmaril@0: bool isInteractive; // non interactive don't need tmpdirs insilmaril@0: QString bakMapDir; // tmp directory with data for undo insilmaril@0: bool blockreposition; // block while load or undo insilmaril@0: insilmaril@0: BranchObj* itFind; // next object in find process insilmaril@0: bool EOFind; // true, if search failed insilmaril@0: insilmaril@0: QPoint exportOffset; // set before export, used in save insilmaril@0: void resizeEvent( QResizeEvent * ); insilmaril@0: }; insilmaril@0: #endif insilmaril@0: