-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgsdbsourceselect.h
155 lines (138 loc) · 5.33 KB
/
qgsdbsourceselect.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/***************************************************************************
qgdbsourceselect.h - description
-------------------
begin : Sat Jun 22 2002
copyright : (C) 2002 by Gary E.Sherman
email : sherman at mrcc.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/* $Id$ */
#ifndef QGSDBSOURCESELECT_H
#define QGSDBSOURCESELECT_H
#include "ui_qgsdbsourceselectbase.h"
#include "qgisgui.h"
extern "C"
{
#include <libpq-fe.h>
}
#include <QThread>
#include <vector>
#include <list>
#include <utility>
#include <QMap>
#include <QPair>
#include <QIcon>
class QStringList;
class QTableWidgetItem;
class QgsGeomColumnTypeThread;
class QgisApp;
/*! \class QgsDbSourceSelect
* \brief Dialog to create connections and add tables from PostgresQL.
*
* This dialog allows the user to define and save connection information
* for PostGIS enabled PostgresQL databases. The user can then connect and add
* tables from the database to the map canvas.
*/
class QgsDbSourceSelect : public QDialog, private Ui::QgsDbSourceSelectBase
{
Q_OBJECT
public:
//! Constructor
QgsDbSourceSelect(QgisApp *app, Qt::WFlags fl = QgisGui::ModalDialogFlags);
//! Destructor
~QgsDbSourceSelect();
//! Opens the create connection dialog to build a new connection
void addNewConnection();
//! Opens a dialog to edit an existing connection
void editConnection();
//! Deletes the selected connection
void deleteConnection();
//! Populate the connection list combo box
void populateConnectionList();
//! Determines the tables the user selected and closes the dialog
void addTables();
//! String list containing the selected tables
QStringList selectedTables();
//! Connection info (database, host, user, password)
QString connInfo();
//! Return the name of the selected encoding (e.g. UTf-8, ISO-8559-1, etc/)
QString encoding();
// Store the selected database
void dbChanged();
// Utility function to construct the query for finding out the
// geometry type of a column
static QString makeGeomQuery(QString schema, QString table, QString column);
public slots:
/*! Connects to the database using the stored connection parameters.
* Once connected, available layers are displayed.
*/
void on_btnConnect_clicked();
void on_btnAdd_clicked();
void on_btnNew_clicked();
void on_btnEdit_clicked();
void on_btnDelete_clicked();
void on_lstTables_itemDoubleClicked(QTableWidgetItem *);
void setSql(QTableWidgetItem *);
void on_btnHelp_clicked();
void on_cmbConnections_activated(int);
void setLayerType(QString schema, QString table, QString column,
QString type);
private:
typedef std::pair<QString, QString> geomPair;
typedef std::list<geomPair > geomCol;
bool getGeometryColumnInfo(PGconn *pd,
geomCol& details);
// Set the position of the database connection list to the last
// used one.
void setConnectionListPosition();
// Show the context help for the dialog
void showHelp();
// Combine the schema, table and column data into a single string
// useful for display to the user
QString fullDescription(QString schema, QString table, QString column);
// The column labels
QStringList mColumnLabels;
// Our thread for doing long running queries
QgsGeomColumnTypeThread* mColumnTypeThread;
QString m_connInfo;
QStringList m_selectedTables;
// Storage for the range of layer type icons
QMap<QString, QPair<QString, QIcon> > mLayerIcons;
//! Pointer to the qgis application mainwindow
QgisApp *qgisApp;
PGconn *pd;
static const int context_id = 1244423922;
};
// Perhaps this class should be in its own file??
//
// A class that determines the geometry type of a given database
// schema.table.column, with the option of doing so in a separate
// thread.
class QgsGeomColumnTypeThread : public QThread
{
Q_OBJECT
public:
void setConnInfo(QString s);
void setGeometryColumn(QString schema, QString table, QString column);
// These functions get the layer types and pass that information out
// by emitting the setLayerType() signal. The getLayerTypes()
// function does the actual work, but use the run() function if you
// want the work to be done as a separate thread from the calling
// process.
virtual void run() { getLayerTypes(); }
void getLayerTypes();
signals:
void setLayerType(QString schema, QString table, QString column,
QString type);
private:
QString mConnInfo;
std::vector<QString> schemas, tables, columns;
};
#endif // QGSDBSOURCESELECT_H