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