insilmaril@0: #ifndef MAPEDITOR_H insilmaril@0: #define MAPEDITOR_H insilmaril@0: insilmaril@366: #include insilmaril@366: #include insilmaril@0: insilmaril@0: #include "mapcenterobj.h" insilmaril@175: #include "file.h" insilmaril@377: #include "historywindow.h" insilmaril@0: #include "misc.h" insilmaril@366: #include "selection.h" insilmaril@366: #include "settings.h" insilmaril@0: insilmaril@366: class Q3NetworkOperation; insilmaril@366: class Q3UrlOperator; insilmaril@119: insilmaril@366: class MapEditor : public Q3CanvasView , public xmlObj { insilmaril@0: Q_OBJECT insilmaril@0: insilmaril@0: public: insilmaril@390: MapEditor(QWidget* parent=0, const char* name=0, Qt::WFlags f=0); insilmaril@0: ~MapEditor(); insilmaril@390: QColor getColor(); insilmaril@390: QColor getBackgroundColor(); insilmaril@0: MapCenterObj* getMapCenter(); insilmaril@366: Q3Canvas* getCanvas(); insilmaril@0: void adjustCanvasSize();// adjust canvas size to map and scrollview insilmaril@139: bool isRepositionBlocked(); // block while load or undo insilmaril@0: insilmaril@0: private: insilmaril@295: QString getName(LinkableMapObj*); // Get e.g. heading or filename insilmaril@0: void makeTmpDirs(); // create temporary directories insilmaril@106: QString saveToDir(const QString&,const QString &,bool, const QPoint &,LinkableMapObj*); insilmaril@366: void saveStateComplete (const QString &); insilmaril@393: void saveStateChangingPart (LinkableMapObj *, const QString &); insilmaril@393: void saveStateRemovingPart (LinkableMapObj *, const QString &); insilmaril@366: void saveStateConstSelection (const QString &, const QString &, const QString &); insilmaril@366: void saveState(LinkableMapObj *, const QString &, LinkableMapObj *, const QString &, const QString &); insilmaril@366: void saveState(const QString &, const QString &, const QString &, const QString &, const QString &); insilmaril@366: void saveState(const SaveMode&, const QString &, const QString &, const QString &, const QString &, const QString &, LinkableMapObj *); insilmaril@393: public: insilmaril@106: void parseAtom(const QString &); insilmaril@393: private: insilmaril@119: void addFloatImage(const QPixmap &img); insilmaril@119: insilmaril@119: private slots: insilmaril@119: void fetchImage(const QString &img); insilmaril@366: void imageDataFetched(const QByteArray &, Q3NetworkOperation *); insilmaril@366: void imageDataFinished(Q3NetworkOperation *); insilmaril@0: insilmaril@0: public: insilmaril@295: void toggleHistoryWindow(); 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@205: ErrorCode load (QString, LoadMode ); // newmap, import/replace selection insilmaril@163: public: 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@260: void setHideTmpMode (HideTmpMode); // temporary hide stuff insilmaril@260: HideTmpMode getHideTmpMode(); // temporary hide stuff insilmaril@0: public: insilmaril@260: void setExportMode (bool); // temporary hide stuff during export insilmaril@366: void exportImage (QString fn); // export as PNG insilmaril@366: void exportImage (QString fn, QString); // export in given format insilmaril@185: void exportOOPresentation(const QString &,const QString &); insilmaril@0: void exportXML(const QString&); // export to directory insilmaril@0: void clear(); // clear map insilmaril@106: void copy(); // copy branch to clipboard insilmaril@163: void redo(); // redo last action insilmaril@390: bool isRedoAvailable(); insilmaril@0: void undo(); // undo last action insilmaril@390: bool isUndoAvailable(); insilmaril@381: void gotoStep (int);// goto a step in history insilmaril@393: void addMapReplace(const QString & undoSel, const QString & path); insilmaril@393: void addMapInsert (const QString & path, int pos); insilmaril@0: private: insilmaril@166: void 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@393: void move (const int &x, const int &y); insilmaril@393: void moveRel (const int &x, const int &y); insilmaril@0: void moveBranchUp(); insilmaril@0: void moveBranchDown(); insilmaril@393: QString getHeading (bool &ok,QPoint &p); // Get heading, ok if selection is branch insilmaril@366: void setHeading(const QString &); insilmaril@106: private: insilmaril@366: void setHeadingInt(const QString &); insilmaril@366: void setURLInt(const QString &); // Just set the URL for selection insilmaril@366: void setVymLinkInt(const QString &); // Set vymLink for selection insilmaril@366: BranchObj* addNewBranchInt(int); // pos allows to add above/below selection insilmaril@106: public: insilmaril@0: void addNewBranch(int); // pos allows to add above/below selection insilmaril@98: void addNewBranchHere(); // insert and make selection its insilmaril@0: void deleteSelection(); insilmaril@0: LinkableMapObj* getSelection(); // returns selection insilmaril@0: void unselect(); // before changing current noteedit insilmaril@0: void reselect(); // after changing current noteedit insilmaril@366: bool select(const QString &); // Select by string insilmaril@366: QString getSelectString(); insilmaril@0: private: insilmaril@366: void selectInt(LinkableMapObj*); insilmaril@366: void selectNextBranchInt(); // Increment number of branch insilmaril@366: void selectPrevBranchInt(); // 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 editURL(); // edit the URL insilmaril@266: QString getURL(); // returns URL of selection or "" insilmaril@366: QStringList getURLs(); // returns URLs of subtree insilmaril@0: void editHeading2URL(); // copy heading to URL insilmaril@0: void editBugzilla2URL(); // create URL to Bugzilla insilmaril@175: void editFATE2URL(); // create URL to FATE 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@366: QStringList getVymLinks(); // return paths in subtree insilmaril@243: void toggleHideExport(); // toggle the export flag insilmaril@295: void removeBranchKeepChilds(); // remove but keep childs insilmaril@98: void removeChilds(); // remove childs insilmaril@0: void editMapInfo(); // dialog to enter author, ... insilmaril@0: void updateActions(); // update e.g. format buttons insilmaril@160: void updateNoteFlag(); // when TextEditor changes 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@97: void setDefXLinkColor(QColor); insilmaril@97: QColor getDefXLinkColor(); insilmaril@97: void setDefXLinkWidth (int); insilmaril@97: int getDefXLinkWidth(); insilmaril@0: void toggleLinkColorHint(); // after changing linkStyles insilmaril@0: void selectLinkColor(); insilmaril@0: void toggleScroll(); insilmaril@0: void unScrollAll(); insilmaril@0: void loadFloatImage (); insilmaril@366: void saveFloatImage (); insilmaril@0: void setFrame(const FrameType &); insilmaril@175: void setIncludeImagesVer(bool); insilmaril@175: void setIncludeImagesHor(bool); insilmaril@160: void setHideLinkUnselected (bool); insilmaril@160: bool getHideLinkUnselected (); insilmaril@0: private: insilmaril@366: void importDirInt(BranchObj *,QDir); insilmaril@0: public: insilmaril@0: void importDir(); insilmaril@95: void followXLink (int); insilmaril@95: void editXLink (int); insilmaril@366: void testFunction(); // just testing new stuff insilmaril@366: // set /mainwindo/showTestMenu=true... 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@119: virtual void contentsDragEnterEvent(QDragEnterEvent *event); insilmaril@119: virtual void contentsDropEvent(QDropEvent *event); insilmaril@0: private: insilmaril@366: Q3Canvas* 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: insilmaril@0: QColor actColor; // actual color insilmaril@97: QColor defLinkColor; // default color for links insilmaril@97: QColor defXLinkColor; // default color for xlinks insilmaril@97: int defXLinkWidth; // default width for xlinks 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@95: XLinkObj* tmpXLink; insilmaril@366: insilmaril@366: Selection xelection; 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@129: QPoint movingObj_orgPos; // org. pos of mouse before move insilmaril@366: QPoint movingObj_orgRelPos; // org. relative pos of mouse before move 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: 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@393: static int mapNum; // unique number for Editor 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: insilmaril@377: QString tmpMapDir; // tmp directory with undo history insilmaril@366: QString histPath; // Path to history file insilmaril@381: int stepsTotal; // total number of steps (undos+redos) insilmaril@366: SimpleSettings undoSet; // undo/redo commands insilmaril@139: bool blockReposition; // block while load or undo insilmaril@139: bool blockSaveState; // 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@260: HideTmpMode hidemode; // true while exporting to hide some stuff insilmaril@260: insilmaril@0: void resizeEvent( QResizeEvent * ); insilmaril@119: insilmaril@381: Q3UrlOperator *urlOperator; insilmaril@381: QDataStream *imageData; insilmaril@381: QBuffer *imageBuffer; insilmaril@119: insilmaril@377: HistoryWindow historyWindow; insilmaril@295: insilmaril@0: }; insilmaril@0: #endif insilmaril@0: