KProperty

KPropertyWidgetsFactory.h
1 /* This file is part of the KDE project
2  Copyright (C) 2008-2015 Jarosław Staniek <[email protected]>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18 */
19 
20 #ifndef KPROPERTYWIDGETS_FACTORY_H
21 #define KPROPERTYWIDGETS_FACTORY_H
22 
23 #include "KProperty.h"
24 #include "KPropertyFactory.h"
25 #include "KPropertyUtils.h"
26 
27 #include <QObject>
28 #include <QVariant>
29 #include <QHash>
30 #include <QLabel>
31 #include <QPainter>
32 #include <QStyleOptionViewItem>
33 
39 class KPROPERTYWIDGETS_EXPORT KPropertyEditorCreatorOptions {
40 public:
42 
44 
46 
50  bool bordersVisible() const;
51 
52  void setBordersVisible(bool visible);
53 
56 
58  bool operator==(const KPropertyEditorCreatorOptions &other) const;
59 
61  bool operator!=(const KPropertyEditorCreatorOptions &other) const { return !operator==(other); }
62 
63 private:
64  class Private;
65  Private * const d;
66 };
67 
69 
72 class KPROPERTYWIDGETS_EXPORT KPropertyEditorCreatorInterface
73 {
74 public:
76 
78 
79  virtual QWidget * createEditor(int type, QWidget *parent,
80  const QStyleOptionViewItem &option, const QModelIndex &index) const;
81 
84  const KPropertyEditorCreatorOptions *options() const;
85 
88 
89 private:
90  Q_DISABLE_COPY(KPropertyEditorCreatorInterface)
91  class Private;
92  Private * const d;
93 };
94 
95 class KPROPERTYWIDGETS_EXPORT KPropertyValuePainterInterface
96 {
97 public:
98  KPropertyValuePainterInterface();
99  virtual ~KPropertyValuePainterInterface();
100  virtual void paint( QPainter * painter,
101  const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0;
102 
106  static void paint(const KPropertyValueDisplayInterface *iface, QPainter *painter,
107  const QStyleOptionViewItem &option, const QModelIndex &index);
108 };
109 
112 class KPROPERTYWIDGETS_EXPORT KPropertyLabel : public QLabel
113 {
114  Q_OBJECT
115  Q_PROPERTY(QVariant value READ value WRITE setValue USER true)
116 public:
117  KPropertyLabel(QWidget *parent, const KProperty *property,
118  const KPropertyValueDisplayInterface *iface);
119 
120  ~KPropertyLabel() override;
121 
122  QVariant value() const;
123 
124 Q_SIGNALS:
125  void commitData( QWidget * editor );
126 
127 public Q_SLOTS:
128  void setValue(const QVariant& value);
129 
130 protected:
131  void paintEvent( QPaintEvent * event ) override;
132 
133 private:
135  class Private;
136  Private * const d;
137 };
138 
140 template<class Widget>
141 class KPROPERTYWIDGETS_EXPORT KPropertyEditorCreator : public KPropertyEditorCreatorInterface,
143  public KPropertyValuePainterInterface
144 {
145 public:
147 
148  ~KPropertyEditorCreator() override {}
149 
150  QWidget *createEditor(int type, QWidget *parent, const QStyleOptionViewItem &option,
151  const QModelIndex &index) const override
152  {
153  Q_UNUSED(type);
154  Q_UNUSED(option);
155  KProperty *prop = KPropertyUtils::propertyForIndex(index);
156  return new Widget(parent, prop, this);
157  }
158 
159  void paint(QPainter *painter, const QStyleOptionViewItem &option,
160  const QModelIndex &index) const override
161  {
162  KPropertyValuePainterInterface::paint(this, painter, option, index);
163  }
164 };
165 
167 
168 
169 class KPROPERTYWIDGETS_EXPORT KPropertyWidgetsFactory : public KPropertyFactory
170 {
171 public:
172  KPropertyWidgetsFactory();
173  ~KPropertyWidgetsFactory() override;
174 
175  QHash<int, KPropertyEditorCreatorInterface*> editorCreators() const;
176  QHash<int, KPropertyValuePainterInterface*> valuePainters() const;
177 
180  void addEditor(int type, KPropertyEditorCreatorInterface *creator);
181 
182  void addPainter(int type, KPropertyValuePainterInterface *painter);
183 
184  static void paintTopGridLine(QWidget *widget);
185  static void setTopAndBottomBordersUsingStyleSheet(QWidget *widget,
186  const QString& extraStyleSheet = QString());
187 
188 protected:
189  void addEditorInternal(int type, KPropertyEditorCreatorInterface *editor, bool own = true);
190 
193  void addPainterInternal(int type, KPropertyValuePainterInterface *painter, bool own = true);
194 
195  Q_DISABLE_COPY(KPropertyWidgetsFactory)
196  class Private;
197  Private * const d;
198 };
199 
200 #endif
An interface for editor widget creators.
bool operator!=(const KPropertyEditorCreatorOptions &other) const
Label widget that can be used for displaying text-based read-only items Used in KPropertyLabelCreator...
Q_PROPERTY(...)
The base class representing a single property.
Definition: KProperty.h:95
Q_DISABLE_COPY(Class)
virtual void paintEvent(QPaintEvent *) override
Options for altering the editor widget creation process.
Creator returning editor.
Provides a specialized conversion of value to string depending on type.
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Tue Oct 20 2020 23:08:40 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.