vymmodel.h
author insilmaril
Wed, 16 Jul 2008 11:56:44 +0000
changeset 722 462d39502273
parent 721 12958f987bcf
child 723 11f9124c1cca
permissions -rw-r--r--
no more segfault when deleting animated part
insilmaril@650
     1
#ifndef VYMMODEL_H
insilmaril@650
     2
#define VYMMODEL_H
insilmaril@650
     3
insilmaril@650
     4
#include <QGraphicsScene>
insilmaril@721
     5
#include <QtNetwork>
insilmaril@650
     6
insilmaril@721
     7
#include "file.h"
insilmaril@650
     8
#include "mapcenterobj.h"
insilmaril@650
     9
#include "mapeditor.h"
insilmaril@721
    10
#include "parser.h"
insilmaril@721
    11
#include "selection.h"
insilmaril@721
    12
#include "xmlobj.h"
insilmaril@650
    13
insilmaril@650
    14
insilmaril@650
    15
/*! \brief This will later be divided into Model/View
insilmaril@650
    16
*/
insilmaril@650
    17
insilmaril@721
    18
class VymModel : public QObject,  public XMLObj {		
insilmaril@696
    19
	Q_OBJECT
insilmaril@696
    20
insilmaril@721
    21
////////////////////////////////////////////
insilmaril@721
    22
// General housekeeping
insilmaril@721
    23
////////////////////////////////////////////
insilmaril@721
    24
private:
insilmaril@721
    25
	QGraphicsScene *mapScene;
insilmaril@721
    26
	QList <MapCenterObj*> mapCenters;
insilmaril@721
    27
	QString version;	//!< version string saved in vym file
insilmaril@721
    28
	QString author;
insilmaril@721
    29
	QString comment;
insilmaril@721
    30
	QDate date;
insilmaril@721
    31
insilmaril@650
    32
public:
insilmaril@650
    33
	VymModel();
insilmaril@650
    34
	~VymModel ();
insilmaril@650
    35
    void clear();
insilmaril@650
    36
    void init();
insilmaril@721
    37
	void makeTmpDirectories();		//!< create temporary directories e.g. for history
insilmaril@721
    38
insilmaril@650
    39
	void setMapEditor(MapEditor *me);	// FIXME should not be necessary in Model/View
insilmaril@721
    40
	MapEditor* getMapEditor();			// FIXME not necessary
insilmaril@721
    41
insilmaril@721
    42
	bool isRepositionBlocked();		//!< While load or undo there is no need to update graphicsview
insilmaril@721
    43
insilmaril@721
    44
	void updateActions();			//!< Update buttons in mainwindow
insilmaril@721
    45
insilmaril@721
    46
insilmaril@721
    47
////////////////////////////////////////////
insilmaril@721
    48
// Load/save 
insilmaril@721
    49
////////////////////////////////////////////
insilmaril@721
    50
private:
insilmaril@721
    51
insilmaril@721
    52
	bool zipped;				// should map be zipped
insilmaril@721
    53
	static	int mapNum;			// unique number for model used in save/undo
insilmaril@721
    54
	FileType fileType;			// type of file, e.g. vym, freemind...
insilmaril@721
    55
	QString fileName;			// short name of file (for tab)
insilmaril@721
    56
	QString filePath;			// path to file which will be saved
insilmaril@721
    57
	QString fileDir;			// dir where file is saved
insilmaril@721
    58
	QString destPath;			// path to .vym file (needed for vymlinks)
insilmaril@721
    59
	QString mapName;			// fileName without ".vym"
insilmaril@721
    60
insilmaril@721
    61
	QString tmpMapDir;			// tmp directory with undo history
insilmaril@721
    62
insilmaril@721
    63
	QTimer *autosaveTimer;
insilmaril@721
    64
	QTimer *fileChangedTimer;
insilmaril@721
    65
	QDateTime fileChangedTime;
insilmaril@721
    66
insilmaril@721
    67
public:
insilmaril@721
    68
	/*! This function saves all information of the map to disc.
insilmaril@721
    69
	    saveToDir also calls the functions for all BranchObj and other objects in the map.
insilmaril@721
    70
		The structure of the map itself is returned as QString and passed back to Main, 
insilmaril@721
    71
		where saveToDir is called initially
insilmaril@721
    72
	*/	
insilmaril@721
    73
    QString saveToDir (const QString &tmpdir, const QString &prefix, bool writeflags, const QPointF &offset, LinkableMapObj *saveSel);
insilmaril@721
    74
insilmaril@721
    75
	/*! \brief Sets filepath, filename and mapname
insilmaril@721
    76
insilmaril@721
    77
	     If the filepath is "/home/tux/map.xml", then the filename will be set
insilmaril@721
    78
		 to map.xml. The destname is needed for vymLinks, pointing to another map. 
insilmaril@721
    79
		 The destname holds the real name of the file, after it has been compressed, e.g. "map.vym"
insilmaril@721
    80
	*/	 
insilmaril@721
    81
insilmaril@721
    82
insilmaril@721
    83
	/*! \brief Set File path
insilmaril@721
    84
insilmaril@721
    85
	     The destname is needed to construct the references between maps
insilmaril@721
    86
	*/	 
insilmaril@721
    87
	void setFilePath (QString filepath,QString destname);	
insilmaril@721
    88
	void setFilePath (QString);	//!< Overloaded for convenience
insilmaril@721
    89
	QString getFilePath ();	//!< Full path e.g. "/home/tux/map.xml"
insilmaril@721
    90
	QString getFileName ();	//!< e.g. "map.xml"
insilmaril@721
    91
	QString getMapName ();	//!< e.g. "map"
insilmaril@721
    92
	QString getDestPath (); //!< e.g. "/home/tux/map.vym"
insilmaril@721
    93
insilmaril@721
    94
	/*! \brief Load map
insilmaril@721
    95
insilmaril@721
    96
		The data is read from file. Depending on LoadMode the current
insilmaril@721
    97
		selection gets replaced by data or the data is appended.
insilmaril@721
    98
	*/	
insilmaril@721
    99
    ErrorCode load (QString, const LoadMode &, const FileType& );	// newmap, import/replace selection
insilmaril@721
   100
insilmaril@721
   101
public:
insilmaril@721
   102
	/*! \brief Save the map to file */
insilmaril@721
   103
    ErrorCode save(const SaveMode &);	
insilmaril@721
   104
insilmaril@721
   105
private:
insilmaril@721
   106
    void addMapReplaceInt(const QString & undoSel, const QString & path);
insilmaril@721
   107
    void addMapInsertInt (const QString & path, int pos);
insilmaril@721
   108
insilmaril@721
   109
	FloatImageObj* loadFloatImageInt (QString);
insilmaril@721
   110
	void saveFloatImageInt (FloatImageObj*, const QString &, const QString &);
insilmaril@721
   111
public:	
insilmaril@721
   112
	void loadFloatImage ();
insilmaril@721
   113
	void saveFloatImage ();
insilmaril@721
   114
insilmaril@721
   115
private:	
insilmaril@721
   116
    void importDirInt(BranchObj *,QDir);
insilmaril@721
   117
    void importDirInt(const QString&);
insilmaril@721
   118
public:	
insilmaril@721
   119
    void importDir();
insilmaril@721
   120
insilmaril@721
   121
private slots:
insilmaril@721
   122
	void autosave ();
insilmaril@721
   123
	void fileChanged();
insilmaril@721
   124
insilmaril@721
   125
////////////////////////////////////////////
insilmaril@721
   126
// history (undo/redo)
insilmaril@721
   127
////////////////////////////////////////////
insilmaril@721
   128
private:
insilmaril@721
   129
    bool mapDefault;			//!< Flag if map is untouched
insilmaril@721
   130
    bool mapChanged;			//!< Flag if undo is possible
insilmaril@721
   131
	bool mapUnsaved;			//!< Flag if map should be saved
insilmaril@721
   132
insilmaril@721
   133
	QString histPath;			//!< Path to history file
insilmaril@721
   134
	SimpleSettings undoSet;		//!< undo/redo commands, saved in histPath
insilmaril@721
   135
	int stepsTotal;				//!< total number of steps (undos+redos) 
insilmaril@721
   136
	int curStep;				//!< Current step in history (ring buffer)
insilmaril@721
   137
	int curClipboard;			//!< number of history step, which is the current clipboard
insilmaril@721
   138
	int redosAvail;				//!< Available number of redo steps
insilmaril@721
   139
	int undosAvail;				//!< Available number of undo steps
insilmaril@721
   140
	bool blockReposition;		//!< block while load or undo
insilmaril@721
   141
	bool blockSaveState;		//!< block while load or undo
insilmaril@721
   142
public:
insilmaril@721
   143
	bool isDefault();			//!< true, if map is still the empty default map
insilmaril@721
   144
	void makeDefault();			//!< Reset changelog, declare this as default map
insilmaril@721
   145
    bool hasChanged()	;		//!< true, if something has changed and is not saved yet
insilmaril@721
   146
	void setChanged();			//!< called from TextEditor via LinkableMapObj
insilmaril@721
   147
insilmaril@721
   148
	/*! \brief Get name of object
insilmaril@721
   149
	  
insilmaril@721
   150
	  Returns heading of a branch or name of an object for use in comment
insilmaril@721
   151
	  of undo/redo history
insilmaril@721
   152
	*/ 
insilmaril@721
   153
	QString getObjectName(const LinkableMapObj*);	
insilmaril@721
   154
insilmaril@721
   155
    void redo();						//!< Redo last action
insilmaril@721
   156
	bool isRedoAvailable();				//!< True, if redo is available
insilmaril@721
   157
    void undo();						//!< Undo last action
insilmaril@721
   158
	bool isUndoAvailable();				//!< True, if undo is available
insilmaril@721
   159
	void gotoHistoryStep (int);			//!< Goto a specifig step in history
insilmaril@721
   160
insilmaril@721
   161
insilmaril@721
   162
	QString getHistoryPath();			//!< Path to directory containing the history
insilmaril@721
   163
insilmaril@721
   164
	/*! \brief Save the current changes in map 
insilmaril@721
   165
insilmaril@721
   166
		Two commands and selections are saved:
insilmaril@721
   167
insilmaril@721
   168
			- undocommand and undoselection to undo the change
insilmaril@721
   169
			- redocommand and redoselection to redo the action after an undo
insilmaril@721
   170
insilmaril@721
   171
		Additionally a comment is logged. 
insilmaril@721
   172
insilmaril@721
   173
	*/	
insilmaril@721
   174
    void saveState(
insilmaril@721
   175
		const SaveMode& savemode, 
insilmaril@721
   176
		const QString &undoSelection, 
insilmaril@721
   177
		const QString &undoCommand, 
insilmaril@721
   178
		const QString &redoSelection, 
insilmaril@721
   179
		const QString &redoCommand, 
insilmaril@721
   180
		const QString &comment, 
insilmaril@721
   181
		LinkableMapObj *saveSelection);
insilmaril@721
   182
	/*! Overloaded for convenience */
insilmaril@721
   183
    void saveStateChangingPart(
insilmaril@721
   184
		LinkableMapObj *undoSelection, 
insilmaril@721
   185
		LinkableMapObj* redoSelection, 
insilmaril@721
   186
		const QString &redoCommand, 
insilmaril@721
   187
		const QString &comment);
insilmaril@721
   188
	/*! Overloaded for convenience */
insilmaril@721
   189
    void saveStateRemovingPart(
insilmaril@721
   190
		LinkableMapObj *redoSelection, 
insilmaril@721
   191
		const QString &comment);
insilmaril@721
   192
	/*! Overloaded for convenience */
insilmaril@721
   193
    void saveState(
insilmaril@721
   194
		LinkableMapObj *undoSelection, 
insilmaril@721
   195
		const QString &undoCommand, 
insilmaril@721
   196
		LinkableMapObj *redoSelection, 
insilmaril@721
   197
		const QString &redoCommand, 
insilmaril@721
   198
		const QString &comment); 
insilmaril@721
   199
	/*! Overloaded for convenience */
insilmaril@721
   200
    void saveState(
insilmaril@721
   201
		const QString &undoSelection, 
insilmaril@721
   202
		const QString &undoCommand, 
insilmaril@721
   203
		const QString &redoSelection, 
insilmaril@721
   204
		const QString &redoCommand, 
insilmaril@721
   205
		const QString &comment) ;
insilmaril@721
   206
    void saveState(
insilmaril@721
   207
		const QString &undoCommand, 
insilmaril@721
   208
		const QString &redoCommand, 
insilmaril@721
   209
		const QString &comment) ;
insilmaril@721
   210
insilmaril@721
   211
insilmaril@721
   212
////////////////////////////////////////////
insilmaril@721
   213
// unsorted so far
insilmaril@721
   214
////////////////////////////////////////////
insilmaril@721
   215
public:
insilmaril@721
   216
	void setScene(QGraphicsScene *s);
insilmaril@721
   217
	QGraphicsScene *getScene();
insilmaril@721
   218
insilmaril@721
   219
	BranchObj* first();					
insilmaril@721
   220
	BranchObj* next(BranchObj *bo);		
insilmaril@721
   221
insilmaril@721
   222
    LinkableMapObj* findMapObj(QPointF,LinkableMapObj*);	// find MapObj 
insilmaril@721
   223
    LinkableMapObj* findObjBySelect (const QString &s);		// find MapObj by select string
insilmaril@721
   224
    LinkableMapObj* findID (const QString &s);				// find MapObj by previously set ID
insilmaril@721
   225
insilmaril@721
   226
	QString saveToDir (const QString&,const QString&,int, const QPointF&);// Save data recursivly to tempdir
insilmaril@721
   227
insilmaril@721
   228
insilmaril@721
   229
////////////////////////////////////////////
insilmaril@721
   230
// Interface 
insilmaril@721
   231
////////////////////////////////////////////
insilmaril@721
   232
public:
insilmaril@650
   233
	void setVersion(const  QString &);
insilmaril@650
   234
	void setAuthor  (const QString &);
insilmaril@650
   235
	QString getAuthor ();
insilmaril@650
   236
	void setComment (const QString &);
insilmaril@650
   237
	QString getComment ();
insilmaril@650
   238
	QString getDate();
insilmaril@721
   239
insilmaril@721
   240
public:	
insilmaril@721
   241
	void setHeading(const QString &);		//!< Set heading of branch	
insilmaril@721
   242
	QString getHeading (bool &ok,QPoint &p); //!< Get heading, ok if selection is branch
insilmaril@721
   243
private:
insilmaril@721
   244
	void setHeadingInt(const QString &);
insilmaril@721
   245
insilmaril@721
   246
private:
insilmaril@721
   247
	BranchObj* itFind;			// next object in find process
insilmaril@721
   248
	bool EOFind;				// true, if search failed
insilmaril@721
   249
public:
insilmaril@721
   250
    BranchObj* findText(QString,bool);		// Find object
insilmaril@721
   251
    void findReset();						// Reset Search
insilmaril@721
   252
insilmaril@721
   253
	void setURL(const QString &url);
insilmaril@721
   254
	QString getURL();						// returns URL of selection or ""
insilmaril@721
   255
	QStringList getURLs();					// returns URLs of subtree
insilmaril@721
   256
insilmaril@721
   257
	void linkFloatImageTo(const QString &);
insilmaril@721
   258
insilmaril@721
   259
	void setFrameType(const FrameObj::FrameType &);
insilmaril@721
   260
	void setFrameType(const QString &);
insilmaril@721
   261
	void setFramePenColor (const QColor &);
insilmaril@721
   262
	void setFrameBrushColor (const QColor &);
insilmaril@721
   263
	void setFramePadding (const int &);
insilmaril@721
   264
	void setFrameBorderWidth (const int &);
insilmaril@721
   265
	void setIncludeImagesVer(bool);
insilmaril@721
   266
	void setIncludeImagesHor(bool);
insilmaril@721
   267
	void setHideLinkUnselected (bool);
insilmaril@721
   268
insilmaril@721
   269
	/*! Should object be hidden in exports (clouded)? */
insilmaril@721
   270
	void setHideExport(bool);			
insilmaril@721
   271
insilmaril@721
   272
	/*! Should object be hidden in exports (clouded)? */
insilmaril@721
   273
	void toggleHideExport();		
insilmaril@721
   274
insilmaril@721
   275
    void copy();						//!< Copy to clipboard
insilmaril@721
   276
private:	
insilmaril@721
   277
    void pasteNoSave(const int &n);		//!< paste clipboard to branch
insilmaril@721
   278
public:	
insilmaril@721
   279
    void paste();		//!< Paste clipboard to branch and backup
insilmaril@721
   280
    void cut();			//!< Cut to clipboard (and copy)
insilmaril@721
   281
insilmaril@721
   282
    void moveBranchUp();	//!< Move branch up
insilmaril@721
   283
    void moveBranchDown();	//!< Move branch down
insilmaril@721
   284
	void sortChildren();	//!< Sort children lexically
insilmaril@721
   285
insilmaril@721
   286
	/*! \brief Add new mapcenter
insilmaril@721
   287
insilmaril@721
   288
	    Disclaimer: Still experimental, not fully supported yet.
insilmaril@721
   289
	*/	
insilmaril@650
   290
	MapCenterObj* addMapCenter();
insilmaril@721
   291
private:	
insilmaril@684
   292
	MapCenterObj* addMapCenter(QPointF absPos);
insilmaril@721
   293
public:	
insilmaril@650
   294
	MapCenterObj* removeMapCenter(MapCenterObj *mco);
insilmaril@652
   295
insilmaril@721
   296
	/*! \brief Add new branch
insilmaril@650
   297
insilmaril@721
   298
		Depending on num the new branch is created
insilmaril@652
   299
insilmaril@721
   300
		-3 above selection as child of selections parent
insilmaril@721
   301
		-2 as child of selection
insilmaril@721
   302
		-1 below selection as child of selections parent
insilmaril@721
   303
		0..n	insert at a specific position in selections parent
insilmaril@721
   304
		(needed for free relinking)
insilmaril@721
   305
	*/	
insilmaril@721
   306
private:	
insilmaril@721
   307
    BranchObj* addNewBranchInt(int);		// pos allows to add above/below selection
insilmaril@721
   308
public:	
insilmaril@721
   309
	/*! \Add new branch
insilmaril@721
   310
		
insilmaril@721
   311
		Depending on num the new branch is created
insilmaril@721
   312
		-1 above selection
insilmaril@721
   313
		 0 as child of selection
insilmaril@721
   314
		 1 below selection
insilmaril@721
   315
	*/
insilmaril@721
   316
    BranchObj* addNewBranch(int pos);		
insilmaril@721
   317
    BranchObj* addNewBranchBefore();		//!< Insert branch between selection and its parent
insilmaril@721
   318
    void deleteSelection();					//!< Delete selection
insilmaril@721
   319
	void deleteKeepChildren();				//!< remove branch, but keep children
insilmaril@721
   320
	void deleteChildren();					//!< keep branch, but remove children
insilmaril@652
   321
insilmaril@721
   322
private:	
insilmaril@721
   323
	bool scrollBranch(BranchObj*);
insilmaril@721
   324
	bool unscrollBranch(BranchObj*);
insilmaril@721
   325
public:	
insilmaril@721
   326
    void toggleScroll();
insilmaril@721
   327
    void unscrollChildren();
insilmaril@721
   328
insilmaril@721
   329
    void addFloatImage(const QPixmap &img);
insilmaril@721
   330
insilmaril@721
   331
    void colorBranch(QColor);
insilmaril@721
   332
    void colorSubtree(QColor);
insilmaril@721
   333
	QColor getCurrentHeadingColor();
insilmaril@721
   334
insilmaril@721
   335
insilmaril@721
   336
	void editURL();							// edit URL
insilmaril@721
   337
	void editLocalURL();					// edit URL to local file
insilmaril@721
   338
	void editHeading2URL();					// copy heading to URL
insilmaril@721
   339
	void editBugzilla2URL();				// create URL to Bugzilla
insilmaril@721
   340
	void editFATE2URL();					// create URL to FATE
insilmaril@721
   341
	void editVymLink();						// edit link to another map
insilmaril@721
   342
	void setVymLink (const QString &);	// Set vymLink for selection
insilmaril@721
   343
	void deleteVymLink();					// delete link to another map
insilmaril@721
   344
	QString getVymLink();					// return path to map
insilmaril@721
   345
	QStringList getVymLinks();				// return paths in subtree
insilmaril@721
   346
	void followXLink (int);
insilmaril@721
   347
	void editXLink (int);
insilmaril@721
   348
insilmaril@721
   349
insilmaril@721
   350
insilmaril@721
   351
insilmaril@721
   352
////////////////////////////////////////////
insilmaril@721
   353
// Scripting
insilmaril@721
   354
////////////////////////////////////////////
insilmaril@721
   355
public:	
insilmaril@721
   356
insilmaril@721
   357
	/* \brief Process one command and its parameters */
insilmaril@721
   358
    void parseAtom (const QString &atom);	
insilmaril@721
   359
insilmaril@721
   360
	/* \brief Runs the script */
insilmaril@721
   361
	void runScript (QString script);
insilmaril@721
   362
insilmaril@721
   363
private:
insilmaril@721
   364
	Parser parser;
insilmaril@721
   365
insilmaril@721
   366
////////////////////////////////////////////
insilmaril@721
   367
// Exports
insilmaril@721
   368
////////////////////////////////////////////
insilmaril@721
   369
private:
insilmaril@721
   370
	HideTmpMode hidemode;	// true while exporting to hide some stuff
insilmaril@721
   371
insilmaril@721
   372
public:
insilmaril@721
   373
	/*! Set or unset temporary hiding of objects during export  */
insilmaril@721
   374
	void setExportMode (bool);
insilmaril@721
   375
insilmaril@721
   376
	/*! Save as image */
insilmaril@721
   377
    void exportImage (QString fname="",bool askForName=true,QString format="PNG");
insilmaril@721
   378
insilmaril@721
   379
insilmaril@721
   380
	/*! Export as XTML to directory */
insilmaril@721
   381
    void exportXML(QString dir="", bool askForName=true);
insilmaril@721
   382
insilmaril@721
   383
	/*! Export as ASCII text to file */
insilmaril@721
   384
	void exportASCII (QString fname="",bool askForName=true);  
insilmaril@721
   385
insilmaril@721
   386
	/*! Export as XHTML to directory */
insilmaril@721
   387
    void exportXHTML(const QString& dir="", bool askForName=true);	
insilmaril@721
   388
insilmaril@721
   389
    /*! Export as OpenOfficeOrg presentation */
insilmaril@721
   390
    void exportOOPresentation(const QString &,const QString &);	
insilmaril@721
   391
insilmaril@721
   392
insilmaril@721
   393
////////////////////////////////////////////
insilmaril@721
   394
// View related
insilmaril@721
   395
////////////////////////////////////////////
insilmaril@721
   396
public:
insilmaril@721
   397
	void registerEditor (QWidget *);
insilmaril@721
   398
	void unregisterEditor (QWidget *);
insilmaril@721
   399
	void updateNoteFlag();				//!< Signal origination in TextEditor
insilmaril@650
   400
    void updateRelPositions();
insilmaril@650
   401
insilmaril@650
   402
	QRectF getTotalBBox();
insilmaril@650
   403
	void reposition();					//!< Call reposition for all MCOs
insilmaril@721
   404
	void setHideTmpMode (HideTmpMode mode);	
insilmaril@721
   405
insilmaril@665
   406
	QPolygonF shape(BranchObj *bo);		//!< Returns arbitrary shape of subtree
insilmaril@665
   407
	void moveAway (LinkableMapObj *lmo);//!< Autolayout: Move all out of the way
insilmaril@652
   408
insilmaril@721
   409
	//void ensureSelectionVisible();		//!< Show selection in all views
insilmaril@721
   410
insilmaril@721
   411
private:
insilmaril@721
   412
	MapEditor *mapEditor;
insilmaril@721
   413
insilmaril@721
   414
	QColor defLinkColor;		// default color for links
insilmaril@721
   415
	QColor defXLinkColor;		// default color for xlinks
insilmaril@721
   416
	int defXLinkWidth;			// default width for xlinks
insilmaril@721
   417
	LinkableMapObj::ColorHint linkcolorhint;// use heading color or own color
insilmaril@721
   418
	LinkableMapObj::Style linkstyle;		// default style for links
insilmaril@721
   419
insilmaril@721
   420
private:
insilmaril@721
   421
    QPixmap getPixmap();
insilmaril@721
   422
insilmaril@696
   423
public:
insilmaril@721
   424
	void setMapLinkStyle (const QString &);	// Set style of link
insilmaril@721
   425
	LinkableMapObj::Style getMapLinkStyle ();	// requested in LMO
insilmaril@721
   426
	void setMapDefLinkColor(QColor);		// default color of links
insilmaril@721
   427
	void setMapLinkColorHintInt();			// color of links
insilmaril@721
   428
	void setMapLinkColorHint(LinkableMapObj::ColorHint);// color of links
insilmaril@721
   429
	void toggleMapLinkColorHint();			// after changing linkStyles
insilmaril@721
   430
    void selectMapBackgroundImage();
insilmaril@721
   431
    void setMapBackgroundImage(const QString &);
insilmaril@721
   432
    void selectMapBackgroundColor();
insilmaril@721
   433
    void setMapBackgroundColor(QColor);
insilmaril@721
   434
    QColor getMapBackgroundColor();
insilmaril@721
   435
insilmaril@721
   436
insilmaril@721
   437
	LinkableMapObj::ColorHint getMapLinkColorHint();
insilmaril@721
   438
	QColor getMapDefLinkColor();
insilmaril@721
   439
	void setMapDefXLinkColor(QColor);
insilmaril@721
   440
	QColor getMapDefXLinkColor();
insilmaril@721
   441
	void setMapDefXLinkWidth (int);
insilmaril@721
   442
	int getMapDefXLinkWidth();
insilmaril@721
   443
insilmaril@721
   444
	/*!  Move absolutly to (x,y).  */	
insilmaril@721
   445
    void move    (const double &x, const double &y);
insilmaril@721
   446
insilmaril@721
   447
	/*!  Move relativly to (x,y).  */	
insilmaril@721
   448
    void moveRel (const double &x, const double &y);
insilmaril@721
   449
insilmaril@721
   450
////////////////////////////////////////////
insilmaril@721
   451
// Animation  **experimental**
insilmaril@721
   452
////////////////////////////////////////////
insilmaril@696
   453
private:	
insilmaril@696
   454
	QTimer *animationTimer;
insilmaril@696
   455
	bool animationUse;
insilmaril@696
   456
	uint animationTicks;
insilmaril@696
   457
	uint animationInterval;
insilmaril@696
   458
	int timerId;				// animation timer
insilmaril@696
   459
	QList <MapObj*> animObjList;// list with animated objects
insilmaril@696
   460
insilmaril@721
   461
private slots:
insilmaril@721
   462
	void animate();						//!< Called by timer to animate stuff
insilmaril@696
   463
public:
insilmaril@721
   464
	void startAnimation(const QPointF &start, const QPointF &dest);
insilmaril@722
   465
	void stopAnimation(MapObj *mo);
insilmaril@722
   466
insilmaril@721
   467
////////////////////////////////////////////
insilmaril@721
   468
// Network related 
insilmaril@721
   469
////////////////////////////////////////////
insilmaril@721
   470
public:
insilmaril@721
   471
    /*! \brief Networking states
insilmaril@721
   472
		
insilmaril@721
   473
		In Network modus we want to switch of saveState, autosave, ...
insilmaril@721
   474
	*/
insilmaril@721
   475
	enum NetState {
insilmaril@721
   476
		Offline,			//!< Offline
insilmaril@721
   477
		Client,				//!< I am the client and connected to server
insilmaril@721
   478
		Server				//!< I am the server
insilmaril@721
   479
	};
insilmaril@721
   480
insilmaril@721
   481
private:
insilmaril@721
   482
	// Network connections **Experimental**
insilmaril@721
   483
	NetState netstate;			// offline, client, server
insilmaril@721
   484
	QTcpServer *tcpServer;		// Act as server in conference mode (experimental)
insilmaril@721
   485
	QList <QTcpSocket*> clientList;		// List of connected clients
insilmaril@721
   486
	quint16 sendCounter;		// Increased with every sent command
insilmaril@721
   487
insilmaril@721
   488
	QTcpSocket	*clientSocket;	// socket of this client
insilmaril@721
   489
	QString server;				// server address of this client
insilmaril@721
   490
	int port;					// server port of this client
insilmaril@721
   491
insilmaril@721
   492
insilmaril@721
   493
insilmaril@721
   494
protected:
insilmaril@721
   495
	void sendSelection();
insilmaril@721
   496
insilmaril@721
   497
public:
insilmaril@721
   498
	void newServer();
insilmaril@721
   499
	void connectToServer();
insilmaril@721
   500
insilmaril@721
   501
private slots:	
insilmaril@721
   502
	void newClient();
insilmaril@721
   503
	void sendData(const QString &s);
insilmaril@721
   504
	void readData();
insilmaril@721
   505
	void displayNetworkError (QAbstractSocket::SocketError);
insilmaril@721
   506
insilmaril@721
   507
private:	
insilmaril@721
   508
	void displayClientError(QAbstractSocket::SocketError socketError);
insilmaril@721
   509
insilmaril@721
   510
insilmaril@721
   511
////////////////////////////////////////////
insilmaril@721
   512
// Selection related 
insilmaril@721
   513
////////////////////////////////////////////
insilmaril@721
   514
private:
insilmaril@721
   515
	Selection selection;
insilmaril@721
   516
	QString latestSelectionString;	// select string of latest added object
insilmaril@721
   517
insilmaril@721
   518
public:
insilmaril@721
   519
	void setSelectionBlocked(bool);
insilmaril@721
   520
	bool isSelectionBlocked();
insilmaril@721
   521
insilmaril@721
   522
	bool select(const QString &);			// Select by string
insilmaril@721
   523
	bool select(LinkableMapObj *lmo);		// Select by pointer
insilmaril@721
   524
	void unselect();
insilmaril@721
   525
	void reselect();
insilmaril@721
   526
insilmaril@721
   527
	void ensureSelectionVisible();			//!< Show selection in all views
insilmaril@721
   528
insilmaril@721
   529
	void selectInt(LinkableMapObj*);	
insilmaril@721
   530
insilmaril@721
   531
private:	
insilmaril@721
   532
	void selectNextBranchInt();		// Increment number of branch
insilmaril@721
   533
	void selectPrevBranchInt();		// Decrement number of branch
insilmaril@721
   534
public:	
insilmaril@721
   535
    void selectUpperBranch();
insilmaril@721
   536
    void selectLowerBranch();
insilmaril@721
   537
    void selectLeftBranch();
insilmaril@721
   538
    void selectRightBranch();
insilmaril@721
   539
    void selectFirstBranch();
insilmaril@721
   540
    void selectLastBranch();
insilmaril@721
   541
insilmaril@721
   542
public:
insilmaril@721
   543
	Selection::Type selectionType();
insilmaril@652
   544
	LinkableMapObj* getSelection();
insilmaril@652
   545
	BranchObj* getSelectedBranch();
insilmaril@721
   546
	FloatImageObj* getSelectedFloatImage();
insilmaril@721
   547
	QString getSelectString ();
insilmaril@652
   548
	QString getSelectString (LinkableMapObj *lmo);
insilmaril@721
   549
	
insilmaril@721
   550
	void updateSelection();
insilmaril@721
   551
	void selectMapLinkColor();
insilmaril@721
   552
    void selectMapSelectionColor();
insilmaril@721
   553
private:	
insilmaril@721
   554
    void setSelectionColorInt(QColor);
insilmaril@721
   555
public:	
insilmaril@721
   556
    void setSelectionColor(QColor);
insilmaril@721
   557
    QColor getSelectionColor();
insilmaril@652
   558
insilmaril@650
   559
};
insilmaril@650
   560
insilmaril@650
   561
#endif