QGIS API Documentation  3.27.0-Master (aef1b1ec20)
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
31 
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 
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
A numeric formatter allows for formatting a numeric value for display, using a variety of different f...
A store for object properties.
Definition: qgsproperty.h:231
A reusable widget for editing simple spreadsheet-style tables.
void activeCellChanged()
Emitted whenever the active (or selected) cell changes in the widget.
void tableChanged()
Emitted whenever the table contents are changed.
Container for all settings relating to text rendering.
Definition: qgstextformat.h:41
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QVector< QgsTableRow > QgsTableContents
A set of table rows.
Definition: qgstablecell.h:220