vymmodel.h
author insilmaril
Thu, 18 Mar 2010 11:46:52 +0000
changeset 839 fbb927bbdda3
parent 837 5ecd0462f76b
child 842 bec082472471
permissions -rw-r--r--
Version bump to 1.13.1 due to first release of 1.13.0 to openSUSE buildservice
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@784
     7
#include <QtDBus/QDBusAbstractAdaptor>
insilmaril@784
     8
#include <QtDBus/QDBusVariant>
insilmaril@784
     9
insilmaril@829
    10
#include <QTextCursor>
insilmaril@829
    11
insilmaril@784
    12
#include "adaptormodel.h"
insilmaril@721
    13
#include "file.h"
insilmaril@776
    14
#include "imageitem.h"
insilmaril@650
    15
#include "mapeditor.h"
insilmaril@721
    16
#include "parser.h"
insilmaril@726
    17
#include "treeitem.h"
insilmaril@725
    18
#include "treemodel.h"
insilmaril@650
    19
insilmaril@786
    20
class AttributeItem;
insilmaril@749
    21
class BranchItem;
insilmaril@829
    22
class FindResultModel;
insilmaril@754
    23
class MapEditor;
insilmaril@790
    24
class XLinkItem;
insilmaril@749
    25
insilmaril@784
    26
class VymModel :  public TreeModel {		
insilmaril@696
    27
	Q_OBJECT
insilmaril@784
    28
	Q_CLASSINFO("D-Bus Interface", "org.insilmaril.vym.VymModel-h")
insilmaril@784
    29
insilmaril@696
    30
insilmaril@721
    31
////////////////////////////////////////////
insilmaril@721
    32
// General housekeeping
insilmaril@721
    33
////////////////////////////////////////////
insilmaril@721
    34
private:
insilmaril@721
    35
	QString version;	//!< version string saved in vym file
insilmaril@721
    36
	QString author;
insilmaril@721
    37
	QString comment;
insilmaril@721
    38
	QDate date;
insilmaril@721
    39
insilmaril@823
    40
	static uint idLast;		//! the last used unique ID
insilmaril@823
    41
	uint mapID;
insilmaril@823
    42
insilmaril@650
    43
public:
insilmaril@650
    44
	VymModel();
insilmaril@650
    45
	~VymModel ();
insilmaril@650
    46
    void clear();
insilmaril@650
    47
    void init();
insilmaril@721
    48
	void makeTmpDirectories();		//!< create temporary directories e.g. for history
insilmaril@721
    49
insilmaril@754
    50
	MapEditor* getMapEditor();			// FIXME-2 still necessary?
insilmaril@823
    51
	uint getID();						//! Return unique ID of model
insilmaril@721
    52
insilmaril@721
    53
	bool isRepositionBlocked();		//!< While load or undo there is no need to update graphicsview
insilmaril@721
    54
insilmaril@721
    55
	void updateActions();			//!< Update buttons in mainwindow
insilmaril@721
    56
insilmaril@721
    57
insilmaril@721
    58
////////////////////////////////////////////
insilmaril@721
    59
// Load/save 
insilmaril@721
    60
////////////////////////////////////////////
insilmaril@721
    61
private:
insilmaril@721
    62
insilmaril@721
    63
	bool zipped;				// should map be zipped
insilmaril@721
    64
	static	int mapNum;			// unique number for model used in save/undo
insilmaril@721
    65
	FileType fileType;			// type of file, e.g. vym, freemind...
insilmaril@721
    66
	QString fileName;			// short name of file (for tab)
insilmaril@721
    67
	QString filePath;			// path to file which will be saved
insilmaril@721
    68
	QString fileDir;			// dir where file is saved
insilmaril@721
    69
	QString destPath;			// path to .vym file (needed for vymlinks)
insilmaril@721
    70
	QString mapName;			// fileName without ".vym"
insilmaril@721
    71
insilmaril@721
    72
	QString tmpMapDir;			// tmp directory with undo history
insilmaril@721
    73
insilmaril@721
    74
	QTimer *autosaveTimer;
insilmaril@721
    75
	QTimer *fileChangedTimer;
insilmaril@721
    76
	QDateTime fileChangedTime;
insilmaril@721
    77
insilmaril@721
    78
public:
insilmaril@721
    79
	/*! This function saves all information of the map to disc.
insilmaril@721
    80
	    saveToDir also calls the functions for all BranchObj and other objects in the map.
insilmaril@721
    81
		The structure of the map itself is returned as QString and passed back to Main, 
insilmaril@721
    82
		where saveToDir is called initially
insilmaril@721
    83
	*/	
insilmaril@753
    84
    QString saveToDir (const QString &tmpdir, const QString &prefix, bool writeflags, const QPointF &offset, TreeItem *saveSel);
insilmaril@721
    85
insilmaril@745
    86
	/*! Save all data in tree*/
insilmaril@813
    87
	QString saveTreeToDir (const QString&,const QString&,const QPointF&);// Save data recursivly to tempdir
insilmaril@745
    88
insilmaril@745
    89
insilmaril@721
    90
	/*! \brief Sets filepath, filename and mapname
insilmaril@721
    91
insilmaril@721
    92
	     If the filepath is "/home/tux/map.xml", then the filename will be set
insilmaril@721
    93
		 to map.xml. The destname is needed for vymLinks, pointing to another map. 
insilmaril@721
    94
		 The destname holds the real name of the file, after it has been compressed, e.g. "map.vym"
insilmaril@721
    95
	*/	 
insilmaril@721
    96
insilmaril@721
    97
insilmaril@721
    98
	/*! \brief Set File path
insilmaril@721
    99
insilmaril@721
   100
	     The destname is needed to construct the references between maps
insilmaril@721
   101
	*/	 
insilmaril@721
   102
	void setFilePath (QString filepath,QString destname);	
insilmaril@721
   103
	void setFilePath (QString);	//!< Overloaded for convenience
insilmaril@721
   104
	QString getFilePath ();	//!< Full path e.g. "/home/tux/map.xml"
insilmaril@721
   105
	QString getFileName ();	//!< e.g. "map.xml"
insilmaril@721
   106
	QString getMapName ();	//!< e.g. "map"
insilmaril@721
   107
	QString getDestPath (); //!< e.g. "/home/tux/map.vym"
insilmaril@721
   108
insilmaril@721
   109
	/*! \brief Load map
insilmaril@721
   110
insilmaril@721
   111
		The data is read from file. Depending on LoadMode the current
insilmaril@721
   112
		selection gets replaced by data or the data is appended.
insilmaril@721
   113
	*/	
insilmaril@721
   114
    ErrorCode load (QString, const LoadMode &, const FileType& );	// newmap, import/replace selection
insilmaril@721
   115
insilmaril@721
   116
public:
insilmaril@721
   117
	/*! \brief Save the map to file */
insilmaril@721
   118
    ErrorCode save(const SaveMode &);	
insilmaril@721
   119
insilmaril@721
   120
private:
insilmaril@721
   121
    void addMapReplaceInt(const QString & undoSel, const QString & path);
insilmaril@788
   122
    bool addMapInsertInt (const QString & path);
insilmaril@788
   123
    bool addMapInsertInt (const QString & path, int pos);
insilmaril@721
   124
insilmaril@776
   125
	ImageItem* loadFloatImageInt (BranchItem *dst,QString);
insilmaril@776
   126
	void saveFloatImageInt (ImageItem*, const QString &, const QString &);
insilmaril@721
   127
public:	
insilmaril@721
   128
	void loadFloatImage ();
insilmaril@721
   129
	void saveFloatImage ();
insilmaril@721
   130
insilmaril@721
   131
private:	
insilmaril@791
   132
    void importDirInt(BranchItem *,QDir);
insilmaril@721
   133
    void importDirInt(const QString&);
insilmaril@721
   134
public:	
insilmaril@721
   135
    void importDir();
insilmaril@721
   136
insilmaril@721
   137
private slots:
insilmaril@721
   138
	void autosave ();
insilmaril@721
   139
	void fileChanged();
insilmaril@721
   140
insilmaril@721
   141
////////////////////////////////////////////
insilmaril@721
   142
// history (undo/redo)
insilmaril@721
   143
////////////////////////////////////////////
insilmaril@721
   144
private:
insilmaril@721
   145
    bool mapDefault;			//!< Flag if map is untouched
insilmaril@721
   146
    bool mapChanged;			//!< Flag if undo is possible
insilmaril@721
   147
	bool mapUnsaved;			//!< Flag if map should be saved
insilmaril@721
   148
insilmaril@721
   149
	QString histPath;			//!< Path to history file
insilmaril@721
   150
	SimpleSettings undoSet;		//!< undo/redo commands, saved in histPath
insilmaril@721
   151
	int stepsTotal;				//!< total number of steps (undos+redos) 
insilmaril@721
   152
	int curStep;				//!< Current step in history (ring buffer)
insilmaril@721
   153
	int curClipboard;			//!< number of history step, which is the current clipboard
insilmaril@721
   154
	int redosAvail;				//!< Available number of redo steps
insilmaril@721
   155
	int undosAvail;				//!< Available number of undo steps
insilmaril@721
   156
	bool blockReposition;		//!< block while load or undo
insilmaril@721
   157
	bool blockSaveState;		//!< block while load or undo
insilmaril@721
   158
public:
insilmaril@721
   159
	bool isDefault();			//!< true, if map is still the empty default map
insilmaril@721
   160
	void makeDefault();			//!< Reset changelog, declare this as default map
insilmaril@721
   161
    bool hasChanged()	;		//!< true, if something has changed and is not saved yet
insilmaril@721
   162
	void setChanged();			//!< called from TextEditor via LinkableMapObj
insilmaril@721
   163
insilmaril@721
   164
	/*! \brief Get name of object
insilmaril@721
   165
	  
insilmaril@721
   166
	  Returns heading of a branch or name of an object for use in comment
insilmaril@721
   167
	  of undo/redo history
insilmaril@721
   168
	*/ 
insilmaril@776
   169
	QString getObjectName(LinkableMapObj*);	
insilmaril@776
   170
	QString getObjectName(TreeItem*);	
insilmaril@721
   171
insilmaril@721
   172
    void redo();						//!< Redo last action
insilmaril@721
   173
	bool isRedoAvailable();				//!< True, if redo is available
insilmaril@721
   174
    void undo();						//!< Undo last action
insilmaril@721
   175
	bool isUndoAvailable();				//!< True, if undo is available
insilmaril@721
   176
	void gotoHistoryStep (int);			//!< Goto a specifig step in history
insilmaril@721
   177
insilmaril@721
   178
insilmaril@721
   179
	QString getHistoryPath();			//!< Path to directory containing the history
insilmaril@721
   180
insilmaril@721
   181
	/*! \brief Save the current changes in map 
insilmaril@721
   182
insilmaril@721
   183
		Two commands and selections are saved:
insilmaril@721
   184
insilmaril@721
   185
			- undocommand and undoselection to undo the change
insilmaril@721
   186
			- redocommand and redoselection to redo the action after an undo
insilmaril@721
   187
insilmaril@721
   188
		Additionally a comment is logged. 
insilmaril@721
   189
insilmaril@721
   190
	*/	
insilmaril@721
   191
    void saveState(
insilmaril@721
   192
		const SaveMode& savemode, 
insilmaril@721
   193
		const QString &undoSelection, 
insilmaril@721
   194
		const QString &undoCommand, 
insilmaril@721
   195
		const QString &redoSelection, 
insilmaril@721
   196
		const QString &redoCommand, 
insilmaril@721
   197
		const QString &comment, 
insilmaril@753
   198
		TreeItem *saveSelection);
insilmaril@721
   199
	/*! Overloaded for convenience */
insilmaril@721
   200
    void saveStateChangingPart(
insilmaril@753
   201
		TreeItem *undoSelection, 
insilmaril@753
   202
		TreeItem* redoSelection, 
insilmaril@721
   203
		const QString &redoCommand, 
insilmaril@721
   204
		const QString &comment);
insilmaril@721
   205
	/*! Overloaded for convenience */
insilmaril@721
   206
    void saveStateRemovingPart(
insilmaril@753
   207
		TreeItem *redoSelection, 
insilmaril@721
   208
		const QString &comment);
insilmaril@721
   209
	/*! Overloaded for convenience */
insilmaril@721
   210
    void saveState(
insilmaril@753
   211
		TreeItem *undoSelection, 
insilmaril@721
   212
		const QString &undoCommand, 
insilmaril@753
   213
		TreeItem *redoSelection, 
insilmaril@721
   214
		const QString &redoCommand, 
insilmaril@721
   215
		const QString &comment); 
insilmaril@721
   216
	/*! Overloaded for convenience */
insilmaril@721
   217
    void saveState(
insilmaril@721
   218
		const QString &undoSelection, 
insilmaril@721
   219
		const QString &undoCommand, 
insilmaril@721
   220
		const QString &redoSelection, 
insilmaril@721
   221
		const QString &redoCommand, 
insilmaril@721
   222
		const QString &comment) ;
insilmaril@721
   223
    void saveState(
insilmaril@721
   224
		const QString &undoCommand, 
insilmaril@721
   225
		const QString &redoCommand, 
insilmaril@721
   226
		const QString &comment) ;
insilmaril@721
   227
insilmaril@721
   228
insilmaril@721
   229
////////////////////////////////////////////
insilmaril@721
   230
// unsorted so far
insilmaril@721
   231
////////////////////////////////////////////
insilmaril@784
   232
private:
insilmaril@784
   233
	QGraphicsScene *mapScene;
insilmaril@721
   234
public:
insilmaril@721
   235
	void setScene(QGraphicsScene *s);
insilmaril@721
   236
	QGraphicsScene *getScene();
insilmaril@721
   237
insilmaril@761
   238
    TreeItem* findBySelectString (QString s);		
insilmaril@822
   239
    TreeItem* findID (const uint &i);		// find MapObj by unique ID
insilmaril@721
   240
insilmaril@721
   241
insilmaril@721
   242
////////////////////////////////////////////
insilmaril@721
   243
// Interface 
insilmaril@721
   244
////////////////////////////////////////////
insilmaril@721
   245
public:
insilmaril@650
   246
	void setVersion(const  QString &);
insilmaril@819
   247
	QString getVersion();
insilmaril@650
   248
	void setAuthor  (const QString &);
insilmaril@650
   249
	QString getAuthor ();
insilmaril@650
   250
	void setComment (const QString &);
insilmaril@650
   251
	QString getComment ();
insilmaril@650
   252
	QString getDate();
insilmaril@749
   253
	int branchCount();
insilmaril@721
   254
insilmaril@800
   255
	void setSortFilter (const QString &);
insilmaril@800
   256
	QString getSortFilter ();
insilmaril@800
   257
protected:	
insilmaril@800
   258
	QString sortFilter;
insilmaril@800
   259
signals:
insilmaril@800
   260
	void sortFilterChanged (QString );		//!< Notify editors of new filter
insilmaril@800
   261
insilmaril@800
   262
public:
insilmaril@784
   263
	void setHeading(const QString &);		//!< Set heading of item	
insilmaril@784
   264
	QString getHeading ();					//!< Get heading of item
insilmaril@804
   265
	void setNote(const QString &s);			//!< Set note text
insilmaril@804
   266
	QString getNote();						//!< Get note text
insilmaril@831
   267
	void loadNote (const QString &fn);		//!< Load note from file
insilmaril@831
   268
	void saveNote (const QString &fn);		//!< Save note to file
insilmaril@721
   269
insilmaril@721
   270
private:
insilmaril@784
   271
	BranchItem* findCurrent;				// next object in find process
insilmaril@784
   272
	BranchItem* findPrevious;				// next object in find process
insilmaril@784
   273
	bool EOFind;							// true, if search failed
insilmaril@804
   274
insilmaril@721
   275
public:
insilmaril@821
   276
	void findDuplicateURLs();				// find duplicate URLs, testing only so far
insilmaril@829
   277
    void findAll (FindResultModel*, QString s, Qt::CaseSensitivity cs);	// Search all objects at once, also notes
insilmaril@829
   278
    BranchItem* findText(QString s,Qt::CaseSensitivity cs,QTextCursor &cursor);	// Find object, also in note
insilmaril@721
   279
    void findReset();						// Reset Search
insilmaril@811
   280
private:	
insilmaril@811
   281
	QString findString;
insilmaril@721
   282
insilmaril@808
   283
public:
insilmaril@721
   284
	void setURL(const QString &url);
insilmaril@721
   285
	QString getURL();						// returns URL of selection or ""
insilmaril@821
   286
	QStringList getURLs(bool ignoreScrolled=true);	// returns URLs of subtree
insilmaril@721
   287
insilmaril@721
   288
insilmaril@721
   289
	void setFrameType(const FrameObj::FrameType &);
insilmaril@721
   290
	void setFrameType(const QString &);
insilmaril@721
   291
	void setFramePenColor (const QColor &);
insilmaril@721
   292
	void setFrameBrushColor (const QColor &);
insilmaril@721
   293
	void setFramePadding (const int &);
insilmaril@721
   294
	void setFrameBorderWidth (const int &);
insilmaril@721
   295
	void setIncludeImagesVer(bool);
insilmaril@721
   296
	void setIncludeImagesHor(bool);
insilmaril@721
   297
	void setHideLinkUnselected (bool);
insilmaril@721
   298
insilmaril@721
   299
	/*! Should object be hidden in exports (clouded)? */
insilmaril@721
   300
	void setHideExport(bool);			
insilmaril@721
   301
insilmaril@721
   302
	/*! Should object be hidden in exports (clouded)? */
insilmaril@721
   303
	void toggleHideExport();		
insilmaril@721
   304
insilmaril@804
   305
	void addTimestamp();		
insilmaril@804
   306
insilmaril@721
   307
    void copy();						//!< Copy to clipboard
insilmaril@721
   308
private:	
insilmaril@721
   309
    void pasteNoSave(const int &n);		//!< paste clipboard to branch
insilmaril@721
   310
public:	
insilmaril@784
   311
    void paste();			//!< Paste clipboard to branch and backup
insilmaril@784
   312
    void cut();				//!< Cut to clipboard (and copy)
insilmaril@721
   313
insilmaril@795
   314
    bool moveUp(BranchItem *bi);	//!< Move branch up without saving state
insilmaril@795
   315
    void moveUp();					//!< Move branch up with saving state
insilmaril@795
   316
    bool moveDown(BranchItem *bi);	//!< Move branch down without saving state
insilmaril@784
   317
    void moveDown();		//!< Move branch down
insilmaril@795
   318
	void detach();					//!< Detach branch and use as new mapcenter
insilmaril@822
   319
	void sortChildren(bool inverse=false);	//!< Sort children lexically
insilmaril@721
   320
insilmaril@726
   321
	// The create methods are used to quickly parse a XML file
insilmaril@775
   322
	BranchItem* createMapCenter();				//!< Create MapCenter 
insilmaril@775
   323
	BranchItem* createBranch(BranchItem *dst);	//!< Create Branch
insilmaril@784
   324
	ImageItem* createImage(BranchItem *dst);	//!< Create image
insilmaril@790
   325
	XLinkItem* createXLink(BranchItem *dst,bool createMO=false);	//!< Create XLink starting at dst
insilmaril@726
   326
insilmaril@786
   327
	AttributeItem* addAttribute();
insilmaril@819
   328
	AttributeItem* addAttribute(AttributeItem* );
insilmaril@786
   329
insilmaril@721
   330
	/*! \brief Add new mapcenter
insilmaril@721
   331
insilmaril@721
   332
	    Disclaimer: Still experimental, not fully supported yet.
insilmaril@721
   333
	*/	
insilmaril@773
   334
	BranchItem* addMapCenter();
insilmaril@721
   335
private:	
insilmaril@773
   336
	BranchItem* addMapCenter(QPointF absPos);
insilmaril@652
   337
insilmaril@721
   338
	/*! \brief Add new branch
insilmaril@650
   339
insilmaril@721
   340
		Depending on num the new branch is created
insilmaril@652
   341
insilmaril@721
   342
		-3 above selection as child of selections parent
insilmaril@721
   343
		-2 as child of selection
insilmaril@721
   344
		-1 below selection as child of selections parent
insilmaril@721
   345
		0..n	insert at a specific position in selections parent
insilmaril@721
   346
		(needed for free relinking)
insilmaril@721
   347
	*/	
insilmaril@723
   348
insilmaril@721
   349
private:	
insilmaril@771
   350
    BranchItem* addNewBranchInt(BranchItem *dst, int pos);	// pos allows to add above/below selection
insilmaril@721
   351
public:	
insilmaril@721
   352
	/*! \Add new branch
insilmaril@721
   353
		
insilmaril@721
   354
		Depending on num the new branch is created
insilmaril@721
   355
		-1 above selection
insilmaril@721
   356
		 0 as child of selection
insilmaril@721
   357
		 1 below selection
insilmaril@721
   358
	*/
insilmaril@775
   359
    BranchItem* addNewBranch(int pos=0);		
insilmaril@755
   360
    BranchItem* addNewBranchBefore();		//!< Insert branch between selection and its parent
insilmaril@767
   361
	/*! \brief Relink a branch to a new destination dst 
insilmaril@767
   362
	    Relinks branch to dst at branch position pos. There is no saveState
insilmaril@767
   363
		here, as for example moveUp or moving in MapEditor have
insilmaril@767
   364
		different needs to call saveState
insilmaril@767
   365
		Returns true if relinking was successful.
insilmaril@767
   366
	*/	
insilmaril@767
   367
	bool relinkBranch (BranchItem* branch, BranchItem* dst, int pos =-1);	
insilmaril@777
   368
	bool relinkImage  (ImageItem* image, BranchItem* dst);	
insilmaril@767
   369
insilmaril@776
   370
    void deleteSelection();				//!< Delete selection
insilmaril@776
   371
	void deleteKeepChildren();			//!< remove branch, but keep children
insilmaril@776
   372
	void deleteChildren();				//!< keep branch, but remove children
insilmaril@652
   373
insilmaril@776
   374
	TreeItem* deleteItem(TreeItem*);	//!< Delete item and return parent (if parent!= rootItem)
insilmaril@795
   375
	void clearItem (TreeItem* ti);		//!< Remove all children of TreeItem ti
insilmaril@749
   376
	bool scrollBranch(BranchItem *);
insilmaril@749
   377
	bool unscrollBranch(BranchItem *);
insilmaril@721
   378
public:	
insilmaril@721
   379
    void toggleScroll();
insilmaril@721
   380
    void unscrollChildren();
insilmaril@763
   381
	void emitExpandAll();
insilmaril@804
   382
	void emitExpandOneLevel();
insilmaril@804
   383
	void emitCollapseOneLevel();
insilmaril@763
   384
signals:	
insilmaril@763
   385
	void expandAll();
insilmaril@804
   386
	void expandOneLevel();
insilmaril@804
   387
	void collapseOneLevel();
insilmaril@763
   388
insilmaril@763
   389
public:	
insilmaril@767
   390
	void toggleStandardFlag (const QString &name, FlagRow *master=NULL);
insilmaril@721
   391
    void addFloatImage(const QPixmap &img);
insilmaril@721
   392
insilmaril@721
   393
    void colorBranch(QColor);
insilmaril@721
   394
    void colorSubtree(QColor);
insilmaril@721
   395
	QColor getCurrentHeadingColor();
insilmaril@721
   396
insilmaril@721
   397
insilmaril@721
   398
	void editURL();							// edit URL
insilmaril@721
   399
	void editLocalURL();					// edit URL to local file
insilmaril@721
   400
	void editHeading2URL();					// copy heading to URL
insilmaril@721
   401
	void editBugzilla2URL();				// create URL to Bugzilla
insilmaril@820
   402
	void getBugzillaData();					// get data from Novell Bugzilla
insilmaril@721
   403
	void editFATE2URL();					// create URL to FATE
insilmaril@721
   404
	void editVymLink();						// edit link to another map
insilmaril@721
   405
	void setVymLink (const QString &);	// Set vymLink for selection
insilmaril@721
   406
	void deleteVymLink();					// delete link to another map
insilmaril@721
   407
	QString getVymLink();					// return path to map
insilmaril@721
   408
	QStringList getVymLinks();				// return paths in subtree
insilmaril@721
   409
	void followXLink (int);
insilmaril@721
   410
	void editXLink (int);
insilmaril@721
   411
insilmaril@721
   412
insilmaril@721
   413
insilmaril@721
   414
insilmaril@721
   415
////////////////////////////////////////////
insilmaril@721
   416
// Scripting
insilmaril@721
   417
////////////////////////////////////////////
insilmaril@721
   418
public:	
insilmaril@721
   419
insilmaril@721
   420
	/* \brief Process one command and its parameters */
insilmaril@804
   421
    QVariant parseAtom (const QString &atom, bool &noError, QString &errorMsg);	
insilmaril@721
   422
insilmaril@721
   423
	/* \brief Runs the script */
insilmaril@807
   424
	QVariant runScript (const QString &script);
insilmaril@721
   425
insilmaril@721
   426
private:
insilmaril@721
   427
	Parser parser;
insilmaril@721
   428
insilmaril@721
   429
////////////////////////////////////////////
insilmaril@721
   430
// Exports
insilmaril@721
   431
////////////////////////////////////////////
insilmaril@721
   432
private:
insilmaril@753
   433
	TreeItem::HideTmpMode hidemode;	// true while exporting to hide some stuff
insilmaril@721
   434
insilmaril@721
   435
public:
insilmaril@721
   436
	/*! Set or unset temporary hiding of objects during export  */
insilmaril@721
   437
	void setExportMode (bool);
insilmaril@721
   438
insilmaril@721
   439
	/*! Save as image */
insilmaril@721
   440
    void exportImage (QString fname="",bool askForName=true,QString format="PNG");
insilmaril@721
   441
insilmaril@721
   442
insilmaril@721
   443
	/*! Export as XTML to directory */
insilmaril@721
   444
    void exportXML(QString dir="", bool askForName=true);
insilmaril@721
   445
insilmaril@807
   446
	/*! Export as A&O report text to file */
insilmaril@807
   447
	void exportAO (QString fname="",bool askForName=true);  
insilmaril@807
   448
insilmaril@721
   449
	/*! Export as ASCII text to file */
insilmaril@721
   450
	void exportASCII (QString fname="",bool askForName=true);  
insilmaril@721
   451
insilmaril@819
   452
	/*! Export as HTML to directory */
insilmaril@825
   453
    void exportHTML(const QString& dir="", bool useDialog=true);	
insilmaril@721
   454
    void exportXHTML(const QString& dir="", bool askForName=true);	
insilmaril@721
   455
insilmaril@721
   456
    /*! Export as OpenOfficeOrg presentation */
insilmaril@721
   457
    void exportOOPresentation(const QString &,const QString &);	
insilmaril@721
   458
insilmaril@721
   459
insilmaril@721
   460
////////////////////////////////////////////
insilmaril@721
   461
// View related
insilmaril@721
   462
////////////////////////////////////////////
insilmaril@721
   463
public:
insilmaril@721
   464
	void registerEditor (QWidget *);
insilmaril@721
   465
	void unregisterEditor (QWidget *);
insilmaril@723
   466
insilmaril@837
   467
	void setMapZoomFactor (const double &); 
insilmaril@723
   468
private: 
insilmaril@837
   469
	double zoomFactor;
insilmaril@723
   470
	QPointF contextPos;					//!< local position during context menu
insilmaril@723
   471
public:
insilmaril@723
   472
	void setContextPos (QPointF);		//!< local position during context menu
insilmaril@723
   473
	void unsetContextPos ();			//!< forget local position after context menu
insilmaril@723
   474
insilmaril@721
   475
	void updateNoteFlag();				//!< Signal origination in TextEditor
insilmaril@650
   476
	void reposition();					//!< Call reposition for all MCOs
insilmaril@753
   477
	void setHideTmpMode (TreeItem::HideTmpMode mode);	
insilmaril@721
   478
insilmaril@753
   479
	void emitNoteHasChanged (TreeItem *ti);
insilmaril@753
   480
	void emitDataHasChanged (TreeItem *ti);
insilmaril@837
   481
	void emitUpdateLayout ();
insilmaril@746
   482
insilmaril@745
   483
signals:
insilmaril@837
   484
	void updateLayout();
insilmaril@753
   485
	void noteHasChanged (QModelIndex ix);
insilmaril@745
   486
	void newChildObject(QModelIndex ix);
insilmaril@745
   487
insilmaril@721
   488
private:
insilmaril@721
   489
	MapEditor *mapEditor;
insilmaril@721
   490
insilmaril@721
   491
	QColor defLinkColor;		// default color for links
insilmaril@721
   492
	QColor defXLinkColor;		// default color for xlinks
insilmaril@721
   493
	int defXLinkWidth;			// default width for xlinks
insilmaril@721
   494
	LinkableMapObj::ColorHint linkcolorhint;// use heading color or own color
insilmaril@721
   495
	LinkableMapObj::Style linkstyle;		// default style for links
insilmaril@721
   496
insilmaril@696
   497
public:
insilmaril@721
   498
	void setMapLinkStyle (const QString &);	// Set style of link
insilmaril@721
   499
	LinkableMapObj::Style getMapLinkStyle ();	// requested in LMO
insilmaril@721
   500
	void setMapDefLinkColor(QColor);		// default color of links
insilmaril@721
   501
	void setMapLinkColorHintInt();			// color of links
insilmaril@721
   502
	void setMapLinkColorHint(LinkableMapObj::ColorHint);// color of links
insilmaril@721
   503
	void toggleMapLinkColorHint();			// after changing linkStyles
insilmaril@721
   504
    void selectMapBackgroundImage();
insilmaril@721
   505
    void setMapBackgroundImage(const QString &);
insilmaril@721
   506
    void selectMapBackgroundColor();
insilmaril@721
   507
    void setMapBackgroundColor(QColor);
insilmaril@721
   508
    QColor getMapBackgroundColor();
insilmaril@721
   509
insilmaril@721
   510
insilmaril@721
   511
	LinkableMapObj::ColorHint getMapLinkColorHint();
insilmaril@721
   512
	QColor getMapDefLinkColor();
insilmaril@721
   513
	void setMapDefXLinkColor(QColor);
insilmaril@721
   514
	QColor getMapDefXLinkColor();
insilmaril@721
   515
	void setMapDefXLinkWidth (int);
insilmaril@721
   516
	int getMapDefXLinkWidth();
insilmaril@721
   517
insilmaril@721
   518
	/*!  Move absolutly to (x,y).  */	
insilmaril@721
   519
    void move    (const double &x, const double &y);
insilmaril@721
   520
insilmaril@721
   521
	/*!  Move relativly to (x,y).  */	
insilmaril@721
   522
    void moveRel (const double &x, const double &y);
insilmaril@721
   523
insilmaril@721
   524
////////////////////////////////////////////
insilmaril@721
   525
// Animation  **experimental**
insilmaril@721
   526
////////////////////////////////////////////
insilmaril@696
   527
private:	
insilmaril@696
   528
	QTimer *animationTimer;
insilmaril@696
   529
	bool animationUse;
insilmaril@696
   530
	uint animationTicks;
insilmaril@696
   531
	uint animationInterval;
insilmaril@696
   532
	int timerId;				// animation timer
insilmaril@767
   533
	QList <MapObj*> animObjList;// list with animated objects //FIXME-2 should go to MapEditor
insilmaril@696
   534
insilmaril@721
   535
private slots:
insilmaril@721
   536
	void animate();						//!< Called by timer to animate stuff
insilmaril@696
   537
public:
insilmaril@835
   538
	void startAnimation(BranchObj *bo, const QPointF &v);
insilmaril@723
   539
	void startAnimation(BranchObj *bo, const QPointF &start, const QPointF &dest);
insilmaril@722
   540
	void stopAnimation(MapObj *mo);
insilmaril@722
   541
insilmaril@721
   542
////////////////////////////////////////////
insilmaril@721
   543
// Network related 
insilmaril@721
   544
////////////////////////////////////////////
insilmaril@721
   545
public:
insilmaril@721
   546
    /*! \brief Networking states
insilmaril@721
   547
		
insilmaril@721
   548
		In Network modus we want to switch of saveState, autosave, ...
insilmaril@721
   549
	*/
insilmaril@721
   550
	enum NetState {
insilmaril@721
   551
		Offline,			//!< Offline
insilmaril@721
   552
		Client,				//!< I am the client and connected to server
insilmaril@721
   553
		Server				//!< I am the server
insilmaril@721
   554
	};
insilmaril@721
   555
insilmaril@721
   556
private:
insilmaril@721
   557
	// Network connections **Experimental**
insilmaril@721
   558
	NetState netstate;			// offline, client, server
insilmaril@721
   559
	QTcpServer *tcpServer;		// Act as server in conference mode (experimental)
insilmaril@721
   560
	QList <QTcpSocket*> clientList;		// List of connected clients
insilmaril@721
   561
	quint16 sendCounter;		// Increased with every sent command
insilmaril@721
   562
insilmaril@721
   563
	QTcpSocket	*clientSocket;	// socket of this client
insilmaril@721
   564
	QString server;				// server address of this client
insilmaril@721
   565
	int port;					// server port of this client
insilmaril@721
   566
insilmaril@721
   567
insilmaril@721
   568
insilmaril@721
   569
protected:
insilmaril@721
   570
	void sendSelection();
insilmaril@721
   571
insilmaril@721
   572
public:
insilmaril@721
   573
	void newServer();
insilmaril@721
   574
	void connectToServer();
insilmaril@721
   575
insilmaril@721
   576
private slots:	
insilmaril@721
   577
	void newClient();
insilmaril@721
   578
	void sendData(const QString &s);
insilmaril@721
   579
	void readData();
insilmaril@721
   580
	void displayNetworkError (QAbstractSocket::SocketError);
insilmaril@721
   581
insilmaril@784
   582
////////////////////////////////////////////
insilmaril@784
   583
// DBUS related 
insilmaril@784
   584
////////////////////////////////////////////
insilmaril@721
   585
insilmaril@784
   586
private:
insilmaril@784
   587
AdaptorModel *adaptorModel; //FIXME-3
insilmaril@721
   588
insilmaril@785
   589
public slots:
insilmaril@785
   590
	void testslot();
insilmaril@785
   591
insilmaril@721
   592
////////////////////////////////////////////
insilmaril@721
   593
// Selection related 
insilmaril@721
   594
////////////////////////////////////////////
insilmaril@721
   595
private:
insilmaril@761
   596
	TreeItem *latestAddedItem;				// latest added object, reset on setChanged()
insilmaril@721
   597
insilmaril@721
   598
public:
insilmaril@727
   599
	void setSelectionModel(QItemSelectionModel *);		// Set common selectionModel
insilmaril@728
   600
	QItemSelectionModel* getSelectionModel();
insilmaril@727
   601
insilmaril@721
   602
	void setSelectionBlocked(bool);
insilmaril@721
   603
	bool isSelectionBlocked();
insilmaril@721
   604
insilmaril@769
   605
	bool select ();							//! select by using common QItemSelectionModel
insilmaril@769
   606
	bool select (const QString &);			//! Select by string
insilmaril@769
   607
	bool select (LinkableMapObj *lmo);		//! Select by pointer to LMO
insilmaril@769
   608
	bool select (TreeItem *ti );			//! Select by pointer to TreeItem
insilmaril@769
   609
	bool select (const QModelIndex &index);	//! Select by ModelIndex
insilmaril@721
   610
	void unselect();
insilmaril@787
   611
	bool reselect();
insilmaril@721
   612
insilmaril@763
   613
	void emitShowSelection();				//!< Show selection in all views
insilmaril@763
   614
signals:
insilmaril@763
   615
	void showSelection();
insilmaril@721
   616
insilmaril@721
   617
public:	
insilmaril@787
   618
    bool selectFirstBranch();
insilmaril@787
   619
    bool selectLastBranch();
insilmaril@787
   620
	bool selectLastSelectedBranch();
insilmaril@787
   621
	bool selectParent();
insilmaril@721
   622
insilmaril@721
   623
public:
insilmaril@735
   624
	TreeItem::Type selectionType();
insilmaril@735
   625
	LinkableMapObj* getSelectedLMO();
insilmaril@776
   626
	BranchObj* getSelectedBranchObj();	// FIXME-3 replace by item...
insilmaril@787
   627
	BranchItem* getSelectedBranch();
insilmaril@787
   628
	ImageItem* getSelectedImage();
insilmaril@787
   629
	AttributeItem* getSelectedAttribute();
insilmaril@738
   630
	TreeItem* getSelectedItem();
insilmaril@735
   631
	QModelIndex getSelectedIndex();
insilmaril@721
   632
	QString getSelectString ();
insilmaril@652
   633
	QString getSelectString (LinkableMapObj *lmo);
insilmaril@749
   634
	QString getSelectString (TreeItem *item);
insilmaril@721
   635
	
insilmaril@746
   636
	
insilmaril@775
   637
signals:
insilmaril@775
   638
	void selectionChanged(const QItemSelection &newsel, const QItemSelection &oldsel);
insilmaril@775
   639
insilmaril@746
   640
public:
insilmaril@775
   641
	void emitSelectionChanged(const QItemSelection &oldsel);
insilmaril@775
   642
	void emitSelectionChanged();
insilmaril@721
   643
	void selectMapLinkColor();
insilmaril@721
   644
    void selectMapSelectionColor();
insilmaril@721
   645
private:	
insilmaril@721
   646
    void setSelectionColorInt(QColor);
insilmaril@727
   647
	QItemSelectionModel *selModel;
insilmaril@773
   648
	QString lastSelectString;
insilmaril@773
   649
	bool selectionBlocked;		//! Used to block changes of selection while editing a heading
insilmaril@727
   650
insilmaril@721
   651
public:	
insilmaril@721
   652
    void setSelectionColor(QColor);
insilmaril@721
   653
    QColor getSelectionColor();
insilmaril@650
   654
};
insilmaril@650
   655
insilmaril@650
   656
#endif