Skip to content

Commit c2e758e

Browse files
author
rblazek
committed
vector info
git-svn-id: http://svn.osgeo.org/qgis/trunk@4981 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 3e21403 commit c2e758e

File tree

2 files changed

+171
-32
lines changed

2 files changed

+171
-32
lines changed

src/plugins/grass/qgsgrassbrowser.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <QTextBrowser>
3737
#include <QSplitter>
3838
#include <QProcess>
39+
#include <QScrollBar>
3940

4041
#include "qgis.h"
4142
#include "qgsapplication.h"
@@ -234,6 +235,7 @@ void QgsGrassBrowser::selectionChanged(const QItemSelection & selected, const QI
234235
for (; it != indexes.end(); ++it)
235236
{
236237
mTextBrowser->append ( mModel->itemInfo(*it) );
238+
mTextBrowser->verticalScrollBar()->setValue(0);
237239

238240
int type = mModel->itemType(*it);
239241
if ( type == QgsGrassModel::Raster || type == QgsGrassModel::VectorLayer )

src/plugins/grass/qgsgrassmodel.cpp

+169-32
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,19 @@
3131
#include <QTreeWidgetItem>
3232
#include <QModelIndex>
3333
#include <QVariant>
34+
#include <QRegExp>
3435

3536
#include "qgis.h"
3637
#include "qgsapplication.h"
38+
#include "qgsfeatureattribute.h" // TODO: remove - this is only for qgsgrassprovider.h
3739

3840
extern "C" {
3941
#include <grass/gis.h>
4042
#include <grass/Vect.h>
4143
}
4244

4345
#include "../../src/providers/grass/qgsgrass.h"
46+
#include "../../src/providers/grass/qgsgrassprovider.h"
4447
#include "qgsgrassmodel.h"
4548
#include "qgsgrassselect.h"
4649

@@ -124,6 +127,7 @@ QVariant QgsGrassModelItem::data (int role)
124127

125128
QString QgsGrassModelItem::info()
126129
{
130+
QString tblStart = "<table border=1 cellspacing=1 cellpadding=1>";
127131
switch ( mType )
128132
{
129133
case QgsGrassModel::Location:
@@ -136,56 +140,52 @@ QString QgsGrassModelItem::info()
136140
case QgsGrassModel::Rasters:
137141
return "Location: " + mLocation + "<br>Mapset: " + mMapset;
138142
break;
139-
case QgsGrassModel::Vector:
140-
return "Vector: " + mMap;
141143
case QgsGrassModel::Raster:
142144
{
143-
QString nl = "<br>";
144-
QString str = "<b>Raster: " + mMap + "</b>" + nl;
145+
QString str = tblStart;
146+
str += htmlTableRow("<b>Raster</b>", "<b>" + mMap + "</b>" );
145147

146148
struct Cell_head head;
147149
QgsGrass::setLocation( mGisbase, mLocation );
148150

149151
if( G_get_cellhd( mMap.toLocal8Bit().data(),
150152
mMapset.toLocal8Bit().data(), &head) != 0 )
151153
{
152-
str += "Cannot open raster header" + nl;
154+
str += "<tr><td colspan=2>Cannot open raster header</td></tr>";
153155
}
154156
else
155157
{
156-
//str += QString::number(head.rows) + " rows" + nl;
157-
str += "<table border=1 cellspacing=1 cellpadding=1>";
158-
str += htmlTableRow ( "rows", QString::number(head.rows));
159-
str += htmlTableRow ( "columns", QString::number(head.cols) );
158+
str += htmlTableRow ( "Rows", QString::number(head.rows));
159+
str += htmlTableRow ( "Columns", QString::number(head.cols) );
160160
str += htmlTableRow ( "N-S resolution", QString::number(head.ns_res) );
161161
str += htmlTableRow ( "E-W resolution", QString::number(head.ew_res) );
162-
str += htmlTableRow ( "north", QString::number(head.north) );
163-
str += htmlTableRow ( "south", QString::number(head.south) );
164-
str += htmlTableRow ( "east", QString::number(head.east) );
165-
str += htmlTableRow ( "west", QString::number(head.west) );
166-
str += "</table>";
162+
str += htmlTableRow ( "North", QString::number(head.north) );
163+
str += htmlTableRow ( "South", QString::number(head.south) );
164+
str += htmlTableRow ( "East", QString::number(head.east) );
165+
str += htmlTableRow ( "West", QString::number(head.west) );
167166

168167
int rasterType = G_raster_map_type( mMap.toLocal8Bit().data(),
169168
mMapset.toLocal8Bit().data() );
170169

170+
QString format;
171171
if( rasterType == CELL_TYPE )
172172
{
173-
str += "integer (" + QString::number(head.format);
174-
str += head.format==0 ? " byte)" : "bytes)";
173+
format = "integer (" + QString::number(head.format);
174+
format += head.format==0 ? " byte)" : "bytes)";
175175
}
176176
else if( rasterType == FCELL_TYPE )
177177
{
178-
str += "floating point (4 bytes)";
178+
format += "floating point (4 bytes)";
179179
}
180180
else if( rasterType == DCELL_TYPE )
181181
{
182-
str += "floating point (8 bytes)";
182+
format += "floating point (8 bytes)";
183183
}
184184
else
185185
{
186-
str += "unknown";
186+
format += "unknown";
187187
}
188-
str += " format" + nl;
188+
str += htmlTableRow ( "Format", format );
189189
}
190190

191191
struct FPRange range;
@@ -195,31 +195,168 @@ QString QgsGrassModelItem::info()
195195
double min, max;
196196
G_get_fp_range_min_max( &range, &min, &max );
197197

198-
str += QString::number(min) + " minimum value" + nl;
199-
str += QString::number(max) + " maximum value" + nl;
198+
str += htmlTableRow ( "Minimum value", QString::number(min));
199+
str += htmlTableRow ( "Maximum value", QString::number(max));
200200
}
201201

202202

203203
struct History hist;
204204
if ( G_read_history( mMap.toLocal8Bit().data(),
205205
mMapset.toLocal8Bit().data(), &hist) >= 0 )
206206
{
207-
str += "Data source: " + QString(hist.datsrc_1) + " "
208-
+ QString(hist.datsrc_2) + nl;
209-
str += "Data description: " + QString(hist.keywrd) + nl;
210-
str += "Comments: " + nl;
211-
for (int i = 0; i < hist.edlinecnt; i++)
212-
{
213-
str += QString(hist.edhist[i]) + nl;
214-
}
207+
if ( QString(hist.datsrc_1).length() > 0
208+
|| QString(hist.datsrc_2).length() > 0 )
209+
{
210+
str += htmlTableRow ( "Data source", QString(hist.datsrc_1) + " "
211+
+ QString(hist.datsrc_2) );
212+
}
213+
if ( QString(hist.keywrd).length() > 0 )
214+
{
215+
str += htmlTableRow ( "Data description", QString(hist.keywrd) );
216+
}
217+
if ( hist.edlinecnt > 0 )
218+
{
219+
QString h;
220+
for (int i = 0; i < hist.edlinecnt; i++)
221+
{
222+
h += QString(hist.edhist[i]) + "<br>";
223+
}
224+
str += htmlTableRow ( "Comments", h);
225+
}
215226
}
227+
str += "</table>";
216228

217229
return str;
218230
}
219231
break;
232+
233+
case QgsGrassModel::Vector:
234+
{
235+
QString str = tblStart;
236+
str += htmlTableRow("<b>Vector</b>", "<b>" + mMap + "</b>" );
237+
238+
QgsGrass::setLocation( mGisbase, mLocation );
239+
240+
struct Map_info Map;
241+
int level = Vect_open_old_head ( &Map, mMap.toLocal8Bit().data(),
242+
mMapset.toLocal8Bit().data());
243+
244+
if ( level >= 2 )
245+
{
246+
int is3d = Vect_is_3d (&Map);
247+
248+
// Number of elements
249+
str += htmlTableRow ( "Points", QString::number(Vect_get_num_primitives(&Map, GV_POINT)) );
250+
str += htmlTableRow ( "Lines", QString::number(Vect_get_num_primitives(&Map, GV_LINE)) );
251+
str += htmlTableRow ( "Boundaries", QString::number(Vect_get_num_primitives(&Map, GV_BOUNDARY)) );
252+
str += htmlTableRow ( "Centroids", QString::number(Vect_get_num_primitives(&Map, GV_CENTROID)) );
253+
if ( is3d )
254+
{
255+
str += htmlTableRow ( "Faces", QString::number( Vect_get_num_primitives(&Map, GV_FACE) ) );
256+
str += htmlTableRow ( "Kernels", QString::number( Vect_get_num_primitives(&Map, GV_KERNEL) ) );
257+
}
258+
259+
str += htmlTableRow ( "Areas", QString::number(Vect_get_num_areas(&Map)) );
260+
str += htmlTableRow ( "Islands", QString::number( Vect_get_num_islands(&Map) ) );
261+
262+
263+
// Box and dimension
264+
BOUND_BOX box;
265+
char buffer[100];
266+
267+
Vect_get_map_box (&Map, &box );
268+
int proj = Vect_get_proj(&Map);
269+
270+
G_format_northing (box.N, buffer, proj);
271+
str += htmlTableRow ( "North", QString(buffer) );
272+
G_format_northing (box.S, buffer, proj);
273+
str += htmlTableRow ( "South", QString(buffer) );
274+
G_format_easting (box.E, buffer, proj );
275+
str += htmlTableRow ( "East", QString(buffer) );
276+
G_format_easting (box.W, buffer, proj );
277+
str += htmlTableRow ( "West", QString(buffer) );
278+
if ( is3d )
279+
{
280+
str += htmlTableRow ( "Top", QString::number(box.T) );
281+
str += htmlTableRow ( "Bottom", QString::number(box.B) );
282+
}
283+
284+
str += htmlTableRow ( "3D", is3d ? "yes" : "no" );
285+
286+
str += "</table>";
287+
288+
// History
289+
Vect_hist_rewind ( &Map );
290+
char hbuffer[1001];
291+
str += "<p>History<br>";
292+
QRegExp rx ( "^-+$" );
293+
while ( Vect_hist_read ( hbuffer, 1000, &Map ) != NULL ) {
294+
QString row = QString(hbuffer);
295+
if ( rx.search ( row ) != -1 )
296+
{
297+
str += "<hr>";
298+
}
299+
else
300+
{
301+
str += row + "<br>";
302+
}
303+
}
304+
}
305+
else
306+
{
307+
str += "</table>";
308+
}
309+
310+
Vect_close (&Map);
311+
return str;
312+
}
313+
break;
314+
220315
case QgsGrassModel::VectorLayer:
221-
return "Vector: " + mMap + "<br>Layer: " + mLayer;
222-
break;
316+
{
317+
QString str = tblStart;
318+
str += htmlTableRow("<b>Vector</b>", "<b>" + mMap + "</b>" );
319+
str += htmlTableRow("<b>Layer</b>", "<b>" + mLayer + "</b>" );
320+
321+
QgsGrass::setLocation( mGisbase, mLocation );
322+
323+
struct Map_info Map;
324+
int level = Vect_open_old_head ( &Map, mMap.toLocal8Bit().data(),
325+
mMapset.toLocal8Bit().data());
326+
327+
if ( level >= 2 )
328+
{
329+
struct field_info *fi;
330+
331+
int field = QgsGrassProvider::grassLayer(mLayer);
332+
if ( field != -1 )
333+
{
334+
// Number of features
335+
int type = QgsGrassProvider::grassLayerType(mLayer);
336+
if (type != -1 )
337+
{
338+
str += htmlTableRow("Features",
339+
QString::number(Vect_cidx_get_type_count(&Map, field, type)) );
340+
}
341+
342+
fi = Vect_get_field ( &Map, field);
343+
344+
// Database link
345+
if ( fi )
346+
{
347+
str += htmlTableRow("Driver", QString(fi->driver) );
348+
str += htmlTableRow("Database", QString(fi->database) );
349+
str += htmlTableRow("Table", QString(fi->table) );
350+
str += htmlTableRow("Key column", QString(fi->key) );
351+
}
352+
}
353+
}
354+
str += "</table>";
355+
356+
Vect_close (&Map);
357+
return str;
358+
}
359+
break;
223360
}
224361
return QString();
225362
}

0 commit comments

Comments
 (0)