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@721: #include "xmlobj.h" insilmaril@650: insilmaril@650: insilmaril@650: /*! \brief This will later be divided into Model/View insilmaril@650: */ insilmaril@650: insilmaril@721: class VymModel : public QObject, public XMLObj { insilmaril@696: Q_OBJECT insilmaril@696: insilmaril@721: //////////////////////////////////////////// insilmaril@721: // General housekeeping insilmaril@721: //////////////////////////////////////////// insilmaril@721: private: insilmaril@721: QGraphicsScene *mapScene; insilmaril@721: QList mapCenters; 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@650: void setMapEditor(MapEditor *me); // FIXME should not be necessary in Model/View insilmaril@721: MapEditor* getMapEditor(); // FIXME not 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@721: QString saveToDir (const QString &tmpdir, const QString &prefix, bool writeflags, const QPointF &offset, LinkableMapObj *saveSel); insilmaril@721: 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@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@721: LinkableMapObj *saveSelection); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveStateChangingPart( insilmaril@721: LinkableMapObj *undoSelection, insilmaril@721: LinkableMapObj* redoSelection, insilmaril@721: const QString &redoCommand, insilmaril@721: const QString &comment); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveStateRemovingPart( insilmaril@721: LinkableMapObj *redoSelection, insilmaril@721: const QString &comment); insilmaril@721: /*! Overloaded for convenience */ insilmaril@721: void saveState( insilmaril@721: LinkableMapObj *undoSelection, insilmaril@721: const QString &undoCommand, insilmaril@721: LinkableMapObj *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@721: BranchObj* first(); insilmaril@721: BranchObj* next(BranchObj *bo); insilmaril@721: insilmaril@721: LinkableMapObj* findMapObj(QPointF,LinkableMapObj*); // find MapObj insilmaril@721: LinkableMapObj* findObjBySelect (const QString &s); // find MapObj by select string insilmaril@721: LinkableMapObj* findID (const QString &s); // find MapObj by previously set ID insilmaril@721: insilmaril@721: void removeSelection (); // remove selected object insilmaril@721: insilmaril@721: QString saveToDir (const QString&,const QString&,int, const QPointF&);// Save data recursivly to tempdir 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@721: insilmaril@721: public: insilmaril@721: void setHeading(const QString &); //!< Set heading of branch insilmaril@721: QString getHeading (bool &ok,QPoint &p); //!< Get heading, ok if selection is branch insilmaril@721: private: insilmaril@721: void setHeadingInt(const QString &); insilmaril@721: insilmaril@721: private: insilmaril@721: BranchObj* itFind; // next object in find process insilmaril@721: bool EOFind; // true, if search failed insilmaril@721: public: insilmaril@721: BranchObj* 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@721: void moveBranchUp(); //!< Move branch up insilmaril@721: void moveBranchDown(); //!< Move branch down insilmaril@721: void sortChildren(); //!< Sort children lexically insilmaril@721: insilmaril@721: /*! \brief Add new mapcenter insilmaril@721: insilmaril@721: Disclaimer: Still experimental, not fully supported yet. insilmaril@721: */ insilmaril@650: MapCenterObj* addMapCenter(); insilmaril@721: private: insilmaril@684: MapCenterObj* addMapCenter(QPointF absPos); insilmaril@721: public: insilmaril@650: MapCenterObj* removeMapCenter(MapCenterObj *mco); 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@721: private: insilmaril@721: BranchObj* 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@721: BranchObj* addNewBranch(int pos); insilmaril@721: BranchObj* addNewBranchBefore(); //!< Insert branch between selection and its parent 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@721: bool scrollBranch(BranchObj*); insilmaril@721: bool unscrollBranch(BranchObj*); insilmaril@721: public: insilmaril@721: void toggleScroll(); insilmaril@721: void unscrollChildren(); insilmaril@721: 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@721: 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@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@721: void setHideTmpMode (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@721: //void ensureSelectionVisible(); //!< Show selection in all views insilmaril@721: 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@696: QList animObjList;// list with animated objects insilmaril@696: insilmaril@721: private slots: insilmaril@721: void animate(); //!< Called by timer to animate stuff insilmaril@696: public: insilmaril@721: void startAnimation(const QPointF &start, const QPointF &dest); 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@721: QString latestSelectionString; // select string of latest added object insilmaril@721: insilmaril@721: public: insilmaril@721: void setSelectionBlocked(bool); insilmaril@721: bool isSelectionBlocked(); insilmaril@721: insilmaril@721: bool select(const QString &); // Select by string insilmaril@721: bool select(LinkableMapObj *lmo); // Select by pointer insilmaril@721: void unselect(); insilmaril@721: void reselect(); insilmaril@721: insilmaril@721: void ensureSelectionVisible(); //!< Show selection in all views insilmaril@721: insilmaril@721: void selectInt(LinkableMapObj*); insilmaril@721: insilmaril@721: private: insilmaril@721: void selectNextBranchInt(); // Increment number of branch insilmaril@721: void selectPrevBranchInt(); // Decrement 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@721: insilmaril@721: public: insilmaril@721: Selection::Type selectionType(); insilmaril@652: LinkableMapObj* getSelection(); insilmaril@652: BranchObj* getSelectedBranch(); insilmaril@721: FloatImageObj* getSelectedFloatImage(); insilmaril@721: QString getSelectString (); insilmaril@652: QString getSelectString (LinkableMapObj *lmo); insilmaril@721: insilmaril@721: void updateSelection(); insilmaril@721: void selectMapLinkColor(); insilmaril@721: void selectMapSelectionColor(); insilmaril@721: private: insilmaril@721: void setSelectionColorInt(QColor); insilmaril@721: public: insilmaril@721: void setSelectionColor(QColor); insilmaril@721: QColor getSelectionColor(); insilmaril@652: insilmaril@650: }; insilmaril@650: insilmaril@650: #endif