1 /* 2 SPDX-FileCopyrightText: 2005 Sean Harmer <sh@rama.homelinux.org> 3 SPDX-FileCopyrightText: 2005-2007 Till Adam <adam@kde.org> 4 5 SPDX-License-Identifier: LGPL-2.0-or-later 6 */ 7 8 #ifndef KACLEDITWIDGET_P_H 9 #define KACLEDITWIDGET_P_H 10 11 #include <config-kiowidgets.h> 12 13 #if HAVE_POSIX_ACL || defined(Q_MOC_RUN) 14 #include <kacl.h> 15 #include <sys/acl.h> 16 17 #include <QDialog> 18 #include <QHash> 19 #include <QTreeWidget> 20 21 #include <QComboBox> 22 #include <kfileitem.h> 23 24 class KACLListViewItem; 25 class QButtonGroup; 26 class KACLListView; 27 class QStackedWidget; 28 class QCheckBox; 29 class QAbstractButton; 30 class QColorGroup; 31 32 /** 33 @author Sean Harmer 34 */ 35 class KACLListView : public QTreeWidget 36 { 37 Q_OBJECT 38 friend class KACLListViewItem; 39 40 public: 41 enum Types { 42 OWNER_IDX = 0, 43 GROUP_IDX, 44 OTHERS_IDX, 45 MASK_IDX, 46 NAMED_USER_IDX, 47 NAMED_GROUP_IDX, 48 LAST_IDX, 49 }; 50 enum EntryType { 51 User = 1, 52 Group = 2, 53 Others = 4, 54 Mask = 8, 55 NamedUser = 16, 56 NamedGroup = 32, 57 AllTypes = 63, 58 }; 59 60 explicit KACLListView(QWidget *parent = nullptr); 61 ~KACLListView() override; 62 hasMaskEntry()63 bool hasMaskEntry() const 64 { 65 return m_hasMask; 66 } 67 bool hasDefaultEntries() const; allowDefaults()68 bool allowDefaults() const 69 { 70 return m_allowDefaults; 71 } setAllowDefaults(bool v)72 void setAllowDefaults(bool v) 73 { 74 m_allowDefaults = v; 75 } 76 unsigned short maskPermissions() const; 77 void setMaskPermissions(unsigned short maskPerms); 78 acl_perm_t maskPartialPermissions() const; 79 void setMaskPartialPermissions(acl_perm_t maskPerms); 80 81 bool maskCanBeDeleted() const; 82 bool defaultMaskCanBeDeleted() const; 83 84 const KACLListViewItem *findDefaultItemByType(EntryType type) const; 85 const KACLListViewItem *findItemByType(EntryType type, bool defaults = false) const; 86 unsigned short calculateMaskValue(bool defaults) const; 87 void calculateEffectiveRights(); 88 89 QStringList allowedUsers(bool defaults, KACLListViewItem *allowedItem = nullptr); 90 QStringList allowedGroups(bool defaults, KACLListViewItem *allowedItem = nullptr); 91 92 KACL getACL(); 93 KACL getDefaultACL(); 94 95 public Q_SLOTS: 96 void slotAddEntry(); 97 void slotEditEntry(); 98 void slotRemoveEntry(); 99 void setACL(const KACL &anACL); 100 void setDefaultACL(const KACL &anACL); 101 102 QSize sizeHint() const override; 103 104 protected Q_SLOTS: 105 void slotItemClicked(QTreeWidgetItem *pItem, int col); 106 void slotItemDoubleClicked(QTreeWidgetItem *item, int col); 107 108 protected: 109 void contentsMousePressEvent(QMouseEvent *e); 110 111 private: 112 void fillItemsFromACL(const KACL &pACL, bool defaults = false); 113 KACL itemsToACL(bool defaults) const; 114 115 KACL m_ACL; 116 KACL m_defaultACL; 117 unsigned short m_mask; 118 bool m_hasMask; 119 bool m_allowDefaults; 120 QStringList m_allUsers; 121 QStringList m_allGroups; 122 }; 123 124 class EditACLEntryDialog : public QDialog 125 { 126 Q_OBJECT 127 public: 128 EditACLEntryDialog(KACLListView *listView, 129 KACLListViewItem *item, 130 const QStringList &users, 131 const QStringList &groups, 132 const QStringList &defaultUsers, 133 const QStringList &defaultGroups, 134 int allowedTypes = KACLListView::AllTypes, 135 int allowedDefaultTypes = KACLListView::AllTypes, 136 bool allowDefault = false); item()137 KACLListViewItem *item() const 138 { 139 return m_item; 140 } 141 public Q_SLOTS: 142 void slotOk(); 143 void slotSelectionChanged(QAbstractButton *); 144 private Q_SLOTS: 145 void slotUpdateAllowedUsersAndGroups(); 146 void slotUpdateAllowedTypes(); 147 148 private: 149 KACLListView *m_listView; 150 KACLListViewItem *m_item; 151 QStringList m_users; 152 QStringList m_groups; 153 QStringList m_defaultUsers; 154 QStringList m_defaultGroups; 155 int m_allowedTypes; 156 int m_allowedDefaultTypes; 157 QButtonGroup *m_buttonGroup; 158 QComboBox *m_usersCombo; 159 QComboBox *m_groupsCombo; 160 QStackedWidget *m_widgetStack; 161 QCheckBox *m_defaultCB; 162 QHash<QAbstractButton *, int> m_buttonIds; 163 }; 164 165 class KACLListViewItem : public QTreeWidgetItem 166 { 167 public: 168 KACLListViewItem(QTreeWidget *parent, KACLListView::EntryType type, unsigned short value, bool defaultEntry, const QString &qualifier = QString()); 169 ~KACLListViewItem() override; 170 QString key() const; 171 bool operator<(const QTreeWidgetItem &other) const override; 172 173 void calcEffectiveRights(); 174 175 bool isDeletable() const; 176 bool isAllowedToChangeType() const; 177 178 void togglePerm(acl_perm_t perm); 179 180 void updatePermissionIcons(); 181 void repaint(); 182 183 KACLListView::EntryType type; 184 unsigned short value; 185 bool isDefault; 186 QString qualifier; 187 bool isPartial; 188 189 private: 190 KACLListView *m_pACLListView; 191 }; 192 193 #endif 194 #endif 195