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