1 /* poppler-optcontent-private.h: qt interface to poppler 2 * 3 * Copyright (C) 2007, Brad Hards <bradh@kde.org> 4 * Copyright (C) 2008, Pino Toscano <pino@kde.org> 5 * Copyright (C) 2016, 2018, 2019, 2021, Albert Astals Cid <aacid@kde.org> 6 * Copyright (C) 2017, Hubert Figuière <hub@figuiere.net> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2, or (at your option) 11 * any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 21 */ 22 23 #ifndef POPPLER_OPTCONTENT_PRIVATE_H 24 #define POPPLER_OPTCONTENT_PRIVATE_H 25 26 #include <QtCore/QMap> 27 #include <QtCore/QSet> 28 #include <QtCore/QString> 29 30 class Array; 31 class OCGs; 32 class OptionalContentGroup; 33 34 class QModelIndex; 35 36 namespace Poppler { 37 class OptContentItem; 38 class OptContentModel; 39 class OptContentModelPrivate; 40 41 class RadioButtonGroup 42 { 43 public: 44 RadioButtonGroup(OptContentModelPrivate *ocModel, Array *rbarray); 45 ~RadioButtonGroup(); 46 QSet<OptContentItem *> setItemOn(OptContentItem *itemToSetOn); 47 48 private: 49 QList<OptContentItem *> itemsInGroup; 50 }; 51 52 class OptContentItem 53 { 54 public: 55 enum ItemState 56 { 57 On, 58 Off, 59 HeadingOnly 60 }; 61 62 explicit OptContentItem(OptionalContentGroup *group); 63 explicit OptContentItem(const QString &label); 64 OptContentItem(); 65 ~OptContentItem(); 66 name()67 QString name() const { return m_name; } state()68 ItemState state() const { return m_stateBackup; } 69 void setState(ItemState state, bool obeyRadioGroups, QSet<OptContentItem *> &changedItems); 70 childList()71 QList<OptContentItem *> childList() { return m_children; } 72 setParent(OptContentItem * parent)73 void setParent(OptContentItem *parent) { m_parent = parent; } parent()74 OptContentItem *parent() { return m_parent; } 75 76 void addChild(OptContentItem *child); 77 78 void appendRBGroup(RadioButtonGroup *rbgroup); 79 isEnabled()80 bool isEnabled() const { return m_enabled; } 81 82 QSet<OptContentItem *> recurseListChildren(bool includeMe = false) const; 83 group()84 OptionalContentGroup *group() const { return m_group; } 85 86 private: 87 OptionalContentGroup *m_group; 88 QString m_name; 89 ItemState m_state; // true for ON, false for OFF 90 ItemState m_stateBackup; 91 QList<OptContentItem *> m_children; 92 OptContentItem *m_parent; 93 QList<RadioButtonGroup *> m_rbGroups; 94 bool m_enabled; 95 }; 96 97 class OptContentModelPrivate 98 { 99 public: 100 OptContentModelPrivate(OptContentModel *qq, OCGs *optContent); 101 ~OptContentModelPrivate(); 102 103 OptContentModelPrivate(const OptContentModelPrivate &) = delete; 104 OptContentModelPrivate &operator=(const OptContentModelPrivate &) = delete; 105 106 void parseRBGroupsArray(Array *rBGroupArray); 107 OptContentItem *nodeFromIndex(const QModelIndex &index, bool canBeNull = false) const; 108 QModelIndex indexFromItem(OptContentItem *node, int column) const; 109 110 /** 111 Get the OptContentItem corresponding to a given reference value. 112 113 \param ref the reference number (e.g. from Object.getRefNum()) to look up 114 115 \return the matching optional content item, or null if the reference wasn't found 116 */ 117 OptContentItem *itemFromRef(const QString &ref) const; 118 void setRootNode(OptContentItem *node); 119 120 OptContentModel *q; 121 122 QMap<QString, OptContentItem *> m_optContentItems; 123 QList<OptContentItem *> m_headerOptContentItems; 124 QList<RadioButtonGroup *> m_rbgroups; 125 OptContentItem *m_rootNode; 126 127 private: 128 void addChild(OptContentItem *parent, OptContentItem *child); 129 void parseOrderArray(OptContentItem *parentNode, Array *orderArray); 130 }; 131 } 132 133 #endif 134