controls/CustomGrid.py
changeset 600 7db729686416
parent 577 9dbb79722fbc
child 606 d65122c61eaf
equal deleted inserted replaced
599:4bb7b132e15d 600:7db729686416
    35                 event(self, function)
    35                 event(self, function)
    36     
    36     
    37     def __init__(self, *args, **kwargs):
    37     def __init__(self, *args, **kwargs):
    38         wx.grid.Grid.__init__(self, *args, **kwargs)
    38         wx.grid.Grid.__init__(self, *args, **kwargs)
    39         
    39         
       
    40         self.Editable = True
       
    41         
    40         if wx.VERSION >= (2, 6, 0):
    42         if wx.VERSION >= (2, 6, 0):
    41             self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell)
    43             self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell)
    42         else:
    44         else:
    43             wx.grid.EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
    45             wx.grid.EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
    44         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
    46         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
    45     
    47     
    46     def SetDefaultValue(self, default_value):
    48     def SetDefaultValue(self, default_value):
    47         self.DefaultValue = default_value
    49         self.DefaultValue = default_value
    48     
    50     
       
    51     def SetEditable(self, editable=True):
       
    52         self.Editable = editable
       
    53         self.RefreshButtons()
       
    54         
    49     def SetButtons(self, buttons):
    55     def SetButtons(self, buttons):
    50         for name in ["Add", "Delete", "Up", "Down"]:
    56         for name in ["Add", "Delete", "Up", "Down"]:
    51             button = buttons.get(name, None)
    57             button = buttons.get(name, None)
    52             setattr(self, "%sButton" % name, button)
    58             setattr(self, "%sButton" % name, button)
    53             if button is not None:
    59             if button is not None:
    54                 button.Bind(wx.EVT_BUTTON, getattr(self, "On%sButton" % name))
    60                 button.Bind(wx.EVT_BUTTON, getattr(self, "On%sButton" % name))
    55     
    61     
    56     def RefreshButtons(self):
    62     def RefreshButtons(self):
    57         rows = self.Table.GetNumberRows()
    63         rows = self.Table.GetNumberRows()
    58         row = self.GetGridCursorRow()
    64         row = self.GetGridCursorRow()
       
    65         if self.AddButton is not None:
       
    66             self.AddButton.Enable(self.Editable)
    59         if self.DeleteButton is not None:
    67         if self.DeleteButton is not None:
    60             self.DeleteButton.Enable(rows > 0)
    68             self.DeleteButton.Enable(self.Editable and rows > 0)
    61         if self.UpButton is not None:
    69         if self.UpButton is not None:
    62             self.UpButton.Enable(row > 0)
    70             self.UpButton.Enable(self.Editable and row > 0)
    63         if self.DownButton is not None:
    71         if self.DownButton is not None:
    64             self.DownButton.Enable(0 <= row < rows - 1)
    72             self.DownButton.Enable(self.Editable and 0 <= row < rows - 1)
    65     
    73     
    66     def CloseEditControl(self):
    74     def CloseEditControl(self):
    67         self.SetGridCursor(self.GetGridCursorRow(), self.GetGridCursorCol())
    75         self.SetGridCursor(self.GetGridCursorRow(), self.GetGridCursorCol())
    68 
    76 
    69     def AddRow(self):
    77     def AddRow(self):
   143                     self.Navigate(wx.NavigationKeyEvent.IsBackward)
   151                     self.Navigate(wx.NavigationKeyEvent.IsBackward)
   144                     key_handled = True
   152                     key_handled = True
   145             elif row < 0 or col == self.Table.GetNumberCols() - 1:
   153             elif row < 0 or col == self.Table.GetNumberCols() - 1:
   146                 self.Navigate(wx.NavigationKeyEvent.IsForward)
   154                 self.Navigate(wx.NavigationKeyEvent.IsForward)
   147                 key_handled = True
   155                 key_handled = True
   148         elif keycode in (wx.WXK_ADD, wx.WXK_NUMPAD_ADD):
   156         elif keycode in (wx.WXK_ADD, wx.WXK_NUMPAD_ADD) and self.Editable:
   149             self.AddRow()
   157             self.AddRow()
   150             key_handled = True
   158             key_handled = True
   151         elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE):
   159         elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and self.Editable:
   152             self.DeleteRow()
   160             self.DeleteRow()
   153             key_handled = True
   161             key_handled = True
   154         elif keycode == wx.WXK_UP and event.ShiftDown():
   162         elif keycode == wx.WXK_UP and event.ShiftDown() and self.Editable:
   155             self.MoveRow(self.GetGridCursorRow(), -1)
   163             self.MoveRow(self.GetGridCursorRow(), -1)
   156             key_handled = True
   164             key_handled = True
   157         elif keycode == wx.WXK_DOWN and event.ShiftDown():
   165         elif keycode == wx.WXK_DOWN and event.ShiftDown() and self.Editable:
   158             self.MoveRow(self.GetGridCursorRow(), 1)
   166             self.MoveRow(self.GetGridCursorRow(), 1)
   159             key_handled = True
   167             key_handled = True
   160         if not key_handled:
   168         if not key_handled:
   161             event.Skip()
   169             event.Skip()