inkstitch/lib/gui/edit_json/editable_list.py

43 wiersze
1.4 KiB
Python

import wx
from wx.lib.mixins.listctrl import TextEditMixin # type: ignore[import-untyped]
class EditableListCtrl(wx.ListCtrl, TextEditMixin):
def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, editable_column=2):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
TextEditMixin.__init__(self)
self.editable_column = editable_column
def OpenEditor(self, column, row):
self.original_data = self.GetItemText(row, column)
if column == self.editable_column:
TextEditMixin.OpenEditor(self, column, row)
if self.editable_column == 3 and column == 0:
self.CheckItem(row, not self.IsItemChecked(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)