Fixing issues regarding control navigation in EditorPanel and CustomGrid
authorlaurent
Sun, 18 Mar 2012 18:11:46 +0100
changeset 655 435e2d8ee580
parent 654 f8445d00613d
child 656 ff38b7250b64
Fixing issues regarding control navigation in EditorPanel and CustomGrid
RessourceEditor.py
controls/CustomGrid.py
controls/DurationCellEditor.py
controls/EditorPanel.py
controls/LocationCellEditor.py
--- a/RessourceEditor.py	Sun Mar 18 15:37:04 2012 +0100
+++ b/RessourceEditor.py	Sun Mar 18 18:11:46 2012 +0100
@@ -270,7 +270,7 @@
 
     def _init_Editor(self, prnt):
         self.Editor = wx.Panel(id=ID_RESOURCEEDITORPANEL, name='ResourceEditor', parent=prnt,
-              size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
+              size=wx.Size(0, 0), style=wx.SUNKEN_BORDER|wx.TAB_TRAVERSAL)
         
         self.staticText1 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT1,
               label=_(u'Tasks:'), name='staticText2', parent=self.Editor, pos=wx.Point(0,
@@ -322,11 +322,11 @@
         
         self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^',
               name='UpInstanceButton', parent=self.Editor, pos=wx.Point(0, 0),
-              size=wx.Size(32, 32), style=0)
+              size=wx.Size(32, -1), style=0)
         
         self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v',
               name='DownInstanceButton', parent=self.Editor, pos=wx.Point(0, 0),
-              size=wx.Size(32, 32), style=0)
+              size=wx.Size(32, -1), style=0)
         
         self._init_sizers()
 
@@ -496,7 +496,7 @@
         self.RefreshModel()
         colname = self.TasksTable.GetColLabelValue(col, False)
         if colname in ["Triggering", "Name"]:
-            wx.CallAfter(self.RefreshView)
+            wx.CallAfter(self.RefreshView, False)
         event.Skip()
 
     def OnInstancesGridCellChange(self, event):
--- a/controls/CustomGrid.py	Sun Mar 18 15:37:04 2012 +0100
+++ b/controls/CustomGrid.py	Sun Mar 18 18:11:46 2012 +0100
@@ -52,6 +52,7 @@
         
         if wx.VERSION >= (2, 6, 0):
             self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell)
+            self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden)
         else:
             wx.grid.EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
@@ -151,6 +152,10 @@
         wx.CallAfter(self.RefreshButtons)
         event.Skip()
 
+    def OnEditorHidden(self, event):
+        wx.CallAfter(self.SetFocus)
+        event.Skip()
+
     def OnKeyDown(self, event):
         key_handled = False
         keycode = event.GetKeyCode()
--- a/controls/DurationCellEditor.py	Sun Mar 18 15:37:04 2012 +0100
+++ b/controls/DurationCellEditor.py	Sun Mar 18 18:11:46 2012 +0100
@@ -71,7 +71,10 @@
     def __init__(self, parent):
         self._init_ctrls(parent)
         
+        self.Default = None
+        
     def SetValue(self, value):
+        self.Default = value
         self.Duration.SetValue(value)
     
     def GetValue(self):
@@ -94,9 +97,11 @@
 
     def OnDurationChar(self, event):
         keycode = event.GetKeyCode()
-        if keycode in [wx.WXK_RETURN, wx.WXK_TAB, wx.WXK_ESCAPE]:
+        if keycode in [wx.WXK_RETURN, wx.WXK_TAB]:
             self.Parent.Parent.ProcessEvent(event)
-            self.Parent.Parent.SetFocus()
+        elif keycode == wx.WXK_ESCAPE:
+            self.Duration.SetValue(self.Default)
+            self.Parent.Parent.CloseEditControl()
         else:
             event.Skip()
 
--- a/controls/EditorPanel.py	Sun Mar 18 15:37:04 2012 +0100
+++ b/controls/EditorPanel.py	Sun Mar 18 18:11:46 2012 +0100
@@ -50,23 +50,22 @@
         self.SetNeedUpdating(True)
         self.SetMinimumPaneSize(1)
         
-        self._init_Editor(self)
         self._init_MenuItems()
         
         if self.VARIABLE_PANEL_TYPE is not None:
             self.VariableEditor = VariablePanel(self, self, self.Controler, self.VARIABLE_PANEL_TYPE, self.Debug)
             self.VariableEditor.SetTagName(self.TagName)
-            
-            if self.Editor is not None:
-                self.SplitHorizontally(self.VariableEditor, self.Editor, 200)
-            else:
-                self.Initialize(self.VariableEditor)
-        
         else:
             self.VariableEditor = None
             
-            if self.Editor is not None:
-                self.Initialize(self.Editor)
+        self._init_Editor(self)
+            
+        if self.Editor is not None and self.VariableEditor is not None:
+            self.SplitHorizontally(self.VariableEditor, self.Editor, 200)
+        elif self.VariableEditor is not None:
+            self.Initialize(self.VariableEditor)
+        elif self.Editor is not None:
+            self.Initialize(self.Editor)        
         
     def __init__(self, parent, tagname, window, controler, debug=False):
         self.ParentWindow = window
--- a/controls/LocationCellEditor.py	Sun Mar 18 15:37:04 2012 +0100
+++ b/controls/LocationCellEditor.py	Sun Mar 18 18:11:46 2012 +0100
@@ -72,11 +72,13 @@
         self._init_ctrls(parent)
         self.Locations = locations
         self.VarType = None
+        self.Default = False
 
     def SetVarType(self, vartype):
         self.VarType = vartype
 
     def SetValue(self, value):
+        self.Default = value
         self.Location.SetValue(value)
     
     def GetValue(self):
@@ -100,9 +102,11 @@
 
     def OnLocationChar(self, event):
         keycode = event.GetKeyCode()
-        if keycode in [wx.WXK_RETURN, wx.WXK_TAB, wx.WXK_ESCAPE]:
+        if keycode in [wx.WXK_RETURN, wx.WXK_TAB]:
             self.Parent.Parent.ProcessEvent(event)
-            self.Parent.Parent.SetFocus()
+        elif keycode == wx.WXK_ESCAPE:
+            self.Location.SetValue(self.Default)
+            self.Parent.Parent.CloseEditControl()
         else:
             event.Skip()
 
@@ -147,7 +151,7 @@
             self.Table.SetValueByName(row, 'Location', loc)
             return True
         return False
-
+    
     def SetSize(self, rect):
         self.CellControl.SetDimensions(rect.x + 1, rect.y,
                                         rect.width, rect.height,