@@ -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
12781305bool QgsGrassProvider::isGrassEditable ( void )
0 commit comments