mwxlib 1.4.5__py3-none-any.whl → 1.4.8__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.
Potentially problematic release.
This version of mwxlib might be problematic. Click here for more details.
- mwx/controls.py +46 -27
- mwx/framework.py +1 -1
- mwx/graphman.py +11 -14
- mwx/images.py +16 -0
- mwx/nutshell.py +11 -24
- mwx/utilus.py +6 -6
- {mwxlib-1.4.5.dist-info → mwxlib-1.4.8.dist-info}/METADATA +2 -2
- {mwxlib-1.4.5.dist-info → mwxlib-1.4.8.dist-info}/RECORD +10 -10
- {mwxlib-1.4.5.dist-info → mwxlib-1.4.8.dist-info}/WHEEL +1 -1
- {mwxlib-1.4.5.dist-info → mwxlib-1.4.8.dist-info}/top_level.txt +0 -0
mwx/controls.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"""mwxlib param controller and wx custom controls.
|
|
3
3
|
"""
|
|
4
4
|
from itertools import chain
|
|
5
|
+
import inspect
|
|
5
6
|
import wx
|
|
6
7
|
import wx.lib.platebtn as pb
|
|
7
8
|
import wx.lib.scrolledpanel as scrolled
|
|
@@ -68,7 +69,8 @@ class Param:
|
|
|
68
69
|
'overflow' : [],
|
|
69
70
|
'underflow' : [],
|
|
70
71
|
})
|
|
71
|
-
self._tooltip = _Tip(handler.__doc__,
|
|
72
|
+
self._tooltip = _Tip(handler.__doc__,
|
|
73
|
+
updater.__doc__)
|
|
72
74
|
|
|
73
75
|
def __str__(self, v=None):
|
|
74
76
|
if v is None:
|
|
@@ -293,7 +295,6 @@ class Knob(wx.Panel):
|
|
|
293
295
|
style : style of label
|
|
294
296
|
None -> static text (default)
|
|
295
297
|
button -> label with flat button
|
|
296
|
-
chkbox -> label with checkbox
|
|
297
298
|
checkbox -> label with checkbox
|
|
298
299
|
cw : width of control
|
|
299
300
|
lw : width of label
|
|
@@ -313,6 +314,15 @@ class Knob(wx.Panel):
|
|
|
313
314
|
self.update_range()
|
|
314
315
|
self.update_ctrl()
|
|
315
316
|
|
|
317
|
+
@property
|
|
318
|
+
def button(self):
|
|
319
|
+
if isinstance(self._label, pb.PlateButton):
|
|
320
|
+
return self._label
|
|
321
|
+
|
|
322
|
+
@property
|
|
323
|
+
def control(self):
|
|
324
|
+
return self._ctrl
|
|
325
|
+
|
|
316
326
|
def __init__(self, parent, param, type=None,
|
|
317
327
|
style=None, cw=-1, lw=-1, tw=-1, h=22, **kwargs):
|
|
318
328
|
wx.Panel.__init__(self, parent, **kwargs)
|
|
@@ -335,9 +345,11 @@ class Knob(wx.Panel):
|
|
|
335
345
|
label = self.__par.name + ' '
|
|
336
346
|
|
|
337
347
|
if style == 'chkbox' or style == 'checkbox':
|
|
348
|
+
## Keep margin for the checkbox: lw += 16
|
|
338
349
|
self._label = wx.CheckBox(self, label=label, size=(lw,-1))
|
|
339
350
|
self._label.Bind(wx.EVT_CHECKBOX, self.OnCheck)
|
|
340
351
|
elif style == 'button':
|
|
352
|
+
## Keep margin for the button: lw += 16
|
|
341
353
|
self._label = pb.PlateButton(self, label=label, size=(lw,-1),
|
|
342
354
|
style=pb.PB_STYLE_DEFAULT|pb.PB_STYLE_SQUARE)
|
|
343
355
|
self._label.Bind(wx.EVT_BUTTON, self.OnPress)
|
|
@@ -668,17 +680,18 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
|
|
|
668
680
|
|
|
669
681
|
self.Sizer.Add(sizer, expand>1, p | wx.ALL, border)
|
|
670
682
|
|
|
671
|
-
## Register
|
|
672
|
-
def _flatiter(
|
|
673
|
-
for c in
|
|
683
|
+
## Register objects and parameter groups
|
|
684
|
+
def _flatiter(objects):
|
|
685
|
+
for c in objects:
|
|
674
686
|
if isinstance(c, tuple):
|
|
675
687
|
yield from _flatiter(c)
|
|
676
688
|
elif isinstance(c, wx.Object):
|
|
677
689
|
yield c
|
|
678
690
|
self.__groups.append(list(_flatiter(objs)))
|
|
679
691
|
|
|
680
|
-
|
|
681
|
-
|
|
692
|
+
## Parameters : Knob.param or widgets that have a `value`.
|
|
693
|
+
def _variter(objects):
|
|
694
|
+
for c in objects:
|
|
682
695
|
if isinstance(c, Knob):
|
|
683
696
|
yield c.param
|
|
684
697
|
elif hasattr(c, 'value'):
|
|
@@ -689,6 +702,8 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
|
|
|
689
702
|
self.show(-1, visible)
|
|
690
703
|
self.fold(-1, not show)
|
|
691
704
|
self.Sizer.Fit(self)
|
|
705
|
+
|
|
706
|
+
return self.__groups[-1]
|
|
692
707
|
|
|
693
708
|
## --------------------------------
|
|
694
709
|
## 外部入出力/クリップボード通信
|
|
@@ -860,8 +875,8 @@ class Icon(wx.Bitmap):
|
|
|
860
875
|
'!!!' : wx.ART_ERROR,
|
|
861
876
|
'+' : wx.ART_PLUS,
|
|
862
877
|
'-' : wx.ART_MINUS,
|
|
863
|
-
'x' : wx.ART_DELETE,
|
|
864
|
-
't' : wx.ART_TICK_MARK,
|
|
878
|
+
## 'x' : wx.ART_DELETE,
|
|
879
|
+
## 't' : wx.ART_TICK_MARK,
|
|
865
880
|
'~' : wx.ART_GO_HOME,
|
|
866
881
|
'undo' : wx.ART_UNDO,
|
|
867
882
|
'redo' : wx.ART_REDO,
|
|
@@ -901,18 +916,17 @@ class Icon(wx.Bitmap):
|
|
|
901
916
|
except Exception:
|
|
902
917
|
art = Icon.provided_arts.get(key)
|
|
903
918
|
bmp = wx.ArtProvider.GetBitmap(art or key, wx.ART_OTHER, size)
|
|
919
|
+
## Note: The result could be a zero-shaped bitmap.
|
|
904
920
|
return bmp
|
|
905
|
-
|
|
906
|
-
## Note: null (0-shaped) bitmap fails with AssertionError from 4.1.1
|
|
907
921
|
elif key == '':
|
|
922
|
+
## Note: A zero-shaped bitmap fails with AssertionError since 4.1.1
|
|
908
923
|
bmp = wx.Bitmap(size)
|
|
909
924
|
with wx.MemoryDC(bmp) as dc:
|
|
910
925
|
dc.SetBackground(wx.Brush('black'))
|
|
911
926
|
dc.Clear()
|
|
912
927
|
bmp.SetMaskColour('black') # return dummy-sized blank bitmap
|
|
913
928
|
return bmp
|
|
914
|
-
|
|
915
|
-
return wx.NullBitmap # The standard wx controls accept this,
|
|
929
|
+
return wx.NullBitmap # The standard wx controls accept this.
|
|
916
930
|
|
|
917
931
|
@staticmethod
|
|
918
932
|
def _getBitmap2(back, fore, size=None, subsize=3/4):
|
|
@@ -922,6 +936,8 @@ class Icon(wx.Bitmap):
|
|
|
922
936
|
subsize = wx.Size(size) * subsize
|
|
923
937
|
back = Icon._getBitmap1(back, size)
|
|
924
938
|
fore = Icon._getBitmap1(fore, subsize)
|
|
939
|
+
if back.Size == (0, 0) or fore.Size == (0, 0):
|
|
940
|
+
return back
|
|
925
941
|
x = size[0] - subsize[0]
|
|
926
942
|
y = size[1] - subsize[1]
|
|
927
943
|
with wx.MemoryDC(back) as dc:
|
|
@@ -975,8 +991,7 @@ class ClassicButton(wx.Button):
|
|
|
975
991
|
|
|
976
992
|
if handler:
|
|
977
993
|
self.Bind(wx.EVT_BUTTON, _F(handler))
|
|
978
|
-
|
|
979
|
-
self.SetToolTip(_Tip(handler.__doc__))
|
|
994
|
+
self.SetToolTip(_Tip(handler.__doc__))
|
|
980
995
|
if icon:
|
|
981
996
|
self.SetBitmap(Icon(icon))
|
|
982
997
|
|
|
@@ -996,8 +1011,7 @@ class Button(pb.PlateButton):
|
|
|
996
1011
|
|
|
997
1012
|
if handler:
|
|
998
1013
|
self.Bind(wx.EVT_BUTTON, _F(handler))
|
|
999
|
-
|
|
1000
|
-
self.SetToolTip(_Tip(handler.__doc__))
|
|
1014
|
+
self.SetToolTip(_Tip(handler.__doc__))
|
|
1001
1015
|
if icon:
|
|
1002
1016
|
self.SetBitmap(Icon(icon))
|
|
1003
1017
|
|
|
@@ -1029,8 +1043,7 @@ class ToggleButton(wx.ToggleButton):
|
|
|
1029
1043
|
|
|
1030
1044
|
if handler:
|
|
1031
1045
|
self.Bind(wx.EVT_TOGGLEBUTTON, _F(handler))
|
|
1032
|
-
|
|
1033
|
-
self.SetToolTip(_Tip(handler.__doc__))
|
|
1046
|
+
self.SetToolTip(_Tip(handler.__doc__))
|
|
1034
1047
|
if icon:
|
|
1035
1048
|
try:
|
|
1036
1049
|
self.SetBitmap(Icon(icon[0]))
|
|
@@ -1058,19 +1071,20 @@ class TextBox(wx.Control):
|
|
|
1058
1071
|
|
|
1059
1072
|
value = Value #: internal use only
|
|
1060
1073
|
|
|
1074
|
+
button = property(lambda self: self._btn)
|
|
1075
|
+
control = property(lambda self: self._ctrl)
|
|
1076
|
+
|
|
1061
1077
|
def __init__(self, parent, label='', handler=None, updater=None,
|
|
1062
1078
|
icon=None, readonly=False, size=(-1,-1), **kwargs):
|
|
1063
1079
|
wx.Control.__init__(self, parent, size=size, style=wx.BORDER_NONE)
|
|
1064
1080
|
|
|
1065
1081
|
kwargs['style'] = (kwargs.get('style', 0)
|
|
1066
|
-
|
|
1067
|
-
|
|
1082
|
+
| wx.TE_PROCESS_ENTER
|
|
1083
|
+
| (wx.TE_READONLY if readonly else 0))
|
|
1068
1084
|
|
|
1069
1085
|
self._ctrl = wx.TextCtrl(self, **kwargs)
|
|
1070
1086
|
self._btn = Button(self, label, None, icon,
|
|
1071
1087
|
size=(-1,-1) if label or icon else (0,0))
|
|
1072
|
-
self._ctrl.SetToolTip(_Tip(handler.__doc__))
|
|
1073
|
-
self._btn.SetToolTip(_Tip(updater.__doc__))
|
|
1074
1088
|
|
|
1075
1089
|
self.SetSizer(
|
|
1076
1090
|
pack(self, (
|
|
@@ -1081,9 +1095,11 @@ class TextBox(wx.Control):
|
|
|
1081
1095
|
if handler:
|
|
1082
1096
|
self._handler = _F(handler)
|
|
1083
1097
|
self._ctrl.Bind(wx.EVT_TEXT_ENTER, lambda v: self._handler(self))
|
|
1098
|
+
self._ctrl.SetToolTip(_Tip(handler.__doc__))
|
|
1084
1099
|
if updater:
|
|
1085
1100
|
self._updater = _F(updater)
|
|
1086
1101
|
self._btn.Bind(wx.EVT_BUTTON, lambda v: self._updater(self))
|
|
1102
|
+
self._btn.SetToolTip(_Tip(updater.__doc__))
|
|
1087
1103
|
|
|
1088
1104
|
self.Bind(wx.EVT_NAVIGATION_KEY, self.OnNavKey)
|
|
1089
1105
|
|
|
@@ -1134,19 +1150,20 @@ class Choice(wx.Control):
|
|
|
1134
1150
|
lambda self,v: self._ctrl.SetItems(v),
|
|
1135
1151
|
doc="combobox items:list")
|
|
1136
1152
|
|
|
1153
|
+
button = property(lambda self: self._btn)
|
|
1154
|
+
control = property(lambda self: self._ctrl)
|
|
1155
|
+
|
|
1137
1156
|
def __init__(self, parent, label='', handler=None, updater=None,
|
|
1138
1157
|
icon=None, readonly=False, size=(-1,-1), **kwargs):
|
|
1139
1158
|
wx.Control.__init__(self, parent, size=size, style=wx.BORDER_NONE)
|
|
1140
1159
|
|
|
1141
1160
|
kwargs['style'] = (kwargs.get('style', 0)
|
|
1142
|
-
|
|
1143
|
-
|
|
1161
|
+
| wx.TE_PROCESS_ENTER
|
|
1162
|
+
| (wx.CB_READONLY if readonly else 0))
|
|
1144
1163
|
|
|
1145
1164
|
self._ctrl = wx.ComboBox(self, **kwargs)
|
|
1146
1165
|
self._btn = Button(self, label, None, icon,
|
|
1147
1166
|
size=(-1,-1) if label or icon else (0,0))
|
|
1148
|
-
self._ctrl.SetToolTip(_Tip(handler.__doc__))
|
|
1149
|
-
self._btn.SetToolTip(_Tip(updater.__doc__))
|
|
1150
1167
|
|
|
1151
1168
|
self.SetSizer(
|
|
1152
1169
|
pack(self, (
|
|
@@ -1158,10 +1175,12 @@ class Choice(wx.Control):
|
|
|
1158
1175
|
self._handler = _F(handler)
|
|
1159
1176
|
self._ctrl.Bind(wx.EVT_TEXT_ENTER, lambda v: self._handler(self))
|
|
1160
1177
|
self._ctrl.Bind(wx.EVT_COMBOBOX, lambda v: self._handler(self))
|
|
1178
|
+
self._ctrl.SetToolTip(_Tip(handler.__doc__))
|
|
1161
1179
|
self._ctrl.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter)
|
|
1162
1180
|
if updater:
|
|
1163
1181
|
self._updater = _F(updater)
|
|
1164
1182
|
self._btn.Bind(wx.EVT_BUTTON, lambda v: self._updater(self))
|
|
1183
|
+
self._btn.SetToolTip(_Tip(updater.__doc__))
|
|
1165
1184
|
|
|
1166
1185
|
self.Bind(wx.EVT_NAVIGATION_KEY, self.OnNavKey)
|
|
1167
1186
|
|
mwx/framework.py
CHANGED
mwx/graphman.py
CHANGED
|
@@ -381,10 +381,10 @@ class LayerInterface(CtrlInterface):
|
|
|
381
381
|
lambda v: reset_params(v, checked_only=wx.GetKeyState(wx.WXK_SHIFT)),
|
|
382
382
|
lambda v: v.Enable(bool(self.parameters))),
|
|
383
383
|
(),
|
|
384
|
-
(wx.ID_EDIT, "&Edit module", "Edit module", Icon('pen'),
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
384
|
+
## (wx.ID_EDIT, "&Edit module", "Edit module", Icon('pen'),
|
|
385
|
+
## lambda v: self.parent.edit_plug(self.__module__),
|
|
386
|
+
## lambda v: v.Enable(self.editable)),
|
|
387
|
+
##
|
|
388
388
|
(mwx.ID_(201), "&Reload module", "Reload module", Icon('load'),
|
|
389
389
|
lambda v: self.parent.reload_plug(self.__module__),
|
|
390
390
|
lambda v: v.Enable(self.reloadable
|
|
@@ -843,9 +843,6 @@ class Frame(mwx.Frame):
|
|
|
843
843
|
|
|
844
844
|
## Accepts DnD
|
|
845
845
|
self.SetDropTarget(MyFileDropLoader(self.graph, self))
|
|
846
|
-
|
|
847
|
-
## Script editor for plugins (external call)
|
|
848
|
-
EDITOR = "notepad"
|
|
849
846
|
|
|
850
847
|
SYNC_SWITCH = True
|
|
851
848
|
|
|
@@ -1339,13 +1336,13 @@ class Frame(mwx.Frame):
|
|
|
1339
1336
|
if shell.target is plug:
|
|
1340
1337
|
shell.handler('shell_activated', shell)
|
|
1341
1338
|
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1339
|
+
## Script editor for plugins (external call)
|
|
1340
|
+
## EDITOR = "notepad"
|
|
1341
|
+
##
|
|
1342
|
+
## @ignore(ResourceWarning)
|
|
1343
|
+
## def edit_plug(self, name):
|
|
1344
|
+
## plug = self.get_plug(name)
|
|
1345
|
+
## Popen([self.EDITOR, inspect.getmodule(plug).__file__])
|
|
1349
1346
|
|
|
1350
1347
|
def inspect_plug(self, name):
|
|
1351
1348
|
"""Dive into the process to inspect plugs in the shell.
|
mwx/images.py
CHANGED
|
@@ -652,6 +652,22 @@ w = PyEmbeddedImage(
|
|
|
652
652
|
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWfIwBngDGCYAAAAASUVO'
|
|
653
653
|
b'RK5CYII=')
|
|
654
654
|
|
|
655
|
+
#----------------------------------------------------------------------
|
|
656
|
+
x = PyEmbeddedImage(
|
|
657
|
+
b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0'
|
|
658
|
+
b'RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIhSURBVDjLlZPrThNRFIWJicmJ'
|
|
659
|
+
b'z6BWiYbIkYDEG0JbBiitDQgm0PuFXqSAtKXtpE2hNuoPTXwSnwtExd6w0pl2OtPlrphKLSXh'
|
|
660
|
+
b'x07OZM769qy19wwAGLhM1ddC184+d18QMzoq3lfsD3LZ7Y3XbE5DL6Atzuyilc5Ciyd7IHVf'
|
|
661
|
+
b'gNcDYTQ2tvDr5crn6uLSvX+Av2Lk36FFpSVENDe3OxDZu8apO5rROJDLo30+Nlvj5RnTlVNA'
|
|
662
|
+
b'Ks1aCVFr7b4BPn6Cls21AWgEQlz2+Dl1h7IdA+i97A/geP65WhbmrnZZ0GIJpr6OqZqYAd5/'
|
|
663
|
+
b'gJpKox4Mg7pD2YoC2b0/54rJQuJZdm6Izcgma4TW1WZ0h+y8BfbyJMwBmSxkjw+VObNanp5h'
|
|
664
|
+
b'/adwGhaTXF4NWbLj9gEONyCmUZmd10pGgf1/vwcgOT3tUQE0DdicwIod2EmSbwsKE1P8QoDk'
|
|
665
|
+
b'cHPJ5YESjgBJkYQpIEZ2KEB51Y6y3ojvY+P8XEDN7uKS0w0ltA7QGCWHCxSWWpwyaCeLy0Bk'
|
|
666
|
+
b'A7UXyyg8fIzDoWHeBaDN4tQdSvAVdU1Aok+nsNTipIEVnkywo/FHatVkBoIhnFisOBoZxcGt'
|
|
667
|
+
b'Qd4B0GYJNZsDSiAEadUBCkstPtN3Avs2Msa+Dt9XfxoFSNYF/Bh9gP0bOqHLAm2WUF1YQskw'
|
|
668
|
+
b'rVFYPWkf3h1iXwbvqGfFPSGW9Eah8HSS9fuZDnS32f71m8KFY7xs/QZyu6TH2+2+FAAAAABJ'
|
|
669
|
+
b'RU5ErkJggg==')
|
|
670
|
+
|
|
655
671
|
#----------------------------------------------------------------------
|
|
656
672
|
xo = PyEmbeddedImage(
|
|
657
673
|
b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEWywNxcVlwcHhwUEhQE'
|
mwx/nutshell.py
CHANGED
|
@@ -32,19 +32,6 @@ from .utilus import split_words, split_parts, split_tokens, find_modules
|
|
|
32
32
|
from .framework import CtrlInterface, AuiNotebook, Menu
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
## Monkey-patch for wx.py.introspect.getRoot with terminator '('.
|
|
36
|
-
getRoot = introspect.getRoot
|
|
37
|
-
def _getRoot(command, terminator=None):
|
|
38
|
-
"""Return the rightmost root portion of an arbitrary Python command."""
|
|
39
|
-
if terminator == '(':
|
|
40
|
-
words = split_words(command, reverse=1)
|
|
41
|
-
for word in words:
|
|
42
|
-
if word == terminator:
|
|
43
|
-
return next(words, '')
|
|
44
|
-
return getRoot(command, terminator) # original
|
|
45
|
-
introspect.getRoot = _getRoot
|
|
46
|
-
|
|
47
|
-
|
|
48
35
|
## URL pattern (flag = re.M | re.A)
|
|
49
36
|
## url_re = r"https?://[\w/:%#$&?()~.=+-]+"
|
|
50
37
|
url_re = r"https?://[\w/:%#$&?!@~.,;=+-]+" # excluding ()
|
|
@@ -925,15 +912,15 @@ class EditorInterface(AutoCompInterfaceMixin, CtrlInterface):
|
|
|
925
912
|
def expr_at_caret(self):
|
|
926
913
|
"""A syntax unit (expression) at the caret-line."""
|
|
927
914
|
p = q = self.cpos
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
if
|
|
915
|
+
lst = self.get_style(p-1)
|
|
916
|
+
rst = self.get_style(p)
|
|
917
|
+
if lst == rst == 'moji': # inside string
|
|
931
918
|
## styles = {'moji'}
|
|
932
919
|
return ''
|
|
933
|
-
elif
|
|
920
|
+
elif lst == 'suji' or rst == 'suji':
|
|
934
921
|
styles = {'suji'}
|
|
935
|
-
elif
|
|
936
|
-
or
|
|
922
|
+
elif lst in ('word', 'dot', 'moji', 'rparen')\
|
|
923
|
+
or rst in ('word', 'dot', 'moji', 'lparen'):
|
|
937
924
|
styles = {'word', 'dot', 'moji', 'paren'}
|
|
938
925
|
else:
|
|
939
926
|
return ''
|
|
@@ -2011,9 +1998,9 @@ class Buffer(EditorInterface, EditWindow):
|
|
|
2011
1998
|
|
|
2012
1999
|
def OnEnterDot(self, evt):
|
|
2013
2000
|
p = self.cpos
|
|
2014
|
-
|
|
2001
|
+
lst = self.get_style(p-1)
|
|
2015
2002
|
rst = self.get_style(p)
|
|
2016
|
-
if
|
|
2003
|
+
if lst not in ('moji', 'word', 'rparen') or rst == 'word':
|
|
2017
2004
|
self.handler('quit', evt) # don't enter autocomp
|
|
2018
2005
|
evt.Skip()
|
|
2019
2006
|
|
|
@@ -3132,13 +3119,13 @@ class Nautilus(EditorInterface, Shell):
|
|
|
3132
3119
|
self.handler('quit', evt)
|
|
3133
3120
|
return
|
|
3134
3121
|
p = self.cpos
|
|
3135
|
-
|
|
3122
|
+
lst = self.get_style(p-1)
|
|
3136
3123
|
rst = self.get_style(p)
|
|
3137
3124
|
if p == self.bolc:
|
|
3138
3125
|
self.ReplaceSelection('self') # replace [.] --> [self.]
|
|
3139
|
-
elif
|
|
3126
|
+
elif lst in ('space', 'sep', 'lparen'):
|
|
3140
3127
|
self.ReplaceSelection('self')
|
|
3141
|
-
elif
|
|
3128
|
+
elif lst not in ('moji', 'word', 'rparen') or rst == 'word':
|
|
3142
3129
|
self.handler('quit', evt) # don't enter autocomp
|
|
3143
3130
|
evt.Skip()
|
|
3144
3131
|
|
mwx/utilus.py
CHANGED
|
@@ -999,13 +999,13 @@ def get_fullargspec(f):
|
|
|
999
999
|
## ...(details)...
|
|
1000
1000
|
## ```
|
|
1001
1001
|
doc = inspect.getdoc(f)
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
return None
|
|
1002
|
+
for word in split_parts(doc or ''): # Search pattern for `func(argspec)`.
|
|
1003
|
+
if word.startswith('('):
|
|
1004
|
+
argspec = word[1:-1]
|
|
1005
|
+
break
|
|
1007
1006
|
else:
|
|
1008
|
-
|
|
1007
|
+
return None # no argument spec information
|
|
1008
|
+
if argspec:
|
|
1009
1009
|
argparts = ['']
|
|
1010
1010
|
for part in split_parts(argspec): # Separate argument parts with commas.
|
|
1011
1011
|
if not part.strip():
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
mwx/__init__.py,sha256=pS7ZG8QKRypiFFiaWAq_opBB6I_1viZ0zUMk2TbjzE0,667
|
|
2
2
|
mwx/bookshelf.py,sha256=MXjrm_ryRGHvOFKu8wb10qz_oka70xW2yFbYjBMYfns,8140
|
|
3
|
-
mwx/controls.py,sha256=
|
|
4
|
-
mwx/framework.py,sha256=
|
|
5
|
-
mwx/graphman.py,sha256=
|
|
6
|
-
mwx/images.py,sha256=
|
|
3
|
+
mwx/controls.py,sha256=_YYcSn2X4sgWOfHiOtBoPCMWtr9ZCfd5QM0O84cPtio,49421
|
|
4
|
+
mwx/framework.py,sha256=Qxxi5ximgB4l-I2cWTMTKYFRD0j-uXKP0M5FVj3-_W8,76830
|
|
5
|
+
mwx/graphman.py,sha256=anyTeJUTuqL1JnPdw7eJA5spbZQiCxBDCkd8GuUX8eI,70601
|
|
6
|
+
mwx/images.py,sha256=Kkfy9QI_hMtwShSjUS4-ZpC_EkVuah_XhpBOR4wAKkM,49792
|
|
7
7
|
mwx/matplot2.py,sha256=Htwegq6N5G7oKSRCuajik5Dixd93i8PKVbkL7Azy99M,33150
|
|
8
8
|
mwx/matplot2g.py,sha256=4BBHlvfhg1796hu1nTCsTA82YRkZhwUnfcHCBf5ZGO8,65083
|
|
9
9
|
mwx/matplot2lg.py,sha256=cb0EZXivccDQu4oFj5ddSUF9pEE4f5UuFJJK2ELItww,27404
|
|
10
10
|
mwx/mgplt.py,sha256=8mXbHpCmm7lz3XbAxOg7IVC7DaSGBEby1UfTlMl9kjk,5604
|
|
11
|
-
mwx/nutshell.py,sha256=
|
|
11
|
+
mwx/nutshell.py,sha256=_qUA89Xu7PZKbDO5XjMSfXfwj9MiNOGJjWi-pdrfYAA,141900
|
|
12
12
|
mwx/testsuite.py,sha256=Zk75onPSEn2tf0swS3l-vIn6yTXGB7allIyvJsPHj20,1229
|
|
13
|
-
mwx/utilus.py,sha256=
|
|
13
|
+
mwx/utilus.py,sha256=ObXYWsDVn5DmjvwVQgP2HGAhrdxlDrwL7g9pMCDbU7U,38127
|
|
14
14
|
mwx/wxmon.py,sha256=yzWqrbY6LzpfRwQeytYUeqFhFuLVm_XEvrVAL_k0HBQ,12756
|
|
15
15
|
mwx/wxpdb.py,sha256=ih2iLcOgYnUX849YXO4niIYue6amuoG7nWdpr-X1jFw,18839
|
|
16
16
|
mwx/wxwil.py,sha256=hhyB1lPrF9ixeObxCOKQv0Theu-B-kpJg_yVU3EGSNg,5406
|
|
@@ -22,7 +22,7 @@ mwx/plugins/frame_listview.py,sha256=gowjQ-ARNonMkDSXkQgPKq4U9YBJ-vQ0jK2krBVOdCs
|
|
|
22
22
|
mwx/plugins/line_profile.py,sha256=zzm6_7lnAnNepLbh07ordp3nRWDFQJtu719ZVjrVf8s,819
|
|
23
23
|
mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
|
|
24
24
|
mwx/py/filling.py,sha256=fumUG1F5M9TL-Dfqni4G85uk7TmvnUunTbdcPDV0vfo,16857
|
|
25
|
-
mwxlib-1.4.
|
|
26
|
-
mwxlib-1.4.
|
|
27
|
-
mwxlib-1.4.
|
|
28
|
-
mwxlib-1.4.
|
|
25
|
+
mwxlib-1.4.8.dist-info/METADATA,sha256=6dosmSNJ_AVOVaurY8hLbmyxKhMIiCn7rzWdbQmP0zU,7433
|
|
26
|
+
mwxlib-1.4.8.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
27
|
+
mwxlib-1.4.8.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
|
|
28
|
+
mwxlib-1.4.8.dist-info/RECORD,,
|
|
File without changes
|