QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgstableeditorwidget.h
Go to the documentation of this file.
1 // This file is part of CppSheets.
2 //
3 // Copyright 2018 Patrick Flynn <[email protected]>
4 //
5 // CppSheets is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // CppSheets is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with CppSheets. If not, see <https://www.gnu.org/licenses/>.
17 
18 #ifndef QGSTABLEEDITORWIDGET_H
19 #define QGSTABLEEDITORWIDGET_H
20 
21 #include "qgis_gui.h"
22 #include "qgstablecell.h"
23 #include "qgsproperty.h"
24 #include <QTableWidget>
25 #include <QPlainTextEdit>
26 #include <QStyledItemDelegate>
27 
28 
29 #ifndef SIP_RUN
30 
32 class QgsTableEditorTextEdit : public QPlainTextEdit
33 {
34  Q_OBJECT
35  public:
36  QgsTableEditorTextEdit( QWidget *parent );
37 
42  void setWeakEditorMode( bool weakEditorMode );
43 
44  void setWidgetOwnsGeometry( bool value )
45  {
46  mWidgetOwnsGeometry = value;
47  }
48 
49  public slots:
50 
51  void resizeToContents();
52 
53  protected:
54  void changeEvent( QEvent *e ) override;
55 
56  void keyPressEvent( QKeyEvent *e ) override;
57 
58  private:
59 
60  void updateMinimumSize();
61 
62  bool mWeakEditorMode = false;
63  int mOriginalWidth = -1;
64  int mOriginalHeight = -1;
65  bool mWidgetOwnsGeometry = false;
66 
67 };
68 
69 class QgsTableEditorDelegate : public QStyledItemDelegate
70 {
71  Q_OBJECT
72  public:
73  QgsTableEditorDelegate( QObject *parent );
74 
79  void setWeakEditorMode( bool weakEditorMode );
80 
81  signals:
82 
83  void updateNumericFormatForIndex( const QModelIndex &index ) const;
84 
85  protected:
86  QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem & /*option*/, const QModelIndex &index ) const override;
87  void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
88  void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
89 
90  private:
91 
92  bool mWeakEditorMode = false;
93  mutable QModelIndex mLastIndex;
94 };
95 
97 
98 #endif
99 
111 class GUI_EXPORT QgsTableEditorWidget : public QTableWidget
112 {
113  Q_OBJECT
114  public:
115 
119  QgsTableEditorWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr );
120  ~QgsTableEditorWidget() override;
121 
127  void setTableContents( const QgsTableContents &contents );
128 
134  QgsTableContents tableContents() const;
135 
143  void setSelectionNumericFormat( QgsNumericFormat *format SIP_TRANSFER );
144 
155  QgsNumericFormat *selectionNumericFormat();
156 
162  bool hasMixedSelectionNumericFormat();
163 
175  Q_DECL_DEPRECATED QColor selectionForegroundColor() SIP_DEPRECATED;
176 
186  QColor selectionBackgroundColor();
187 
196  Qt::Alignment selectionHorizontalAlignment();
197 
206  Qt::Alignment selectionVerticalAlignment();
207 
216  QgsProperty selectionCellProperty();
217 
225  QgsTextFormat selectionTextFormat();
226 
233  double selectionRowHeight();
234 
241  double selectionColumnWidth();
242 
247  double tableRowHeight( int row );
248 
253  double tableColumnWidth( int column );
254 
263  void setTableRowHeight( int row, double height );
264 
273  void setTableColumnWidth( int column, double width );
274 
280  QList<int> rowsAssociatedWithSelection();
281 
287  QList<int> columnsAssociatedWithSelection();
288 
294  QVariantList tableHeaders() const;
295 
299  bool isHeaderCellSelected();
300 
301  public slots:
302 
308  void insertRowsBelow();
309 
315  void insertRowsAbove();
316 
322  void insertColumnsBefore();
323 
329  void insertColumnsAfter();
330 
336  void deleteRows();
337 
343  void deleteColumns();
344 
350  void expandRowSelection();
351 
357  void expandColumnSelection();
358 
362  void clearSelectedCells();
363 
372  Q_DECL_DEPRECATED void setSelectionForegroundColor( const QColor &color ) SIP_DEPRECATED;
373 
380  void setSelectionBackgroundColor( const QColor &color );
381 
390  void setSelectionHorizontalAlignment( Qt::Alignment alignment );
391 
400  void setSelectionVerticalAlignment( Qt::Alignment alignment );
401 
407  void setSelectionCellProperty( const QgsProperty &property );
408 
414  void setSelectionTextFormat( const QgsTextFormat &format );
415 
421  void setSelectionRowHeight( double height );
422 
428  void setSelectionColumnWidth( double height );
429 
433  void setIncludeTableHeader( bool included );
434 
440  void setTableHeaders( const QVariantList &headers );
441 
442  protected:
443  void keyPressEvent( QKeyEvent *event ) override;
444 
445  signals:
446 
450  void tableChanged();
451 
455  void activeCellChanged();
456 
457  private slots:
458 
459  void updateNumericFormatForIndex( const QModelIndex &index );
460 
461  private:
462 
464  enum Roles
465  {
466  PresetBackgroundColorRole = Qt::UserRole + 1,
467  RowHeight,
468  ColumnWidth,
469  CellContent,
470  TextFormat,
471  HorizontalAlignment,
472  VerticalAlignment,
473  CellProperty,
474  };
475 
476  void updateHeaders();
477 
478  bool collectConsecutiveRowRange( const QModelIndexList &list, int &minRow, int &maxRow ) const;
479  bool collectConsecutiveColumnRange( const QModelIndexList &list, int &minColumn, int &maxColumn ) const;
480  QList< int > collectUniqueRows( const QModelIndexList &list ) const;
481  QList< int > collectUniqueColumns( const QModelIndexList &list ) const;
482 
483  int mBlockSignals = 0;
484  QHash< QTableWidgetItem *, QgsNumericFormat * > mNumericFormats;
485  QMenu *mHeaderMenu = nullptr;
486  bool mIncludeHeader = false;
487  bool mFirstSet = true;
488 
489  friend class QgsTableEditorDelegate;
490 
491 };
492 
493 #endif // QGSTABLEEDITORWIDGET_H
QgsProperty
A store for object properties.
Definition: qgsproperty.h:230
QgsNumericFormat
A numeric formatter allows for formatting a numeric value for display, using a variety of different f...
Definition: qgsnumericformat.h:259
QgsTableContents
QVector< QgsTableRow > QgsTableContents
A set of table rows.
Definition: qgstablecell.h:220
SIP_DEPRECATED
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
QgsTextFormat
Container for all settings relating to text rendering.
Definition: qgstextformat.h:40
qgstablecell.h
QgsTableEditorWidget
A reusable widget for editing simple spreadsheet-style tables.
Definition: qgstableeditorwidget.h:111
SIP_TRANSFER
#define SIP_TRANSFER
Definition: qgis_sip.h:36
qgsproperty.h
SIP_TRANSFERTHIS
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53