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 
34 /*! @brief Options for altering the editor widget creation process
35 
36  @see KPropertyEditorCreatorInterface::createEditor().
37  @since 3.1
38 */
39 class KPROPERTYWIDGETS_EXPORT KPropertyEditorCreatorOptions {
40 public:
42 
44 
46 
47  /*! In order to have better look of the widget within the property editor view,
48  we are usually hiding borders from the widget (see FactoryManager::createEditor())
49  and adding 1 pixel 'gray border' on the top. Default value of bordersVisible is @c false. */
50  bool bordersVisible() const;
51 
52  void setBordersVisible(bool visible);
53 
54  //! Assigns @a other to this KPropertyEditorCreatorOptions
56 
57  //! @return true if these options have exactly the same values options as @a other
58  bool operator==(const KPropertyEditorCreatorOptions &other) const;
59 
60  //! @return true if these options differs in at least one value from @a other
61  bool operator!=(const KPropertyEditorCreatorOptions &other) const { return !operator==(other); }
62 
63 private:
64  class Private;
65  Private * const d;
66 };
67 
68 //! An interface for editor widget creators.
69 /*! Options can be set in the options attribute in order to customize
70  widget creation process. Do this in the EditorCreatorInterface constructor.
71 */
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 
82  //! Options for editor creating
83  //! @since 3.1
84  const KPropertyEditorCreatorOptions *options() const;
85 
86  //! @overload
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 
103  //! A helper that draws text obtained from index (EditRole data) on painter @a painter.
104  //! iface->valueToString() is used to convert value to string.
105  //! @since 3.1
106  static void paint(const KPropertyValueDisplayInterface *iface, QPainter *painter,
107  const QStyleOptionViewItem &option, const QModelIndex &index);
108 };
109 
110 //! Label widget that can be used for displaying text-based read-only items
111 //! Used in KPropertyLabelCreator.
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 
139 //! Creator returning editor
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 
178  //! Adds editor creator @a creator for type @a type.
179  //! The creator becomes owned by the factory.
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 
191  //! Adds value painter @a painter for type @a type.
192  //! The painter becomes owned by the factory.
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-2021 The KDE developers.
Generated on Wed Mar 3 2021 00:01:23 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.