ticket901patch.diff
src/app/qgspgquerybuilder.cpp (copia de trabajo) | ||
---|---|---|
24 | 24 |
: QDialog(parent, fl) |
25 | 25 |
{ |
26 | 26 |
setupUi(this); |
27 |
setupListViews();
|
|
27 |
setupGuiViews();
|
|
28 | 28 |
} |
29 | 29 |
// constructor used when the query builder must make its own |
30 | 30 |
// connection to the database |
... | ... | |
33 | 33 |
: QDialog(parent, fl), mUri(uri) |
34 | 34 |
{ |
35 | 35 |
setupUi(this); |
36 |
setupListViews();
|
|
36 |
setupGuiViews();
|
|
37 | 37 |
// The query builder must make its own connection to the database when |
38 | 38 |
// using this constructor |
39 | 39 |
QString connInfo = mUri->connInfo(); |
... | ... | |
71 | 71 |
: QDialog(parent, fl), mPgConnection(con) |
72 | 72 |
{ |
73 | 73 |
setupUi(this); |
74 |
setupListViews();
|
|
74 |
setupGuiViews();
|
|
75 | 75 |
mOwnConnection = false; // we don't own this connection since it was passed to us |
76 | 76 |
mUri = new QgsDataSourceURI( "table=" + tableName); |
77 | 77 |
QString datasource = QString(tr("Table <b>%1</b> in database <b>%2</b> on host <b>%3</b>, user <b>%4</b>")) |
... | ... | |
138 | 138 |
mFieldMap[fieldName] = QgsField(fieldName, type, fieldType); |
139 | 139 |
QStandardItem *myItem = new QStandardItem(fieldName); |
140 | 140 |
myItem->setEditable(false); |
141 |
mModelFields->insertRow(mModelFields->rowCount(),myItem); |
|
141 |
mModelFields->insertRow(mModelFields->rowCount(),myItem);
|
|
142 | 142 |
} |
143 |
// All fields get ... setup |
|
144 |
setupLstFieldsModel(); |
|
143 | 145 |
} |
144 | 146 |
else |
145 | 147 |
{ |
... | ... | |
148 | 150 |
PQclear(result); |
149 | 151 |
} |
150 | 152 | |
151 |
void QgsPgQueryBuilder::setupListViews()
|
|
153 |
void QgsPgQueryBuilder::setupLstFieldsModel()
|
|
152 | 154 |
{ |
153 |
//Models |
|
155 |
lstFields->setModel(mModelFields); |
|
156 |
} |
|
157 | ||
158 |
void QgsPgQueryBuilder::setupGuiViews() |
|
159 |
{ |
|
160 |
//Initialize the models |
|
154 | 161 |
mModelFields = new QStandardItemModel(); |
155 | 162 |
mModelValues = new QStandardItemModel(); |
156 |
lstFields->setModel(mModelFields); |
|
157 |
lstValues->setModel(mModelValues); |
|
158 | 163 |
// Modes |
159 | 164 |
lstFields->setViewMode(QListView::ListMode); |
160 | 165 |
lstValues->setViewMode(QListView::ListMode); |
... | ... | |
163 | 168 |
// Performance tip since Qt 4.1 |
164 | 169 |
lstFields->setUniformItemSizes(true); |
165 | 170 |
lstValues->setUniformItemSizes(true); |
171 |
// Colored rows |
|
172 |
lstFields->setAlternatingRowColors(true); |
|
173 |
lstValues->setAlternatingRowColors(true); |
|
166 | 174 |
} |
167 | 175 | |
168 |
void QgsPgQueryBuilder::on_btnSampleValues_clicked()
|
|
176 |
void QgsPgQueryBuilder::fillValues(QString theSQL)
|
|
169 | 177 |
{ |
170 |
QString myFieldName = mModelFields->data(lstFields->currentIndex()).toString(); |
|
171 |
if (myFieldName.isEmpty()) |
|
172 |
return; |
|
173 | ||
174 |
QString sql = "SELECT DISTINCT \"" + myFieldName + "\" " + |
|
175 |
"FROM (SELECT \"" + myFieldName + "\" " + |
|
176 |
"FROM " + mUri->quotedTablename() + " " + |
|
177 |
"LIMIT 5000) AS foo " + |
|
178 |
"ORDER BY \"" + myFieldName + "\" "+ |
|
179 |
"LIMIT 25"; |
|
180 |
// clear the values list |
|
178 |
// clear the model |
|
181 | 179 |
mModelValues->clear(); |
180 |
|
|
182 | 181 |
// determine the field type |
183 |
QgsField field = mFieldMap[myFieldName]; |
|
184 |
bool isCharField = field.typeName().find("char") > -1; |
|
185 |
PGresult *result = PQexec(mPgConnection, (const char *) (sql.utf8())); |
|
182 |
QgsField field = mFieldMap[mModelFields->data(lstFields->currentIndex()).toString()]; |
|
183 |
bool mActualFieldIsChar = field.typeName().find("char") > -1; |
|
184 |
|
|
185 |
PGresult *result = PQexec(mPgConnection, (const char *) (theSQL.utf8())); |
|
186 | 186 | |
187 | 187 |
if (PQresultStatus(result) == PGRES_TUPLES_OK) |
188 | 188 |
{ |
... | ... | |
190 | 190 |
for(int i=0; i < rowCount; i++) |
191 | 191 |
{ |
192 | 192 |
QString value = QString::fromUtf8(PQgetvalue(result, i, 0)); |
193 |
if(isCharField) |
|
194 |
{ |
|
195 |
value = "'" + value + "'"; |
|
196 |
} |
|
197 | 193 |
QStandardItem *myItem = new QStandardItem(value); |
198 | 194 |
myItem->setEditable(false); |
199 | 195 |
mModelValues->insertRow(mModelValues->rowCount(),myItem); |
200 | 196 |
} |
201 | 197 |
}else |
202 | 198 |
{ |
203 |
QMessageBox::warning(this, tr("Database error"), tr("<p>Failed to get sample of field values using SQL:</p><p>") + sql + "</p><p>Error message was: "+ QString(PQerrorMessage(mPgConnection)) + "</p>");
|
|
199 |
QMessageBox::warning(this, tr("Database error"), tr("<p>Failed to get sample of field values using SQL:</p><p>") + theSQL + "</p><p>Error message was: "+ QString(PQerrorMessage(mPgConnection)) + "</p>");
|
|
204 | 200 |
} |
205 | 201 |
// free the result set |
206 | 202 |
PQclear(result); |
207 | 203 |
} |
208 | 204 | |
205 |
void QgsPgQueryBuilder::on_btnSampleValues_clicked() |
|
206 |
{ |
|
207 |
lstValues->setCursor(Qt::WaitCursor); |
|
208 |
QString myFieldName = mModelFields->data(lstFields->currentIndex()).toString(); |
|
209 |
if (myFieldName.isEmpty()) |
|
210 |
return; |
|
211 |
|
|
212 |
QgsField field = mFieldMap[mModelFields->data(lstFields->currentIndex()).toString()]; |
|
213 |
bool mActualFieldIsChar = field.typeName().find("char") > -1; |
|
214 |
|
|
215 |
QString sql = "SELECT DISTINCT \"" + myFieldName + "\" " + |
|
216 |
"FROM (SELECT \"" + myFieldName + "\" " + |
|
217 |
"FROM " + mUri->quotedTablename() + " " + |
|
218 |
"LIMIT 5000) AS foo " + |
|
219 |
"ORDER BY \"" + myFieldName + "\" "+ |
|
220 |
"LIMIT 25"; |
|
221 |
|
|
222 |
//delete connection mModelValues and lstValues |
|
223 |
QStandardItemModel *tmp = new QStandardItemModel(); |
|
224 |
lstValues->setModel(tmp); |
|
225 |
//Clear and fill the mModelValues |
|
226 |
fillValues(sql); |
|
227 |
lstValues->setModel(mModelValues); |
|
228 |
lstValues->setCursor(Qt::ArrowCursor); |
|
229 |
//delete the tmp |
|
230 |
delete tmp; |
|
231 |
|
|
232 |
} |
|
233 | ||
209 | 234 |
void QgsPgQueryBuilder::on_btnGetAllValues_clicked() |
210 | 235 |
{ |
236 |
lstValues->setCursor(Qt::WaitCursor); |
|
211 | 237 |
QString myFieldName = mModelFields->data(lstFields->currentIndex()).toString(); |
212 | 238 |
if (myFieldName.isEmpty()) |
213 | 239 |
return; |
214 | 240 | |
215 | 241 |
QString sql = "select distinct \"" + myFieldName |
216 | 242 |
+ "\" from " + mUri->quotedTablename() + " order by \"" + myFieldName + "\""; |
217 |
// clear the values list |
|
218 |
mModelValues->clear(); |
|
219 |
// determine the field type |
|
220 |
QgsField field = mFieldMap[myFieldName]; |
|
221 |
bool isCharField = field.typeName().find("char") > -1; |
|
222 | ||
223 |
PGresult *result = PQexec(mPgConnection, (const char *) (sql.utf8())); |
|
224 | ||
225 |
if (PQresultStatus(result) == PGRES_TUPLES_OK) |
|
226 |
{ |
|
227 |
int rowCount = PQntuples(result); |
|
228 |
|
|
229 |
lstValues->setCursor(Qt::WaitCursor); |
|
230 |
// Block for better performance |
|
231 |
mModelValues->blockSignals(true); |
|
232 |
lstValues->setUpdatesEnabled(false); |
|
233 |
|
|
234 |
for(int i=0; i < rowCount; i++) |
|
235 |
{ |
|
236 |
QString value = QString::fromUtf8(PQgetvalue(result, i, 0)); |
|
237 |
if(isCharField) |
|
238 |
{ |
|
239 |
value = "'" + value + "'"; |
|
240 |
} |
|
241 |
QStandardItem *myItem = new QStandardItem(value); |
|
242 |
myItem->setEditable(false); |
|
243 |
mModelValues->insertRow(mModelValues->rowCount(),myItem); |
|
244 |
} |
|
245 |
|
|
246 |
// Unblock for normal use |
|
247 |
mModelValues->blockSignals(false); |
|
248 |
lstValues->setUpdatesEnabled(true); |
|
249 |
// TODO: already sorted, signal emit to refresh model |
|
250 |
mModelValues->sort(0); |
|
251 |
lstValues->setCursor(Qt::ArrowCursor); |
|
252 |
|
|
253 |
}else |
|
254 |
{ |
|
255 |
QMessageBox::warning(this, tr("Database error"), tr("Failed to get sample of field values") + QString(PQerrorMessage(mPgConnection)) ); |
|
256 |
} |
|
257 |
// free the result set |
|
258 |
PQclear(result); |
|
243 |
|
|
244 |
//delete connection mModelValues and lstValues |
|
245 |
QStandardItemModel *tmp = new QStandardItemModel(); |
|
246 |
lstValues->setModel(tmp); |
|
247 |
//Clear and fill the mModelValues |
|
248 |
fillValues(sql); |
|
249 |
lstValues->setModel(mModelValues); |
|
250 |
lstValues->setCursor(Qt::ArrowCursor); |
|
251 |
//delete the tmp |
|
252 |
delete tmp; |
|
259 | 253 |
} |
260 | 254 | |
261 | 255 |
void QgsPgQueryBuilder::on_btnTest_clicked() |
... | ... | |
398 | 392 |
txtSQL->setText(sqlStatement); |
399 | 393 |
} |
400 | 394 | |
395 |
void QgsPgQueryBuilder::on_lstFields_clicked( const QModelIndex &index ) |
|
396 |
{ |
|
397 |
if (mPreviousFieldRow != index.row()) |
|
398 |
{ |
|
399 |
mPreviousFieldRow = index.row(); |
|
400 |
|
|
401 |
// If type is gemetry .. normal users don't want to get values? |
|
402 |
QgsField field = mFieldMap[mModelFields->data(lstFields->currentIndex()).toString()]; |
|
403 |
if (field.typeName().find("geometry") > -1) |
|
404 |
{ |
|
405 |
btnSampleValues->setEnabled(false); |
|
406 |
btnGetAllValues->setEnabled(false); |
|
407 |
}else |
|
408 |
{ |
|
409 |
btnSampleValues->setEnabled(true); |
|
410 |
btnGetAllValues->setEnabled(true); |
|
411 |
} |
|
412 |
mModelValues->clear(); |
|
413 |
} |
|
414 |
} |
|
415 | ||
401 | 416 |
void QgsPgQueryBuilder::on_lstFields_doubleClicked( const QModelIndex &index ) |
402 | 417 |
{ |
403 | 418 |
txtSQL->insert("\"" + mModelFields->data(index).toString() + "\""); |
... | ... | |
405 | 420 | |
406 | 421 |
void QgsPgQueryBuilder::on_lstValues_doubleClicked( const QModelIndex &index ) |
407 | 422 |
{ |
408 |
txtSQL->insert(mModelValues->data(index).toString()); |
|
423 |
if (mActualFieldIsChar) |
|
424 |
{ |
|
425 |
txtSQL->insert("'" + mModelValues->data(index).toString() + "'"); |
|
426 |
}else |
|
427 |
{ |
|
428 |
txtSQL->insert(mModelValues->data(index).toString()); |
|
429 |
} |
|
409 | 430 |
} |
410 | 431 | |
411 | 432 |
void QgsPgQueryBuilder::on_btnLessEqual_clicked() |
src/app/qgspgquerybuilder.h (copia de trabajo) | ||
---|---|---|
87 | 87 |
void on_btnILike_clicked(); |
88 | 88 |
QString sql(); |
89 | 89 |
void setSql( QString sqlStatement); |
90 |
void on_lstFields_clicked( const QModelIndex &index ); |
|
90 | 91 |
void on_lstFields_doubleClicked( const QModelIndex &index ); |
91 | 92 |
void on_lstValues_doubleClicked( const QModelIndex &index ); |
92 | 93 |
void on_btnLessEqual_clicked(); |
... | ... | |
123 | 124 |
/*! |
124 | 125 |
* Setup models for listviews |
125 | 126 |
*/ |
126 |
void setupListViews(); |
|
127 |
void setupGuiViews(); |
|
128 |
void setupLstFieldsModel(); |
|
129 |
void fillValues(QString theSQL); |
|
127 | 130 | |
128 | 131 |
/*! Get the number of records that would be returned by the current SQL |
129 | 132 |
* @return Number of records or -1 if an error was encountered |
... | ... | |
149 | 152 |
QStandardItemModel *mModelFields; |
150 | 153 |
//! Model for values ListView |
151 | 154 |
QStandardItemModel *mModelValues; |
155 |
//! Actual field char? |
|
156 |
bool mActualFieldIsChar; |
|
157 |
//! Previous field row to delete model |
|
158 |
int mPreviousFieldRow; |
|
152 | 159 |
}; |
153 | 160 |
#endif //QGSPGQUERYBUILDER_H |
src/ui/qgspgquerybuilderbase.ui (copia de trabajo) | ||
---|---|---|
12 | 12 |
</rect> |
13 | 13 |
</property> |
14 | 14 |
<property name="sizePolicy" > |
15 |
<sizepolicy> |
|
16 |
<hsizetype>0</hsizetype> |
|
17 |
<vsizetype>0</vsizetype> |
|
15 |
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" > |
|
18 | 16 |
<horstretch>0</horstretch> |
19 | 17 |
<verstretch>0</verstretch> |
20 | 18 |
</sizepolicy> |
... | ... | |
29 | 27 |
<bool>true</bool> |
30 | 28 |
</property> |
31 | 29 |
<layout class="QGridLayout" > |
32 |
<property name="margin" >
|
|
30 |
<property name="leftMargin" >
|
|
33 | 31 |
<number>11</number> |
34 | 32 |
</property> |
35 |
<property name="spacing" > |
|
33 |
<property name="topMargin" > |
|
34 |
<number>11</number> |
|
35 |
</property> |
|
36 |
<property name="rightMargin" > |
|
37 |
<number>11</number> |
|
38 |
</property> |
|
39 |
<property name="bottomMargin" > |
|
40 |
<number>11</number> |
|
41 |
</property> |
|
42 |
<property name="horizontalSpacing" > |
|
36 | 43 |
<number>6</number> |
37 | 44 |
</property> |
45 |
<property name="verticalSpacing" > |
|
46 |
<number>6</number> |
|
47 |
</property> |
|
38 | 48 |
<item row="2" column="0" colspan="2" > |
39 | 49 |
<widget class="QGroupBox" name="groupBox4" > |
40 | 50 |
<property name="title" > |
41 | 51 |
<string>Operators</string> |
42 | 52 |
</property> |
43 | 53 |
<layout class="QGridLayout" > |
44 |
<property name="margin" >
|
|
54 |
<property name="leftMargin" >
|
|
45 | 55 |
<number>11</number> |
46 | 56 |
</property> |
47 |
<property name="spacing" > |
|
57 |
<property name="topMargin" > |
|
58 |
<number>11</number> |
|
59 |
</property> |
|
60 |
<property name="rightMargin" > |
|
61 |
<number>11</number> |
|
62 |
</property> |
|
63 |
<property name="bottomMargin" > |
|
64 |
<number>11</number> |
|
65 |
</property> |
|
66 |
<property name="horizontalSpacing" > |
|
48 | 67 |
<number>6</number> |
49 | 68 |
</property> |
69 |
<property name="verticalSpacing" > |
|
70 |
<number>6</number> |
|
71 |
</property> |
|
50 | 72 |
<item row="0" column="0" > |
51 | 73 |
<widget class="QPushButton" name="btnEqual" > |
52 | 74 |
<property name="text" > |
... | ... | |
150 | 172 |
</item> |
151 | 173 |
<item row="4" column="0" colspan="2" > |
152 | 174 |
<layout class="QHBoxLayout" > |
153 |
<property name="margin" > |
|
154 |
<number>11</number> |
|
155 |
</property> |
|
156 | 175 |
<property name="spacing" > |
157 | 176 |
<number>6</number> |
158 | 177 |
</property> |
178 |
<property name="leftMargin" > |
|
179 |
<number>11</number> |
|
180 |
</property> |
|
181 |
<property name="topMargin" > |
|
182 |
<number>11</number> |
|
183 |
</property> |
|
184 |
<property name="rightMargin" > |
|
185 |
<number>11</number> |
|
186 |
</property> |
|
187 |
<property name="bottomMargin" > |
|
188 |
<number>11</number> |
|
189 |
</property> |
|
159 | 190 |
<item> |
160 | 191 |
<spacer> |
161 | 192 |
<property name="orientation" > |
... | ... | |
230 | 261 |
<item row="1" column="1" > |
231 | 262 |
<widget class="QGroupBox" name="groupBox2" > |
232 | 263 |
<property name="sizePolicy" > |
233 |
<sizepolicy> |
|
234 |
<hsizetype>0</hsizetype> |
|
235 |
<vsizetype>0</vsizetype> |
|
264 |
<sizepolicy vsizetype="Preferred" hsizetype="Expanding" > |
|
236 | 265 |
<horstretch>0</horstretch> |
237 | 266 |
<verstretch>0</verstretch> |
238 | 267 |
</sizepolicy> |
... | ... | |
241 | 270 |
<string>Values</string> |
242 | 271 |
</property> |
243 | 272 |
<layout class="QGridLayout" > |
244 |
<property name="margin" >
|
|
273 |
<property name="leftMargin" >
|
|
245 | 274 |
<number>11</number> |
246 | 275 |
</property> |
247 |
<property name="spacing" > |
|
276 |
<property name="topMargin" > |
|
277 |
<number>11</number> |
|
278 |
</property> |
|
279 |
<property name="rightMargin" > |
|
280 |
<number>11</number> |
|
281 |
</property> |
|
282 |
<property name="bottomMargin" > |
|
283 |
<number>11</number> |
|
284 |
</property> |
|
285 |
<property name="horizontalSpacing" > |
|
248 | 286 |
<number>6</number> |
249 | 287 |
</property> |
288 |
<property name="verticalSpacing" > |
|
289 |
<number>6</number> |
|
290 |
</property> |
|
250 | 291 |
<item row="2" column="1" > |
251 | 292 |
<widget class="QPushButton" name="btnGetAllValues" > |
293 |
<property name="toolTip" > |
|
294 |
<string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> |
|
295 |
p, li { white-space: pre-wrap; } |
|
296 |
</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> |
|
297 |
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Retrieve <span style=" font-weight:600;">all</span> the record in the vector file (<span style=" font-style:italic;">if the table is big, the operation can consume some time</span>)</p></body></html></string> |
|
298 |
</property> |
|
252 | 299 |
<property name="text" > |
253 | 300 |
<string>All</string> |
254 | 301 |
</property> |
... | ... | |
256 | 303 |
</item> |
257 | 304 |
<item row="2" column="0" > |
258 | 305 |
<widget class="QPushButton" name="btnSampleValues" > |
306 |
<property name="toolTip" > |
|
307 |
<string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> |
|
308 |
p, li { white-space: pre-wrap; } |
|
309 |
</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> |
|
310 |
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take a <span style=" font-weight:600;">sample</span> of records in the vector file</p></body></html></string> |
|
311 |
</property> |
|
259 | 312 |
<property name="text" > |
260 | 313 |
<string>Sample</string> |
261 | 314 |
</property> |
262 | 315 |
</widget> |
263 | 316 |
</item> |
264 | 317 |
<item rowspan="2" row="0" column="0" colspan="2" > |
265 |
<widget class="QListView" name="lstValues" /> |
|
318 |
<widget class="QListView" name="lstValues" > |
|
319 |
<property name="whatsThis" > |
|
320 |
<string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> |
|
321 |
p, li { white-space: pre-wrap; } |
|
322 |
</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> |
|
323 |
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">List of values for the current field.</p></body></html></string> |
|
324 |
</property> |
|
325 |
<property name="autoFillBackground" > |
|
326 |
<bool>true</bool> |
|
327 |
</property> |
|
328 |
<property name="selectionBehavior" > |
|
329 |
<enum>QAbstractItemView::SelectRows</enum> |
|
330 |
</property> |
|
331 |
<property name="uniformItemSizes" > |
|
332 |
<bool>true</bool> |
|
333 |
</property> |
|
334 |
</widget> |
|
266 | 335 |
</item> |
267 | 336 |
</layout> |
268 | 337 |
</widget> |
269 | 338 |
</item> |
270 | 339 |
<item row="1" column="0" > |
271 | 340 |
<widget class="QGroupBox" name="groupBox1" > |
341 |
<property name="sizePolicy" > |
|
342 |
<sizepolicy vsizetype="Preferred" hsizetype="Fixed" > |
|
343 |
<horstretch>0</horstretch> |
|
344 |
<verstretch>0</verstretch> |
|
345 |
</sizepolicy> |
|
346 |
</property> |
|
272 | 347 |
<property name="title" > |
273 | 348 |
<string>Fields</string> |
274 | 349 |
</property> |
275 | 350 |
<layout class="QGridLayout" > |
276 |
<property name="margin" >
|
|
351 |
<property name="leftMargin" >
|
|
277 | 352 |
<number>11</number> |
278 | 353 |
</property> |
279 |
<property name="spacing" > |
|
354 |
<property name="topMargin" > |
|
355 |
<number>11</number> |
|
356 |
</property> |
|
357 |
<property name="rightMargin" > |
|
358 |
<number>11</number> |
|
359 |
</property> |
|
360 |
<property name="bottomMargin" > |
|
361 |
<number>11</number> |
|
362 |
</property> |
|
363 |
<property name="horizontalSpacing" > |
|
280 | 364 |
<number>6</number> |
281 | 365 |
</property> |
366 |
<property name="verticalSpacing" > |
|
367 |
<number>6</number> |
|
368 |
</property> |
|
282 | 369 |
<item row="0" column="0" > |
283 |
<widget class="QListView" name="lstFields" /> |
|
370 |
<widget class="QListView" name="lstFields" > |
|
371 |
<property name="whatsThis" > |
|
372 |
<string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> |
|
373 |
p, li { white-space: pre-wrap; } |
|
374 |
</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> |
|
375 |
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">List of fields in this vector file</p></body></html></string> |
|
376 |
</property> |
|
377 |
</widget> |
|
284 | 378 |
</item> |
285 | 379 |
</layout> |
286 | 380 |
</widget> |
... | ... | |
304 | 398 |
<string>SQL where clause</string> |
305 | 399 |
</property> |
306 | 400 |
<layout class="QGridLayout" > |
307 |
<property name="margin" >
|
|
401 |
<property name="leftMargin" >
|
|
308 | 402 |
<number>11</number> |
309 | 403 |
</property> |
310 |
<property name="spacing" > |
|
404 |
<property name="topMargin" > |
|
405 |
<number>11</number> |
|
406 |
</property> |
|
407 |
<property name="rightMargin" > |
|
408 |
<number>11</number> |
|
409 |
</property> |
|
410 |
<property name="bottomMargin" > |
|
411 |
<number>11</number> |
|
412 |
</property> |
|
413 |
<property name="horizontalSpacing" > |
|
311 | 414 |
<number>6</number> |
312 | 415 |
</property> |
416 |
<property name="verticalSpacing" > |
|
417 |
<number>6</number> |
|
418 |
</property> |
|
313 | 419 |
<item row="0" column="0" > |
314 | 420 |
<widget class="QTextEdit" name="txtSQL" /> |
315 | 421 |
</item> |