added FilenameEntry widget (up/down key increase last number)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user