insilmaril@650: #ifndef VYMMODEL_H insilmaril@650: #define VYMMODEL_H insilmaril@650: insilmaril@650: #include insilmaril@721: #include insilmaril@650: insilmaril@721: #include "file.h" insilmaril@650: #include "mapcenterobj.h" insilmaril@650: #include "mapeditor.h" insilmaril@721: #include "parser.h" insilmaril@721: #include "selection.h" insilmaril@726: #include "treeitem.h" insilmaril@725: #include "treemodel.h" insilmaril@650: insilmaril@749: class BranchItem; insilmaril@753: class MapCenterItem; insilmaril@754: class MapEditor; insilmaril@749: insilmaril@726: class VymModel : public TreeModel { insilmaril@696: Q_OBJECT insilmaril@696: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // General housekeeping insilmaril@721: //////////////////////////////////////////// insilmaril@721: private: insilmaril@721: QGraphicsScene *mapScene; insilmaril@721: QString version; //!< version string saved in vym file insilmaril@721: QString author; insilmaril@721: QString comment; insilmaril@721: QDate date; insilmaril@721: insilmaril@650: public: insilmaril@650: VymModel(); insilmaril@650: ~VymModel (); insilmaril@650: void clear(); insilmaril@650: void init(); insilmaril@721: void makeTmpDirectories(); //!< create temporary directories e.g. for history insilmaril@721: insilmaril@754: MapEditor* getMapEditor(); // FIXME-2 still necessary? insilmaril@721: insilmaril@721: bool isRepositionBlocked(); //!< While load or undo there is no need to update graphicsview insilmaril@721: insilmaril@721: void updateActions(); //!< Update buttons in mainwindow insilmaril@721: insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Load/save insilmaril@721: //////////////////////////////////////////// insilmaril@721: private: insilmaril@721: insilmaril@721: bool zipped; // should map be zipped insilmaril@721: static int mapNum; // unique number for model used in save/undo insilmaril@721: FileType fileType; // type of file, e.g. vym, freemind... insilmaril@721: QString fileName; // short name of file (for tab) insilmaril@721: QString filePath; // path to file which will be saved insilmaril@721: QString fileDir; // dir where file is saved insilmaril@721: QString destPath; // path to .vym file (needed for vymlinks) insilmaril@721: QString mapName; // fileName without ".vym" insilmaril@721: insilmaril@721: QString tmpMapDir; // tmp directory with undo history insilmaril@721: insilmaril@721: QTimer *autosaveTimer; insilmaril@721: QTimer *fileChangedTimer; insilmaril@721: QDateTime fileChangedTime; insilmaril@721: insilmaril@721: public: insilmaril@721: /*! This function saves all information of the map to disc. insilmaril@721: saveToDir also calls the functions for all BranchObj and other objects in the map. insilmaril@721: The structure of the map itself is returned as QString and passed back to Main, insilmaril@721: where saveToDir is called initially insilmaril@721: */ insilmaril@753: QString saveToDir (const QString &tmpdir, const QString &prefix, bool writeflags, const QPointF &offset, TreeItem *saveSel); insilmaril@721: insilmaril@745: /*! Save all data in tree*/ insilmaril@745: QString saveTreeToDir (const QString&,const QString&,int, const QPointF&);// Save data recursivly to tempdir insilmaril@745: insilmaril@745: insilmaril@721: /*! \brief Sets filepath, filename and mapname insilmaril@721: insilmaril@721: If the filepath is "/home/tux/map.xml", then the filename will be set insilmaril@721: to map.xml. The destname is needed for vymLinks, pointing to another map. insilmaril@721: The destname holds the real name of the file, after it has been compressed, e.g. "map.vym" insilmaril@721: */ insilmaril@721: insilmaril@721: insilmaril@721: /*! \brief Set File path insilmaril@721: insilmaril@721: The destname is needed to construct the references between maps insilmaril@721: */ insilmaril@721: void setFilePath (QString filepath,QString destname); insilmaril@721: void setFilePath (QString); //!< Overloaded for convenience insilmaril@721: QString getFilePath (); //!< Full path e.g. "/home/tux/map.xml" insilmaril@721: QString getFileName (); //!< e.g. "map.xml" insilmaril@721: QString getMapName (); //!< e.g. "map" insilmaril@721: QString getDestPath (); //!< e.g. "/home/tux/map.vym" insilmaril@721: insilmaril@721: /*! \brief Load map insilmaril@721: insilmaril@721: The data is read from file. Depending on LoadMode the current insilmaril@721: selection gets replaced by data or the data is appended. insilmaril@721: */ insilmaril@721: ErrorCode load (QString, const LoadMode &, const FileType& ); // newmap, import/replace selection insilmaril@721: insilmaril@721: public: insilmaril@721: /*! \brief Save the map to file */ insilmaril@721: ErrorCode save(const SaveMode &); insilmaril@721: insilmaril@721: private: insilmaril@721: void addMapReplaceInt(const QString & undoSel, const QString & path); insilmaril@721: void addMapInsertInt (const QString & path, int pos); insilmaril@721: insilmaril@721: FloatImageObj* loadFloatImageInt (QString); insilmaril@721: void saveFloatImageInt (FloatImageObj*, const QString &, const QString &); insilmaril@721: public: insilmaril@721: void loadFloatImage (); insilmaril@721: void saveFloatImage (); insilmaril@721: insilmaril@721: private: insilmaril@721: void importDirInt(BranchObj *,QDir); insilmaril@721: void importDirInt(const QString&); insilmaril@721: public: insilmaril@721: void importDir(); insilmaril@721: insilmaril@721: private slots: insilmaril@721: void autosave (); insilmaril@721: void fileChanged(); insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // history (undo/redo) insilmaril@721: //////////////////////////////////////////// insilmaril@721: private: insilmaril@721: bool mapDefault; //!< Flag if map is untouched insilmaril@721: bool mapChanged; //!< Flag if undo is possible insilmaril@721: bool mapUnsaved; //!< Flag if map should be saved insilmaril@721: insilmaril@721: QString histPath; //!< Path to history file insilmaril@721: SimpleSettings undoSet; //!< undo/redo commands, saved in histPath insilmaril@721: int stepsTotal; //!< total number of steps (undos+redos) insilmaril@721: int curStep; //!< Current step in history (ring buffer) insilmaril@721: int curClipboard; //!< number of history step, which is the current clipboard insilmaril@721: int redosAvail; //!< Available number of redo steps insilmaril@721: int undosAvail; //!< Available number of undo steps insilmaril@721: bool blockReposition; //!< block while load or undo insilmaril@721: bool blockSaveState; //!< block while load or undo insilmaril@721: public: insilmaril@721: bool isDefault(); //!< true, if map is still the empty default map insilmaril@721: void makeDefault(); //!< Reset changelog, declare this as default map insilmaril@721: bool hasChanged() ; //!< true, if something has changed and is not saved yet insilmaril@721: void setChanged(); //!< called from TextEditor via LinkableMapObj insilmaril@721: insilmaril@721: /*! \brief Get name of object insilmaril@721: insilmaril@721: Returns heading of a branch or name of an object for use in comment insilmaril@721: of undo/redo history insilmaril@721: */ insilmaril@721: QString getObjectName(const LinkableMapObj*); insilmaril@753: QString getObjectName(const TreeItem*); insilmaril@721: insilmaril@721: void redo(); //!< Redo last action insilmaril@721: bool isRedoAvailable(); //!< True, if redo is available insilmaril@721: void undo(); //!< Undo last action insilmaril@721: bool isUndoAvailable(); //!< True, if undo is available insilmaril@721: void gotoHistoryStep (int); //!< Goto a specifig step in history insilmaril@721: insilmaril@721: insilmaril@721: QString getHistoryPath(); //!< Path to directory containing the history insilmaril@721: insilmaril@721: /*! \brief Save the current changes in map insilmaril@721: insilmaril@721: Two commands and selections are saved: insilmaril@721: insilmaril@721: - undocommand and undoselection to undo the change insilmaril@721: - redocommand and redoselection to redo the action after an undo insilmaril@721: insilmaril@721: Additionally a comment is logged. insilmaril@721: insilmaril@721: */ insilmaril@721: void saveState( insilmaril@721: const SaveMode& savemode, insilmaril@721: const QString &undoSelection, insilmaril@721: const QString &undoCommand, insilmaril@721: const QString &redoSelection, insilmaril@721: const QString &redoCommand, insilmaril@721: const QString &comment, insilmaril@753: TreeItem *saveSelection); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveStateChangingPart( insilmaril@753: TreeItem *undoSelection, insilmaril@753: TreeItem* redoSelection, insilmaril@721: const QString &redoCommand, insilmaril@721: const QString &comment); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveStateRemovingPart( insilmaril@753: TreeItem *redoSelection, insilmaril@721: const QString &comment); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveState( insilmaril@753: TreeItem *undoSelection, insilmaril@721: const QString &undoCommand, insilmaril@753: TreeItem *redoSelection, insilmaril@721: const QString &redoCommand, insilmaril@721: const QString &comment); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveState( insilmaril@721: const QString &undoSelection, insilmaril@721: const QString &undoCommand, insilmaril@721: const QString &redoSelection, insilmaril@721: const QString &redoCommand, insilmaril@721: const QString &comment) ; insilmaril@721: void saveState( insilmaril@721: const QString &undoCommand, insilmaril@721: const QString &redoCommand, insilmaril@721: const QString &comment) ; insilmaril@721: insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // unsorted so far insilmaril@721: //////////////////////////////////////////// insilmaril@721: public: insilmaril@721: void setScene(QGraphicsScene *s); insilmaril@721: QGraphicsScene *getScene(); insilmaril@721: insilmaril@761: TreeItem* findBySelectString (QString s); insilmaril@754: TreeItem* findID (const QString &s); // find MapObj by previously set ID insilmaril@721: insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Interface insilmaril@721: //////////////////////////////////////////// insilmaril@721: public: insilmaril@650: void setVersion(const QString &); insilmaril@650: void setAuthor (const QString &); insilmaril@650: QString getAuthor (); insilmaril@650: void setComment (const QString &); insilmaril@650: QString getComment (); insilmaril@650: QString getDate(); insilmaril@749: int branchCount(); insilmaril@721: insilmaril@721: public: insilmaril@721: void setHeading(const QString &); //!< Set heading of branch insilmaril@725: // QString getHeading (bool &ok,QPoint &p); //!< Get heading, ok if selection is branch insilmaril@721: insilmaril@721: private: insilmaril@750: BranchItem* findCurrent; // next object in find process insilmaril@750: BranchItem* findPrevious; // next object in find process insilmaril@721: bool EOFind; // true, if search failed insilmaril@721: public: insilmaril@753: BranchItem* findText(QString,bool); // Find object insilmaril@721: void findReset(); // Reset Search insilmaril@721: insilmaril@721: void setURL(const QString &url); insilmaril@721: QString getURL(); // returns URL of selection or "" insilmaril@721: QStringList getURLs(); // returns URLs of subtree insilmaril@721: insilmaril@721: void linkFloatImageTo(const QString &); insilmaril@721: insilmaril@721: void setFrameType(const FrameObj::FrameType &); insilmaril@721: void setFrameType(const QString &); insilmaril@721: void setFramePenColor (const QColor &); insilmaril@721: void setFrameBrushColor (const QColor &); insilmaril@721: void setFramePadding (const int &); insilmaril@721: void setFrameBorderWidth (const int &); insilmaril@721: void setIncludeImagesVer(bool); insilmaril@721: void setIncludeImagesHor(bool); insilmaril@721: void setHideLinkUnselected (bool); insilmaril@721: insilmaril@721: /*! Should object be hidden in exports (clouded)? */ insilmaril@721: void setHideExport(bool); insilmaril@721: insilmaril@721: /*! Should object be hidden in exports (clouded)? */ insilmaril@721: void toggleHideExport(); insilmaril@721: insilmaril@721: void copy(); //!< Copy to clipboard insilmaril@721: private: insilmaril@721: void pasteNoSave(const int &n); //!< paste clipboard to branch insilmaril@721: public: insilmaril@721: void paste(); //!< Paste clipboard to branch and backup insilmaril@721: void cut(); //!< Cut to clipboard (and copy) insilmaril@721: insilmaril@767: void moveUp(); //!< Move branch up insilmaril@767: void moveDown(); //!< Move branch down insilmaril@721: void sortChildren(); //!< Sort children lexically insilmaril@721: insilmaril@726: // The create methods are used to quickly parse a XML file insilmaril@753: MapCenterItem* createMapCenter(); //!< Create and select MapCenter insilmaril@753: BranchItem* createBranch(); //!< Create and select Branch insilmaril@753: TreeItem* createImage(); //!< Create and select image insilmaril@726: insilmaril@721: /*! \brief Add new mapcenter insilmaril@721: insilmaril@721: Disclaimer: Still experimental, not fully supported yet. insilmaril@721: */ insilmaril@753: MapCenterItem* addMapCenter(); insilmaril@721: private: insilmaril@753: MapCenterItem* addMapCenter(QPointF absPos); insilmaril@652: insilmaril@721: /*! \brief Add new branch insilmaril@650: insilmaril@721: Depending on num the new branch is created insilmaril@652: insilmaril@721: -3 above selection as child of selections parent insilmaril@721: -2 as child of selection insilmaril@721: -1 below selection as child of selections parent insilmaril@721: 0..n insert at a specific position in selections parent insilmaril@721: (needed for free relinking) insilmaril@721: */ insilmaril@723: insilmaril@721: private: insilmaril@755: BranchItem* addNewBranchInt(int); // pos allows to add above/below selection insilmaril@721: public: insilmaril@721: /*! \Add new branch insilmaril@721: insilmaril@721: Depending on num the new branch is created insilmaril@721: -1 above selection insilmaril@721: 0 as child of selection insilmaril@721: 1 below selection insilmaril@721: */ insilmaril@755: BranchItem* addNewBranch(int pos); insilmaril@755: BranchItem* addNewBranchBefore(); //!< Insert branch between selection and its parent insilmaril@767: /*! \brief Relink a branch to a new destination dst insilmaril@767: Relinks branch to dst at branch position pos. There is no saveState insilmaril@767: here, as for example moveUp or moving in MapEditor have insilmaril@767: different needs to call saveState insilmaril@767: Returns true if relinking was successful. insilmaril@767: */ insilmaril@767: bool relinkBranch (BranchItem* branch, BranchItem* dst, int pos =-1); insilmaril@767: insilmaril@721: void deleteSelection(); //!< Delete selection insilmaril@721: void deleteKeepChildren(); //!< remove branch, but keep children insilmaril@721: void deleteChildren(); //!< keep branch, but remove children insilmaril@652: insilmaril@721: private: insilmaril@749: bool scrollBranch(BranchItem *); insilmaril@749: bool unscrollBranch(BranchItem *); insilmaril@721: public: insilmaril@721: void toggleScroll(); insilmaril@721: void unscrollChildren(); insilmaril@763: void emitExpandAll(); insilmaril@763: signals: insilmaril@763: void expandAll(); insilmaril@763: insilmaril@763: public: insilmaril@767: void toggleStandardFlag (const QString &name, FlagRow *master=NULL); insilmaril@721: void addFloatImage(const QPixmap &img); insilmaril@721: insilmaril@721: void colorBranch(QColor); insilmaril@721: void colorSubtree(QColor); insilmaril@721: QColor getCurrentHeadingColor(); insilmaril@721: insilmaril@721: insilmaril@721: void editURL(); // edit URL insilmaril@721: void editLocalURL(); // edit URL to local file insilmaril@721: void editHeading2URL(); // copy heading to URL insilmaril@721: void editBugzilla2URL(); // create URL to Bugzilla insilmaril@721: void editFATE2URL(); // create URL to FATE insilmaril@721: void editVymLink(); // edit link to another map insilmaril@721: void setVymLink (const QString &); // Set vymLink for selection insilmaril@721: void deleteVymLink(); // delete link to another map insilmaril@721: QString getVymLink(); // return path to map insilmaril@721: QStringList getVymLinks(); // return paths in subtree insilmaril@721: void followXLink (int); insilmaril@721: void editXLink (int); insilmaril@721: insilmaril@721: insilmaril@721: insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Scripting insilmaril@721: //////////////////////////////////////////// insilmaril@721: public: insilmaril@721: insilmaril@721: /* \brief Process one command and its parameters */ insilmaril@721: void parseAtom (const QString &atom); insilmaril@721: insilmaril@721: /* \brief Runs the script */ insilmaril@721: void runScript (QString script); insilmaril@721: insilmaril@721: private: insilmaril@721: Parser parser; insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Exports insilmaril@721: //////////////////////////////////////////// insilmaril@721: private: insilmaril@753: TreeItem::HideTmpMode hidemode; // true while exporting to hide some stuff insilmaril@721: insilmaril@721: public: insilmaril@721: /*! Set or unset temporary hiding of objects during export */ insilmaril@721: void setExportMode (bool); insilmaril@721: insilmaril@721: /*! Save as image */ insilmaril@721: void exportImage (QString fname="",bool askForName=true,QString format="PNG"); insilmaril@721: insilmaril@721: insilmaril@721: /*! Export as XTML to directory */ insilmaril@721: void exportXML(QString dir="", bool askForName=true); insilmaril@721: insilmaril@721: /*! Export as ASCII text to file */ insilmaril@721: void exportASCII (QString fname="",bool askForName=true); insilmaril@721: insilmaril@721: /*! Export as XHTML to directory */ insilmaril@721: void exportXHTML(const QString& dir="", bool askForName=true); insilmaril@721: insilmaril@721: /*! Export as OpenOfficeOrg presentation */ insilmaril@721: void exportOOPresentation(const QString &,const QString &); insilmaril@721: insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // View related insilmaril@721: //////////////////////////////////////////// insilmaril@721: public: insilmaril@721: void registerEditor (QWidget *); insilmaril@721: void unregisterEditor (QWidget *); insilmaril@723: insilmaril@723: private: insilmaril@723: QPointF contextPos; //!< local position during context menu insilmaril@723: public: insilmaril@723: void setContextPos (QPointF); //!< local position during context menu insilmaril@723: void unsetContextPos (); //!< forget local position after context menu insilmaril@723: insilmaril@721: void updateNoteFlag(); //!< Signal origination in TextEditor insilmaril@650: void updateRelPositions(); insilmaril@650: insilmaril@650: QRectF getTotalBBox(); insilmaril@650: void reposition(); //!< Call reposition for all MCOs insilmaril@753: void setHideTmpMode (TreeItem::HideTmpMode mode); insilmaril@721: insilmaril@665: QPolygonF shape(BranchObj *bo); //!< Returns arbitrary shape of subtree insilmaril@665: void moveAway (LinkableMapObj *lmo);//!< Autolayout: Move all out of the way insilmaril@652: insilmaril@753: void emitNoteHasChanged (TreeItem *ti); insilmaril@753: void emitDataHasChanged (TreeItem *ti); insilmaril@746: insilmaril@745: signals: insilmaril@753: void noteHasChanged (QModelIndex ix); insilmaril@745: void newChildObject(QModelIndex ix); insilmaril@745: insilmaril@721: private: insilmaril@721: MapEditor *mapEditor; insilmaril@721: insilmaril@721: QColor defLinkColor; // default color for links insilmaril@721: QColor defXLinkColor; // default color for xlinks insilmaril@721: int defXLinkWidth; // default width for xlinks insilmaril@721: LinkableMapObj::ColorHint linkcolorhint;// use heading color or own color insilmaril@721: LinkableMapObj::Style linkstyle; // default style for links insilmaril@721: insilmaril@721: private: insilmaril@721: QPixmap getPixmap(); insilmaril@721: insilmaril@696: public: insilmaril@721: void setMapLinkStyle (const QString &); // Set style of link insilmaril@721: LinkableMapObj::Style getMapLinkStyle (); // requested in LMO insilmaril@721: void setMapDefLinkColor(QColor); // default color of links insilmaril@721: void setMapLinkColorHintInt(); // color of links insilmaril@721: void setMapLinkColorHint(LinkableMapObj::ColorHint);// color of links insilmaril@721: void toggleMapLinkColorHint(); // after changing linkStyles insilmaril@721: void selectMapBackgroundImage(); insilmaril@721: void setMapBackgroundImage(const QString &); insilmaril@721: void selectMapBackgroundColor(); insilmaril@721: void setMapBackgroundColor(QColor); insilmaril@721: QColor getMapBackgroundColor(); insilmaril@721: insilmaril@721: insilmaril@721: LinkableMapObj::ColorHint getMapLinkColorHint(); insilmaril@721: QColor getMapDefLinkColor(); insilmaril@721: void setMapDefXLinkColor(QColor); insilmaril@721: QColor getMapDefXLinkColor(); insilmaril@721: void setMapDefXLinkWidth (int); insilmaril@721: int getMapDefXLinkWidth(); insilmaril@721: insilmaril@721: /*! Move absolutly to (x,y). */ insilmaril@721: void move (const double &x, const double &y); insilmaril@721: insilmaril@721: /*! Move relativly to (x,y). */ insilmaril@721: void moveRel (const double &x, const double &y); insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Animation **experimental** insilmaril@721: //////////////////////////////////////////// insilmaril@696: private: insilmaril@696: QTimer *animationTimer; insilmaril@696: bool animationUse; insilmaril@696: uint animationTicks; insilmaril@696: uint animationInterval; insilmaril@696: int timerId; // animation timer insilmaril@767: QList animObjList;// list with animated objects //FIXME-2 should go to MapEditor insilmaril@696: insilmaril@721: private slots: insilmaril@721: void animate(); //!< Called by timer to animate stuff insilmaril@696: public: insilmaril@723: void startAnimation(BranchObj *bo, const QPointF &start, const QPointF &dest); insilmaril@722: void stopAnimation(MapObj *mo); insilmaril@722: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Network related insilmaril@721: //////////////////////////////////////////// insilmaril@721: public: insilmaril@721: /*! \brief Networking states insilmaril@721: insilmaril@721: In Network modus we want to switch of saveState, autosave, ... insilmaril@721: */ insilmaril@721: enum NetState { insilmaril@721: Offline, //!< Offline insilmaril@721: Client, //!< I am the client and connected to server insilmaril@721: Server //!< I am the server insilmaril@721: }; insilmaril@721: insilmaril@721: private: insilmaril@721: // Network connections **Experimental** insilmaril@721: NetState netstate; // offline, client, server insilmaril@721: QTcpServer *tcpServer; // Act as server in conference mode (experimental) insilmaril@721: QList clientList; // List of connected clients insilmaril@721: quint16 sendCounter; // Increased with every sent command insilmaril@721: insilmaril@721: QTcpSocket *clientSocket; // socket of this client insilmaril@721: QString server; // server address of this client insilmaril@721: int port; // server port of this client insilmaril@721: insilmaril@721: insilmaril@721: insilmaril@721: protected: insilmaril@721: void sendSelection(); insilmaril@721: insilmaril@721: public: insilmaril@721: void newServer(); insilmaril@721: void connectToServer(); insilmaril@721: insilmaril@721: private slots: insilmaril@721: void newClient(); insilmaril@721: void sendData(const QString &s); insilmaril@721: void readData(); insilmaril@721: void displayNetworkError (QAbstractSocket::SocketError); insilmaril@721: insilmaril@721: private: insilmaril@721: void displayClientError(QAbstractSocket::SocketError socketError); insilmaril@721: insilmaril@721: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // Selection related insilmaril@721: //////////////////////////////////////////// insilmaril@721: private: insilmaril@721: Selection selection; insilmaril@761: TreeItem *latestAddedItem; // latest added object, reset on setChanged() insilmaril@721: insilmaril@728: signals: insilmaril@728: void selectionChanged(const QItemSelection &, const QItemSelection &); insilmaril@728: insilmaril@721: public: insilmaril@727: void setSelectionModel(QItemSelectionModel *); // Set common selectionModel insilmaril@728: QItemSelectionModel* getSelectionModel(); insilmaril@727: insilmaril@721: void setSelectionBlocked(bool); insilmaril@721: bool isSelectionBlocked(); insilmaril@721: insilmaril@727: bool select (); // select by using common QItemSlectionModel insilmaril@727: bool select (const QString &); // Select by string insilmaril@763: bool select (LinkableMapObj *lmo); // Select by pointer tog LMO insilmaril@738: bool select (TreeItem *ti ); // Select by point to TreeItem insilmaril@721: void unselect(); insilmaril@721: void reselect(); insilmaril@721: insilmaril@763: void emitShowSelection(); //!< Show selection in all views insilmaril@763: signals: insilmaril@763: void showSelection(); insilmaril@721: insilmaril@754: // void selectInt(LinkableMapObj*); //FIXME-4 insilmaril@721: insilmaril@721: private: insilmaril@721: void selectNextBranchInt(); // Increment number of branch insilmaril@755: void selectPrevBranchInt(); //! Select the branch which would be above in vymmap view insilmaril@755: void selectAboveBranchInt(); //! Select the branch which would be above current selection in TreeView insilmaril@755: void selectBelowBranchInt(); // Increment number of branch insilmaril@721: public: insilmaril@721: void selectUpperBranch(); insilmaril@721: void selectLowerBranch(); insilmaril@721: void selectLeftBranch(); insilmaril@721: void selectRightBranch(); insilmaril@721: void selectFirstBranch(); insilmaril@721: void selectLastBranch(); insilmaril@735: void selectLastSelectedBranch(); insilmaril@726: void selectParent(); insilmaril@721: insilmaril@721: public: insilmaril@735: TreeItem::Type selectionType(); insilmaril@735: LinkableMapObj* getSelectedLMO(); insilmaril@753: BranchObj* getSelectedBranchObj(); // FIXME-2 replace by item... insilmaril@749: BranchItem* getSelectedBranchItem(); insilmaril@738: TreeItem* getSelectedItem(); insilmaril@735: QModelIndex getSelectedIndex(); insilmaril@721: FloatImageObj* getSelectedFloatImage(); insilmaril@721: QString getSelectString (); insilmaril@652: QString getSelectString (LinkableMapObj *lmo); insilmaril@749: QString getSelectString (TreeItem *item); insilmaril@721: insilmaril@746: insilmaril@746: /* insilmaril@746: public slots: insilmaril@746: void changeSelection (const QItemSelection &newSel, const QItemSelection &delSel); insilmaril@746: */ insilmaril@746: insilmaril@746: public: insilmaril@735: void updateSelection(const QItemSelection &oldsel); insilmaril@721: void updateSelection(); insilmaril@721: void selectMapLinkColor(); insilmaril@721: void selectMapSelectionColor(); insilmaril@721: private: insilmaril@721: void setSelectionColorInt(QColor); insilmaril@727: QItemSelectionModel *selModel; insilmaril@727: insilmaril@721: public: insilmaril@721: void setSelectionColor(QColor); insilmaril@721: QColor getSelectionColor(); insilmaril@650: }; insilmaril@650: insilmaril@650: #endif