Skip to content

Commit

Permalink
GRASS version support
Browse files Browse the repository at this point in the history
Conflicts:

	src/plugins/grass/CMakeLists.txt
  • Loading branch information
blazek authored and mach0 committed Nov 13, 2011
1 parent 5e2d947 commit ccd8487
Show file tree
Hide file tree
Showing 11 changed files with 100 additions and 32 deletions.
21 changes: 5 additions & 16 deletions src/plugins/grass/CMakeLists.txt
@@ -1,25 +1,14 @@
IF (GRASS_NUM_VERSION LESS 60300)
SET (GRASS_MODULES_DIR "modules-6.3")
ELSE (GRASS_NUM_VERSION LESS 60300)
SET (GRASS_MODULES_DIR "modules-${GRASS_MAJOR_VERSION}.${GRASS_MINOR_VERSION}")
ENDIF (GRASS_NUM_VERSION LESS 60300)

IF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${GRASS_MODULES_DIR}")
MESSAGE (SEND_ERROR "Your GRASS version is not supported (${CMAKE_CURRENT_SOURCE_DIR}/${GRASS_MODULES_DIR} is not found).")
ENDIF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${GRASS_MODULES_DIR}")
IF (NOT IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${GRASS_MODULES_DIR}")
MESSAGE (SEND_ERROR "Your GRASS version is not supported (${CMAKE_CURRENT_SOURCE_DIR}/${GRASS_MODULES_DIR} is not a Directory).")
ENDIF (NOT IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${GRASS_MODULES_DIR}")

SUBDIRS(modules-common ${GRASS_MODULES_DIR} scripts themes)
ADD_SUBDIRECTORY(modules)
ADD_SUBDIRECTORY(scripts)

ADD_DEFINITIONS(-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\")
ADD_DEFINITIONS(-DHAVE_OPENPTY=${HAVE_OPENPTY})
ADD_DEFINITIONS("-DGRASS_EXPORT=${DLLIMPORT} -DGRASS_LIB_EXPORT=${DLLIMPORT}")

IF (WIN32)
ADD_DEFINITIONS(-DHAVE_GETPT "-DGRASS_EXPORT=__declspec(dllimport)")
ADD_DEFINITIONS(-DHAVE_GETPT)
ELSE (WIN32)
ADD_DEFINITIONS(-DHAVE_POSIX_OPENPT -DGRASS_EXPORT=)
ADD_DEFINITIONS(-DHAVE_POSIX_OPENPT)
ENDIF (WIN32)

########################################################
Expand Down
4 changes: 4 additions & 0 deletions src/plugins/grass/modules/CMakeLists.txt
Expand Up @@ -2,3 +2,7 @@
FILE (GLOB MODULE_FILES *.qgm *.svg *.png)
INSTALL (FILES ${MODULE_FILES}
DESTINATION ${QGIS_DATA_DIR}/grass/modules)

FILE (GLOB CONFIG *.qgc)
INSTALL (FILES ${CONFIG}
DESTINATION ${QGIS_DATA_DIR}/grass/config)
16 changes: 8 additions & 8 deletions src/plugins/grass/modules/default.qgc
Expand Up @@ -29,7 +29,7 @@
<grass name="r.in.gdal.qgis"/>
<grass name="r.in.gdal.qgis.loc"/>
</section>
<section label="Register external data sources in GRASS">
<section label="Register external data sources in GRASS" version_min="6.4">
<grass name="r.external"/>
<grass name="r.external.qgis"/>
<grass name="r.external.all"/>
Expand Down Expand Up @@ -63,7 +63,7 @@
<grass name="v.in.db"/>
<grass name="v.in.garmin"/>
<grass name="v.in.gpsbabel"/>
<grass name="v.in.geonames"/>
<grass name="v.in.geonames" version_min="6.4"/>
<grass name="v.in.gns"/>
</section>
<section label="Import from database into GRASS">
Expand Down Expand Up @@ -101,7 +101,7 @@
<grass name="v.out.vtk"/>
</section>
<section label="Export vector table from GRASS to database format">
<grass name="db.out.ogr"/>
<grass name="db.out.ogr" version_min="6.4"/>
</section>
</section>
<section label="Map type conversion">
Expand Down Expand Up @@ -169,7 +169,7 @@
<grass name="r.colors.table"/>
<grass name="r.colors.rules"/>
<grass name="r.colors.rast"/>
<grass name="r.colors.stddev"/>
<grass name="r.colors.stddev" version_min="6.4"/>
<grass name="r.blend"/>
<grass name="r.composite"/>
<grass name="r.his"/>
Expand Down Expand Up @@ -211,7 +211,7 @@
<grass name="r.texture"/>
<grass name="r.texture.bis"/>
<grass name="r.los"/>
<grass name="r.grow.distance"/>
<grass name="r.grow.distance" version_min="6.4"/>
<grass name="r.walk.coord"/>
<grass name="r.walk.vect"/>
</section>
Expand Down Expand Up @@ -263,7 +263,7 @@
<grass name="v.surf.bspline"/>
<grass name="v.surf.idw"/>
<grass name="v.surf.rst"/>
<grass name="r.bilinear"/>
<grass name="r.bilinear" version_min="6.4"/>
<grass name="r.surf.idw"/>
<grass name="r.surf.idw2"/>
<grass name="r.fillnulls"/>
Expand Down Expand Up @@ -457,7 +457,7 @@
<section label="Database management">
<grass name="db.connect"/>
<grass name="db.connect.schema"/>
<grass name="db.connect-login.pg"/>
<grass name="db.connect-login.pg" version_min="6.4"/>
<grass name="v.db.reconnect.all"/>
<grass name="db.login"/>
</section>
Expand All @@ -472,7 +472,7 @@
<grass name="v.db.update_query"/>
<grass name="v.db.update_op"/>
<grass name="v.db.update_op_query"/>
<grass name="v.db.dropcol"/>
<grass name="v.db.dropcol" version_min="6.4"/>
<grass name="v.db.renamecol"/>
<grass name="db.execute"/>
<grass name="db.select"/>
Expand Down
9 changes: 6 additions & 3 deletions src/plugins/grass/modules/r.surf.fractal.qgm
Expand Up @@ -2,7 +2,10 @@
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">

<qgisgrassmodule label="Create fractal surface of given fractal dimension" module="r.surf.fractal">
<option key="dimension" />
<option key="number" />
<option key="output" />
<option key="d" version_max="6.3" />
<option key="dimension" version_min="6.4" />
<option key="n" version_max="6.3" />
<option key="number" version_min="6.4" />
<option key="out" version_max="6.3" />
<option key="output" version_min="6.4" />
</qgisgrassmodule>
3 changes: 2 additions & 1 deletion src/plugins/grass/modules/v.buffer.qgm
Expand Up @@ -3,6 +3,7 @@

<qgisgrassmodule label="Vector buffer" module="v.buffer">
<option key="input" typeoption="type" layeroption="layer" />
<option key="distance"/>
<option key="buffer" version_max="6.3"/>
<option key="distance" version_min="6.4"/>
<option key="output" />
</qgisgrassmodule>
3 changes: 2 additions & 1 deletion src/plugins/grass/modules/v.db.select.qgm
Expand Up @@ -3,6 +3,7 @@

<qgisgrassmodule label="Display vector attributes" module="v.db.select">
<option key="map" layeroption="layer" />
<field key="columns" layer="map" type="integer,double,varchar"/>
<field key="column" layer="map" type="integer,double,varchar" version_max="6.3"/>
<field key="columns" layer="map" type="integer,double,varchar" version_min="6.4"/>
<option key="fs" answer="|" hidden="yes" />
</qgisgrassmodule>
3 changes: 2 additions & 1 deletion src/plugins/grass/modules/v.db.select.where.qgm
Expand Up @@ -3,7 +3,8 @@

<qgisgrassmodule label="Display vector map attributes with SQL" module="v.db.select">
<option key="map" layeroption="layer" />
<field key="columns" layer="map" type="integer,double,varchar"/>
<field key="column" layer="map" type="integer,double,varchar" version_max="6.3"/>
<field key="columns" layer="map" type="integer,double,varchar" version_min="6.4"/>
<option key="where" />
<option key="fs" answer="|" hidden="yes" />
</qgisgrassmodule>
3 changes: 2 additions & 1 deletion src/plugins/grass/modules/v.to.db.qgm
Expand Up @@ -5,5 +5,6 @@
<option key="map" layeroption="layer"/>
<option key="option"/>
<option key="units"/>
<field key="columns" layer="map" type="integer,double" label="Attribute field" />
<field key="column" layer="map" type="integer,double" label="Attribute field" version_max="6.3" />
<field key="columns" layer="map" type="integer,double" label="Attribute field" version_min="6.4" />
</qgisgrassmodule>
55 changes: 55 additions & 0 deletions src/plugins/grass/qgsgrassmodule.cpp
Expand Up @@ -408,6 +408,16 @@ QgsGrassModuleStandardOptions::QgsGrassModuleStandardOptions(
QDomElement e = n.toElement();
if ( !e.isNull() )
{
// Check GRASS version
QString version_min = e.attribute( "version_min" );
QString version_max = e.attribute( "version_max" );

if ( !QgsGrassModuleOption::checkVersion( e.attribute( "version_min" ), e.attribute( "version_max" ) ) )
{
n = n.nextSibling();
continue;
}

QString optionType = e.tagName();
QgsDebugMsg( "optionType = " + optionType );

Expand Down Expand Up @@ -2036,6 +2046,51 @@ QString QgsGrassModuleOption::value()
return value;
}

bool QgsGrassModuleOption::checkVersion( QString version_min, QString version_max )
{
QgsDebugMsg( "version_min = " + version_min );
QgsDebugMsg( "version_max = " + version_max );

QRegExp rxVersion( "(\\d+)\\.(\\d+)" );
if ( !version_min.isEmpty() )
{
if ( !rxVersion.exactMatch( version_min ) )
{
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot parse version_min %1" ).arg( version_min ) );
return false;
}
else
{
int versionMajor = rxVersion.cap( 1 ).toInt();
int versionMinor = rxVersion.cap( 2 ).toInt();
if ( QgsGrass::versionMajor() < versionMajor || ( QgsGrass::versionMajor() == versionMajor && QgsGrass::versionMinor() < versionMinor ) )
{
return false;
}
}
}

if ( !version_max.isEmpty() )
{
if ( !rxVersion.exactMatch( version_max ) )
{
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot parse version_max %1" ).arg( version_max ) );
return false;
}
else
{
int versionMajor = rxVersion.cap( 1 ).toInt();
int versionMinor = rxVersion.cap( 2 ).toInt();
if ( QgsGrass::versionMajor() > versionMajor || ( QgsGrass::versionMajor() == versionMajor && QgsGrass::versionMinor() > versionMinor ) )
{
return false;
}
}
}

return true;
}

QStringList QgsGrassModuleOption::options()
{
QStringList list;
Expand Down
3 changes: 3 additions & 0 deletions src/plugins/grass/qgsgrassmodule.h
Expand Up @@ -481,6 +481,9 @@ class QgsGrassModuleOption: public QgsGrassModuleGroupBoxItem
// Use of region can be forced by 'region' attribute in qgm
bool usesRegion() { return mUsesRegion; }

//! Check min/max version
static bool checkVersion( QString version_min, QString version_max );

public slots:
// Add new line edit for multiple options
void addLineEdit();
Expand Down
12 changes: 11 additions & 1 deletion src/plugins/grass/qgsgrasstools.cpp
Expand Up @@ -258,12 +258,22 @@ void QgsGrassTools::addModules( QTreeWidgetItem *parent, QDomElement &element )
{
// QgsDebugMsg(QString("tag = %1").arg(e.tagName()));

if ( e.tagName() == "section" && e.tagName() == "grass" )
if ( e.tagName() != "section" && e.tagName() != "grass" )
{
QgsDebugMsg( QString( "Unknown tag: %1" ).arg( e.tagName() ) );
continue;
}

// Check GRASS version
QString version_min = e.attribute( "version_min" );
QString version_max = e.attribute( "version_max" );

if ( !QgsGrassModuleOption::checkVersion( e.attribute( "version_min" ), e.attribute( "version_max" ) ) )
{
n = n.nextSibling();
continue;
}

if ( parent )
{
item = new QTreeWidgetItem( parent, lastItem );
Expand Down

0 comments on commit ccd8487

Please sign in to comment.