kopia lustrzana https://github.com/inkstitch/inkstitch
43 wiersze
1.4 KiB
Python
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)
|