summaryrefslogtreecommitdiff
path: root/lib/gui/edit_json/editable_list.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gui/edit_json/editable_list.py')
-rw-r--r--lib/gui/edit_json/editable_list.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/gui/edit_json/editable_list.py b/lib/gui/edit_json/editable_list.py
new file mode 100644
index 00000000..51026a0c
--- /dev/null
+++ b/lib/gui/edit_json/editable_list.py
@@ -0,0 +1,39 @@
+import wx
+from wx.lib.mixins.listctrl import TextEditMixin
+
+
+class EditableListCtrl(wx.ListCtrl, TextEditMixin):
+
+ def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0):
+ wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
+ TextEditMixin.__init__(self)
+
+ def OpenEditor(self, column, row):
+ self.original_data = self.GetItemText(row, column)
+ if column == 2:
+ TextEditMixin.OpenEditor(self, column, row)
+ self.editor.Bind(wx.EVT_KEY_DOWN, self.on_escape)
+
+ def on_escape(self, event=None):
+ keycode = event.GetKeyCode()
+ if keycode == wx.WXK_ESCAPE:
+ self.CloseEditor(event=None, swap=True)
+ event.Skip()
+
+ def CloseEditor(self, event=None, swap=False):
+ text = self.editor.GetValue()
+ if swap:
+ self.editor.Hide()
+ TextEditMixin.CloseEditor(self, event)
+ return
+
+ if text:
+ try:
+ float(text)
+ except ValueError:
+ swap = True
+
+ if swap:
+ self.editor.SetValue(self.original_data)
+
+ TextEditMixin.CloseEditor(self, event)