swift
columns.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_GUI_MODELS_COLUMNS_H
7 #define SWIFT_GUI_MODELS_COLUMNS_H
8 
9 #include <QList>
10 #include <QObject>
11 #include <QSharedPointer>
12 #include <QString>
13 #include <QtGlobal>
14 
16 #include "gui/swiftguiexport.h"
17 #include "misc/propertyindex.h"
18 #include "misc/variant.h"
19 
20 class QModelIndex;
21 
22 namespace swift::gui::models
23 {
26  {
27  public:
29  CColumn(const QString &headerName, const swift::misc::CPropertyIndex &propertyIndex,
30  CDefaultFormatter *formatter, bool editable = false)
31  : CColumn(headerName, "", propertyIndex, formatter, editable)
32  {}
33 
35  CColumn(const QString &headerName, const QString &toolTip, const swift::misc::CPropertyIndex &propertyIndex,
36  CDefaultFormatter *formatter, bool editable = false);
37 
39  CColumn(const QString &toolTip, const swift::misc::CPropertyIndex &propertyIndex);
40 
42  CColumn(const swift::misc::CPropertyIndex &propertyIndex);
43 
45  bool hasAlignment() const { return (!m_formatter.isNull() && m_formatter->hasAlignment()); }
46 
48  bool isEditable() const { return m_editable; }
49 
51  void setEditable(bool editable) { m_editable = editable; }
52 
54  bool isSortable() const { return m_sortable; }
55 
57  void setSortable(bool sortable) { m_sortable = sortable; }
58 
60  swift::misc::CPropertyIndex getSortPropertyIndex() const { return m_sortPropertyIndex; }
61 
63  bool hasSortPropertyIndex() const;
64 
66  void setSortPropertyIndex(const swift::misc::CPropertyIndex &propertyIndex);
67 
70  {
71  Q_ASSERT(formatter);
72  m_formatter.reset(formatter);
73  }
74 
76  const CDefaultFormatter *getFormatter() const;
77 
80 
82  const QString &getColumnName() const { return m_columnName; }
83 
85  const QString &getColumnToolTip() const { return m_columnToolTip; }
86 
88  const swift::misc::CPropertyIndex &getPropertyIndex() const { return m_propertyIndex; }
89 
91  void setTranslationContext(const QString &translationContext) { m_translationContext = translationContext; }
92 
94  int getWidthPercentage() const { return m_widthPercentage; }
95 
97  bool hasWidthPercentage() const { return m_widthPercentage > 0; }
98 
100  void setWidthPercentage(int width) { m_widthPercentage = width; }
101 
103  bool isIncognito() const { return m_incognito; }
104 
106  void setIncognito(bool incognito) { m_incognito = incognito; }
107 
109  static CColumn standardValueObject(const QString &headerName, const swift::misc::CPropertyIndex &propertyIndex,
110  int alignment = CDefaultFormatter::alignDefault());
111 
113  static CColumn standardValueObject(const QString &headerName, const QString &toolTip,
114  const swift::misc::CPropertyIndex &propertyIndex,
115  int alignment = CDefaultFormatter::alignDefault());
116 
118  static CColumn standardString(const QString &headerName, const swift::misc::CPropertyIndex &propertyIndex,
119  int alignment = CDefaultFormatter::alignDefault());
120 
122  static CColumn standardString(const QString &headerName, const QString &toolTip,
123  const swift::misc::CPropertyIndex &propertyIndex,
124  int alignment = CDefaultFormatter::alignDefault());
125 
127  static CColumn orderColumn(
128  const swift::misc::CPropertyIndex &propertyIndex = swift::misc::CPropertyIndexRef::GlobalIndexIOrderable,
129  int alignment = CDefaultFormatter::alignRightVCenter());
130 
132  static CColumn standardInteger(const QString &headerName, const QString &toolTip,
133  const swift::misc::CPropertyIndex &propertyIndex,
134  int alignment = CDefaultFormatter::alignRightVCenter());
135 
137  static CColumn emptyColumn();
138 
139  private:
140  QString m_translationContext;
141  QString m_columnName;
142  QString m_columnToolTip;
143  int m_widthPercentage = -1;
144  QSharedPointer<CDefaultFormatter> m_formatter;
145  swift::misc::CPropertyIndex m_propertyIndex;
146  swift::misc::CPropertyIndex m_sortPropertyIndex;
147 
149  static const CIncognitoFormatter *incongitoFormatter();
150 
151  bool m_editable = false;
152  bool m_sortable = true;
153  bool m_incognito = false;
154  };
155 
159  class SWIFT_GUI_EXPORT CColumns : public QObject
160  {
161  Q_OBJECT
162 
163  public:
169  CColumns(const QString &translationContext, QObject *parent = nullptr);
170 
172  void addColumn(const CColumn &column);
173 
175  void addColumnIncognito(const CColumn &column);
176 
178  QString propertyIndexToColumnName(const swift::misc::CPropertyIndex &propertyIndex, bool i18n = false) const;
179 
181  QString columnToName(int column, bool i18n = false) const;
182 
184  swift::misc::CPropertyIndex columnToPropertyIndex(int column) const;
185 
187  swift::misc::CPropertyIndex columnToSortPropertyIndex(int column) const;
188 
190  int propertyIndexToColumn(const swift::misc::CPropertyIndex &propertyIndex) const;
191 
193  int nameToPropertyIndex(const QString &name) const;
194 
196  int size() const;
197 
199  bool hasAlignment(const QModelIndex &index) const;
200 
202  bool isEditable(const QModelIndex &index) const;
203 
205  bool isEditable(int column) const;
206 
208  bool isSortable(const QModelIndex &index) const;
209 
211  bool isSortable(int column) const;
212 
214  bool isValidColumn(const QModelIndex &index) const;
215 
217  bool isValidColumn(int column) const;
218 
220  swift::misc::CVariant getAlignment(const QModelIndex &index) const;
221 
223  const CDefaultFormatter *getFormatter(const QModelIndex &index) const;
224 
226  const CColumn &at(int columnNumber) const { return m_columns.at(columnNumber); }
227 
229  void clear() { m_columns.clear(); }
230 
233  void setColumns(const QList<CColumn> &columns) { m_columns = columns; }
234  void setColumns(const CColumns &columns) { m_columns = columns.m_columns; }
236 
238  const QList<CColumn> &columns() const { return m_columns; }
239 
241  bool hasAnyWidthPercentage() const;
242 
244  void setWidthPercentages(const QList<int> &percentages);
245 
247  QList<int> calculateWidths(int totalWidth) const;
248 
250  void insertEmptyColumn();
251 
253  bool endsWithEmptyColumn() const;
254 
255  private:
256  QList<CColumn> m_columns;
257  QString m_translationContext;
258  };
259 } // namespace swift::gui::models
260 
261 #endif // SWIFT_GUI_MODELS_COLUMNS_H
Single column.
Definition: columns.h:26
const QString & getColumnName() const
Column name.
Definition: columns.h:82
bool isIncognito() const
If incognito mode, do NOT display daza.
Definition: columns.h:103
bool isSortable() const
Sortable?
Definition: columns.h:54
bool isEditable() const
Editable?
Definition: columns.h:48
bool hasWidthPercentage() const
Having a width percentage.
Definition: columns.h:97
const swift::misc::CPropertyIndex & getPropertyIndex() const
Property index.
Definition: columns.h:88
int getWidthPercentage() const
Width in percentage.
Definition: columns.h:94
void setWidthPercentage(int width)
Width percentage.
Definition: columns.h:100
void setTranslationContext(const QString &translationContext)
Translation context.
Definition: columns.h:91
void setEditable(bool editable)
Set editable.
Definition: columns.h:51
bool hasAlignment() const
Alignment for this column?
Definition: columns.h:45
void setFormatter(CDefaultFormatter *formatter)
Formatter.
Definition: columns.h:69
CColumn(const QString &headerName, const swift::misc::CPropertyIndex &propertyIndex, CDefaultFormatter *formatter, bool editable=false)
Constructor.
Definition: columns.h:29
swift::misc::CVariant getAlignment() const
Aligment as CVariant.
swift::misc::CPropertyIndex getSortPropertyIndex() const
Property index used when sorting, option alternative.
Definition: columns.h:60
void setSortable(bool sortable)
Set sortable.
Definition: columns.h:57
const QString & getColumnToolTip() const
Column tooltip.
Definition: columns.h:85
void setIncognito(bool incognito)
Mark as incognito enabled.
Definition: columns.h:106
Header data for a table.
Definition: columns.h:160
swift::misc::CVariant getAlignment(const QModelIndex &index) const
Aligment as CVariant.
const CColumn & at(int columnNumber) const
Column at position.
Definition: columns.h:226
const QList< CColumn > & columns() const
Columns.
Definition: columns.h:238
void setColumns(const CColumns &columns)
Set columns.
Definition: columns.h:234
void setColumns(const QList< CColumn > &columns)
Set columns.
Definition: columns.h:233
Column formatter default implementation, also serving as interface.
static int alignDefault()
Default value.
static int alignRightVCenter()
Align right/vertically centered.
Just returns a empty "" value.
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition: variant.h:66
Models to be used with views, mainly QTableView.
#define SWIFT_GUI_EXPORT
Export a class or function from the library.