Skip to content

Commit 3e21403

Browse files
author
rblazek
committed
functions to get layer field and type from name
git-svn-id: http://svn.osgeo.org/qgis/trunk@4980 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent c628d6e commit 3e21403

File tree

2 files changed

+51
-15
lines changed

2 files changed

+51
-15
lines changed

src/providers/grass/qgsgrassprovider.cpp

+42-15
Original file line numberDiff line numberDiff line change
@@ -101,30 +101,25 @@ QgsGrassProvider::QgsGrassProvider(QString const & uri)
101101
mLayerType = CENTROID;
102102
mGrassType = GV_CENTROID;
103103
} else {
104-
// Get field number
105-
int pos = mLayer.find('_');
106-
107-
if ( pos == -1 ) {
104+
mLayerField = grassLayer ( mLayer );
105+
if ( mLayerField == -1 ) {
108106
std::cerr << "Invalid layer name, no underscore found: " << mLayer.toLocal8Bit().data() << std::endl;
109107
return;
110-
}
111-
112-
mLayerField = mLayer.left(pos).toInt();
108+
}
113109

114-
QString ts = mLayer.right( mLayer.length() - pos - 1 );
115-
if ( ts.compare("point") == 0 ) {
110+
mGrassType = grassLayerType ( mLayer );
111+
112+
if ( mGrassType == GV_POINT ) {
116113
mLayerType = POINT;
117-
mGrassType = GV_POINT; // ?! centroids may be points
118-
} else if ( ts.compare("line") == 0 ) {
114+
} else if ( mGrassType == GV_LINES ) {
119115
mLayerType = LINE;
120-
mGrassType = GV_LINE | GV_BOUNDARY;
121-
} else if ( ts.compare("polygon") == 0 ) {
116+
} else if ( mGrassType == GV_AREA ) {
122117
mLayerType = POLYGON;
123-
mGrassType = GV_AREA;
124118
} else {
125-
std::cerr << "Invalid layer name, wrong type: " << ts.toLocal8Bit().data() << std::endl;
119+
std::cerr << "Invalid layer name, wrong type: " << mLayer.toLocal8Bit().data() << std::endl;
126120
return;
127121
}
122+
128123
}
129124
#ifdef QGISDEBUG
130125
std::cerr << "mLayerField: " << mLayerField << std::endl;
@@ -1273,6 +1268,38 @@ int QgsGrassProvider::grassLayer()
12731268
return mLayerField;
12741269
}
12751270

1271+
int QgsGrassProvider::grassLayer(QString name)
1272+
{
1273+
// Get field number
1274+
int pos = name.find('_');
1275+
1276+
if ( pos == -1 ) {
1277+
return -1;
1278+
}
1279+
1280+
return name.left(pos).toInt();
1281+
}
1282+
1283+
int QgsGrassProvider::grassLayerType(QString name)
1284+
{
1285+
int pos = name.find('_');
1286+
1287+
if ( pos == -1 ) {
1288+
return -1;
1289+
}
1290+
1291+
QString ts = name.right( name.length() - pos - 1 );
1292+
if ( ts.compare("point") == 0 ) {
1293+
return GV_POINT; // ?! centroids may be points
1294+
} else if ( ts.compare("line") == 0 ) {
1295+
return GV_LINES;
1296+
} else if ( ts.compare("polygon") == 0 ) {
1297+
return GV_AREA;
1298+
}
1299+
1300+
return -1;
1301+
}
1302+
12761303
//----------------------------------------- Edit -------------------------------------------------------
12771304

12781305
bool QgsGrassProvider::isGrassEditable ( void )

src/providers/grass/qgsgrassprovider.h

+9
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,15 @@ class QgsGrassProvider : public QgsVectorDataProvider
453453
/** Returns GRASS layer number */
454454
int grassLayer();
455455

456+
/** Returns GRASS layer number for given layer name or -1 if cannot
457+
* get layer number
458+
*/
459+
static int grassLayer(QString);
460+
461+
/** Returns GRASS layer type (GV_POINT, GV_LINES, GV_AREA) for
462+
* given layer name or -1 if cannot get layer type
463+
*/
464+
static int grassLayerType(QString);
456465

457466
/** return a provider name
458467

0 commit comments

Comments
 (0)