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

source code of kio/src/widgets/kacleditwidget_p.h