Selaa lähdekoodia

wxGUI GCP Manager: reorganize code

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@42803 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 15 vuotta sitten
vanhempi
commit
e8a4254085

+ 232 - 68
gui/wxpython/gui_modules/gcpmanager.py

@@ -193,21 +193,22 @@ class GCPWizard(object):
             self.SrcMap.AddLayer(type=rendertype, command=cmdlist, l_active=True,
             self.SrcMap.AddLayer(type=rendertype, command=cmdlist, l_active=True,
                               name=utils.GetLayerNameFromCmd(cmdlist),
                               name=utils.GetLayerNameFromCmd(cmdlist),
                               l_hidden=False, l_opacity=1.0, l_render=False)
                               l_hidden=False, l_opacity=1.0, l_render=False)
-            
-            #
-            # add layer to target map
-            #
-            if maptype == 'cell':
-                rendertype = 'raster'
-                cmdlist = ['d.rast', 'map=%s' % tgt_map]
-            else: # -> vector layer
-                rendertype = 'vector'
-                cmdlist = ['d.vect', 'map=%s' % tgt_map]
-            
-            self.SwitchEnv('target')
-            self.TgtMap.AddLayer(type=rendertype, command=cmdlist, l_active=True,
-                              name=utils.GetLayerNameFromCmd(cmdlist),
-                              l_hidden=False, l_opacity=1.0, l_render=False)
+
+            if tgt_map:
+                #
+                # add layer to target map
+                #
+                if maptype == 'cell':
+                    rendertype = 'raster'
+                    cmdlist = ['d.rast', 'map=%s' % tgt_map]
+                else: # -> vector layer
+                    rendertype = 'vector'
+                    cmdlist = ['d.vect', 'map=%s' % tgt_map]
+                
+                self.SwitchEnv('target')
+                self.TgtMap.AddLayer(type=rendertype, command=cmdlist, l_active=True,
+                                  name=utils.GetLayerNameFromCmd(cmdlist),
+                                  l_hidden=False, l_opacity=1.0, l_render=False)
             
             
             #
             #
             # start GCP Manager
             # start GCP Manager
@@ -628,7 +629,7 @@ class DispMapPage(TitledPage):
 
 
         src_map = event.GetString()
         src_map = event.GetString()
 
 
-        if src_map == '' or tgt_map == '':
+        if src_map == '':
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
         else:
         else:
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
@@ -652,7 +653,7 @@ class DispMapPage(TitledPage):
 
 
         tgt_map = event.GetString()
         tgt_map = event.GetString()
 
 
-        if src_map == '' or tgt_map == '':
+        if src_map == '':
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
         else:
         else:
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
@@ -661,8 +662,8 @@ class DispMapPage(TitledPage):
         global src_map
         global src_map
         global tgt_map
         global tgt_map
 
 
-        if event.GetDirection() and (src_map == '' or tgt_map == ''):
-            wx.MessageBox(_('You must select maps in order to continue'))
+        if event.GetDirection() and (src_map == ''):
+            wx.MessageBox(_('You must select a source map in order to continue'))
             event.Veto()
             event.Veto()
             return
             return
 
 
@@ -709,11 +710,17 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
     Manages ground control points for georectifying. Calculates RMS statics.
     Manages ground control points for georectifying. Calculates RMS statics.
     Calls i.rectify or v.transform to georectify map.
     Calls i.rectify or v.transform to georectify map.
     """
     """
-    def __init__(self, parent, grwiz = None, mapdisp = None, id = wx.ID_ANY,
+    def __init__(self, parent, grwiz = None, id = wx.ID_ANY,
                  title = _("Manage Ground Control Points"),
                  title = _("Manage Ground Control Points"),
                  size = (700, 300), toolbars=["gcpdisp"], Map=None, lmgr=None):
                  size = (700, 300), toolbars=["gcpdisp"], Map=None, lmgr=None):
 
 
         self.grwiz = grwiz # GR Wizard
         self.grwiz = grwiz # GR Wizard
+
+        if tgt_map == '':
+            self.show_target = False
+        else:
+            self.show_target = True
+        
         #wx.Frame.__init__(self, parent, id, title, size = size, name = "GCPFrame")
         #wx.Frame.__init__(self, parent, id, title, size = size, name = "GCPFrame")
         MapFrame.__init__(self, parent, id, title, size = size,
         MapFrame.__init__(self, parent, id, title, size = size,
                             Map=Map, toolbars=["gcpdisp"], lmgr=lmgr, name='GCPMapWindow')
                             Map=Map, toolbars=["gcpdisp"], lmgr=lmgr, name='GCPMapWindow')
@@ -723,8 +730,6 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
         #
         #
         self.parent = parent # GMFrame
         self.parent = parent # GMFrame
         self.parent.gcpmanagement = self
         self.parent.gcpmanagement = self
-        
-        self.mapdisp = self # XY-location Map Display
 
 
         self.grassdatabase = self.grwiz.grassdatabase
         self.grassdatabase = self.grwiz.grassdatabase
 
 
@@ -780,6 +785,8 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
 
 
         # polynomial order transformation for georectification
         # polynomial order transformation for georectification
         self.gr_order = 1 
         self.gr_order = 1 
+        # region clipping for georectified map
+        self.clip_to_region = False
         # number of GCPs selected to be used for georectification (checked)
         # number of GCPs selected to be used for georectification (checked)
         self.GCPcount = 0
         self.GCPcount = 0
         # forward RMS error
         # forward RMS error
@@ -795,8 +802,7 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
                                    0.0,      # target north
                                    0.0,      # target north
                                    0.0,      # forward error
                                    0.0,      # forward error
                                    0.0 ] )   # backward error
                                    0.0 ] )   # backward error
-        # region clipping for georectified map
-        self.clip_to_region = False
+
         # init vars to highlight high RMS errors
         # init vars to highlight high RMS errors
         self.highest_only = True
         self.highest_only = True
         self.show_unused =  True
         self.show_unused =  True
@@ -915,8 +921,8 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
                                    0.0,                # forward error
                                    0.0,                # forward error
                                    0.0 ] )             # backward error
                                    0.0 ] )             # backward error
 
 
-        if self.mapdisp.statusbarWin['toggle'].GetSelection() == 7: # go to
-            self.mapdisp.StatusbarUpdate()
+        if self.statusbarWin['toggle'].GetSelection() == 7: # go to
+            self.StatusbarUpdate()
 
 
     def DeleteGCP(self, event):
     def DeleteGCP(self, event):
         """
         """
@@ -929,12 +935,38 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
                           caption=_("Delete GCP"), style=wx.OK | wx.ICON_INFORMATION)
                           caption=_("Delete GCP"), style=wx.OK | wx.ICON_INFORMATION)
             return
             return
 
 
-        item = self.list.DeleteGCPItem()
-        del self.mapcoordlist[item]
+        key = self.list.DeleteGCPItem()
+        del self.mapcoordlist[key]
+
+        # update key and GCP number
+        for newkey in range(key, len(self.mapcoordlist)):
+            index = self.list.FindItemData(-1, newkey + 1)
+            self.mapcoordlist[newkey][0] = newkey
+            self.list.SetStringItem(index, 0, str(newkey))
+            self.list.SetItemData(index, newkey)
+
+        # update selected
+        if self.list.GetItemCount() > 0:
+            if self.list.selected < self.list.GetItemCount():
+                self.list.selectedkey = self.list.GetItemData(self.list.selected)
+            else:
+                self.list.selected = self.list.GetItemCount() - 1
+                self.list.selectedkey = self.list.GetItemData(self.list.selected)
+                
+            self.list.SetItemState(self.list.selected,
+                              wx.LIST_STATE_SELECTED,
+                              wx.LIST_STATE_SELECTED)
+        else:
+            self.list.selected = wx.NOT_FOUND
+            self.list.selectedkey = -1
+
+        self.UpdateColours()
 
 
-        if self.mapdisp.statusbarWin['toggle'].GetSelection() == 7: # go to
-            self.mapdisp.StatusbarUpdate()
-            self.statusbarWin['goto'].SetValue(0)
+        if self.statusbarWin['toggle'].GetSelection() == 7: # go to
+            self.StatusbarUpdate()
+            if self.list.selectedkey > 0:
+                self.statusbarWin['goto'].SetValue(self.list.selectedkey)
+            #self.statusbarWin['goto'].SetValue(0)
 
 
     def ClearGCP(self, event):
     def ClearGCP(self, event):
         """
         """
@@ -978,11 +1010,11 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
         mapWin = None
         mapWin = None
         
         
         if coordtype == 'source':
         if coordtype == 'source':
-            mapWin = self.mapdisp.SrcMapWindow
+            mapWin = self.SrcMapWindow
             e_idx = 1
             e_idx = 1
             n_idx = 2
             n_idx = 2
         elif coordtype == 'target':
         elif coordtype == 'target':
-            mapWin = self.mapdisp.TgtMapWindow
+            mapWin = self.TgtMapWindow
             e_idx = 3
             e_idx = 3
             n_idx = 4
             n_idx = 4
 
 
@@ -1058,7 +1090,7 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
 
 
         key = self.list.GetItemData(index)
         key = self.list.GetItemData(index)
         if confirm:
         if confirm:
-            if self.mapdisp.MapWindow == self.mapdisp.SrcMapWindow:
+            if self.MapWindow == self.SrcMapWindow:
                 currloc = _("source")
                 currloc = _("source")
             else:
             else:
                 currloc = _("target")
                 currloc = _("target")
@@ -1141,8 +1173,8 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
         
         
         self.GCPcount = 0
         self.GCPcount = 0
 
 
-        sourceMapWin = self.mapdisp.SrcMapWindow
-        targetMapWin = self.mapdisp.TgtMapWindow
+        sourceMapWin = self.SrcMapWindow
+        targetMapWin = self.TgtMapWindow
         #targetMapWin = self.parent.curr_page.maptree.mapdisplay.MapWindow
         #targetMapWin = self.parent.curr_page.maptree.mapdisplay.MapWindow
 
 
         if not sourceMapWin:
         if not sourceMapWin:
@@ -1437,10 +1469,11 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
         if self.highest_only and highest_fwd_err > 0.0:
         if self.highest_only and highest_fwd_err > 0.0:
             self.list.SetItemTextColour(highest_idx, wx.RED)
             self.list.SetItemTextColour(highest_idx, wx.RED)
 
 
-        sourceMapWin = self.mapdisp.SrcMapWindow
-        targetMapWin = self.mapdisp.TgtMapWindow
+        sourceMapWin = self.SrcMapWindow
         sourceMapWin.UpdateMap(render=srcrender, renderVector=srcrenderVector)
         sourceMapWin.UpdateMap(render=srcrender, renderVector=srcrenderVector)
-        targetMapWin.UpdateMap(render=tgtrender, renderVector=tgtrenderVector)
+        if self.show_target:
+            targetMapWin = self.TgtMapWindow
+            targetMapWin.UpdateMap(render=tgtrender, renderVector=tgtrenderVector)
 
 
     def OnQuit(self, event):
     def OnQuit(self, event):
         """!Quit georectifier"""
         """!Quit georectifier"""
@@ -1588,10 +1621,11 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
         self.bkw_rmserror = round((sumsq_bkw_err/GCPcount)**0.5,4)
         self.bkw_rmserror = round((sumsq_bkw_err/GCPcount)**0.5,4)
         self.list.ResizeColumns()
         self.list.ResizeColumns()
 
 
-        sourceMapWin = self.mapdisp.SrcMapWindow
-        targetMapWin = self.mapdisp.TgtMapWindow
+        sourceMapWin = self.SrcMapWindow
         sourceMapWin.UpdateMap(render=False, renderVector=False)
         sourceMapWin.UpdateMap(render=False, renderVector=False)
-        targetMapWin.UpdateMap(render=False, renderVector=False)
+        if self.show_target:
+            targetMapWin = self.TgtMapWindow
+            targetMapWin.UpdateMap(render=False, renderVector=False)
 
 
     def GetNewExtend(self, region, map = None):
     def GetNewExtend(self, region, map = None):
 
 
@@ -1689,7 +1723,128 @@ class GCP(MapFrame, wx.Frame, ColumnSorterMixin):
                         quiet = True,
                         quiet = True,
                         parent = self,
                         parent = self,
                         entry = 'wxGUI.GCP_Manager')
                         entry = 'wxGUI.GCP_Manager')
+
+    def OnUpdateActive(self, event):
+
+        if self.activemap.GetSelection() == 0:
+            self.MapWindow = self.SrcMapWindow
+            self.Map = self.SrcMap
+        else:
+            self.MapWindow = self.TgtMapWindow
+            self.Map = self.TgtMap
+
+        self.UpdateActive(self.MapWindow)
+
+    def UpdateActive(self, win):
+
+        # optionally disable tool zoomback tool
+        self.toolbars['gcpdisp'].Enable('zoomback', enable = (len(self.MapWindow.zoomhistory) > 1))
+
+        self.activemap.SetSelection(win == self.TgtMapWindow)
+        self.StatusbarUpdate()
+
+    def AdjustMap(self, newreg):
+        """!Adjust map window to new extents
+        """
+
+        # adjust map window
+        self.Map.region['n'] = newreg['n']
+        self.Map.region['s'] = newreg['s']
+        self.Map.region['e'] = newreg['e']
+        self.Map.region['w'] = newreg['w']
+
+        self.MapWindow.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
+                 self.Map.region['e'], self.Map.region['w'])
+
+        # LL locations
+        if self.Map.projinfo['proj'] == 'll':
+            if newreg['n'] > 90.0:
+                newreg['n'] = 90.0
+            if newreg['s'] < -90.0:
+                newreg['s'] = -90.0
+        
+        ce = newreg['w'] + (newreg['e'] - newreg['w']) / 2
+        cn = newreg['s'] + (newreg['n'] - newreg['s']) / 2
         
         
+        # calculate new center point and display resolution
+        self.Map.region['center_easting'] = ce
+        self.Map.region['center_northing'] = cn
+        self.Map.region["ewres"] = (newreg['e'] - newreg['w']) / self.Map.width
+        self.Map.region["nsres"] = (newreg['n'] - newreg['s']) / self.Map.height
+        self.Map.AlignExtentFromDisplay()
+
+        self.MapWindow.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
+                 self.Map.region['e'], self.Map.region['w'])
+
+        if self.MapWindow.redrawAll is False:
+            self.MapWindow.redrawAll = True
+
+        self.MapWindow.UpdateMap()
+        self.StatusbarUpdate()
+
+    def OnZoomToSource(self, event):
+        """!Set target map window to match extents of source map window
+        """
+
+        if not self.MapWindow == self.TgtMapWindow:
+            self.MapWindow = self.TgtMapWindow
+            self.Map = self.TgtMap
+            self.UpdateActive(self.TgtMapWindow)
+
+        # get new N, S, E, W for target
+        newreg = self.GetNewExtend(self.SrcMap.region, 'source')
+        self.AdjustMap(newreg)
+
+    def OnZoomToTarget(self, event):
+        """!Set source map window to match extents of target map window
+        """
+
+        if not self.MapWindow == self.SrcMapWindow:
+            self.MapWindow = self.SrcMapWindow
+            self.Map = self.SrcMap
+            self.UpdateActive(self.SrcMapWindow)
+
+        # get new N, S, E, W for target
+        newreg = self.GetNewExtend(self.TgtMap.region, 'target')
+        self.AdjustMap(newreg)
+
+    def OnZoomMenuGCP(self, event):
+        """!Popup Zoom menu
+        """
+        point = wx.GetMousePosition()
+        zoommenu = wx.Menu()
+        # Add items to the menu
+
+        zoomsource = wx.MenuItem(zoommenu, wx.ID_ANY, _('Adjust source display to target display'))
+        zoommenu.AppendItem(zoomsource)
+        self.Bind(wx.EVT_MENU, self.OnZoomToTarget, zoomsource)
+
+        zoomtarget = wx.MenuItem(zoommenu, wx.ID_ANY, _('Adjust target display to source display'))
+        zoommenu.AppendItem(zoomtarget)
+        self.Bind(wx.EVT_MENU, self.OnZoomToSource, zoomtarget)
+
+        # Popup the menu. If an item is selected then its handler
+        # will be called before PopupMenu returns.
+        self.PopupMenu(zoommenu)
+        zoommenu.Destroy()
+        
+    def OnDispResize(self, event):
+        """!GCP Map Display resized, adjust Map Windows
+        """
+        if self.toolbars['gcpdisp']:
+            srcwidth, srcheight = self.SrcMapWindow.GetSize()
+            tgtwidth, tgtheight = self.TgtMapWindow.GetSize()
+            tgtwidth = (srcwidth + tgtwidth) / 2
+            self._mgr.GetPane("target").Hide()
+            self._mgr.Update()
+            self.TgtMapWindow.SetSize((tgtwidth, tgtheight))
+            self._mgr.GetPane("source").BestSize((tgtwidth, srcheight))
+            self._mgr.GetPane("target").BestSize((tgtwidth, tgtheight))
+            if self.show_target:
+                self._mgr.GetPane("target").Show()
+            self._mgr.Update()
+        pass
+
 class GCPList(wx.ListCtrl,
 class GCPList(wx.ListCtrl,
               CheckListCtrlMixin,
               CheckListCtrlMixin,
               ListCtrlAutoWidthMixin):
               ListCtrlAutoWidthMixin):
@@ -1781,10 +1936,11 @@ class GCPList(wx.ListCtrl,
 
 
         if self.render:
         if self.render:
             # redraw points
             # redraw points
-            sourceMapWin = self.gcp.mapdisp.SrcMapWindow
-            targetMapWin = self.gcp.mapdisp.TgtMapWindow
+            sourceMapWin = self.gcp.SrcMapWindow
             sourceMapWin.UpdateMap(render=False, renderVector=False)
             sourceMapWin.UpdateMap(render=False, renderVector=False)
-            targetMapWin.UpdateMap(render=False, renderVector=False)
+            if self.gcp.show_target:
+                targetMapWin = self.gcp.TgtMapWindow
+                targetMapWin.UpdateMap(render=False, renderVector=False)
 
 
         pass
         pass
     
     
@@ -1820,17 +1976,10 @@ class GCPList(wx.ListCtrl,
         if self.selected == wx.NOT_FOUND:
         if self.selected == wx.NOT_FOUND:
             return
             return
 
 
+        key = self.GetItemData(self.selected)
         self.DeleteItem(self.selected)
         self.DeleteItem(self.selected)
 
 
-        if self.GetItemCount() > 0:
-            self.selected = self.GetItemCount() - 1
-            self.SetItemState(self.selected,
-                              wx.LIST_STATE_SELECTED,
-                              wx.LIST_STATE_SELECTED)
-        else:
-            self.selected = wx.NOT_FOUND
-
-        return self.selected
+        return key
         
         
     def ResizeColumns(self):
     def ResizeColumns(self):
         """!Resize columns"""
         """!Resize columns"""
@@ -1855,10 +2004,11 @@ class GCPList(wx.ListCtrl,
         if self.render and self.selected != event.GetIndex():
         if self.render and self.selected != event.GetIndex():
             self.selected = event.GetIndex()
             self.selected = event.GetIndex()
             self.selectedkey = self.GetItemData(self.selected)
             self.selectedkey = self.GetItemData(self.selected)
-            sourceMapWin = self.gcp.mapdisp.SrcMapWindow
-            targetMapWin = self.gcp.mapdisp.TgtMapWindow
+            sourceMapWin = self.gcp.SrcMapWindow
             sourceMapWin.UpdateMap(render=False, renderVector=False)
             sourceMapWin.UpdateMap(render=False, renderVector=False)
-            targetMapWin.UpdateMap(render=False, renderVector=False)
+            if self.gcp.show_target:
+                targetMapWin = self.gcp.TgtMapWindow
+                targetMapWin.UpdateMap(render=False, renderVector=False)
 
 
         event.Skip()
         event.Skip()
 
 
@@ -2150,8 +2300,8 @@ class GrSettingsDialog(wx.Dialog):
         # initialize variables
         # initialize variables
         #
         #
         self.parent = parent
         self.parent = parent
-        self.new_src_map = None
-        self.new_tgt_map = None
+        self.new_src_map = src_map
+        self.new_tgt_map = tgt_map
         self.sdfactor = 0
         self.sdfactor = 0
 
 
         self.symbol = {}
         self.symbol = {}
@@ -2462,7 +2612,7 @@ class GrSettingsDialog(wx.Dialog):
 
 
         tmp_map = event.GetString()
         tmp_map = event.GetString()
 
 
-        if not tmp_map == '' and not tmp_map == tgt_map:
+        if not tmp_map == tgt_map:
             self.new_tgt_map = tmp_map
             self.new_tgt_map = tmp_map
 
 
     def OnClipRegion(self, event):
     def OnClipRegion(self, event):
@@ -2506,7 +2656,7 @@ class GrSettingsDialog(wx.Dialog):
         srcrenderVector = False
         srcrenderVector = False
         tgtrender = False
         tgtrender = False
         tgtrenderVector = False
         tgtrenderVector = False
-        if self.new_src_map:
+        if self.new_src_map != src_map:
             # remove old layer
             # remove old layer
             layers = self.parent.grwiz.SrcMap.GetListOfLayers()
             layers = self.parent.grwiz.SrcMap.GetListOfLayers()
             self.parent.grwiz.SrcMap.DeleteLayer(layers[0])
             self.parent.grwiz.SrcMap.DeleteLayer(layers[0])
@@ -2521,17 +2671,31 @@ class GrSettingsDialog(wx.Dialog):
             self.parent.grwiz.SwitchEnv('target')
             self.parent.grwiz.SwitchEnv('target')
             srcrender = True
             srcrender = True
 
 
-        if self.new_tgt_map:
+        if self.new_tgt_map != tgt_map:
             # remove old layer
             # remove old layer
             layers = self.parent.grwiz.TgtMap.GetListOfLayers()
             layers = self.parent.grwiz.TgtMap.GetListOfLayers()
-            self.parent.grwiz.TgtMap.DeleteLayer(layers[0])
+            if layers:
+                self.parent.grwiz.TgtMap.DeleteLayer(layers[0])
             tgt_map = self.new_tgt_map
             tgt_map = self.new_tgt_map
-            cmdlist = ['d.rast', 'map=%s' % tgt_map]
-            self.parent.grwiz.TgtMap.AddLayer(type='raster', command=cmdlist, l_active=True,
-                              name=utils.GetLayerNameFromCmd(cmdlist),
-                              l_hidden=False, l_opacity=1.0, l_render=False)
 
 
-            tgtrender = True
+            if tgt_map != '':
+                cmdlist = ['d.rast', 'map=%s' % tgt_map]
+                self.parent.grwiz.TgtMap.AddLayer(type='raster', command=cmdlist, l_active=True,
+                                  name=utils.GetLayerNameFromCmd(cmdlist),
+                                  l_hidden=False, l_opacity=1.0, l_render=False)
+
+                tgtrender = True
+                if self.parent.show_target == False:
+                    self.parent.show_target = True
+                    self.parent._mgr.GetPane("target").Show()
+                    self.parent._mgr.Update()
+                    self.parent.toolbars['gcpdisp'].Enable('zoommenu', enable = True)
+            else: # tgt_map == ''
+                if self.parent.show_target == True:
+                    self.parent.show_target = False
+                    self.parent._mgr.GetPane("target").Hide()
+                    self.parent._mgr.Update()
+                    self.parent.toolbars['gcpdisp'].Enable('zoommenu', enable = False)
 
 
         self.parent.UpdateColours(srcrender, srcrenderVector, tgtrender, tgtrenderVector)
         self.parent.UpdateColours(srcrender, srcrenderVector, tgtrender, tgtrenderVector)
 
 

+ 30 - 143
gui/wxpython/gui_modules/gcpmapdisp.py

@@ -146,7 +146,7 @@ class MapFrame(wx.Frame):
                           'gcpdisp' : None, 
                           'gcpdisp' : None, 
                           'gcpman' : None, 
                           'gcpman' : None, 
                           'nviz' : None }
                           'nviz' : None }
-        self.activemap = None
+
         for toolb in toolbars:
         for toolb in toolbars:
             self.AddToolbar(toolb)
             self.AddToolbar(toolb)
 
 
@@ -238,8 +238,8 @@ class MapFrame(wx.Frame):
             self.statusbarWin['goto'] = wx.TextCtrl(parent=self.statusbar, id=wx.ID_ANY,
             self.statusbarWin['goto'] = wx.TextCtrl(parent=self.statusbar, id=wx.ID_ANY,
                                                    value="", style=wx.TE_PROCESS_ENTER,
                                                    value="", style=wx.TE_PROCESS_ENTER,
                                                     size=(100, -1))
                                                     size=(100, -1))
-        self.statusbar.Bind(wx.EVT_TEXT_ENTER, self.OnGoTo, self.statusbarWin['goto'])
         self.statusbarWin['goto'].Hide()
         self.statusbarWin['goto'].Hide()
+        self.statusbar.Bind(wx.EVT_TEXT_ENTER, self.OnGoTo, self.statusbarWin['goto'])
 
 
         # projection
         # projection
         self.statusbarWin['projection'] = wx.CheckBox(parent=self.statusbar, id=wx.ID_ANY,
         self.statusbarWin['projection'] = wx.CheckBox(parent=self.statusbar, id=wx.ID_ANY,
@@ -306,7 +306,6 @@ class MapFrame(wx.Frame):
         # Update fancy gui style
         # Update fancy gui style
         #
         #
         if self.toolbars['gcpdisp']:
         if self.toolbars['gcpdisp']:
-        #if (0):
             # AuiManager wants a CentrePane , workaround to get two equally sized windows
             # AuiManager wants a CentrePane , workaround to get two equally sized windows
             self.list = self.CreateGCPList()
             self.list = self.CreateGCPList()
 
 
@@ -335,7 +334,8 @@ class MapFrame(wx.Frame):
             self.TgtMapWindow.SetSize((tgtwidth, tgtheight))
             self.TgtMapWindow.SetSize((tgtwidth, tgtheight))
             self._mgr.GetPane("source").BestSize((tgtwidth, tgtheight))
             self._mgr.GetPane("source").BestSize((tgtwidth, tgtheight))
             self._mgr.GetPane("target").BestSize((tgtwidth, tgtheight))
             self._mgr.GetPane("target").BestSize((tgtwidth, tgtheight))
-            self._mgr.GetPane("target").Show()
+            if self.show_target:
+                self._mgr.GetPane("target").Show()
         else:
         else:
             self._mgr.AddPane(self.MapWindow, wx.aui.AuiPaneInfo().CentrePane().
             self._mgr.AddPane(self.MapWindow, wx.aui.AuiPaneInfo().CentrePane().
                           Dockable(False).BestSize((-1,-1)).
                           Dockable(False).BestSize((-1,-1)).
@@ -389,7 +389,8 @@ class MapFrame(wx.Frame):
         Currently known toolbars are:
         Currently known toolbars are:
          - 'map'     - basic map toolbar
          - 'map'     - basic map toolbar
          - 'vdigit'  - vector digitizer
          - 'vdigit'  - vector digitizer
-         - 'gcpdisp'  - GCP Manager
+         - 'gcpdisp' - GCP Manager, Display
+         - 'gcpman'  - GCP Manager, points management
          - 'georect' - georectifier
          - 'georect' - georectifier
          - 'nviz'    - 3D view mode
          - 'nviz'    - 3D view mode
         """
         """
@@ -456,6 +457,9 @@ class MapFrame(wx.Frame):
                               BottomDockable(False).TopDockable(True).
                               BottomDockable(False).TopDockable(True).
                               CloseButton(False).Layer(2))
                               CloseButton(False).Layer(2))
 
 
+            if self.show_target == False:
+                self.toolbars['gcpdisp'].Enable('zoommenu', enable = False)
+
             self.toolbars['gcpman'] = toolbars.GCPManToolbar(self)
             self.toolbars['gcpman'] = toolbars.GCPManToolbar(self)
 
 
             self._mgr.AddPane(self.toolbars['gcpman'],
             self._mgr.AddPane(self.toolbars['gcpman'],
@@ -637,7 +641,12 @@ class MapFrame(wx.Frame):
         """
         """
         if self._layerManager and \
         if self._layerManager and \
                 self._layerManager.georectifying:
                 self._layerManager.georectifying:
-            # in georectifying session; display used to get get geographic
+            # in georectifying session; display used to get geographic
+            # coordinates for GCPs
+            self.OnPointer(event)
+        elif self._layerManager and \
+                self._layerManager.gcpmanagement:
+            # in georectifying session; display used to get geographic
             # coordinates for GCPs
             # coordinates for GCPs
             self.OnPointer(event)
             self.OnPointer(event)
         else:
         else:
@@ -678,25 +687,6 @@ class MapFrame(wx.Frame):
         # update statusbar
         # update statusbar
         self.StatusbarUpdate()
         self.StatusbarUpdate()
 
 
-    def OnDispResize(self, event):
-        """!GCP Map Display resized, adjust Map Windows
-        """
-        if self.toolbars['gcpdisp']:
-            # FIXME: does not work when reducing Map Display width
-            # tried a lot of MinSize, BestSize, also for both source and target map window
-            srcwidth, srcheight = self.SrcMapWindow.GetSize()
-            tgtwidth, tgtheight = self.TgtMapWindow.GetSize()
-            tgtwidth = (srcwidth + tgtwidth) / 2
-            self._mgr.GetPane("target").Hide()
-            self._mgr.Update()
-            self.TgtMapWindow.SetSize((tgtwidth, tgtheight))
-            self._mgr.GetPane("source").BestSize((tgtwidth, srcheight))
-            self._mgr.GetPane("target").BestSize((tgtwidth, tgtheight))
-            self._mgr.GetPane("target").Show()
-            self._mgr.Update()
-
-        pass
-
     def OnPointer(self, event):
     def OnPointer(self, event):
         """!Pointer button clicked
         """!Pointer button clicked
         """
         """
@@ -969,14 +959,15 @@ class MapFrame(wx.Frame):
             # redraw map
             # redraw map
             self.SrcMapWindow.UpdateMap()
             self.SrcMapWindow.UpdateMap()
 
 
-            # Target MapWindow:
-            begin = (self.mapcoordlist[GCPNo][3], self.mapcoordlist[GCPNo][4])
-            begin = self.TgtMapWindow.Cell2Pixel(begin)
-            end = begin
-            self.TgtMapWindow.Zoom(begin, end, 0)
+            if self.show_target:
+                # Target MapWindow:
+                begin = (self.mapcoordlist[GCPNo][3], self.mapcoordlist[GCPNo][4])
+                begin = self.TgtMapWindow.Cell2Pixel(begin)
+                end = begin
+                self.TgtMapWindow.Zoom(begin, end, 0)
 
 
-            # redraw map
-            self.TgtMapWindow.UpdateMap()
+                # redraw map
+                self.TgtMapWindow.UpdateMap()
 
 
         else:
         else:
             try:
             try:
@@ -1352,12 +1343,12 @@ class MapFrame(wx.Frame):
             ltype = [{ 'ext' : 'ppm', 'type' : -1 },
             ltype = [{ 'ext' : 'ppm', 'type' : -1 },
                      { 'ext' : 'tif', 'type' : wx.BITMAP_TYPE_TIF }]
                      { 'ext' : 'tif', 'type' : wx.BITMAP_TYPE_TIF }]
         else:
         else:
-            img = self.MapWindow.img 
-            if not img: 
-                gcmd.GMessage(parent = self, 
-                              message = _("Nothing to render (empty map). Operation canceled."), 
-                              msgType = 'info') 
-                return 
+            img = self.MapWindow.img
+            if not img:
+                gcmd.GMessage(parent = self,
+                              message = _("Nothing to render (empty map). Operation canceled."),
+                              msgType = 'info')
+                return
             filetype, ltype = gdialogs.GetImageHandlers(img)
             filetype, ltype = gdialogs.GetImageHandlers(img)
 
 
         # get size
         # get size
@@ -1553,7 +1544,7 @@ class MapFrame(wx.Frame):
                         continue
                         continue
                     vect.append(vector)
                     vect.append(vector)
                 vectstr = ','.join(vect)
                 vectstr = ','.join(vect)
-                
+            
             if len(vectstr) <= 1:
             if len(vectstr) <= 1:
                 self._layerManager.goutput.WriteCmdLog("Nothing to query.")
                 self._layerManager.goutput.WriteCmdLog("Nothing to query.")
                 return
                 return
@@ -2146,71 +2137,6 @@ class MapFrame(wx.Frame):
         """
         """
         self.MapWindow.SaveDisplayRegion()
         self.MapWindow.SaveDisplayRegion()
         
         
-    def AdjustMap(self, newreg):
-        """!Adjust map window to new extents
-        """
-
-        # adjust map window
-        self.Map.region['n'] = newreg['n']
-        self.Map.region['s'] = newreg['s']
-        self.Map.region['e'] = newreg['e']
-        self.Map.region['w'] = newreg['w']
-
-        self.MapWindow.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
-                 self.Map.region['e'], self.Map.region['w'])
-
-        # LL locations
-        if self.Map.projinfo['proj'] == 'll':
-            if newreg['n'] > 90.0:
-                newreg['n'] = 90.0
-            if newreg['s'] < -90.0:
-                newreg['s'] = -90.0
-        
-        ce = newreg['w'] + (newreg['e'] - newreg['w']) / 2
-        cn = newreg['s'] + (newreg['n'] - newreg['s']) / 2
-        
-        # calculate new center point and display resolution
-        self.Map.region['center_easting'] = ce
-        self.Map.region['center_northing'] = cn
-        self.Map.region["ewres"] = (newreg['e'] - newreg['w']) / self.Map.width
-        self.Map.region["nsres"] = (newreg['n'] - newreg['s']) / self.Map.height
-        self.Map.AlignExtentFromDisplay()
-
-        self.MapWindow.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
-                 self.Map.region['e'], self.Map.region['w'])
-
-        if self.MapWindow.redrawAll is False:
-            self.MapWindow.redrawAll = True
-
-        self.MapWindow.UpdateMap()
-        self.StatusbarUpdate()
-
-    def OnZoomToSource(self, event):
-        """!Set target map window to match extents of source map window
-        """
-
-        if not self.MapWindow == self.TgtMapWindow:
-            self.MapWindow = self.TgtMapWindow
-            self.Map = self.TgtMap
-            self.UpdateActive(self.TgtMapWindow)
-
-        # get new N, S, E, W for target
-        newreg = self.GetNewExtend(self.SrcMap.region, 'source')
-        self.AdjustMap(newreg)
-
-    def OnZoomToTarget(self, event):
-        """!Set source map window to match extents of target map window
-        """
-
-        if not self.MapWindow == self.SrcMapWindow:
-            self.MapWindow = self.SrcMapWindow
-            self.Map = self.SrcMap
-            self.UpdateActive(self.SrcMapWindow)
-
-        # get new N, S, E, W for target
-        newreg = self.GetNewExtend(self.TgtMap.region, 'target')
-        self.AdjustMap(newreg)
-
     def OnZoomMenu(self, event):
     def OnZoomMenu(self, event):
         """!Popup Zoom menu
         """!Popup Zoom menu
         """
         """
@@ -2243,26 +2169,6 @@ class MapFrame(wx.Frame):
         self.PopupMenu(zoommenu)
         self.PopupMenu(zoommenu)
         zoommenu.Destroy()
         zoommenu.Destroy()
         
         
-    def OnZoomMenuGCP(self, event):
-        """!Popup Zoom menu
-        """
-        point = wx.GetMousePosition()
-        zoommenu = wx.Menu()
-        # Add items to the menu
-
-        zoomsource = wx.MenuItem(zoommenu, wx.ID_ANY, _('Adjust source display to target display'))
-        zoommenu.AppendItem(zoomsource)
-        self.Bind(wx.EVT_MENU, self.OnZoomToTarget, zoomsource)
-
-        zoomtarget = wx.MenuItem(zoommenu, wx.ID_ANY, _('Adjust target display to source display'))
-        zoommenu.AppendItem(zoomtarget)
-        self.Bind(wx.EVT_MENU, self.OnZoomToSource, zoomtarget)
-
-        # Popup the menu. If an item is selected then its handler
-        # will be called before PopupMenu returns.
-        self.PopupMenu(zoommenu)
-        zoommenu.Destroy()
-        
     def SetProperties(self, render=False, mode=0, showCompExtent=False,
     def SetProperties(self, render=False, mode=0, showCompExtent=False,
                       constrainRes=False, projection=False):
                       constrainRes=False, projection=False):
         """!Set properies of map display window"""
         """!Set properies of map display window"""
@@ -2275,25 +2181,6 @@ class MapFrame(wx.Frame):
         if showCompExtent:
         if showCompExtent:
             self.MapWindow.regionCoords = []
             self.MapWindow.regionCoords = []
         
         
-    def OnUpdateActive(self, event):
-
-        if self.activemap.GetSelection() == 0:
-            self.MapWindow = self.SrcMapWindow
-            self.Map = self.SrcMap
-        else:
-            self.MapWindow = self.TgtMapWindow
-            self.Map = self.TgtMap
-
-        self.UpdateActive(self.MapWindow)
-
-    def UpdateActive(self, win):
-
-        # optionally disable tool zoomback tool
-        self.toolbars['gcpdisp'].Enable('zoomback', enable = (len(self.MapWindow.zoomhistory) > 1))
-
-        self.activemap.SetSelection(win == self.TgtMapWindow)
-        self.StatusbarUpdate()
-
     def IsStandalone(self):
     def IsStandalone(self):
         """!Check if Map display is standalone"""
         """!Check if Map display is standalone"""
         if self._layerManager:
         if self._layerManager:

+ 1 - 6
gui/wxpython/gui_modules/mapdisp.py

@@ -520,12 +520,7 @@ class MapFrame(wx.Frame):
         """
         """
         if self._layerManager and \
         if self._layerManager and \
                 self._layerManager.georectifying:
                 self._layerManager.georectifying:
-            # in georectifying session; display used to get get geographic
-            # coordinates for GCPs
-            self.OnPointer(event)
-        elif self._layerManager and \
-                self._layerManager.gcpmanagement:
-            # in georectifying session; display used to get get geographic
+            # in georectifying session; display used to get geographic
             # coordinates for GCPs
             # coordinates for GCPs
             self.OnPointer(event)
             self.OnPointer(event)
         else:
         else: