mwxlib 1.7.13__py3-none-any.whl → 1.8.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mwx/bookshelf.py +12 -12
- mwx/controls.py +22 -22
- mwx/framework.py +58 -55
- mwx/graphman.py +87 -74
- mwx/matplot2.py +40 -40
- mwx/matplot2g.py +197 -219
- mwx/matplot2lg.py +32 -32
- mwx/nutshell.py +94 -114
- mwx/plugins/ffmpeg_view.py +40 -33
- mwx/plugins/frame_listview.py +21 -31
- mwx/py/filling.py +4 -6
- mwx/utilus.py +13 -11
- mwx/wxmon.py +7 -9
- mwx/wxpdb.py +2 -1
- mwx/wxwil.py +2 -1
- mwx/wxwit.py +7 -11
- {mwxlib-1.7.13.dist-info → mwxlib-1.8.0.dist-info}/METADATA +1 -1
- mwxlib-1.8.0.dist-info/RECORD +28 -0
- mwxlib-1.7.13.dist-info/RECORD +0 -28
- {mwxlib-1.7.13.dist-info → mwxlib-1.8.0.dist-info}/WHEEL +0 -0
- {mwxlib-1.7.13.dist-info → mwxlib-1.8.0.dist-info}/top_level.txt +0 -0
mwx/bookshelf.py
CHANGED
|
@@ -91,24 +91,24 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
|
|
|
91
91
|
self.parent.handler(self.handler.current_event, evt)
|
|
92
92
|
evt.Skip()
|
|
93
93
|
|
|
94
|
-
self.handler.update({
|
|
94
|
+
self.handler.update({ # DNA<EditorTreeCtrl>
|
|
95
95
|
None : {
|
|
96
|
-
'*button* pressed' : [
|
|
97
|
-
'*button* released' : [
|
|
96
|
+
'*button* pressed' : [None, dispatch],
|
|
97
|
+
'*button* released' : [None, dispatch],
|
|
98
98
|
},
|
|
99
99
|
0 : {
|
|
100
100
|
'delete pressed' : (0, self.on_delete_buffer),
|
|
101
101
|
},
|
|
102
102
|
})
|
|
103
|
-
self.context = {
|
|
103
|
+
self.context = { # DNA<EditorBook>
|
|
104
104
|
None : {
|
|
105
|
-
'buffer_new' : [
|
|
106
|
-
'buffer_saved' : [
|
|
107
|
-
'buffer_loaded' : [
|
|
108
|
-
'buffer_deleted' : [
|
|
109
|
-
'buffer_activated' : [
|
|
110
|
-
'buffer_inactivated' : [
|
|
111
|
-
'buffer_caption_updated' : [
|
|
105
|
+
'buffer_new' : [None, self.on_buffer_new],
|
|
106
|
+
'buffer_saved' : [None, ],
|
|
107
|
+
'buffer_loaded' : [None, ],
|
|
108
|
+
'buffer_deleted' : [None, self.on_buffer_deleted],
|
|
109
|
+
'buffer_activated' : [None, self.on_buffer_selected],
|
|
110
|
+
'buffer_inactivated' : [None, ],
|
|
111
|
+
'buffer_caption_updated' : [None, self.on_buffer_filename],
|
|
112
112
|
},
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -185,7 +185,7 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
|
|
|
185
185
|
def on_buffer_deleted(self, buf):
|
|
186
186
|
self.Delete(buf.__itemId)
|
|
187
187
|
|
|
188
|
-
## Note: [buffer_activated]
|
|
188
|
+
## Note: [buffer_activated] > [buffer_new] の順で呼ばれる.
|
|
189
189
|
## buf.__itemId がない場合がある (delete_buffer 直後など).
|
|
190
190
|
def on_buffer_selected(self, buf):
|
|
191
191
|
if self and buf:
|
mwx/controls.py
CHANGED
|
@@ -64,9 +64,9 @@ class Param:
|
|
|
64
64
|
if isinstance(fmt, str): # support %-format:str (deprecated)
|
|
65
65
|
self.__format = lambda v: fmt % v
|
|
66
66
|
self.callback = SSM({
|
|
67
|
-
'control' : [
|
|
68
|
-
'updated' : [
|
|
69
|
-
'checked' : [
|
|
67
|
+
'control' : [_F(handler)] if handler else [],
|
|
68
|
+
'updated' : [_F(updater)] if updater else [],
|
|
69
|
+
'checked' : [_F(checker)] if checker else [],
|
|
70
70
|
'notified' : [],
|
|
71
71
|
'overflow' : [],
|
|
72
72
|
'underflow' : [],
|
|
@@ -434,13 +434,13 @@ class Knob(wx.Panel):
|
|
|
434
434
|
def update_range(self):
|
|
435
435
|
"""Called when range is being changed (internal use only)."""
|
|
436
436
|
v = self.__par
|
|
437
|
-
if isinstance(self._ctrl, wx.Choice):
|
|
437
|
+
if isinstance(self._ctrl, wx.Choice): # <wx.Choice>
|
|
438
438
|
items = [v.__str__(x) for x in v.range]
|
|
439
439
|
if items != self._ctrl.Items:
|
|
440
440
|
self._ctrl.SetItems(items)
|
|
441
441
|
self._ctrl.SetStringSelection(str(v))
|
|
442
442
|
else:
|
|
443
|
-
self._ctrl.SetRange(0, len(v)-1)
|
|
443
|
+
self._ctrl.SetRange(0, len(v)-1) # <wx.Slider> <wx.SpinButton>
|
|
444
444
|
|
|
445
445
|
def update_label(self):
|
|
446
446
|
"""Called when label is being changed (internal use only)."""
|
|
@@ -494,7 +494,7 @@ class Knob(wx.Panel):
|
|
|
494
494
|
v.index = j
|
|
495
495
|
v.reset(v.value)
|
|
496
496
|
|
|
497
|
-
def OnScroll(self, evt):
|
|
497
|
+
def OnScroll(self, evt): # <wx._core.ScrollEvent> <wx._controls.SpinEvent> <wx._core.CommandEvent>
|
|
498
498
|
v = self.__par
|
|
499
499
|
j = self._ctrl.GetValue()
|
|
500
500
|
if j != v.index:
|
|
@@ -502,11 +502,11 @@ class Knob(wx.Panel):
|
|
|
502
502
|
v.reset(v.value)
|
|
503
503
|
evt.Skip()
|
|
504
504
|
|
|
505
|
-
def OnMouseWheel(self, evt):
|
|
505
|
+
def OnMouseWheel(self, evt): # <wx._core.MouseEvent>
|
|
506
506
|
self._shift_control(evt, (1 if evt.WheelRotation > 0 else -1))
|
|
507
507
|
evt.Skip(False)
|
|
508
508
|
|
|
509
|
-
def OnCtrlKeyDown(self, evt):
|
|
509
|
+
def OnCtrlKeyDown(self, evt): # <wx._core.KeyEvent>
|
|
510
510
|
key = evt.GetKeyCode()
|
|
511
511
|
if key == wx.WXK_LEFT: return self._shift_control(evt, -1)
|
|
512
512
|
if key == wx.WXK_RIGHT: return self._shift_control(evt, 1)
|
|
@@ -521,10 +521,10 @@ class Knob(wx.Panel):
|
|
|
521
521
|
if key == wx.WXK_DOWN: return any(_focus(c) for c in ls[i+1:])
|
|
522
522
|
if key == wx.WXK_UP: return any(_focus(c) for c in ls[i-1::-1])
|
|
523
523
|
|
|
524
|
-
def OnTextKeyUp(self, evt):
|
|
524
|
+
def OnTextKeyUp(self, evt): # <wx._core.KeyEvent>
|
|
525
525
|
evt.Skip()
|
|
526
526
|
|
|
527
|
-
def OnTextKeyDown(self, evt):
|
|
527
|
+
def OnTextKeyDown(self, evt): # <wx._core.KeyEvent>
|
|
528
528
|
key = evt.GetKeyCode()
|
|
529
529
|
if key == wx.WXK_DOWN: return self._shift_control(evt, -1)
|
|
530
530
|
if key == wx.WXK_UP: return self._shift_control(evt, 1)
|
|
@@ -532,22 +532,22 @@ class Knob(wx.Panel):
|
|
|
532
532
|
self.__par.reset(self.__par.value, internal_callback=None) # restore value
|
|
533
533
|
evt.Skip()
|
|
534
534
|
|
|
535
|
-
def OnTextEnter(self, evt):
|
|
535
|
+
def OnTextEnter(self, evt): # <wx._core.CommandEvent>
|
|
536
536
|
evt.Skip()
|
|
537
537
|
x = self._text.Value.strip()
|
|
538
538
|
self.__par.reset(x)
|
|
539
539
|
|
|
540
|
-
def OnTextExit(self, evt):
|
|
540
|
+
def OnTextExit(self, evt): # <wx._core.FocusEvent>
|
|
541
541
|
x = self._text.Value.strip()
|
|
542
542
|
if x != str(self.__par):
|
|
543
543
|
self.__par.reset(x)
|
|
544
544
|
evt.Skip()
|
|
545
545
|
|
|
546
|
-
def OnCheck(self, evt):
|
|
546
|
+
def OnCheck(self, evt): # <wx._core.CommandEvent>
|
|
547
547
|
self.__par.check = evt.IsChecked()
|
|
548
548
|
evt.Skip()
|
|
549
549
|
|
|
550
|
-
def OnPress(self, evt):
|
|
550
|
+
def OnPress(self, evt): # <wx._core.CommandEvent>
|
|
551
551
|
self.__par.callback('updated', self.__par)
|
|
552
552
|
evt.Skip()
|
|
553
553
|
|
|
@@ -591,11 +591,11 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
|
|
|
591
591
|
self.Bind(wx.EVT_MOUSEWHEEL, self.OnRecalcLayout)
|
|
592
592
|
self.Bind(wx.EVT_LEFT_DOWN, self.OnRecalcLayout)
|
|
593
593
|
|
|
594
|
-
def OnRecalcLayout(self, evt):
|
|
594
|
+
def OnRecalcLayout(self, evt): # <wx._core.ScrollWinEvent>
|
|
595
595
|
self.Layout()
|
|
596
596
|
evt.Skip()
|
|
597
597
|
|
|
598
|
-
def OnToggleFold(self, evt):
|
|
598
|
+
def OnToggleFold(self, evt): # <wx._core.MouseEvent>
|
|
599
599
|
x, y = evt.Position
|
|
600
600
|
for child in self.Sizer.Children: # child <wx._core.SizerItem>
|
|
601
601
|
if child.IsShown():
|
|
@@ -736,7 +736,7 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
|
|
|
736
736
|
except AttributeError:
|
|
737
737
|
p.value = v
|
|
738
738
|
except Exception as e:
|
|
739
|
-
print(f"- Failed to eval {v}
|
|
739
|
+
print(f"- Failed to eval {v};", e)
|
|
740
740
|
|
|
741
741
|
def reset_params(self, checked_only=False):
|
|
742
742
|
params = self.get_params(checked_only)
|
|
@@ -928,7 +928,7 @@ class Icon(wx.Bitmap):
|
|
|
928
928
|
key = (key.ConvertToImage()
|
|
929
929
|
.Scale(*size, wx.IMAGE_QUALITY_NEAREST)
|
|
930
930
|
.ConvertToBitmap())
|
|
931
|
-
return key
|
|
931
|
+
return key # <wx.Bitmap>
|
|
932
932
|
if size is None:
|
|
933
933
|
size = (16, 16)
|
|
934
934
|
if key:
|
|
@@ -1094,7 +1094,7 @@ class TextBox(wx.Control):
|
|
|
1094
1094
|
**kwargs: keywords for wx.TextCtrl
|
|
1095
1095
|
e.g., value:str
|
|
1096
1096
|
"""
|
|
1097
|
-
Value = property(
|
|
1097
|
+
Value = property( # textctrl value:str
|
|
1098
1098
|
lambda self: self._ctrl.GetValue(),
|
|
1099
1099
|
lambda self, v: self._ctrl.SetValue(v))
|
|
1100
1100
|
|
|
@@ -1162,17 +1162,17 @@ class Choice(wx.Control):
|
|
|
1162
1162
|
If the input item is not found in the choices,
|
|
1163
1163
|
it will be added to the list (unless readonly)
|
|
1164
1164
|
"""
|
|
1165
|
-
Value = property(
|
|
1165
|
+
Value = property( # combobox value:str
|
|
1166
1166
|
lambda self: self._ctrl.GetValue(),
|
|
1167
1167
|
lambda self, v: self._ctrl.SetValue(v))
|
|
1168
1168
|
|
|
1169
1169
|
value = Value # internal use only
|
|
1170
1170
|
|
|
1171
|
-
Selection = property(
|
|
1171
|
+
Selection = property( # combobox selection:int or NOT_FOUND(-1)
|
|
1172
1172
|
lambda self: self._ctrl.GetSelection(),
|
|
1173
1173
|
lambda self, v: self._ctrl.SetSelection(v))
|
|
1174
1174
|
|
|
1175
|
-
Items = property(
|
|
1175
|
+
Items = property( # combobox items:list
|
|
1176
1176
|
lambda self: self._ctrl.GetItems(),
|
|
1177
1177
|
lambda self, v: self._ctrl.SetItems(v))
|
|
1178
1178
|
|
mwx/framework.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#! python3
|
|
2
2
|
"""mwxlib framework.
|
|
3
3
|
"""
|
|
4
|
-
__version__ = "1.
|
|
4
|
+
__version__ = "1.8.0"
|
|
5
5
|
__author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
|
|
6
6
|
|
|
7
7
|
from contextlib import contextmanager
|
|
@@ -246,17 +246,17 @@ class KeyCtrlInterfaceMixin:
|
|
|
246
246
|
|
|
247
247
|
assert state is not None, "Don't make keymap for None:state"
|
|
248
248
|
|
|
249
|
-
self.handler.update({
|
|
249
|
+
self.handler.update({ # DNA<KeyCtrlInterfaceMixin>
|
|
250
250
|
state : {
|
|
251
|
-
event : [
|
|
251
|
+
event : [keymap, self.pre_command_hook],
|
|
252
252
|
},
|
|
253
253
|
keymap : {
|
|
254
|
-
'quit' : [
|
|
255
|
-
'* pressed' : [
|
|
256
|
-
'*alt pressed' : [
|
|
257
|
-
'*ctrl pressed' : [
|
|
258
|
-
'*shift pressed' : [
|
|
259
|
-
'*[LR]win pressed' : [
|
|
254
|
+
'quit' : [state, ],
|
|
255
|
+
'* pressed' : [state, self.post_command_hook],
|
|
256
|
+
'*alt pressed' : [keymap, _Pass],
|
|
257
|
+
'*ctrl pressed' : [keymap, _Pass],
|
|
258
|
+
'*shift pressed' : [keymap, _Pass],
|
|
259
|
+
'*[LR]win pressed' : [keymap, _Pass],
|
|
260
260
|
},
|
|
261
261
|
})
|
|
262
262
|
|
|
@@ -338,7 +338,7 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
338
338
|
self.__key = ''
|
|
339
339
|
self.__button = ''
|
|
340
340
|
self.__isDragging = False
|
|
341
|
-
self.__handler = FSM({
|
|
341
|
+
self.__handler = FSM({ # DNA<CtrlInterface>
|
|
342
342
|
None : {
|
|
343
343
|
},
|
|
344
344
|
0 : {
|
|
@@ -350,15 +350,17 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
350
350
|
_N = self._normal_handler
|
|
351
351
|
|
|
352
352
|
def activate(evt):
|
|
353
|
-
self
|
|
353
|
+
if self:
|
|
354
|
+
self.handler('focus_set', evt)
|
|
354
355
|
evt.Skip()
|
|
355
356
|
self.Bind(wx.EVT_SET_FOCUS, activate)
|
|
356
357
|
|
|
357
358
|
def inactivate(evt):
|
|
358
|
-
self
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
359
|
+
if self:
|
|
360
|
+
self.__key = ''
|
|
361
|
+
self.__button = ''
|
|
362
|
+
self.__isDragging = False
|
|
363
|
+
self.handler('focus_kill', evt)
|
|
362
364
|
evt.Skip()
|
|
363
365
|
self.Bind(wx.EVT_KILL_FOCUS, inactivate)
|
|
364
366
|
|
|
@@ -390,7 +392,7 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
390
392
|
self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, lambda v: _N('capture_lost', v))
|
|
391
393
|
self.Bind(wx.EVT_MOUSE_CAPTURE_CHANGED, lambda v: _N('capture_changed', v))
|
|
392
394
|
|
|
393
|
-
def on_hotkey_press(self, evt):
|
|
395
|
+
def on_hotkey_press(self, evt): # <wx._core.KeyEvent>
|
|
394
396
|
"""Called when a key is pressed."""
|
|
395
397
|
# if evt.EventObject is not self:
|
|
396
398
|
# evt.Skip()
|
|
@@ -400,7 +402,7 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
400
402
|
if self.handler('{} pressed'.format(key), evt) is None:
|
|
401
403
|
evt.Skip()
|
|
402
404
|
|
|
403
|
-
def on_hotkey_down(self, evt):
|
|
405
|
+
def on_hotkey_down(self, evt): # <wx._core.KeyEvent>
|
|
404
406
|
"""Called when a key is pressed while dragging.
|
|
405
407
|
Specifically called when the mouse is being captured.
|
|
406
408
|
"""
|
|
@@ -409,14 +411,14 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
409
411
|
else:
|
|
410
412
|
evt.Skip()
|
|
411
413
|
|
|
412
|
-
def on_hotkey_up(self, evt):
|
|
414
|
+
def on_hotkey_up(self, evt): # <wx._core.KeyEvent>
|
|
413
415
|
"""Called when a key is released."""
|
|
414
416
|
key = hotkey(evt)
|
|
415
417
|
self.__key = ''
|
|
416
418
|
if self.handler('{} released'.format(key), evt) is None:
|
|
417
419
|
evt.Skip()
|
|
418
420
|
|
|
419
|
-
def on_mousewheel(self, evt):
|
|
421
|
+
def on_mousewheel(self, evt): # <wx._core.MouseEvent>
|
|
420
422
|
"""Called on mouse wheel events.
|
|
421
423
|
Trigger event: 'key+wheel[up|down|right|left] pressed'
|
|
422
424
|
"""
|
|
@@ -428,7 +430,7 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
428
430
|
if self.handler('{} pressed'.format(evt.key), evt) is None:
|
|
429
431
|
evt.Skip()
|
|
430
432
|
|
|
431
|
-
def on_motion(self, evt):
|
|
433
|
+
def on_motion(self, evt): # <wx._core.MouseEvent>
|
|
432
434
|
"""Called on mouse motion events.
|
|
433
435
|
Trigger event: 'key+[LMR]drag begin/motion/end'
|
|
434
436
|
"""
|
|
@@ -443,7 +445,7 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
443
445
|
self.handler('motion', evt)
|
|
444
446
|
evt.Skip()
|
|
445
447
|
|
|
446
|
-
def _mouse_handler(self, event, evt):
|
|
448
|
+
def _mouse_handler(self, event, evt): # <wx._core.MouseEvent>
|
|
447
449
|
"""Called on mouse button events.
|
|
448
450
|
Trigger event: 'key+[LMRX]button pressed/released/dblclick'
|
|
449
451
|
"""
|
|
@@ -467,7 +469,7 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
|
|
|
467
469
|
except AttributeError:
|
|
468
470
|
pass
|
|
469
471
|
|
|
470
|
-
def _normal_handler(self, event, evt):
|
|
472
|
+
def _normal_handler(self, event, evt): # <wx._core.Event>
|
|
471
473
|
if self.handler(event, evt) is None:
|
|
472
474
|
evt.Skip()
|
|
473
475
|
|
|
@@ -767,7 +769,7 @@ class Frame(wx.Frame, KeyCtrlInterfaceMixin):
|
|
|
767
769
|
evt.Skip()
|
|
768
770
|
self.Bind(wx.EVT_CHAR_HOOK, hook_char)
|
|
769
771
|
|
|
770
|
-
self.__handler = FSM({
|
|
772
|
+
self.__handler = FSM({ # DNA<Frame>
|
|
771
773
|
None : {
|
|
772
774
|
},
|
|
773
775
|
0 : {
|
|
@@ -821,7 +823,7 @@ class MiniFrame(wx.MiniFrame, KeyCtrlInterfaceMixin):
|
|
|
821
823
|
## To default close >>> self.Unbind(wx.EVT_CLOSE).
|
|
822
824
|
self.Bind(wx.EVT_CLOSE, lambda v: self.Show(0))
|
|
823
825
|
|
|
824
|
-
self.__handler = FSM({
|
|
826
|
+
self.__handler = FSM({ # DNA<MiniFrame>
|
|
825
827
|
None : {
|
|
826
828
|
},
|
|
827
829
|
0 : {
|
|
@@ -847,7 +849,7 @@ class AuiNotebook(aui.AuiNotebook):
|
|
|
847
849
|
self.Name = name
|
|
848
850
|
|
|
849
851
|
def tab_menu(evt):
|
|
850
|
-
tabs = evt.EventObject
|
|
852
|
+
tabs = evt.EventObject # <AuiTabCtrl>
|
|
851
853
|
page = tabs.Pages[evt.Selection] # GetPage for split notebook.
|
|
852
854
|
try:
|
|
853
855
|
Menu.Popup(self, page.window.menu)
|
|
@@ -906,8 +908,8 @@ class AuiNotebook(aui.AuiNotebook):
|
|
|
906
908
|
Note:
|
|
907
909
|
Argument `win` can also be page.window.Name (not page.caption).
|
|
908
910
|
"""
|
|
909
|
-
for tab in self._all_tabs:
|
|
910
|
-
for page in tab.Pages:
|
|
911
|
+
for tab in self._all_tabs: # <aui.AuiTabCtrl>
|
|
912
|
+
for page in tab.Pages: # <aui.AuiNotebookPage>
|
|
911
913
|
## if page.window is win or page.caption == win:
|
|
912
914
|
if page.window is win or page.window.Name == win:
|
|
913
915
|
return tab, page
|
|
@@ -988,7 +990,7 @@ class AuiNotebook(aui.AuiNotebook):
|
|
|
988
990
|
self._mgr.LoadPerspective(frames)
|
|
989
991
|
self._mgr.Update()
|
|
990
992
|
except Exception as e:
|
|
991
|
-
print("- Failed to load perspective
|
|
993
|
+
print("- Failed to load perspective;", e)
|
|
992
994
|
finally:
|
|
993
995
|
self.Parent.Thaw()
|
|
994
996
|
|
|
@@ -1237,21 +1239,21 @@ class ShellFrame(MiniFrame):
|
|
|
1237
1239
|
self.indicator.Value = 7
|
|
1238
1240
|
evt.Skip()
|
|
1239
1241
|
|
|
1240
|
-
self.handler.update({
|
|
1242
|
+
self.handler.update({ # DNA<ShellFrame>
|
|
1241
1243
|
None : {
|
|
1242
|
-
'debug_begin' : [
|
|
1243
|
-
'debug_next' : [
|
|
1244
|
-
'debug_end' : [
|
|
1245
|
-
'trace_begin' : [
|
|
1246
|
-
'trace_hook' : [
|
|
1247
|
-
'trace_end' : [
|
|
1248
|
-
'monitor_begin' : [
|
|
1249
|
-
'monitor_end' : [
|
|
1250
|
-
'shell_new' : [
|
|
1251
|
-
'book_new' : [
|
|
1252
|
-
'add_log' : [
|
|
1253
|
-
'add_help' : [
|
|
1254
|
-
'title_window' : [
|
|
1244
|
+
'debug_begin' : [None, self.on_debug_begin],
|
|
1245
|
+
'debug_next' : [None, self.on_debug_next],
|
|
1246
|
+
'debug_end' : [None, self.on_debug_end],
|
|
1247
|
+
'trace_begin' : [None, self.on_trace_begin],
|
|
1248
|
+
'trace_hook' : [None, self.on_trace_hook],
|
|
1249
|
+
'trace_end' : [None, self.on_trace_end],
|
|
1250
|
+
'monitor_begin' : [None, self.on_monitor_begin],
|
|
1251
|
+
'monitor_end' : [None, self.on_monitor_end],
|
|
1252
|
+
'shell_new' : [None, ],
|
|
1253
|
+
'book_new' : [None, ],
|
|
1254
|
+
'add_log' : [None, self.add_log],
|
|
1255
|
+
'add_help' : [None, self.add_help],
|
|
1256
|
+
'title_window' : [None, self.on_title_window],
|
|
1255
1257
|
},
|
|
1256
1258
|
0 : {
|
|
1257
1259
|
'* pressed' : (0, fork_debugger),
|
|
@@ -1303,7 +1305,7 @@ class ShellFrame(MiniFrame):
|
|
|
1303
1305
|
except FileNotFoundError:
|
|
1304
1306
|
pass
|
|
1305
1307
|
except Exception as e:
|
|
1306
|
-
print("- Failed to load session
|
|
1308
|
+
print("- Failed to load session;", e)
|
|
1307
1309
|
self.SESSION_FILE = session
|
|
1308
1310
|
|
|
1309
1311
|
## Reposition the window if it is not on the desktop.
|
|
@@ -1405,7 +1407,7 @@ class ShellFrame(MiniFrame):
|
|
|
1405
1407
|
|
|
1406
1408
|
def OnClose(self, evt):
|
|
1407
1409
|
if self.debugger.busy:
|
|
1408
|
-
if wx.MessageBox(
|
|
1410
|
+
if wx.MessageBox( # Confirm closing the debugger.
|
|
1409
1411
|
"The debugger is running.\n\n"
|
|
1410
1412
|
"Enter [q]uit to exit before closing.\n"
|
|
1411
1413
|
"Continue closing?",
|
|
@@ -1426,7 +1428,7 @@ class ShellFrame(MiniFrame):
|
|
|
1426
1428
|
if buf.need_buffer_save:
|
|
1427
1429
|
self.popup_window(book)
|
|
1428
1430
|
buf.SetFocus()
|
|
1429
|
-
if wx.MessageBox(
|
|
1431
|
+
if wx.MessageBox( # Confirm closing the buffer.
|
|
1430
1432
|
"You are closing unsaved content.\n\n"
|
|
1431
1433
|
"Changes to the content will be discarded.\n"
|
|
1432
1434
|
"Continue closing?",
|
|
@@ -1488,7 +1490,7 @@ class ShellFrame(MiniFrame):
|
|
|
1488
1490
|
self.inspector.unwatch()
|
|
1489
1491
|
evt.Skip()
|
|
1490
1492
|
|
|
1491
|
-
def OnConsolePageChanged(self, evt):
|
|
1493
|
+
def OnConsolePageChanged(self, evt): # <wx._aui.AuiNotebookEvent>
|
|
1492
1494
|
nb = evt.EventObject
|
|
1493
1495
|
win = nb.CurrentPage
|
|
1494
1496
|
if win is self.rootshell:
|
|
@@ -1498,7 +1500,7 @@ class ShellFrame(MiniFrame):
|
|
|
1498
1500
|
nb.TabCtrlHeight = 0 if nb.PageCount == 1 else -1
|
|
1499
1501
|
evt.Skip()
|
|
1500
1502
|
|
|
1501
|
-
def OnConsolePageClose(self, evt):
|
|
1503
|
+
def OnConsolePageClose(self, evt): # <wx._aui.AuiNotebookEvent>
|
|
1502
1504
|
nb = evt.EventObject
|
|
1503
1505
|
win = list(nb.get_pages())[evt.Selection]
|
|
1504
1506
|
if win is self.rootshell:
|
|
@@ -1515,20 +1517,20 @@ class ShellFrame(MiniFrame):
|
|
|
1515
1517
|
def About(self, evt=None):
|
|
1516
1518
|
self.add_help(
|
|
1517
1519
|
'\n\n'.join((
|
|
1518
|
-
f"
|
|
1520
|
+
f"# <module 'mwx' from {__file__!r}>",
|
|
1519
1521
|
f"Author: {__author__!r}",
|
|
1520
1522
|
f"Version: {__version__!s}",
|
|
1521
1523
|
self.__class__.__doc__,
|
|
1522
1524
|
self.rootshell.__class__.__doc__,
|
|
1523
1525
|
## <--- Thanks to <wx.py.shell> --->
|
|
1524
|
-
f"#{wx.py!r}",
|
|
1526
|
+
f"# {wx.py!r}",
|
|
1525
1527
|
f"Author: {wx.py.version.__author__!r}",
|
|
1526
1528
|
f"Version: {wx.py.version.VERSION!s}",
|
|
1527
1529
|
wx.py.shell.Shell.__doc__,
|
|
1528
1530
|
textwrap.indent("*original" + wx.py.shell.HELP_TEXT, ' '*4),
|
|
1529
1531
|
## <--- Thanks are also due to <wx> --->
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
+
# f"#{wx!r}",
|
|
1533
|
+
# f"To show the credit, press [C-M-Mbutton].", # cf. wx.InfoMessageBox(None)
|
|
1532
1534
|
))
|
|
1533
1535
|
)
|
|
1534
1536
|
|
|
@@ -1700,7 +1702,7 @@ class ShellFrame(MiniFrame):
|
|
|
1700
1702
|
if not self:
|
|
1701
1703
|
return
|
|
1702
1704
|
shell = self.debugger.interactive_shell
|
|
1703
|
-
shell.write("
|
|
1705
|
+
shell.write("# <-- Enter [n]ext to continue.\n", -1)
|
|
1704
1706
|
shell.prompt()
|
|
1705
1707
|
shell.SetFocus()
|
|
1706
1708
|
self.Show()
|
|
@@ -1737,7 +1739,7 @@ class ShellFrame(MiniFrame):
|
|
|
1737
1739
|
if not self:
|
|
1738
1740
|
return
|
|
1739
1741
|
shell = self.debugger.interactive_shell
|
|
1740
|
-
shell.write("
|
|
1742
|
+
shell.write("# --> Debugger closed successfully.\n", -1)
|
|
1741
1743
|
shell.prompt()
|
|
1742
1744
|
self.add_log("--> End of debugger\r\n")
|
|
1743
1745
|
self.linfo.unwatch()
|
|
@@ -1926,6 +1928,7 @@ class ShellFrame(MiniFrame):
|
|
|
1926
1928
|
self.ghost.AddPage(editor, bookname)
|
|
1927
1929
|
self.ghost.move_tab(editor, 0)
|
|
1928
1930
|
self.handler('book_new', editor)
|
|
1931
|
+
|
|
1929
1932
|
def _attach():
|
|
1930
1933
|
editor.handler.append(self.Bookshelf.context)
|
|
1931
1934
|
self.Bookshelf.build_tree(clear=0)
|
|
@@ -1964,7 +1967,7 @@ class ShellFrame(MiniFrame):
|
|
|
1964
1967
|
def repeat_backward_search(self, evt):
|
|
1965
1968
|
self.OnFindNext(evt, backward=True)
|
|
1966
1969
|
|
|
1967
|
-
def OnFindNext(self, evt, backward=None):
|
|
1970
|
+
def OnFindNext(self, evt, backward=None): # <wx._core.FindDialogEvent>
|
|
1968
1971
|
if not self.findData.FindString:
|
|
1969
1972
|
self.message("No last search.")
|
|
1970
1973
|
return
|
|
@@ -1995,7 +1998,7 @@ class ShellFrame(MiniFrame):
|
|
|
1995
1998
|
if loc < 0:
|
|
1996
1999
|
self.message("Unable to find the search text.")
|
|
1997
2000
|
|
|
1998
|
-
def OnFindClose(self, evt):
|
|
2001
|
+
def OnFindClose(self, evt): # <wx._core.FindDialogEvent>
|
|
1999
2002
|
self.findDlg.Destroy()
|
|
2000
2003
|
self.findDlg = None
|
|
2001
2004
|
|