Skip to content
Commits on Source (5)
grass (7.8.2~rc2-1~exp2) UNRELEASED; urgency=medium
grass (7.8.2-1~exp1) experimental; urgency=medium
* New upstream release.
* Drop Name field from upstream metadata.
* Add lintian override for manpage-without-executable.
-- Bas Couwenberg <sebastic@debian.org> Mon, 09 Dec 2019 09:10:02 +0100
-- Bas Couwenberg <sebastic@debian.org> Wed, 11 Dec 2019 18:35:50 +0100
grass (7.8.2~rc2-1~exp1) experimental; urgency=medium
......
......@@ -4,3 +4,6 @@ manpage-has-bad-whatis-entry *
# html2man deficiency
manpage-has-errors-from-man *
# Executable is in /usr/lib/grass??/bin/
manpage-without-executable usr/share/man/man1/*
......@@ -35,6 +35,42 @@ from grass.script.core import get_commands
from core.debug import Debug
def parse_version_string(version):
"""Parse version number, return three numbers as list
>>> parse_version_string("4.0.1")
[4, 0, 1]
>>> parse_version_string("4.0.0aX")
[4, 0, 0]
>>> parse_version_string("4.0.7.post2")
[4, 0, 7]
"""
try:
# max: get only first three parts from wxPython 4.0.7.post2
maxsplit = 2
split_ver = version.split(".", maxsplit)
parsed_version = list(map(int, split_ver))
except ValueError:
# remove last part of wxPython 4.0.0aX
for i, c in enumerate(split_ver[-1]):
if not c.isdigit():
break
parsed_version = list(map(int, split_ver[:-1])) + [int(split_ver[-1][:i])]
return parsed_version
def version_as_string(version):
"""Return version list or tuple as text
>>> version_as_string([1, 2, 3])
'1.2.3'
>>> version_as_string((1, 2, 3, 4))
'1.2.3.4'
"""
texts = [str(i) for i in version]
return ".".join(texts)
def CheckWxPhoenix():
if 'phoenix' in wx.version():
return True
......@@ -44,15 +80,7 @@ def CheckWxPhoenix():
def CheckWxVersion(version):
"""Check wx version"""
ver = wx.__version__
try:
split_ver = ver.split('.')
parsed_version = list(map(int, split_ver))
except ValueError:
# wxPython 4.0.0aX
for i, c in enumerate(split_ver[-1]):
if not c.isdigit():
break
parsed_version = list(map(int, split_ver[:-1])) + [int(split_ver[-1][:i])]
parsed_version = parse_version_string(ver)
if parsed_version < version:
return False
......@@ -81,12 +109,11 @@ def CheckForWx(forceVersion=os.getenv('GRASS_WXVERSION', None)):
wxversion.select(forceVersion)
wxversion.ensureMinimal(str(minVersion[0]) + '.' + str(minVersion[1]))
import wx
version = wx.__version__
version = parse_version_string(wx.__version__)
if map(int, version.split('.')) < minVersion:
if version < minVersion:
raise ValueError(
'Your wxPython version is %s.%s.%s.%s' %
tuple(version.split('.')))
"Your wxPython version is {}".format(wx.__version__))
except ImportError as e:
print('ERROR: wxGUI requires wxPython. %s' % str(e),
......@@ -95,8 +122,9 @@ def CheckForWx(forceVersion=os.getenv('GRASS_WXVERSION', None)):
' the command line or in Python.', file=sys.stderr)
sys.exit(1)
except (ValueError, wxversion.VersionError) as e:
print('ERROR: wxGUI requires wxPython >= %d.%d.%d.%d. ' % tuple(
minVersion) + '%s.' % (str(e)), file=sys.stderr)
message = "ERROR: wxGUI requires wxPython >= {version}: {error}".format(
version=version_as_string(minVersion), error=e)
print(message, file=sys.stderr)
sys.exit(1)
except locale.Error as e:
print("Unable to set locale:", e, file=sys.stderr)
......
......@@ -79,7 +79,7 @@ maptype = 'raster'
def getSmallUpArrowImage():
stream = open(os.path.join(globalvar.IMGDIR, 'small_up_arrow.png'), 'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
return img
......@@ -88,7 +88,7 @@ def getSmallUpArrowImage():
def getSmallDnArrowImage():
stream = open(os.path.join(globalvar.IMGDIR, 'small_down_arrow.png'), 'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
stream.close()
......@@ -2174,7 +2174,7 @@ class GCPList(ListCtrl,
_('Forward error'),
_('Backward error')):
info.SetText(lbl)
self.InsertColumnInfo(idx_col, info)
self.InsertColumn(idx_col, info)
idx_col += 1
def LoadData(self):
......@@ -2682,11 +2682,10 @@ class GrSettingsDialog(wx.Dialog):
parent=panel, id=wx.ID_ANY,
label=_("Highlight RMS error > M + SD * factor:"))
rmslabel.SetToolTip(
wx.ToolTip(
_(
"Highlight GCPs with an RMS error larger than \n"
"mean + standard deviation * given factor. \n"
"Recommended values for this factor are between 1 and 2.")))
"Recommended values for this factor are between 1 and 2."))
rmsgridSizer.Add(
rmslabel,
flag=wx.ALIGN_CENTER_VERTICAL,
......
......@@ -82,7 +82,7 @@ maptype = 'raster'
def getSmallUpArrowImage():
stream = open(os.path.join(globalvar.IMGDIR, 'small_up_arrow.png'), 'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
return img
......@@ -91,7 +91,7 @@ def getSmallUpArrowImage():
def getSmallDnArrowImage():
stream = open(os.path.join(globalvar.IMGDIR, 'small_down_arrow.png'), 'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
stream.close()
......
......@@ -1557,19 +1557,18 @@ class BufferedMapWindow(MapWindowBase, Window):
self.digit:
self._onLeftUp(event)
elif (self.mouse['use'] == 'pointer' and
self.dragid and int(self.dragid) >= 0):
# end drag of overlay decoration
if self.overlays and self.dragid in self.overlays:
self.overlays[
self.dragid].coords = self.pdc.GetIdBounds(
self.dragid)
elif self.dragid in self.textdict:
self.textdict[self.dragid]['bbox'] = self.pdc.GetIdBounds(self.dragid)
else:
pass
self.dragid = None
elif self.mouse['use'] == 'pointer':
if self.dragid and int(self.dragid) >= 0:
# end drag of overlay decoration
if self.overlays and self.dragid in self.overlays:
self.overlays[
self.dragid].coords = self.pdc.GetIdBounds(
self.dragid)
elif self.dragid in self.textdict:
self.textdict[self.dragid]['bbox'] = self.pdc.GetIdBounds(self.dragid)
else:
pass
self.dragid = None
self.mouseLeftUpPointer.emit(x=coordinates[0], y=coordinates[1])
......
......@@ -73,7 +73,7 @@ maptype = 'raster'
def getSmallUpArrowImage():
stream = open(os.path.join(globalvar.IMGDIR, 'small_up_arrow.png'), 'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
return img
......@@ -82,7 +82,7 @@ def getSmallUpArrowImage():
def getSmallDnArrowImage():
stream = open(os.path.join(globalvar.IMGDIR, 'small_down_arrow.png'), 'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
stream.close()
......
......@@ -591,7 +591,7 @@ class RDigitController(wx.EvtHandler):
:return: output raster map name as a result of digitization
"""
output = 'x' + str(uuid.uuid4())[:8]
asciiFile = tempfile.NamedTemporaryFile(delete=False)
asciiFile = tempfile.NamedTemporaryFile(mode='w', delete=False)
asciiFile.write('\n'.join(text))
asciiFile.close()
......
......@@ -20,7 +20,7 @@ from gui_core.toolbars import BaseToolbar
from icons.icon import MetaIcon
from gui_core.widgets import FloatValidator
import wx.lib.colourselect as csel
from gui_core.wrap import TextCtrl, StaticText
from gui_core.wrap import TextCtrl, StaticText, ColourSelect
rdigitIcons = {'area': MetaIcon(img='polygon-create',
......@@ -56,12 +56,11 @@ class RDigitToolbar(BaseToolbar):
self.InsertControl(0, self._mapSelectionCombo)
self._previousMap = self._mapSelectionCombo.GetValue()
self._color = csel.ColourSelect(parent=self, colour=wx.GREEN,
size=(30, 30))
self._color = ColourSelect(parent=self, colour=wx.GREEN, size=(30, 30))
self._color.Bind(
csel.EVT_COLOURSELECT,
lambda evt: self._changeDrawColor())
self._color.SetToolTipString(
self._color.SetToolTip(
_("Set drawing color (not raster cell color)"))
self.InsertControl(4, self._color)
......
......@@ -436,7 +436,7 @@ class PointsList(ListCtrl,
'small_up_arrow.png'),
'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
return img
......@@ -449,7 +449,7 @@ class PointsList(ListCtrl,
'small_down_arrow.png'),
'rb')
try:
img = wx.ImageFromStream(stream)
img = wx.Image(stream)
finally:
stream.close()
return img
......
......@@ -22,7 +22,7 @@ int pj_get_string(struct pj_info *, char *);
#ifndef HAVE_PROJ_H
int GPJ_get_equivalent_latlong(struct pj_info *, struct pj_info *);
#endif
const char *set_proj_lib(const char *);
const char *set_proj_share(const char *);
int pj_print_proj_params(const struct pj_info *, const struct pj_info *);
/* convert.c */
......
......@@ -189,17 +189,16 @@ int GPJ__get_datum_params(const struct Key_Value *projinfo,
returnval = 2;
}
else if (G_find_key_value("nadgrids", projinfo) != NULL) {
const char *projshare = getenv("GRASS_PROJSHARE");
if (!projshare) {
G_warning(_("Failed to detect nadgrids path, GRASS_PROJSHARE not defined"));
returnval = -1;
}
else {
G_asprintf(params, "nadgrids=%s%c%s", projshare, HOST_DIRSEP,
G_find_key_value("nadgrids", projinfo));
returnval = 2;
}
/* 1. beware of '@', do not create something like
* /usr/share/proj/@null, correct is @null or
* @/usr/share/proj/null
* 2. do not add path to the grid, there might already be a
* path, and it is safer to use pj_set_finder with PROJ.4 in
* datum.c */
G_asprintf(params, "nadgrids=%s", G_find_key_value("nadgrids", projinfo));
returnval = 2;
}
else if (G_find_key_value("towgs84", projinfo) != NULL) {
G_asprintf(params, "towgs84=%s",
......
......@@ -23,8 +23,8 @@
#include <grass/gprojects.h>
#include <grass/glocale.h>
/* Finder function for datum conversion lookup tables */
#define FINDERFUNC set_proj_lib
/* Finder function for datum transformation grids */
#define FINDERFUNC set_proj_share
#define PERMANENT "PERMANENT"
#define MAX_PARGS 100
......@@ -486,15 +486,24 @@ int GPJ_get_equivalent_latlong(struct pj_info *pjnew, struct pj_info *pjold)
}
#endif
/* set_proj_lib()
* 'finder function' for use with PROJ.4 pj_set_finder() function */
/* set_proj_share()
* 'finder function' for use with PROJ.4 pj_set_finder() function
* this is used to find grids, usually in /usr/share/proj
* GRASS no longer provides copies of proj grids in GRIDDIR
* -> do not use gisbase/GRIDDIR */
const char *set_proj_lib(const char *name)
const char *set_proj_share(const char *name)
{
const char *gisbase = G_gisbase();
static char *buf = NULL;
static size_t buf_len;
size_t len = strlen(gisbase) + sizeof(GRIDDIR) + strlen(name) + 1;
const char *projshare;
static size_t buf_len = 0;
size_t len;
projshare = getenv("GRASS_PROJSHARE");
if (!projshare)
return NULL;
len = strlen(projshare) + strlen(name) + 2;
if (buf_len < len) {
if (buf != NULL)
......@@ -503,7 +512,7 @@ const char *set_proj_lib(const char *name)
buf = G_malloc(buf_len);
}
sprintf(buf, "%s%s/%s", gisbase, GRIDDIR, name);
sprintf(buf, "%s/%s", projshare, name);
return buf;
}
......
......@@ -72,6 +72,7 @@ North Carolina sample dataset:
<div class="code"><pre>
g.region raster=streams_derived -p
r.grow.distance input=streams_derived distance=dist_from_streams
r.colors map=dist_from_streams color=rainbow
</pre></div>
<div align="center" style="margin: 10px">
......@@ -90,6 +91,7 @@ r.grow.distance input=streams_derived distance=dist_from_streams
<div class="code"><pre>
g.region raster=sea -p
r.grow.distance -m input=sea distance=dist_from_sea_geodetic metric=geodesic
r.colors map=dist_from_sea_geodetic color=rainbow
</pre></div>
<p>
......