[GRASS-SVN] r51610 - in grass/trunk/gui/wxpython: . modules
ogc_services
svn_grass at osgeo.org
svn_grass at osgeo.org
Wed May 9 09:17:08 EDT 2012
Author: martinl
Date: 2012-05-09 06:17:07 -0700 (Wed, 09 May 2012)
New Revision: 51610
Added:
grass/trunk/gui/wxpython/ogc_services/
grass/trunk/gui/wxpython/ogc_services/wms.py
Removed:
grass/trunk/gui/wxpython/modules/ogc_services.py
Modified:
grass/trunk/gui/wxpython/Makefile
Log:
wxGUI: new package for OGC services
Modified: grass/trunk/gui/wxpython/Makefile
===================================================================
--- grass/trunk/gui/wxpython/Makefile 2012-05-09 12:34:37 UTC (rev 51609)
+++ grass/trunk/gui/wxpython/Makefile 2012-05-09 13:17:07 UTC (rev 51610)
@@ -11,12 +11,12 @@
SRCFILES := $(wildcard icons/*.* scripts/* xml/*) \
$(wildcard core/* dbmgr/* gcp/* gmodeler/* gui_core/* iclass/* lmgr/* location_wizard/* \
- mapdisp/* modules/* nviz/* psmap/* vdigit/* wxplot/* ) \
+ mapdisp/* modules/* nviz/* psmap/* vdigit/* wxplot/* ogc_services/* ) \
gis_set.py gis_set_error.py wxgui.py README
DSTFILES := $(patsubst %,$(ETCDIR)/%,$(SRCFILES)) $(patsubst %.py,$(ETCDIR)/%.pyc,$(filter %.py,$(SRCFILES)))
PYDSTDIRS := $(patsubst %,$(ETCDIR)/%,core dbmgr gcp gmodeler gui_core iclass lmgr location_wizard \
- mapdisp modules nviz psmap vdigit wxplot)
+ mapdisp modules nviz psmap vdigit wxplot ogc_services)
DSTDIRS := $(patsubst %,$(ETCDIR)/%,icons scripts xml)
default: $(DSTFILES) menustrings.py
Deleted: grass/trunk/gui/wxpython/modules/ogc_services.py
===================================================================
--- grass/trunk/gui/wxpython/modules/ogc_services.py 2012-05-09 12:34:37 UTC (rev 51609)
+++ grass/trunk/gui/wxpython/modules/ogc_services.py 2012-05-09 13:17:07 UTC (rev 51610)
@@ -1,300 +0,0 @@
-"""!
- at package module.ogc_services
-
- at brief Dialogs for OGC services
-
-Currently only implemeted WMS.
-
-List of classes:
- - ogc_services::WMSDialog
- - ogc_services::LayersList
-
-(C) 2009-2011 by the GRASS Development Team
-
-This program is free software under the GNU General Public License
-(>=v2). Read the file COPYING that comes with GRASS for details.
-
- at author Martin Landa <landa.martin gmail.com>
-"""
-
-import wx
-from wx.gizmos import TreeListCtrl
-import wx.lib.mixins.listctrl as listmix
-
-from core.gcmd import RunCommand
-from core.settings import UserSettings
-
-class WMSDialog(wx.Dialog):
- def __init__(self, parent, service = 'wms',
- id=wx.ID_ANY,
- style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
- """!Dialog to import data from WMS server"""
- self.parent = parent # GMFrame
- self.service = service # currently only WMS is implemented
-
- wx.Dialog.__init__(self, parent, id, style=style)
- if self.service == 'wms':
- self.SetTitle(_("Import data from WMS server"))
-
- self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-
- self.__createWidgets()
-
- self.__doLayout()
-
- self.SetMinSize((550, 400))
-
- def __createWidgets(self):
- """!Create dialog widgets"""
- #
- # settings
- #
- self.settingsBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
- label = _(" Server settings "))
-
- self.serverText = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = _("Server:"))
- self.server = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY)
-
- #
- # list of layers
- #
- self.layersBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
- label=_(" List of layers "))
-
- self.list = LayersList(self.panel)
- self.list.LoadData()
-
- self.add = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
- label=_("Add imported layers into layer tree"))
- self.add.SetValue(UserSettings.Get(group='cmd', key='addNewLayer', subkey='enabled'))
-
- #
- # buttons
- #
- # cancel
- self.btn_cancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
- self.btn_cancel.SetToolTipString(_("Close dialog"))
- # connect
- self.btn_connect = wx.Button(parent = self.panel, id = wx.ID_ANY, label = _("&Connect"))
- self.btn_connect.SetToolTipString(_("Connect to the server"))
- self.btn_connect.SetDefault()
- if not self.server.GetValue():
- self.btn_connect.Enable(False)
- # import
- self.btn_import = wx.Button(parent = self.panel, id = wx.ID_OK, label = _("&Import"))
- self.btn_import.SetToolTipString(_("Import selected layers"))
- self.btn_import.Enable(False)
-
- #
- # bindings
- #
- self.btn_cancel.Bind(wx.EVT_BUTTON, self.OnCancel)
- self.btn_connect.Bind(wx.EVT_BUTTON, self.OnConnect)
- self.server.Bind(wx.EVT_TEXT, self.OnServer)
-
- def __doLayout(self):
- """!Do dialog layout"""
- dialogSizer = wx.BoxSizer(wx.VERTICAL)
-
- #
- # settings
- #
- settingsSizer = wx.StaticBoxSizer(self.settingsBox, wx.HORIZONTAL)
-
- gridSizer = wx.FlexGridSizer(cols=2, vgap=5, hgap=5)
-
- gridSizer.Add(item=self.serverText,
- flag=wx.ALIGN_CENTER_VERTICAL)
- gridSizer.AddGrowableCol(1)
- gridSizer.Add(item=self.server,
- flag=wx.EXPAND | wx.ALL)
-
- settingsSizer.Add(item=gridSizer, proportion=1,
- flag=wx.EXPAND | wx.ALL)
-
- dialogSizer.Add(item=settingsSizer, proportion=0,
- flag=wx.ALL | wx.EXPAND, border=5)
-
- #
- # list of layers
- #
- layersSizer = wx.StaticBoxSizer(self.layersBox, wx.HORIZONTAL)
-
- layersSizer.Add(item=self.list, proportion=1,
- flag=wx.ALL | wx.EXPAND, border=5)
-
- dialogSizer.Add(item=layersSizer, proportion=1,
- flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
-
- dialogSizer.Add(item=self.add, proportion=0,
- flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
-
- #
- # buttons
- #
- btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
-
- btnsizer.Add(item=self.btn_cancel, proportion=0,
- flag=wx.ALL | wx.ALIGN_CENTER,
- border=10)
-
- btnsizer.Add(item=self.btn_connect, proportion=0,
- flag=wx.ALL | wx.ALIGN_CENTER,
- border=10)
-
- btnsizer.Add(item=self.btn_import, proportion=0,
- flag=wx.ALL | wx.ALIGN_CENTER,
- border=10)
-
- dialogSizer.Add(item=btnsizer, proportion=0,
- flag=wx.ALIGN_CENTER)
-
- self.panel.SetAutoLayout(True)
- self.panel.SetSizer(dialogSizer)
- dialogSizer.Fit(self.panel)
- self.Layout()
-
- def OnCancel(self, event):
- """!Button 'Cancel' pressed -> close the dialog"""
- self.Close()
-
- def OnConnect(self, event):
- """!Button 'Connect' pressed"""
- server = self.server.GetValue()
- if not server:
- self.btn_import.Enable(False)
- return # not reachable
-
- layers = {}
- ret = RunCommand('r.in.wms',
- quiet = True,
- parent = self,
- read = True,
- flags = 'l',
- mapserver = server)
-
- if not ret:
- self.list.LoadData()
- self.btn_import.Enable(False)
- return # no layers found
-
- lastLayer = lastStyle = ''
- for line in ret.splitlines():
- try:
- key, value = line.split(':', 1)
- except ValueError:
- continue
- key = key.strip().lower()
- value = value.strip()
-
- if key == 'layer':
- layers[value] = {}
- lastLayer = value
- elif key == 'title':
- layers[lastLayer][key] = value
- elif key == 'style':
- if 'style' not in layers[lastLayer]:
- layers[lastLayer]['style'] = {}
- layers[lastLayer]['style'][value] = ''
- lastStyle = value
- elif key == 'style title':
- layers[lastLayer]['style'][lastStyle] = value
-
- # update list of layers
- self.list.LoadData(layers)
-
- if len(layers.keys()) > 0:
- self.btn_import.Enable(True)
- else:
- self.btn_import.Enable(False)
-
- def OnServer(self, event):
- """!Server settings changed"""
- value = event.GetString()
- if value:
- self.btn_connect.Enable(True)
- else:
- self.btn_connect.Enable(False)
-
- def GetLayers(self):
- """!Get list of selected layers/styles to be imported"""
- return self.list.GetSelectedLayers()
-
- def GetSettings(self):
- """!Get connection settings"""
- return { 'server' : self.server.GetValue() }
-
-class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
- def __init__(self, parent, pos=wx.DefaultPosition):
- """!List of layers to be imported (dxf, shp...)"""
- self.parent = parent
-
- TreeListCtrl.__init__(self, parent, wx.ID_ANY,
- style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT |
- wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_MULTIPLE)
-
- # setup mixins
- listmix.ListCtrlAutoWidthMixin.__init__(self)
-
- self.AddColumn(_('Layer / Style'))
- self.AddColumn(_('Title'))
- self.SetMainColumn(0) # column with the tree
- self.SetColumnWidth(0, 175)
-
- self.root = None
-
- def LoadData(self, data = {}):
- """!Load data into list"""
- # detete first all items
- self.DeleteAllItems()
- self.root = self.AddRoot(_("Layers"))
-
- layers = data.keys()
- if not layers:
- return
-
- layers.sort()
-
- for layer in layers:
- title = data[layer]['title']
- lchild = self.AppendItem(self.root, layer)
- self.SetItemText(lchild, title, 1)
- if 'style' in data[layer]:
- styles = data[layer]['style'].keys()
- if not styles:
- continue
- styles.sort()
- for style in styles:
- title = data[layer]['style'][style]
- schild = self.AppendItem(lchild, style)
- self.SetItemText(schild, title, 1)
-
- self.Expand(self.root)
-
- def GetItemCount(self):
- """!Required for listmix.ListCtrlAutoWidthMixin"""
- return 0
-
- def GetCountPerPage(self):
- """!Required for listmix.ListCtrlAutoWidthMixin"""
- return 0
-
- def GetSelectedLayers(self):
- """!Get selected layers/styles"""
- layers = dict()
-
- for item in self.GetSelections():
- parent = self.GetItemParent(item)
- if parent == self.root: # -> layer
- layer = self.GetItemText(item, 0)
- layers[layer] = list()
- sitem, cookie = self.GetFirstChild(item)
- while sitem:
- layers[layer].append(self.GetItemText(sitem, 0))
- sitem, cookie = self.GetNextChild(item, cookie)
- else: # -> style
- layer = self.GetItemText(parent, 0)
- layers[layer] = list()
- layers[layer].append(self.GetItemText(item, 0))
-
- return layers
Copied: grass/trunk/gui/wxpython/ogc_services/wms.py (from rev 51607, grass/trunk/gui/wxpython/modules/ogc_services.py)
===================================================================
--- grass/trunk/gui/wxpython/ogc_services/wms.py (rev 0)
+++ grass/trunk/gui/wxpython/ogc_services/wms.py 2012-05-09 13:17:07 UTC (rev 51610)
@@ -0,0 +1,300 @@
+"""!
+ at package module.ogc_services
+
+ at brief Dialogs for OGC services
+
+Currently only implemeted WMS.
+
+List of classes:
+ - ogc_services::WMSDialog
+ - ogc_services::LayersList
+
+(C) 2009-2011 by the GRASS Development Team
+
+This program is free software under the GNU General Public License
+(>=v2). Read the file COPYING that comes with GRASS for details.
+
+ at author Martin Landa <landa.martin gmail.com>
+"""
+
+import wx
+from wx.gizmos import TreeListCtrl
+import wx.lib.mixins.listctrl as listmix
+
+from core.gcmd import RunCommand
+from core.settings import UserSettings
+
+class WMSDialog(wx.Dialog):
+ def __init__(self, parent, service = 'wms',
+ id=wx.ID_ANY,
+ style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+ """!Dialog to import data from WMS server"""
+ self.parent = parent # GMFrame
+ self.service = service # currently only WMS is implemented
+
+ wx.Dialog.__init__(self, parent, id, style=style)
+ if self.service == 'wms':
+ self.SetTitle(_("Import data from WMS server"))
+
+ self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
+
+ self.__createWidgets()
+
+ self.__doLayout()
+
+ self.SetMinSize((550, 400))
+
+ def __createWidgets(self):
+ """!Create dialog widgets"""
+ #
+ # settings
+ #
+ self.settingsBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+ label = _(" Server settings "))
+
+ self.serverText = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = _("Server:"))
+ self.server = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY)
+
+ #
+ # list of layers
+ #
+ self.layersBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+ label=_(" List of layers "))
+
+ self.list = LayersList(self.panel)
+ self.list.LoadData()
+
+ self.add = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
+ label=_("Add imported layers into layer tree"))
+ self.add.SetValue(UserSettings.Get(group='cmd', key='addNewLayer', subkey='enabled'))
+
+ #
+ # buttons
+ #
+ # cancel
+ self.btn_cancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
+ self.btn_cancel.SetToolTipString(_("Close dialog"))
+ # connect
+ self.btn_connect = wx.Button(parent = self.panel, id = wx.ID_ANY, label = _("&Connect"))
+ self.btn_connect.SetToolTipString(_("Connect to the server"))
+ self.btn_connect.SetDefault()
+ if not self.server.GetValue():
+ self.btn_connect.Enable(False)
+ # import
+ self.btn_import = wx.Button(parent = self.panel, id = wx.ID_OK, label = _("&Import"))
+ self.btn_import.SetToolTipString(_("Import selected layers"))
+ self.btn_import.Enable(False)
+
+ #
+ # bindings
+ #
+ self.btn_cancel.Bind(wx.EVT_BUTTON, self.OnCancel)
+ self.btn_connect.Bind(wx.EVT_BUTTON, self.OnConnect)
+ self.server.Bind(wx.EVT_TEXT, self.OnServer)
+
+ def __doLayout(self):
+ """!Do dialog layout"""
+ dialogSizer = wx.BoxSizer(wx.VERTICAL)
+
+ #
+ # settings
+ #
+ settingsSizer = wx.StaticBoxSizer(self.settingsBox, wx.HORIZONTAL)
+
+ gridSizer = wx.FlexGridSizer(cols=2, vgap=5, hgap=5)
+
+ gridSizer.Add(item=self.serverText,
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ gridSizer.AddGrowableCol(1)
+ gridSizer.Add(item=self.server,
+ flag=wx.EXPAND | wx.ALL)
+
+ settingsSizer.Add(item=gridSizer, proportion=1,
+ flag=wx.EXPAND | wx.ALL)
+
+ dialogSizer.Add(item=settingsSizer, proportion=0,
+ flag=wx.ALL | wx.EXPAND, border=5)
+
+ #
+ # list of layers
+ #
+ layersSizer = wx.StaticBoxSizer(self.layersBox, wx.HORIZONTAL)
+
+ layersSizer.Add(item=self.list, proportion=1,
+ flag=wx.ALL | wx.EXPAND, border=5)
+
+ dialogSizer.Add(item=layersSizer, proportion=1,
+ flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
+
+ dialogSizer.Add(item=self.add, proportion=0,
+ flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
+
+ #
+ # buttons
+ #
+ btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+
+ btnsizer.Add(item=self.btn_cancel, proportion=0,
+ flag=wx.ALL | wx.ALIGN_CENTER,
+ border=10)
+
+ btnsizer.Add(item=self.btn_connect, proportion=0,
+ flag=wx.ALL | wx.ALIGN_CENTER,
+ border=10)
+
+ btnsizer.Add(item=self.btn_import, proportion=0,
+ flag=wx.ALL | wx.ALIGN_CENTER,
+ border=10)
+
+ dialogSizer.Add(item=btnsizer, proportion=0,
+ flag=wx.ALIGN_CENTER)
+
+ self.panel.SetAutoLayout(True)
+ self.panel.SetSizer(dialogSizer)
+ dialogSizer.Fit(self.panel)
+ self.Layout()
+
+ def OnCancel(self, event):
+ """!Button 'Cancel' pressed -> close the dialog"""
+ self.Close()
+
+ def OnConnect(self, event):
+ """!Button 'Connect' pressed"""
+ server = self.server.GetValue()
+ if not server:
+ self.btn_import.Enable(False)
+ return # not reachable
+
+ layers = {}
+ ret = RunCommand('r.in.wms',
+ quiet = True,
+ parent = self,
+ read = True,
+ flags = 'l',
+ mapserver = server)
+
+ if not ret:
+ self.list.LoadData()
+ self.btn_import.Enable(False)
+ return # no layers found
+
+ lastLayer = lastStyle = ''
+ for line in ret.splitlines():
+ try:
+ key, value = line.split(':', 1)
+ except ValueError:
+ continue
+ key = key.strip().lower()
+ value = value.strip()
+
+ if key == 'layer':
+ layers[value] = {}
+ lastLayer = value
+ elif key == 'title':
+ layers[lastLayer][key] = value
+ elif key == 'style':
+ if 'style' not in layers[lastLayer]:
+ layers[lastLayer]['style'] = {}
+ layers[lastLayer]['style'][value] = ''
+ lastStyle = value
+ elif key == 'style title':
+ layers[lastLayer]['style'][lastStyle] = value
+
+ # update list of layers
+ self.list.LoadData(layers)
+
+ if len(layers.keys()) > 0:
+ self.btn_import.Enable(True)
+ else:
+ self.btn_import.Enable(False)
+
+ def OnServer(self, event):
+ """!Server settings changed"""
+ value = event.GetString()
+ if value:
+ self.btn_connect.Enable(True)
+ else:
+ self.btn_connect.Enable(False)
+
+ def GetLayers(self):
+ """!Get list of selected layers/styles to be imported"""
+ return self.list.GetSelectedLayers()
+
+ def GetSettings(self):
+ """!Get connection settings"""
+ return { 'server' : self.server.GetValue() }
+
+class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
+ def __init__(self, parent, pos=wx.DefaultPosition):
+ """!List of layers to be imported (dxf, shp...)"""
+ self.parent = parent
+
+ TreeListCtrl.__init__(self, parent, wx.ID_ANY,
+ style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT |
+ wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_MULTIPLE)
+
+ # setup mixins
+ listmix.ListCtrlAutoWidthMixin.__init__(self)
+
+ self.AddColumn(_('Layer / Style'))
+ self.AddColumn(_('Title'))
+ self.SetMainColumn(0) # column with the tree
+ self.SetColumnWidth(0, 175)
+
+ self.root = None
+
+ def LoadData(self, data = {}):
+ """!Load data into list"""
+ # detete first all items
+ self.DeleteAllItems()
+ self.root = self.AddRoot(_("Layers"))
+
+ layers = data.keys()
+ if not layers:
+ return
+
+ layers.sort()
+
+ for layer in layers:
+ title = data[layer]['title']
+ lchild = self.AppendItem(self.root, layer)
+ self.SetItemText(lchild, title, 1)
+ if 'style' in data[layer]:
+ styles = data[layer]['style'].keys()
+ if not styles:
+ continue
+ styles.sort()
+ for style in styles:
+ title = data[layer]['style'][style]
+ schild = self.AppendItem(lchild, style)
+ self.SetItemText(schild, title, 1)
+
+ self.Expand(self.root)
+
+ def GetItemCount(self):
+ """!Required for listmix.ListCtrlAutoWidthMixin"""
+ return 0
+
+ def GetCountPerPage(self):
+ """!Required for listmix.ListCtrlAutoWidthMixin"""
+ return 0
+
+ def GetSelectedLayers(self):
+ """!Get selected layers/styles"""
+ layers = dict()
+
+ for item in self.GetSelections():
+ parent = self.GetItemParent(item)
+ if parent == self.root: # -> layer
+ layer = self.GetItemText(item, 0)
+ layers[layer] = list()
+ sitem, cookie = self.GetFirstChild(item)
+ while sitem:
+ layers[layer].append(self.GetItemText(sitem, 0))
+ sitem, cookie = self.GetNextChild(item, cookie)
+ else: # -> style
+ layer = self.GetItemText(parent, 0)
+ layers[layer] = list()
+ layers[layer].append(self.GetItemText(item, 0))
+
+ return layers
More information about the grass-commit
mailing list