1 #ifndef MARKS_H
2 #define MARKS_H
3 
4 #include <QString>
5 #include "scribusapi.h"
6 #include "desaxe/saxiohelper.h"
7 #include "desaxe/simple_actions.h"
8 
9 class Mark;
10 class PageItem;
11 class TextNote;
12 
13 enum MarkType
14 {
15 	MARKNoType = -1, //undefined mark type (wrong situation!)
16 	MARKAnchorType = 0, //empty anchor mark, useful for creating references to it
17 	MARK2ItemType = 1, //reference to page item ID
18 	MARK2MarkType = 2, //reference other mark
19 	MARKVariableTextType = 3,//mark contain dynamic text
20 	MARKNoteMasterType = 4,  //mark contain footnote reference
21 	MARKNoteFrameType = 5,  //mark used internally in note frame at beginning of note`s text
22 	MARKIndexType = 6, // index entry
23 	MARKBullNumType = 7
24 };
25 
26 struct MarkData
27 {
28 	QString strtxt;
29 	PageItem* itemPtr {nullptr};
30 	QString destmarkName;
31 	MarkType destmarkType {MARKNoType};
32 	TextNote* notePtr {nullptr};
33 	//fields used for resolving to pointers for load and copy
34 	QString itemName;
35 	MarkType markType {MARKNoType};
36 
MarkDataMarkData37 	MarkData() {}
38 };
39 
40 class SCRIBUS_API Mark
41 {
42 	friend class ScribusDoc;
43 	friend class ScribusMainWindow;
44 	friend class BulNumMark;
45 	//only ScribusDoc && ScribusMainWindow can create and delete marks
46 private:
Mark()47 	Mark() : m_data() {}
48 	Mark(const Mark& other);
49 
50 public:
51 	QString label;
52 	int OwnPage {-1};
53 
54 	void setValues(const QString& l, int p, MarkType t, const MarkData& d);
55 
getType()56 	MarkType getType() const { return m_type; }
setType(MarkType t)57 	void setType(MarkType t) { m_type = t; }
getData()58 	const MarkData getData() const { return m_data; }
setData(const MarkData d)59 	void setData(const MarkData d) { m_data = d; }
getItemPtr()60 	PageItem* getItemPtr() const { return m_data.itemPtr; }
setItemPtr(PageItem * ptr)61 	void setItemPtr( PageItem* ptr ) { m_data.itemPtr = ptr; }
getItemName()62 	const QString getItemName() const { return m_data.itemName; }
setItemName(const QString name)63 	void setItemName( const QString name ) { m_data.itemName = name; }
64 
65 	//for marks to marks - return label and type of target mark by reference
66 	void getMark(QString& l, MarkType &t) const;
67 	//for marks to marks - set label and type of target mark from mark pointer
68 	void setMark(Mark* mP);
69 	void setMark(const QString& l, MarkType t);
getMarkType()70 	MarkType getMarkType() const { return m_data.markType; }
setMarkType(MarkType t)71 	void setMarkType(MarkType t) { m_data.markType = t; }
72 	QString getString() const;
73 	void setString(const QString& str );
getNotePtr()74 	TextNote* getNotePtr() const { return m_data.notePtr; }
75 	void setNotePtr(TextNote *note);
76 
77 	bool hasItemPtr() const;
78 	bool hasString() const;
79 	bool hasMark() const;
80 	bool isUnique() const;
81 	bool isNoteType() const;
82 	bool isType(const MarkType t) const;
83 
84 	void clearString();
85 
~Mark()86     virtual ~Mark() {}
87 
88 protected:
89 	MarkType m_type {MARKNoType};
90 	MarkData m_data;
91 };
92 
93 class SCRIBUS_API BulNumMark : public Mark
94 {
95 public:
96 	BulNumMark();
~BulNumMark()97 	~BulNumMark() {}
98 };
99 
100 #endif // MARKS_H
101 
102