added FilenameEntry widget (up/down key increase last number)

This commit is contained in:
2020-11-26 23:10:47 +01:00
parent e79dc142ad
commit 804eb576d7
2 changed files with 116 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
def increase(s):
base, number = split_last_number(s)
if not number:
return base
number = increase_maintaining_width(number)
return base + number
def decrease(s):
base, number = split_last_number(s)
if not number:
return base
number = decrease_maintaining_width(number)
return base + number
def split_last_number(s):
rs = reverse_string(s)
number, base = split_first_number(rs)
number = reverse_string(number)
base = reverse_string(base)
return base, number
def split_first_number(s):
i = count_digits(s)
number, base = split_at(s, i)
return number, base
def reverse_string(s):
return "".join(reversed(s))
def count_digits(seq):
for i, char in enumerate(seq):
if not char.isdigit():
break
return i
def split_at(seq, i):
return seq[:i], seq[i:]
def increase_maintaining_width(num):
length = len(num)
num = int(num) + 1
num = str(num).zfill(length)
return num
def decrease_maintaining_width(num):
length = len(num)
num = int(num) - 1
num = str(num).zfill(length)
return num
if __name__ == "__main__":
v = extract_counter("t01est01")
print(v)
assert v == "t01est02"
v = extract_counter("test_001")
print(v)
assert v == "test_002"
v = "test"
assert v == extract_counter(v)
+36
View File
@@ -2,9 +2,16 @@ import wx
from slic.utils import arithmetic_eval
from .fname import increase, decrease
STRETCH = None
ADJUSTMENTS = {
wx.WXK_UP: increase,
wx.WXK_DOWN: decrease
}
def show_list(*args, **kwargs):
dlg = ListDialog(*args, **kwargs)
@@ -273,6 +280,35 @@ class MathEntry(wx.TextCtrl):
class FilenameEntry(wx.TextCtrl):
def __init__(self, *args, **kwargs):
if "style" in kwargs:
kwargs["style"] |= wx.TE_RIGHT
else:
kwargs["style"] = wx.TE_RIGHT
super().__init__(*args, **kwargs)
self.Bind(wx.EVT_KEY_DOWN, self.on_key_press)
def on_key_press(self, event):
key = event.GetKeyCode()
if key in ADJUSTMENTS:
adjust = ADJUSTMENTS[key]
self._update_value(adjust)
else:
event.Skip()
def _update_value(self, adjust):
val = self.GetValue()
val = adjust(val)
self.SetValue(val)
self.SetInsertionPointEnd()
class NotebookPanel(wx.Panel): #TODO: This needs work
def __init__(self, *args, **kwargs):