QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgsvectortilebasiclabelingwidget.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectortilebasiclabelingwidget.h
3  --------------------------------------
4  Date : May 2020
5  Copyright : (C) 2020 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSVECTORTILEBASICLABELINGWIDGET_H
17 #define QGSVECTORTILEBASICLABELINGWIDGET_H
18 
20 
21 #include "ui_qgsvectortilebasiclabelingwidget.h"
22 
23 #include "qgswkbtypes.h"
24 
25 #include <memory>
26 #include <QSortFilterProxyModel>
27 
29 #define SIP_NO_FILE
30 
32 class QgsVectorTileBasicLabelingListModel;
33 class QgsVectorTileLayer;
34 class QgsMapCanvas;
35 class QgsMessageBar;
36 class QgsVectorTileBasicLabelingProxyModel;
37 
44 class GUI_EXPORT QgsVectorTileBasicLabelingWidget : public QgsMapLayerConfigWidget, private Ui::QgsVectorTileBasicLabelingWidget
45 {
46  Q_OBJECT
47  public:
48  QgsVectorTileBasicLabelingWidget( QgsVectorTileLayer *layer, QgsMapCanvas *canvas, QgsMessageBar *messageBar, QWidget *parent = nullptr );
49  ~QgsVectorTileBasicLabelingWidget() override;
50 
51  void setLayer( QgsVectorTileLayer *layer );
52 
53  public slots:
55  void apply() override;
56 
57  private slots:
58  void addStyle( QgsWkbTypes::GeometryType geomType );
59  //void addStyle();
60  void editStyle();
61  void editStyleAtIndex( const QModelIndex &index );
62  void removeStyle();
63 
64  void updateLabelingFromWidget();
65 
66  private:
67  QgsVectorTileLayer *mVTLayer = nullptr;
68  std::unique_ptr<QgsVectorTileBasicLabeling> mLabeling;
69  QgsVectorTileBasicLabelingListModel *mModel = nullptr;
70  QgsVectorTileBasicLabelingProxyModel *mProxyModel = nullptr;
71  QgsMapCanvas *mMapCanvas = nullptr;
72  QgsMessageBar *mMessageBar = nullptr;
73 };
74 
75 
77 class QgsVectorLayer;
79 class QgsLabelingGui;
80 
87 class QgsLabelingPanelWidget : public QgsPanelWidget
88 {
89  Q_OBJECT
90  public:
91  QgsLabelingPanelWidget( const QgsPalLayerSettings &labelSettings, QgsVectorLayer *vectorLayer, QgsMapCanvas *mapCanvas, QWidget *parent = nullptr );
92 
93  void setDockMode( bool dockMode ) override;
94 
95  void setContext( const QgsSymbolWidgetContext &context );
96  QgsPalLayerSettings labelSettings();
97 
98  private:
99  QgsLabelingGui *mLabelingGui = nullptr;
100 };
101 
102 
104 
105 class QgsVectorTileBasicLabelingListModel : public QAbstractListModel
106 {
107  Q_OBJECT
108  public:
109 
110  enum Role
111  {
112  MinZoom = Qt::UserRole + 1,
113  MaxZoom,
114  };
115 
116  QgsVectorTileBasicLabelingListModel( QgsVectorTileBasicLabeling *r, QObject *parent = nullptr );
117 
118  int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
119  int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
120  QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
121  QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
122  Qt::ItemFlags flags( const QModelIndex &index ) const override;
123  bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
124 
125  bool removeRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override;
126 
127  void insertStyle( int row, const QgsVectorTileBasicLabelingStyle &style );
128 
129  // drag'n'drop support
130  Qt::DropActions supportedDropActions() const override;
131  QStringList mimeTypes() const override;
132  QMimeData *mimeData( const QModelIndexList &indexes ) const override;
133  bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent ) override;
134 
135  private:
136  QgsVectorTileBasicLabeling *mLabeling = nullptr;
137 };
138 
139 class QgsVectorTileBasicLabelingProxyModel : public QSortFilterProxyModel
140 {
141  Q_OBJECT
142  public:
143  QgsVectorTileBasicLabelingProxyModel( QgsVectorTileBasicLabelingListModel *source, QObject *parent = nullptr );
144 
145  void setCurrentZoom( int zoom );
146  void setFilterVisible( bool enabled );
147 
148  bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
149 
150  private:
151 
152  bool mFilterVisible = false;
153  int mCurrentZoom = -1;
154 };
155 
156 
158 
159 #endif // QGSVECTORTILEBASICLABELINGWIDGET_H
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:86
A panel widget that can be shown in the map style dock.
virtual void apply()=0
Called when changes to the layer need to be made.
A bar for displaying non-blocking messages to the user.
Definition: qgsmessagebar.h:61
Contains settings for how a map layer will be labeled.
Base class for any widget that can be shown as a inline panel.
virtual void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
Represents a vector layer which manages a vector based data sets.
Configuration of a single style within QgsVectorTileBasicLabeling.
Basic labeling configuration for vector tile layers.
Implements a map layer that is dedicated to rendering of vector tiles.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Definition: qgswkbtypes.h:141