1 /***************************************************************************
2                          qgsmssqldataitems.h  -  description
3                          -------------------
4     begin                : 2011-10-08
5     copyright            : (C) 2011 by Tamas Szekeres
6     email                : szekerest at gmail.com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17 
18 
19 
20 #ifndef QGSMSSQLDATAITEMS_H
21 #define QGSMSSQLDATAITEMS_H
22 
23 #include "qgsdataitem.h"
24 #include "qgsdataitemprovider.h"
25 #include "qgsmssqltablemodel.h"
26 
27 class QgsMssqlGeomColumnTypeThread;
28 
29 class QgsMssqlRootItem;
30 class QgsMssqlConnectionItem;
31 class QgsMssqlSchemaItem;
32 class QgsMssqlLayerItem;
33 
34 class QgsMssqlRootItem : public QgsConnectionsRootItem
35 {
36     Q_OBJECT
37   public:
38     QgsMssqlRootItem( QgsDataItem *parent, const QString &name, const QString &path );
39 
40     QVector<QgsDataItem *> createChildren() override;
41 
sortKey()42     QVariant sortKey() const override { return 4; }
43 
44 #ifdef HAVE_GUI
45     QWidget *paramWidget() override;
46 #endif
47 
48   public slots:
49 #ifdef HAVE_GUI
50     void onConnectionsChanged();
51 #endif
52 };
53 
54 class QgsMssqlConnectionItem : public QgsDataCollectionItem
55 {
56     Q_OBJECT
57   public:
58     QgsMssqlConnectionItem( QgsDataItem *parent, const QString &name, const QString &path );
59     ~QgsMssqlConnectionItem() override;
60 
61     QVector<QgsDataItem *> createChildren() override;
62     bool equal( const QgsDataItem *other ) override;
63 
64     bool handleDrop( const QMimeData *data, const QString &toSchema );
65 
connInfo()66     QString connInfo() const { return mConnInfo; }
allowGeometrylessTables()67     bool allowGeometrylessTables() const { return mAllowGeometrylessTables; }
68 
69   signals:
70     void addGeometryColumn( const QgsMssqlLayerProperty & );
71 
72   public slots:
73 
74     void setAllowGeometrylessTables( const bool allow );
75 
76     void setLayerType( QgsMssqlLayerProperty layerProperty );
77 
78     void refresh() override;
79 
80   private slots:
81     void setAsPopulated();
82 
83   private:
84     QString mConnInfo;
85     QString mService;
86     QString mHost;
87     QString mDatabase;
88     QString mUsername;
89     QString mPassword;
90     bool mUseGeometryColumns;
91     bool mUseEstimatedMetadata;
92     bool mAllowGeometrylessTables;
93     QgsMssqlGeomColumnTypeThread *mColumnTypeThread = nullptr;
94 
95     void readConnectionSettings();
96     void stop();
97 };
98 
99 class QgsMssqlSchemaItem : public QgsDatabaseSchemaItem
100 {
101     Q_OBJECT
102   public:
103     QgsMssqlSchemaItem( QgsDataItem *parent, const QString &name, const QString &path );
104 
105     QVector<QgsDataItem *> createChildren() override;
106 
107     QgsMssqlLayerItem *addLayer( const QgsMssqlLayerProperty &layerProperty, bool refresh );
108     void refresh() override; // do not refresh directly (call parent)
109     void addLayers( QgsDataItem *newLayers );
110 
111   public:
112     bool layerCollection() const override;
113 };
114 
115 class QgsMssqlLayerItem : public QgsLayerItem
116 {
117     Q_OBJECT
118 
119   public:
120     QgsMssqlLayerItem( QgsDataItem *parent, const QString &name, const QString &path, QgsLayerItem::LayerType layerType, const QgsMssqlLayerProperty &layerProperties );
121 
122     QString createUri();
123 
124     QgsMssqlLayerItem *createClone();
125 
126     bool disableInvalidGeometryHandling() const;
127 
layerInfo()128     const QgsMssqlLayerProperty &layerInfo() const { return mLayerProperty; }
129 
130     QVector<QgsDataItem *> createChildren() override;
131 
132   private:
133     QgsMssqlLayerProperty mLayerProperty;
134     bool mDisableInvalidGeometryHandling = false;
135 
136 };
137 
138 
139 
140 //! Provider for GDAL root data item
141 class QgsMssqlDataItemProvider : public QgsDataItemProvider
142 {
143   public:
144     QString name() override;
145 
146     QString dataProviderKey() const override;
147 
148     int capabilities() const override;
149 
150     QgsDataItem *createDataItem( const QString &pathIn, QgsDataItem *parentItem ) override;
151 };
152 
153 #endif // QGSMSSQLDATAITEMS_H
154