123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- """!
- @package mapswipe.dialogs
- @brief Dialogs used in Map Swipe
- Classes:
- - dialogs::SwipeMapDialog
- (C) 2013 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.
- @author Anna Petrasova <kratochanna gmail.com>
- """
- import copy
- import wx
- import wx.lib.scrolledpanel as SP
- import wx.lib.colourselect as csel
- from core import globalvar
- from core.utils import _
- from gui_core import gselect
- from gui_core.widgets import SimpleValidator
- from gui_core.preferences import PreferencesBaseDialog
- from core.gcmd import GMessage
- from core.layerlist import LayerList
- from core.settings import UserSettings
- from gui_core.simplelmgr import SimpleLayerManager, SIMPLE_LMGR_RASTER, \
- SIMPLE_LMGR_VECTOR, SIMPLE_LMGR_RGB, SIMPLE_LMGR_TB_LEFT, SIMPLE_LMGR_TB_RIGHT
- from grass.pydispatch.signal import Signal
- class SwipeMapDialog(wx.Dialog):
- """!Dialog used to select maps.
- There are two modes - simple (only two raster maps),
- or two layer lists.
- """
- def __init__(self, parent, title=_("Select raster maps"),
- first=None, second=None,
- firstLayerList=None, secondLayerList=None):
- wx.Dialog.__init__(self, parent=parent, title=title,
- style=wx.RESIZE_BORDER | wx.DEFAULT_DIALOG_STYLE)
- if firstLayerList is None:
- self._firstLayerList = LayerList()
- else:
- self._firstLayerList = copy.deepcopy(firstLayerList)
- if secondLayerList is None:
- self._secondLayerList = LayerList()
- else:
- self._secondLayerList = copy.deepcopy(secondLayerList)
- self._firstPanel = self._createSimplePanel()
- self._secondPanel = self._createAdvancedPanel()
- self.btnSwitch = wx.Button(self)
- self.btnCancel = wx.Button(self, id=wx.ID_CANCEL)
- self.btnApply = wx.Button(self, id=wx.ID_APPLY)
- self.btnOK = wx.Button(self, id=wx.ID_OK)
- self.btnOK.SetDefault()
- self.btnSwitch.Bind(wx.EVT_BUTTON, self.OnSwitchMode)
- self.btnApply.Bind(wx.EVT_BUTTON, lambda evt: self._apply())
- self.btnOK.Bind(wx.EVT_BUTTON, lambda evt: self._ok())
- self.btnCancel.Bind(wx.EVT_BUTTON, lambda evt: self.Close())
- self.Bind(wx.EVT_CLOSE, lambda evt: self.Hide())
- self.applyChanges = Signal('SwipeMapDialog.applyChanges')
- if first:
- self._firstRaster.SetValue(first)
- if second:
- self._secondRaster.SetValue(second)
- self._layout()
- def _layout(self):
- """!Do layout"""
- mainSizer = wx.BoxSizer(wx.VERTICAL)
- self._switchSizer = wx.BoxSizer()
- self._switchSizer.Add(self._firstPanel, proportion=1,
- flag=wx.EXPAND | wx.ALL, border=5)
- self._switchSizer.Add(self._secondPanel, proportion=1,
- flag=wx.EXPAND | wx.ALL, border=5)
- mainSizer.Add(self._switchSizer, proportion=1,
- flag=wx.EXPAND | wx.ALL)
- self.btnSizer = wx.StdDialogButtonSizer()
- self.btnSizer.AddButton(self.btnCancel)
- self.btnSizer.AddButton(self.btnOK)
- self.btnSizer.AddButton(self.btnApply)
- self.btnSizer.Realize()
- mainSizer.Add(item=self.btnSwitch, proportion=0,
- flag=wx.ALL | wx.ALIGN_LEFT, border=5)
- mainSizer.Add(item=self.btnSizer, proportion=0,
- flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
- self.mainSizer = mainSizer
- self.SetSizer(mainSizer)
- mainSizer.Fit(self)
- self._switchMode(simple=True)
- def _createSimplePanel(self):
- panel = wx.Panel(self)
- sizer = wx.BoxSizer(wx.VERTICAL)
- self._firstRaster = gselect.Select(parent=panel, type='raster',
- size=globalvar.DIALOG_GSELECT_SIZE,
- validator=SimpleValidator(callback=self.ValidatorCallback))
- self._secondRaster = gselect.Select(parent=panel, type='raster',
- size=globalvar.DIALOG_GSELECT_SIZE,
- validator=SimpleValidator(callback=self.ValidatorCallback))
- sizer.Add(wx.StaticText(panel, label=_("Name of top/left raster map:")),
- proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
- sizer.Add(self._firstRaster, proportion=0,
- flag=wx.EXPAND | wx.ALL, border=1)
- sizer.Add(wx.StaticText(panel, label=_("Name of bottom/right raster map:")),
- proportion=0, flag=wx.EXPAND | wx.ALL, border=1)
- sizer.Add(self._secondRaster, proportion=0,
- flag=wx.EXPAND | wx.ALL, border=1)
- self._firstRaster.SetFocus()
- panel.SetSizer(sizer)
- sizer.Fit(panel)
- return panel
- def _createAdvancedPanel(self):
- panel = wx.Panel(self)
- sizer = wx.BoxSizer(wx.HORIZONTAL)
- self._firstLmgr = SimpleLayerManager(parent=panel, layerList=self._firstLayerList,
- lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB |
- SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_LEFT)
- self._secondLmgr = SimpleLayerManager(parent=panel, layerList=self._secondLayerList,
- lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB |
- SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_RIGHT)
- sizer.Add(self._firstLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
- sizer.Add(self._secondLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
- panel.SetSizer(sizer)
- sizer.Fit(panel)
- return panel
- def _switchMode(self, simple):
- if simple:
- self._switchSizer.Show(self._firstPanel, show=True, recursive=True)
- self._switchSizer.Show(self._secondPanel, show=False, recursive=True)
- self.btnSwitch.SetLabel(_("Switch to advanced mode"))
- self.btnCancel.SetLabel(_("Cancel"))
- else:
- self._switchSizer.Show(self._firstPanel, show=False, recursive=True)
- self._switchSizer.Show(self._secondPanel, show=True, recursive=True)
- self.btnSwitch.SetLabel(_("Switch to simple mode"))
- self.btnCancel.SetLabel(_("Close"))
- self.Freeze() # doesn't do anything (at least on Ubuntu)
- self.btnSizer.Show(self.btnApply, simple)
- self.btnSizer.Show(self.btnOK, simple)
- self.btnSizer.Layout()
- self._switchSizer.Layout()
- self.Fit()
- self.Thaw()
- self.applyChanges.emit()
- def OnSwitchMode(self, event):
- if self._switchSizer.IsShown(self._secondPanel):
- self._switchMode(simple=True)
- else:
- self._switchMode(simple=False)
- def ValidatorCallback(self, win):
- if self._switchSizer.IsShown(self._secondPanel):
- return
- if win == self._firstRaster.GetTextCtrl():
- GMessage(parent=self, message=_("Name of the first map is missing."))
- else:
- GMessage(parent=self, message=_("Name of the second map is missing."))
- def _ok(self):
- self._apply()
- self.Close()
- def _apply(self):
- # TODO check if not empty
- self.applyChanges.emit()
- def GetValues(self):
- """!Get raster maps"""
- if self.IsSimpleMode():
- return (self._firstRaster.GetValue(), self._secondRaster.GetValue())
- else:
- return (self._firstLayerList, self._secondLayerList)
- def IsSimpleMode(self):
- if self._switchSizer.IsShown(self._firstPanel):
- return True
- return False
- def GetFirstSimpleLmgr(self):
- return self._firstLmgr
- def GetSecondSimpleLmgr(self):
- return self._secondLmgr
- class PreferencesDialog(PreferencesBaseDialog):
- """!Mapswipe preferences dialog"""
- def __init__(self, parent, giface, title=_("Map Swipe settings"),
- settings=UserSettings):
- PreferencesBaseDialog.__init__(self, parent=parent, giface=giface, title=title,
- settings=settings, size=(-1, 300))
- # create notebook pages
- self._createMirrorModePage(self.notebook)
- self.SetMinSize(self.GetBestSize())
- self.SetSize(self.size)
- def _createMirrorModePage(self, notebook):
- """!Create notebook page for general settings"""
- panel = SP.ScrolledPanel(parent=notebook)
- panel.SetupScrolling(scroll_x=False, scroll_y=True)
- notebook.AddPage(page=panel, text=_("Mirror mode"))
- border = wx.BoxSizer(wx.VERTICAL)
- box = wx.StaticBox(parent=panel, label=" %s " % _("Mirrored cursor"))
- sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
- gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
- row = 0
- gridSizer.Add(item=wx.StaticText(parent=panel,
- label=_("Color:")),
- flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
- color = csel.ColourSelect(parent=panel,
- colour=UserSettings.Get(group='mapswipe',
- key='cursor', subkey='color'),
- size=globalvar.DIALOG_COLOR_SIZE)
- color.SetName('GetColour')
- self.winId['mapswipe:cursor:color'] = color.GetId()
- gridSizer.Add(item=color, pos=(row, 1), flag=wx.ALIGN_RIGHT)
- row += 1
- gridSizer.Add(item=wx.StaticText(parent=panel,
- label=_("Shape:")),
- flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
- cursors = wx.Choice(parent=panel,
- choices=self.settings.Get(group='mapswipe', key='cursor',
- subkey=['type', 'choices'], internal=True),
- name="GetSelection")
- cursors.SetSelection(self.settings.Get(group='mapswipe', key='cursor',
- subkey=['type', 'selection']))
- self.winId['mapswipe:cursor:type:selection'] = cursors.GetId()
- gridSizer.Add(item=cursors, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
- pos=(row, 1))
- row += 1
- gridSizer.Add(item=wx.StaticText(parent=panel,
- label=_("Line width:")),
- flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
- width = wx.SpinCtrl(parent=panel, min=1, max=10,
- initial=self.settings.Get(group='mapswipe', key='cursor',
- subkey='width'),
- name="GetValue")
- self.winId['mapswipe:cursor:width'] = width.GetId()
- gridSizer.Add(item=width, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
- pos=(row, 1))
- row += 1
- gridSizer.Add(item=wx.StaticText(parent=panel,
- label=_("Size:")),
- flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
- size = wx.SpinCtrl(parent=panel, min=4, max=50,
- initial=self.settings.Get(group='mapswipe', key='cursor',
- subkey='size'),
- name="GetValue")
- self.winId['mapswipe:cursor:size'] = size.GetId()
- gridSizer.Add(item=size, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
- pos=(row, 1))
- gridSizer.AddGrowableCol(1)
- sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=3)
- border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
- panel.SetSizer(border)
- return panel
|