mwxlib 0.95.0__py3-none-any.whl → 0.95.3__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/__init__.py CHANGED
@@ -8,12 +8,12 @@ from .framework import Frame, MiniFrame, ShellFrame, deb
8
8
 
9
9
  ## Controls
10
10
  ## from . import controls
11
- ## from .controls import Param, LParam, Knob, ControlPanel, Clipboard, Icon
12
- ## from .controls import Button, ToggleButton, TextCtrl, Choice, Gauge, Indicator
11
+ from .controls import Param, LParam, Knob, ControlPanel, Clipboard, Icon
12
+ from .controls import Button, ToggleButton, TextCtrl, Choice, Gauge, Indicator
13
13
 
14
14
  ## Plugman
15
15
  ## from . import graphman
16
- ## from .graphman import Frame, Layer, Thread, Graph
16
+ ## from .graphman import Frame as ViewFrame, Layer, Thread, Graph
17
17
 
18
18
  ## Matplot
19
19
  ## from .matplot2 import MatplotPanel
@@ -23,5 +23,4 @@ from .framework import Frame, MiniFrame, ShellFrame, deb
23
23
  ## from .matplot2lg import LineProfile
24
24
 
25
25
  ## Gnuplot
26
- ## from .mgplt import Gnuplot
27
- ## from .mgplt import GnuplotFrame
26
+ ## from .mgplt import Gnuplot, GnuplotFrame
mwx/bookshelf.py CHANGED
@@ -36,13 +36,13 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
36
36
  self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
37
37
 
38
38
  @self.handler.bind('enter pressed')
39
- def enter(v):
39
+ def enter(evt):
40
40
  data = self.GetItemData(self.Selection)
41
41
  if data:
42
42
  data.SetFocus()
43
43
 
44
44
  @self.handler.bind('f5 pressed')
45
- def refresh(v, clear=False):
45
+ def refresh(evt, clear=False):
46
46
  self.build_tree(clear)
47
47
  if self.target:
48
48
  self.target.current_editor.SetFocus()
@@ -51,7 +51,7 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
51
51
  self.handler.bind('S-f5 pressed', partial(refresh, clear=1))
52
52
 
53
53
  @self.handler.bind('delete pressed')
54
- def delete(v):
54
+ def delete(evt):
55
55
  data = self.GetItemData(self.Selection)
56
56
  if data:
57
57
  data.parent.kill_buffer(data) # -> focus moves
@@ -59,10 +59,10 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
59
59
 
60
60
  @self.handler.bind('*button* pressed')
61
61
  @self.handler.bind('*button* released')
62
- def dispatch(v):
62
+ def dispatch(evt):
63
63
  """Fork mouse events to the parent."""
64
- self.parent.handler(self.handler.current_event, v)
65
- v.Skip()
64
+ self.parent.handler(self.handler.current_event, evt)
65
+ evt.Skip()
66
66
 
67
67
  def OnDestroy(self, evt):
68
68
  if evt.EventObject is self:
mwx/controls.py CHANGED
@@ -688,21 +688,21 @@ class ControlPanel(scrolled.ScrolledPanel):
688
688
  self.Sizer.Add(sizer, expand>1, p | wx.ALL, border)
689
689
 
690
690
  ## Register object and parameter groups
691
- def flatiter(a):
691
+ def _flatiter(a):
692
692
  for c in a:
693
693
  if isinstance(c, tuple):
694
- yield from flatiter(c)
694
+ yield from _flatiter(c)
695
695
  elif isinstance(c, wx.Object):
696
696
  yield c
697
- self.__groups.append(list(flatiter(objs)))
697
+ self.__groups.append(list(_flatiter(objs)))
698
698
 
699
- def variter(a):
699
+ def _variter(a):
700
700
  for c in a:
701
701
  if isinstance(c, Knob):
702
702
  yield c.param
703
703
  elif hasattr(c, 'value'):
704
704
  yield c
705
- self.__params.append(list(variter(objs)))
705
+ self.__params.append(list(_variter(objs)))
706
706
 
707
707
  ## Set appearance of the layout group
708
708
  self.show(-1, visible)
@@ -877,12 +877,44 @@ if 1:
877
877
  if isinstance(v, wx.lib.embeddedimage.PyEmbeddedImage)
878
878
  }
879
879
 
880
- def Icon(key, size=None):
881
- """Returns an iconic bitmap with the specified size (w,h).
880
+ class Icon(wx.Bitmap):
881
+ """Returns an iconic bitmap with the specified size (w, h).
882
882
 
883
883
  The key is either Icon.provided_arts or Icon.custom_images key.
884
884
  If the key is empty it returns a transparent bitmap, otherwise NullBitmap.
885
+
886
+ Note:
887
+ A null (0-shaped) bitmap fails with AssertionError from 4.1.1
885
888
  """
889
+ provided_arts = _provided_arts
890
+ custom_images = _custom_images
891
+
892
+ def __init__(self, *args, **kwargs):
893
+ try:
894
+ bmp = _getBitmap1(*args, **kwargs)
895
+ except TypeError:
896
+ bmp = _getBitmap2(*args, **kwargs)
897
+ wx.Bitmap.__init__(self, bmp)
898
+
899
+ @staticmethod
900
+ def iconify(icon, w, h):
901
+ ## if wx.VERSION >= (4,1,0):
902
+ try:
903
+ import wx.svg
904
+ import requests
905
+ url = "https://api.iconify.design/{}.svg".format(icon.replace(':', '/'))
906
+ res = requests.get(url, timeout=3.0)
907
+ img = wx.svg.SVGimage.CreateFromBytes(res.content)
908
+ bmp = img.ConvertToScaledBitmap(wx.Size(w, h))
909
+ except Exception:
910
+ print("- Failed to load iconify.design/{}".format(icon))
911
+ bmp = wx.NullBitmap
912
+ return bmp
913
+
914
+ Icon2 = Icon # for backward compatibility
915
+
916
+
917
+ def _getBitmap1(key, size=None):
886
918
  if key:
887
919
  try:
888
920
  art = _custom_images.get(key) # None => AttributeError
@@ -907,20 +939,16 @@ def Icon(key, size=None):
907
939
  del dc
908
940
  bmp.SetMaskColour('black') # return dummy-sized blank bitmap
909
941
  return bmp
910
-
911
942
  return wx.NullBitmap # The standard wx controls accept this,
912
943
 
913
- Icon.provided_arts = _provided_arts
914
- Icon.custom_images = _custom_images
915
944
 
916
-
917
- def Icon2(back, fore, size=None, subsize=0.6):
945
+ def _getBitmap2(back, fore, size=None, subsize=3/4):
918
946
  if not size:
919
947
  size = (16,16)
920
948
  if isinstance(subsize, float):
921
949
  subsize = wx.Size(size) * subsize
922
- back = Icon(back, size)
923
- fore = Icon(fore, subsize)
950
+ back = _getBitmap1(back, size)
951
+ fore = _getBitmap1(fore, subsize)
924
952
  x = size[0] - subsize[0]
925
953
  y = size[1] - subsize[1]
926
954
  dc = wx.MemoryDC(back)
@@ -929,21 +957,6 @@ def Icon2(back, fore, size=None, subsize=0.6):
929
957
  return back
930
958
 
931
959
 
932
- def Iconify(icon, w, h):
933
- ## if wx.VERSION >= (4,1,0):
934
- try:
935
- import wx.svg
936
- import requests
937
- url = "https://api.iconify.design/{}.svg".format(icon.replace(':', '/'))
938
- res = requests.get(url, timeout=3.0)
939
- img = wx.svg.SVGimage.CreateFromBytes(res.content)
940
- bmp = img.ConvertToScaledBitmap(wx.Size(w, h))
941
- return bmp
942
- except Exception:
943
- print("- Failed to load iconify.design/{}".format(icon))
944
- pass
945
-
946
-
947
960
  def _Icon(v):
948
961
  if isinstance(v, (str, bytes)):
949
962
  return Icon(v)
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "0.95.0"
4
+ __version__ = "0.95.3"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from functools import wraps, partial
@@ -225,8 +225,8 @@ class KeyCtrlInterfaceMixin:
225
225
  """
226
226
  assert isinstance(keymap, str)
227
227
 
228
- def _Pass(v):
229
- self.message("{} {}".format(keymap, v.key))
228
+ def _Pass(evt):
229
+ self.message("{} {}".format(keymap, evt.key))
230
230
  _Pass.__name__ = str('pass')
231
231
 
232
232
  state = self.handler.default_state
@@ -758,7 +758,7 @@ class Frame(wx.Frame, KeyCtrlInterfaceMixin):
758
758
  evt.Skip()
759
759
  self.Bind(wx.EVT_CHAR_HOOK, hook_char)
760
760
 
761
- def close(v):
761
+ def close(evt):
762
762
  """Close the window."""
763
763
  self.Close()
764
764
 
@@ -824,7 +824,7 @@ class MiniFrame(wx.MiniFrame, KeyCtrlInterfaceMixin):
824
824
  ## To default close >>> self.Unbind(wx.EVT_CLOSE)
825
825
  self.Bind(wx.EVT_CLOSE, lambda v: self.Show(0))
826
826
 
827
- def close(v):
827
+ def close(evt):
828
828
  """Close the window."""
829
829
  self.Close()
830
830
 
@@ -1222,16 +1222,16 @@ class ShellFrame(MiniFrame):
1222
1222
  evt.Skip()
1223
1223
  self.Bind(wx.EVT_SIZE, on_size)
1224
1224
 
1225
- def fork_debugger(v):
1225
+ def fork_debugger(evt):
1226
1226
  """Fork key events to the debugger."""
1227
- self.debugger.handler(self.handler.current_event, v)
1227
+ self.debugger.handler(self.handler.current_event, evt)
1228
1228
  if self.debugger.handler.current_state:
1229
1229
  if self.debugger.tracing:
1230
1230
  self.message("Current status is tracing. Press [C-g] to quit.")
1231
1231
  elif not self.debugger.busy:
1232
1232
  self.message("Current status is inconsistent. Press [C-g] to quit.")
1233
1233
  self.indicator.Value = 7
1234
- v.Skip()
1234
+ evt.Skip()
1235
1235
 
1236
1236
  self.handler.update({ # DNA<ShellFrame>
1237
1237
  None : {
mwx/graphman.py CHANGED
@@ -382,24 +382,8 @@ class LayerInterface(CtrlInterface):
382
382
  self.Bind(wx.EVT_CONTEXT_MENU,
383
383
  lambda v: mwx.Menu.Popup(self, self.menu))
384
384
 
385
- def destroy(v):
386
- if v.EventObject is self:
387
- if self.thread and self.thread.active:
388
- self.thread.active = 0
389
- self.thread.Stop()
390
- del self.Arts
391
- v.Skip()
392
- self.Bind(wx.EVT_WINDOW_DESTROY, destroy)
393
-
394
- def on_show(v):
395
- if not self:
396
- return
397
- if v.IsShown():
398
- self.handler('page_shown', self)
399
- elif isinstance(self.Parent, aui.AuiNotebook):
400
- self.handler('page_hidden', self)
401
- v.Skip()
402
- self.Bind(wx.EVT_SHOW, on_show)
385
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
386
+ self.Bind(wx.EVT_SHOW, self.OnShow)
403
387
 
404
388
  try:
405
389
  self.Init()
@@ -431,6 +415,23 @@ class LayerInterface(CtrlInterface):
431
415
  if self.parameters:
432
416
  session['params'] = self.parameters
433
417
 
418
+ def OnDestroy(self, evt):
419
+ if evt.EventObject is self:
420
+ if self.thread and self.thread.active:
421
+ self.thread.active = 0
422
+ self.thread.Stop()
423
+ del self.Arts
424
+ evt.Skip()
425
+
426
+ def OnShow(self, evt):
427
+ if not self:
428
+ return
429
+ if evt.IsShown():
430
+ self.handler('page_shown', self)
431
+ elif isinstance(self.Parent, aui.AuiNotebook):
432
+ self.handler('page_hidden', self)
433
+ evt.Skip()
434
+
434
435
  Shown = property(
435
436
  lambda self: self.IsShown(),
436
437
  lambda self,v: self.Show(v))
@@ -540,8 +541,11 @@ class Graph(GraphPlot):
540
541
 
541
542
  def set_frame_visible(self, v):
542
543
  if self.frame:
543
- self.frame.set_visible(v)
544
- self.draw()
544
+ if self.frame.get_visible() != v:
545
+ self.frame.set_visible(v)
546
+ return True
547
+ return False
548
+ return None
545
549
 
546
550
  def get_markups_visible(self):
547
551
  return self.marked.get_visible()
@@ -728,10 +732,6 @@ class Frame(mwx.Frame):
728
732
  (wx.ID_PASTE, "&Paste\t(C-v)", "Paste buffer from clipboard", Icon('paste'),
729
733
  lambda v: self.__view.read_buffer_from_clipboard()),
730
734
  (),
731
- (mwx.ID_(20), "Show &Image", "Show/Hide image", wx.ITEM_CHECK, Icon('image'),
732
- lambda v: self.__view.set_frame_visible(v.IsChecked()),
733
- lambda v: v.Check(self.__view.get_frame_visible())),
734
-
735
735
  (mwx.ID_(21), "Toggle &Markers", "Show/Hide markups", wx.ITEM_CHECK, Icon('+'),
736
736
  lambda v: self.__view.set_markups_visible(v.IsChecked()),
737
737
  lambda v: v.Check(self.__view.get_markups_visible())),
@@ -806,21 +806,31 @@ class Frame(mwx.Frame):
806
806
  })
807
807
 
808
808
  ## Add main-menu to context-menu
809
- self.graph.menu += self.menubar["Edit"][2:8]
810
- self.output.menu += self.menubar["Edit"][2:8]
809
+ self.graph.menu += self.menubar["Edit"][2:7]
810
+ self.output.menu += self.menubar["Edit"][2:7]
811
811
 
812
812
  self._mgr.Bind(aui.EVT_AUI_PANE_CLOSE, self.OnPaneClose)
813
813
 
814
814
  self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
815
815
  self.Bind(wx.EVT_CLOSE, self.OnClose)
816
816
 
817
+ def on_move(evt, show):
818
+ self.graph.set_frame_visible(show)
819
+ self.output.set_frame_visible(show)
820
+ if show:
821
+ self.graph.draw()
822
+ self.output.draw()
823
+ evt.Skip()
824
+ self.Bind(wx.EVT_MOVE_START, lambda v :on_move(v, show=0))
825
+ self.Bind(wx.EVT_MOVE_END, lambda v :on_move(v, show=1))
826
+
817
827
  ## Custom Key Bindings
818
828
  self.define_key('* C-g', self.Quit)
819
829
 
820
830
  @self.shellframe.define_key('* C-g')
821
- def quit(v):
831
+ def quit(evt):
822
832
  """Dispatch quit to the main Frame."""
823
- self.handler('C-g pressed', v)
833
+ self.handler('C-g pressed', evt)
824
834
 
825
835
  ## Accepts DnD
826
836
  self.SetDropTarget(MyFileDropLoader(self.graph, self))
@@ -1305,7 +1315,7 @@ class Frame(mwx.Frame):
1305
1315
  nb = plug.Parent
1306
1316
  j = nb.GetPageIndex(plug)
1307
1317
  nb.RemovePage(j) # just remove page
1308
- ## nb.DeletePage(j) # cf. destroy plug object too
1318
+ ## nb.DeletePage(j) # Destroys plug object too.
1309
1319
  else:
1310
1320
  nb = None
1311
1321
  self._mgr.DetachPane(plug)
@@ -1366,6 +1376,7 @@ class Frame(mwx.Frame):
1366
1376
  plug = _plug
1367
1377
  init(shell)
1368
1378
  self.shellframe.Show()
1379
+ self.shellframe.load(plug)
1369
1380
 
1370
1381
  def OnLoadPlugins(self, evt):
1371
1382
  with wx.FileDialog(self, "Load a plugin file",
@@ -1804,14 +1815,18 @@ class Frame(mwx.Frame):
1804
1815
  o.write("self.load_plug({!r}, session={})\n".format(path, session or None))
1805
1816
  o.write("self._mgr.LoadPerspective({!r})\n".format(self._mgr.SavePerspective()))
1806
1817
 
1807
- ## stack-frame
1808
- paths = [x.pathname for x in self.graph.all_frames if x.pathname]
1809
- if paths:
1810
- o.write("self.load_frame(\n{}, self.graph)\n".format(
1811
- pformat(paths, width=160)))
1812
-
1813
- frame = self.graph.frame # restore currently selected frame
1814
- if frame and frame.pathname:
1815
- o.write("self.graph.select({!r})\n".format(frame.name))
1818
+ def _save(view):
1819
+ name = view.Name
1820
+ paths = [x.pathname for x in view.all_frames if x.pathname]
1821
+ o.write(f"self.{name}.unit = {view.unit:g}\n")
1822
+ o.write(f"self.load_frame({paths!r}, self.{name})\n")
1823
+ try:
1824
+ index = paths.index(view.frame.pathname)
1825
+ o.write(f"self.{name}.select({index})\n")
1826
+ except Exception:
1827
+ pass
1828
+
1829
+ _save(self.graph)
1830
+ _save(self.output)
1816
1831
 
1817
1832
  self.message("\b done.")
mwx/matplot2.py CHANGED
@@ -143,9 +143,9 @@ class MatplotPanel(wx.Panel):
143
143
  ## The context menus is disabled and never skip to the next handler.
144
144
  self.canvas.Bind(wx.EVT_CONTEXT_MENU, lambda v: self.handler('context_menu', v))
145
145
 
146
- def fork(v):
147
- if self.handler.fork(self.handler.current_event, v) is None:
148
- v.Skip()
146
+ def fork(evt):
147
+ if self.handler.fork(self.handler.current_event, evt) is None:
148
+ evt.Skip()
149
149
 
150
150
  self.__handler = mwx.FSM({ # DNA<MatplotPanel>
151
151
  None : {
@@ -446,6 +446,7 @@ class MatplotPanel(wx.Panel):
446
446
  x, y = [x], [y]
447
447
  self.selected.set_visible(1)
448
448
  self.selected.set_data(x, y)
449
+ self.handler('selector_drawn', self.frame)
449
450
  self.draw(self.selected)
450
451
  self.trace_point(*v)
451
452
 
@@ -453,6 +454,7 @@ class MatplotPanel(wx.Panel):
453
454
  def Selector(self):
454
455
  self.selected.set_visible(0)
455
456
  self.selected.set_data([], [])
457
+ self.handler('selector_removed', self.frame)
456
458
  self.draw(self.selected)
457
459
 
458
460
  ## --------------------------------
mwx/matplot2g.py CHANGED
@@ -327,7 +327,7 @@ class AxesImagePhantom(object):
327
327
  """Convert xydata (x,y) -> [nx,ny] pixel.
328
328
  If cast, convert pixel-based lengths to pixel numbers.
329
329
  """
330
- def pixel_cast(n):
330
+ def _cast(n):
331
331
  return np.int32(np.floor(np.round(n, 1)))
332
332
  if y is None:
333
333
  warnings.warn("Setting xy data with single tuple is deprecated.",
@@ -341,7 +341,7 @@ class AxesImagePhantom(object):
341
341
  nx = (x - l) / ux
342
342
  ny = (t - y) / uy # Y ピクセルインデクスは座標と逆
343
343
  if cast:
344
- return (pixel_cast(nx), pixel_cast(ny))
344
+ return (_cast(nx), _cast(ny))
345
345
  return (nx-0.5, ny-0.5)
346
346
 
347
347
  def xyfrompixel(self, nx, ny=None):
@@ -393,7 +393,7 @@ class GraphPlot(MatplotPanel):
393
393
  def __init__(self, *args, **kwargs):
394
394
  MatplotPanel.__init__(self, *args, **kwargs)
395
395
 
396
- def _draw(v):
396
+ def _draw(evt):
397
397
  self.canvas.draw_idle()
398
398
 
399
399
  self.handler.update({ # DNA<GraphPlot>
@@ -780,7 +780,7 @@ class GraphPlot(MatplotPanel):
780
780
  def index(self, j):
781
781
  if isinstance(j, str):
782
782
  names = [art.name for art in self.__Arts]
783
- return names.index(j) # -> ValueError: `j` is not in list
783
+ return names.index(j)
784
784
  return self.__Arts.index(j)
785
785
 
786
786
  def find_frame(self, j):
mwx/matplot2lg.py CHANGED
@@ -98,8 +98,7 @@ class LinePlot(MatplotPanel):
98
98
  self.__annotations = []
99
99
 
100
100
  #<matplotlib.text.Annotation>
101
- def annotation(v, xy, xytext, xycoords='data',
102
- textcoords='offset points', **arrowprops):
101
+ def _A(v, xy, xytext, xycoords='data', textcoords='offset points', **arrowprops):
103
102
  return self.axes.annotate(
104
103
  '' if v is None else '{:g}'.format(v),
105
104
  xy, xytext, xycoords, textcoords, arrowprops, size='small')
@@ -109,14 +108,14 @@ class LinePlot(MatplotPanel):
109
108
  x = (b + a) / 2
110
109
  y = self.ylim[0] + 20/self.ddpu[1]
111
110
  if (b - a) > 60/self.ddpu[0]:
112
- p = annotation(b-a, (x,y), (-20,8), arrowstyle='-') # wide space
111
+ p = _A(b-a, (x,y), (-20,8), arrowstyle='-') # wide space
113
112
  else:
114
- p = annotation(b-a, (x,y), (16,16), arrowstyle='-', # narrow space
113
+ p = _A(b-a, (x,y), (16,16), arrowstyle='-', # narrow space
115
114
  connectionstyle="angle,angleA=0,angleB=90,rad=8")
116
115
  self.__annotations = [
117
- annotation(a, (a,y), (-54,-3), arrowstyle='->'),
118
- annotation(b, (b,y), ( 16,-3), arrowstyle='->'),
119
- annotation(None, (a,y), (b,y), textcoords='data', arrowstyle='<->'),
116
+ _A(a, (a,y), (-54,-3), arrowstyle='->'),
117
+ _A(b, (b,y), ( 16,-3), arrowstyle='->'),
118
+ _A(None, (a,y), (b,y), textcoords='data', arrowstyle='<->'),
120
119
  p,
121
120
  ]
122
121
 
@@ -232,11 +231,12 @@ class Histogram(LinePlot):
232
231
  }
233
232
  self.modeline.Show(0)
234
233
 
235
- def destroy(v):
236
- for graph in self.__graphs:
237
- self.detach(graph)
238
- v.Skip()
239
- self.Bind(wx.EVT_WINDOW_DESTROY, destroy)
234
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
235
+
236
+ def OnDestroy(self, evt):
237
+ for graph in self.__graphs:
238
+ self.detach(graph)
239
+ evt.Skip()
240
240
 
241
241
  def clear(self):
242
242
  LinePlot.clear(self)
@@ -450,11 +450,12 @@ class LineProfile(LinePlot):
450
450
  lambda v: v.Check(not self.__logicp)),
451
451
  ]
452
452
 
453
- def destroy(v):
454
- for graph in self.__graphs:
455
- self.detach(graph)
456
- v.Skip()
457
- self.Bind(wx.EVT_WINDOW_DESTROY, destroy)
453
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
454
+
455
+ def OnDestroy(self, evt):
456
+ for graph in self.__graphs:
457
+ self.detach(graph)
458
+ evt.Skip()
458
459
 
459
460
  def clear(self):
460
461
  LinePlot.clear(self)
mwx/nutshell.py CHANGED
@@ -79,9 +79,9 @@ class EditorInterface(CtrlInterface):
79
79
  def __init__(self):
80
80
  CtrlInterface.__init__(self)
81
81
 
82
- def dispatch(v):
82
+ def dispatch(evt):
83
83
  """Fork events to the parent."""
84
- self.parent.handler(self.handler.current_event, v)
84
+ self.parent.handler(self.handler.current_event, evt)
85
85
 
86
86
  self.make_keymap('C-x')
87
87
  self.make_keymap('C-c')
@@ -1082,9 +1082,6 @@ class EditorInterface(CtrlInterface):
1082
1082
  """Goto char position with selection."""
1083
1083
  if pos is None or pos < 0:
1084
1084
  return
1085
- ## if pos < 0:
1086
- ## pos += self.TextLength + 1 # Counts end-of-buffer (+1:\0)
1087
- ## return
1088
1085
  org = self.cpos
1089
1086
  if org == pos:
1090
1087
  return
@@ -1095,7 +1092,7 @@ class EditorInterface(CtrlInterface):
1095
1092
 
1096
1093
  if interactive:
1097
1094
  ## Update the caret position/status manually.
1098
- ## To update caret status, shake L/R w/o modifier #TODO: better idea?
1095
+ ## To update caret status, shake L/R w/o modifier
1099
1096
  ## Don't do this if selection is active.
1100
1097
  vk = wx.UIActionSimulator()
1101
1098
  modkeys = [k for k in (wx.WXK_CONTROL, wx.WXK_ALT, wx.WXK_SHIFT)
@@ -1296,7 +1293,7 @@ class EditorInterface(CtrlInterface):
1296
1293
  @can_edit
1297
1294
  def kill_line(self):
1298
1295
  p = self.eol
1299
- if p == self.cpos:
1296
+ if p == self.cpos: # caret at end of line
1300
1297
  if self.get_char(p) == '\r': p += 1
1301
1298
  if self.get_char(p) == '\n': p += 1
1302
1299
  self.Replace(self.cpos, p, '')
@@ -1304,11 +1301,7 @@ class EditorInterface(CtrlInterface):
1304
1301
  @can_edit
1305
1302
  def backward_kill_line(self):
1306
1303
  p = self.bol
1307
- text, lp = self.CurLine
1308
- if text[:lp] == sys.ps2: # caret at the prompt head
1309
- p -= len(sys.ps2)
1310
- lp -= len(sys.ps2)
1311
- if text[:lp] == '' and p: # caret at the beginning of the line
1304
+ if p == self.cpos > 0: # caret at beginning of line
1312
1305
  if self.get_char(p-1) == '\n': p -= 1
1313
1306
  if self.get_char(p-1) == '\r': p -= 1
1314
1307
  self.Replace(p, self.cpos, '')
@@ -1476,19 +1469,19 @@ class Buffer(EditWindow, EditorInterface):
1476
1469
  self.Bind(stc.EVT_STC_SAVEPOINTLEFT, self.OnSavePointLeft)
1477
1470
  self.Bind(stc.EVT_STC_SAVEPOINTREACHED, self.OnSavePointReached)
1478
1471
 
1479
- def activate(v):
1472
+ def activate(evt):
1480
1473
  self.handler('buffer_activated', self)
1481
- v.Skip()
1474
+ evt.Skip()
1482
1475
  self.Bind(wx.EVT_SET_FOCUS, activate)
1483
1476
 
1484
- def inactivate(v):
1477
+ def inactivate(evt):
1485
1478
  self.handler('buffer_inactivated', self)
1486
- v.Skip()
1479
+ evt.Skip()
1487
1480
  self.Bind(wx.EVT_KILL_FOCUS, inactivate)
1488
1481
 
1489
- def dispatch(v):
1482
+ def dispatch(evt):
1490
1483
  """Fork events to the parent."""
1491
- self.parent.handler(self.handler.current_event, v)
1484
+ self.parent.handler(self.handler.current_event, evt)
1492
1485
 
1493
1486
  ## Note: Key events are not propagated from Buffer to EditorBook.
1494
1487
  ## They are explicitly dispatched from buffer.handler to editor.handler.
@@ -1751,16 +1744,11 @@ class EditorBook(AuiNotebook, CtrlInterface):
1751
1744
  self.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnPageClose)
1752
1745
  self.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSED, self.OnPageClosed)
1753
1746
 
1754
- def destroy(v):
1755
- obj = v.EventObject
1756
- if isinstance(obj, Buffer):
1757
- self.handler('buffer_deleted', obj)
1758
- v.Skip()
1759
- self.Bind(wx.EVT_WINDOW_DESTROY, destroy)
1747
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
1760
1748
 
1761
- def dispatch(v):
1749
+ def dispatch(evt):
1762
1750
  """Fork events to the parent."""
1763
- self.parent.handler(self.handler.current_event, v)
1751
+ self.parent.handler(self.handler.current_event, evt)
1764
1752
 
1765
1753
  self.make_keymap('C-x')
1766
1754
  self.make_keymap('C-c')
@@ -1784,6 +1772,12 @@ class EditorBook(AuiNotebook, CtrlInterface):
1784
1772
  },
1785
1773
  })
1786
1774
 
1775
+ def OnDestroy(self, evt):
1776
+ obj = evt.EventObject
1777
+ if isinstance(obj, Buffer):
1778
+ self.handler('buffer_deleted', obj)
1779
+ evt.Skip()
1780
+
1787
1781
  def OnPageClose(self, evt): #<wx._aui.AuiNotebookEvent>
1788
1782
  nb = evt.EventObject
1789
1783
  buf = nb.all_buffers[evt.Selection]
@@ -2362,38 +2356,23 @@ class Nautilus(Shell, EditorInterface):
2362
2356
 
2363
2357
  self.Bind(stc.EVT_STC_UPDATEUI, self.OnUpdate) # skip to brace matching
2364
2358
  self.Bind(stc.EVT_STC_CALLTIP_CLICK, self.OnCallTipClick)
2359
+ self.Bind(stc.EVT_STC_START_DRAG, self.OnDrag)
2360
+ self.Bind(stc.EVT_STC_DRAG_OVER, self.OnDragging)
2361
+ self.Bind(stc.EVT_STC_DO_DROP, self.OnDragging)
2365
2362
 
2366
- def on_drag(v): #<wx._core.StyledTextEvent>
2367
- EditorInterface.dnd_flag = (v.Position < self.bolc) # copy
2368
- v.Skip()
2369
- self.Bind(stc.EVT_STC_START_DRAG, on_drag)
2370
-
2371
- def on_dragging(v): #<wx._core.StyledTextEvent>
2372
- if v.Position < self.bolc:
2373
- v.DragResult = wx.DragNone # Don't drop (as readonly)
2374
- elif EditorInterface.dnd_flag:
2375
- v.DragResult = wx.DragCopy # Don't move
2376
- v.Skip()
2377
- self.Bind(stc.EVT_STC_DRAG_OVER, on_dragging)
2378
- self.Bind(stc.EVT_STC_DO_DROP, on_dragging)
2379
-
2380
- def destroy(v):
2381
- if v.EventObject is self:
2382
- self.handler('shell_deleted', self)
2383
- v.Skip()
2384
- self.Bind(wx.EVT_WINDOW_DESTROY, destroy)
2385
-
2386
- def activate(v):
2363
+ self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
2364
+
2365
+ def activate(evt):
2387
2366
  self.handler('shell_activated', self)
2388
- v.Skip()
2367
+ evt.Skip()
2389
2368
  self.Bind(wx.EVT_SET_FOCUS, activate)
2390
2369
 
2391
- def inactivate(v):
2370
+ def inactivate(evt):
2392
2371
  self.handler('shell_inactivated', self)
2393
- v.Skip()
2372
+ evt.Skip()
2394
2373
  self.Bind(wx.EVT_KILL_FOCUS, inactivate)
2395
2374
 
2396
- def clear(v):
2375
+ def clear(evt):
2397
2376
  ## """Clear selection and message, no skip."""
2398
2377
  ## *do not* clear autocomp, so that the event can skip to AutoComp properly.
2399
2378
  ## if self.AutoCompActive():
@@ -2402,7 +2381,7 @@ class Nautilus(Shell, EditorInterface):
2402
2381
  self.ReplaceSelection("")
2403
2382
  self.message("")
2404
2383
 
2405
- def clear_autocomp(v):
2384
+ def clear_autocomp(evt):
2406
2385
  ## """Clear Autocomp, selection, and message."""
2407
2386
  if self.AutoCompActive():
2408
2387
  self.AutoCompCancel()
@@ -2410,20 +2389,20 @@ class Nautilus(Shell, EditorInterface):
2410
2389
  self.ReplaceSelection("")
2411
2390
  self.message("")
2412
2391
 
2413
- def skip_autocomp(v):
2392
+ def skip_autocomp(evt):
2414
2393
  ## """Don't eat backward prompt whitespace."""
2415
2394
  ## Prevent autocomp from eating prompts.
2416
2395
  ## Quit to avoid backspace over the last non-continuation prompt.
2417
2396
  if self.cpos == self.bolc:
2418
- self.handler('quit', v)
2419
- v.Skip()
2397
+ self.handler('quit', evt)
2398
+ evt.Skip()
2420
2399
 
2421
- def fork(v):
2422
- self.handler.fork(self.handler.current_event, v)
2400
+ def fork(evt):
2401
+ self.handler.fork(self.handler.current_event, evt)
2423
2402
 
2424
- def dispatch(v):
2403
+ def dispatch(evt):
2425
2404
  """Fork events to the parent."""
2426
- self.parent.handler(self.handler.current_event, v)
2405
+ self.parent.handler(self.handler.current_event, evt)
2427
2406
 
2428
2407
  self.handler.update({ # DNA<Nautilus>
2429
2408
  None : {
@@ -2454,6 +2433,8 @@ class Nautilus(Shell, EditorInterface):
2454
2433
  'escape pressed' : (-1, self.on_enter_escmap),
2455
2434
  'space pressed' : (0, self.OnSpace),
2456
2435
  '*backspace pressed' : (0, self.OnBackspace),
2436
+ 'C-backspace pressed' : (0, _F(self.backward_kill_word)),
2437
+ 'S-backspace pressed' : (0, _F(self.backward_kill_line)),
2457
2438
  'enter pressed' : (0, self.OnEnter),
2458
2439
  'C-enter pressed' : (0, _F(self.insertLineBreak)),
2459
2440
  'C-S-enter pressed' : (0, _F(self.insertLineBreak)),
@@ -2646,6 +2627,11 @@ class Nautilus(Shell, EditorInterface):
2646
2627
  _text, lp = self.CurLine
2647
2628
  self.message("{:>6d}:{} ({})".format(self.cline, lp, self.cpos), pane=-1)
2648
2629
 
2630
+ def OnDestroy(self, evt):
2631
+ if evt.EventObject is self:
2632
+ self.handler('shell_deleted', self)
2633
+ evt.Skip()
2634
+
2649
2635
  def OnUpdate(self, evt): #<wx._stc.StyledTextEvent>
2650
2636
  if evt.Updated & (stc.STC_UPDATE_SELECTION | stc.STC_UPDATE_CONTENT):
2651
2637
  self.trace_position()
@@ -2667,6 +2653,17 @@ class Nautilus(Shell, EditorInterface):
2667
2653
  self.CallTipCancel()
2668
2654
  evt.Skip()
2669
2655
 
2656
+ def OnDrag(self, evt): #<wx._core.StyledTextEvent>
2657
+ EditorInterface.dnd_flag = (evt.Position < self.bolc) # copy
2658
+ evt.Skip()
2659
+
2660
+ def OnDragging(self, evt): #<wx._core.StyledTextEvent>
2661
+ if evt.Position < self.bolc:
2662
+ evt.DragResult = wx.DragNone # Don't drop (as readonly)
2663
+ elif EditorInterface.dnd_flag:
2664
+ evt.DragResult = wx.DragCopy # Don't move
2665
+ evt.Skip()
2666
+
2670
2667
  def OnSpace(self, evt):
2671
2668
  """Called when space pressed."""
2672
2669
  if not self.CanEdit():
@@ -2690,6 +2687,30 @@ class Nautilus(Shell, EditorInterface):
2690
2687
  return
2691
2688
  evt.Skip()
2692
2689
 
2690
+ @can_edit
2691
+ def backward_kill_line(self):
2692
+ p = max(self.bol, self.bolc) # for debugger mode: bol <= bolc
2693
+ text, lp = self.CurLine
2694
+ if text[:lp] == sys.ps2:
2695
+ self.Replace(p - lp, p, '') # eats ps2:prompt
2696
+ return
2697
+ if p == self.cpos > 0: # caret at beginning of line
2698
+ if self.get_char(p-1) == '\n': p -= 1
2699
+ if self.get_char(p-1) == '\r': p -= 1
2700
+ self.Replace(p, self.cpos, '')
2701
+
2702
+ @can_edit
2703
+ def backward_kill_word(self):
2704
+ p = self.cpos
2705
+ text, lp = self.CurLine
2706
+ if text[:lp] == sys.ps2:
2707
+ self.goto_char(p - lp) # skips ps2:prompt
2708
+ self.WordLeft()
2709
+ q = max(self.bol, self.bolc) # for debugger mode: bol <= bolc
2710
+ if self.cpos < q:
2711
+ self.goto_char(q) # Don't skip back prompt
2712
+ self.Replace(self.cpos, p, '')
2713
+
2693
2714
  def OnEnter(self, evt):
2694
2715
  """Called when enter pressed."""
2695
2716
  if not self.CanEdit():
@@ -7,7 +7,7 @@ from wx import aui
7
7
  from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin
8
8
 
9
9
  from mwx.framework import CtrlInterface, Menu, StatusBar
10
- from mwx.controls import Icon, Icon2, Clipboard
10
+ from mwx.controls import Icon, Clipboard
11
11
  from mwx.graphman import Layer
12
12
 
13
13
 
@@ -97,7 +97,7 @@ class CheckList(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
97
97
  }
98
98
  self.Target.handler.append(self.context)
99
99
 
100
- def copy(all=True):
100
+ def copy_info(all=True):
101
101
  frames = self.Target.all_frames
102
102
  if frames:
103
103
  frame = frames[self.focused_item]
@@ -112,11 +112,11 @@ class CheckList(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
112
112
  self.OnEditAnnotation),
113
113
  (),
114
114
  (102, "Copy info", Icon('copy'),
115
- lambda v: copy(0),
115
+ lambda v: copy_info(0),
116
116
  lambda v: v.Enable(len(list(self.selected_items)))),
117
117
 
118
- (103, "Copy ALL data", Icon2('copy', '+'),
119
- lambda v: copy(),
118
+ (103, "Copy ALL data", Icon('copy', '+'),
119
+ lambda v: copy_info(1),
120
120
  lambda v: v.Enable(len(list(self.selected_items)))),
121
121
  ]
122
122
  self.Bind(wx.EVT_CONTEXT_MENU,
@@ -266,10 +266,9 @@ class Plugin(Layer):
266
266
  expand=2, border=0, vspacing=0,
267
267
  )
268
268
 
269
- def on_focus_set(v):
269
+ def on_focus_set(evt):
270
270
  self.parent.select_view(self.nb.CurrentPage.Target)
271
- v.Skip()
272
-
271
+ evt.Skip()
273
272
  self.nb.Bind(wx.EVT_CHILD_FOCUS, on_focus_set)
274
273
 
275
274
  def attach(self, target, caption):
@@ -18,10 +18,10 @@ class Plugin(Layer):
18
18
  self.layout((self.plot,), expand=2, border=0)
19
19
 
20
20
  @self.handler.bind('page_shown')
21
- def activate(v):
21
+ def activate(evt):
22
22
  self.plot.attach(*self.parent.graphic_windows)
23
23
  self.plot.linplot(self.parent.selected_view.frame)
24
24
 
25
25
  @self.handler.bind('page_closed')
26
- def deactivate(v):
26
+ def deactivate(evt):
27
27
  self.plot.detach(*self.parent.graphic_windows)
mwx/utilus.py CHANGED
@@ -483,13 +483,13 @@ class SSM(dict):
483
483
  return "<{} object at 0x{:X}>".format(self.__class__.__name__, id(self))
484
484
 
485
485
  def __str__(self):
486
- def lstr(v):
486
+ def _lstr(v):
487
487
  def _name(a):
488
488
  if callable(a):
489
489
  return typename(a, docp=1, qualp=0)
490
490
  return repr(a)
491
491
  return ', '.join(_name(a) for a in v)
492
- return '\n'.join("{:>32} : {}".format(str(k), lstr(v)) for k, v in self.items())
492
+ return '\n'.join("{:>32} : {}".format(str(k), _lstr(v)) for k, v in self.items())
493
493
 
494
494
  def bind(self, event, action=None):
495
495
  """Append a transaction to the context."""
mwx/wxmon.py CHANGED
@@ -58,13 +58,13 @@ class EventMonitor(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
58
58
 
59
59
  @self.handler.bind('*button* pressed')
60
60
  @self.handler.bind('*button* released')
61
- def dispatch(v):
61
+ def dispatch(evt):
62
62
  """Fork events to the parent."""
63
- self.parent.handler(self.handler.current_event, v)
64
- v.Skip()
63
+ self.parent.handler(self.handler.current_event, evt)
64
+ evt.Skip()
65
65
 
66
66
  @self.handler.bind('C-c pressed')
67
- def copy(v):
67
+ def copy(evt):
68
68
  self.copy()
69
69
 
70
70
  def OnDestroy(self, evt):
@@ -219,10 +219,10 @@ class EventMonitor(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
219
219
  def blink(self, i):
220
220
  if self.GetItemBackgroundColour(i) != wx.Colour('yellow'):
221
221
  self.SetItemBackgroundColour(i, "yellow")
222
- def reset_color():
222
+ def _reset_color():
223
223
  if self and i < self.ItemCount:
224
224
  self.SetItemBackgroundColour(i, 'white')
225
- wx.CallAfter(wx.CallLater, 1000, reset_color)
225
+ wx.CallAfter(wx.CallLater, 1000, _reset_color)
226
226
 
227
227
  def copy(self):
228
228
  if not self.SelectedItemCount:
mwx/wxpdb.py CHANGED
@@ -107,9 +107,9 @@ class Debugger(Pdb):
107
107
  self.parent.handler('add_help', pdb.__doc__)
108
108
  pdb.help = _help
109
109
 
110
- def dispatch(v):
110
+ def dispatch(evt):
111
111
  """Fork events to the parent."""
112
- self.parent.handler(self.handler.current_event, v)
112
+ self.parent.handler(self.handler.current_event, evt)
113
113
 
114
114
  self.__handler = FSM({ # DNA<Debugger>
115
115
  0 : {
mwx/wxwil.py CHANGED
@@ -49,13 +49,13 @@ class LocalsWatcher(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
49
49
 
50
50
  @self.handler.bind('*button* pressed')
51
51
  @self.handler.bind('*button* released')
52
- def dispatch(v):
52
+ def dispatch(evt):
53
53
  """Fork events to the parent."""
54
- self.parent.handler(self.handler.current_event, v)
55
- v.Skip()
54
+ self.parent.handler(self.handler.current_event, evt)
55
+ evt.Skip()
56
56
 
57
57
  @self.handler.bind('C-c pressed')
58
- def copy(v):
58
+ def copy(evt):
59
59
  self.copy()
60
60
 
61
61
  dispatcher.connect(receiver=self._update, signal='Interpreter.push')
@@ -132,10 +132,10 @@ class LocalsWatcher(wx.ListCtrl, ListCtrlAutoWidthMixin, CtrlInterface):
132
132
  def blink(self, i):
133
133
  if self.GetItemBackgroundColour(i) != wx.Colour('yellow'):
134
134
  self.SetItemBackgroundColour(i, "yellow")
135
- def reset_color():
135
+ def _reset_color():
136
136
  if self and i < self.ItemCount:
137
137
  self.SetItemBackgroundColour(i, 'white')
138
- wx.CallAfter(wx.CallLater, 1000, reset_color)
138
+ wx.CallAfter(wx.CallLater, 1000, _reset_color)
139
139
 
140
140
  def copy(self):
141
141
  if not self.SelectedItemCount:
mwx/wxwit.py CHANGED
@@ -43,18 +43,18 @@ class Inspector(it.InspectionTree, CtrlInterface):
43
43
 
44
44
  @self.handler.bind('*button* pressed')
45
45
  @self.handler.bind('*button* released')
46
- def dispatch(v):
46
+ def dispatch(evt):
47
47
  """Fork events to the parent."""
48
- self.parent.handler(self.handler.current_event, v)
49
- v.Skip()
48
+ self.parent.handler(self.handler.current_event, evt)
49
+ evt.Skip()
50
50
 
51
51
  @self.handler.bind('f4 pressed')
52
- def highlight(v):
52
+ def highlight(evt):
53
53
  if self.target:
54
54
  self.highlighter.HighlightCurrentItem(self)
55
55
 
56
56
  @self.handler.bind('f5 pressed')
57
- def refresh(v):
57
+ def refresh(evt):
58
58
  self.BuildTree(self.target)
59
59
 
60
60
  def OnDestroy(self, evt):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mwxlib
3
- Version: 0.95.0
3
+ Version: 0.95.3
4
4
  Summary: A wrapper of matplotlib and wxPython (phoenix)
5
5
  Home-page: https://github.com/komoto48g/mwxlib
6
6
  Author: Kazuya O'moto
@@ -0,0 +1,28 @@
1
+ mwx/__init__.py,sha256=SNSLQc0IGuE6LDT5mzaAxXRgcH_k6cRVS3gXzFQqdZM,814
2
+ mwx/bookshelf.py,sha256=DAhMQk3_J4rdE50adBMFu5wNz3WdMh_zzJ37O9ncceo,5103
3
+ mwx/controls.py,sha256=JBMUbDgHFf4Dx0PofCdnoQExBnGjxiAeSGkdS_0Qgo4,47673
4
+ mwx/framework.py,sha256=t-d8fgYP_fJ9vTxJ9ZZ7POWK7RNds_-q-iGhEI6IVHU,75531
5
+ mwx/graphman.py,sha256=PacQF1Of6oaqw26uFoXaAK9IrwggGRwoJe9uCP5JZ28,70373
6
+ mwx/images.py,sha256=mrnUYH12I3XLVSZcEXlpVltX0XMxufbl2yRvDIQJZqc,49957
7
+ mwx/matplot2.py,sha256=nA7RLW1tf5kQfrenFnrAF900DbrpOUldc3SGaJgJKi0,32794
8
+ mwx/matplot2g.py,sha256=faKpuBdp4H_g-HKfRdxV17AwHtXcfRi2F0myE3cjM04,65393
9
+ mwx/matplot2lg.py,sha256=gI_L_GofQrg5TIgZFMgYu8-7IRoe6VCRG3Ub35ChSpQ,27177
10
+ mwx/mgplt.py,sha256=ITzxA97yDwr_35BUk5OqnyskSuKVDbpf2AQCKY1jHTI,5671
11
+ mwx/nutshell.py,sha256=mGWw2biIKyunTMyrRbLHNdmFLpxVCIP5UTsaeS2m4gw,136594
12
+ mwx/utilus.py,sha256=Uwj6vbNUUztwOswPG75xtsT2y_PZqh3QiJraxmA9iT0,37401
13
+ mwx/wxmon.py,sha256=6es-jVz9Ht7vZnG7VBJcaNYLHY0PnZtij60SXcZRTeY,12727
14
+ mwx/wxpdb.py,sha256=lLowkkAgMhPFHAfklD7wZHq0qbSMjRxnBFtSajmVgME,19133
15
+ mwx/wxwil.py,sha256=zP1-5Fpi1wpDQU977229zIH6QRuSkkyfuAlNKWjGoGg,5588
16
+ mwx/wxwit.py,sha256=7jR7WPu0-ZxTA6F_SQc7ZjlR9mNO21GFfriTZqV6Ly0,7344
17
+ mwx/plugins/__init__.py,sha256=jnJ-Sl9XJ_7BFDslD_r7dsbxsOT57q_IaEriV53XIGY,41
18
+ mwx/plugins/ffmpeg_view.py,sha256=vUYNybIJsF1JGkDzjBgDyBQvDh8e1oKHlEMY5Fwc8L4,9399
19
+ mwx/plugins/fft_view.py,sha256=evj2kCe6N10JQczW8IajgLVrUWOihQaHQ2xiBzAsAl4,2675
20
+ mwx/plugins/frame_listview.py,sha256=fY27r_8ttf2hi-T0CPgY_LGbH9xKkQmSIqgaALMyVCM,10112
21
+ mwx/plugins/line_profile.py,sha256=--9NIc3x5EfRB3L59JvD7rzENQHyiYfu7wWJo6AuMkA,820
22
+ mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
23
+ mwx/py/filling.py,sha256=KaHooM32hrGGgqw75Cbt8lAvACwC6RXadob9LGgNnEc,16806
24
+ mwxlib-0.95.3.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
+ mwxlib-0.95.3.dist-info/METADATA,sha256=zRgIwaO-S04HK4GufhqvHET5KYJTKeyIfct8i36pHXw,1925
26
+ mwxlib-0.95.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
27
+ mwxlib-0.95.3.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
+ mwxlib-0.95.3.dist-info/RECORD,,
@@ -1,28 +0,0 @@
1
- mwx/__init__.py,sha256=2D6y5mnxxp5qNbBb0-Mng40JeUKCGbqohfcuHdihZx4,829
2
- mwx/bookshelf.py,sha256=U_UQUJkOqugAXYm2HpgqTIWPBREKLzJzRvJWCEWnT3c,5091
3
- mwx/controls.py,sha256=prp1NhZqv1XANhi2PPxW9jtrgwj_02XMOOyyzZ48klM,47185
4
- mwx/framework.py,sha256=9WFR5E68rqxFzRcyZ1SSzPGNw5LCexu6TuUeJ9DSKTE,75517
5
- mwx/graphman.py,sha256=9MG0BzQh5lDDadyPPXps2M0hf6mPN3G0MQbBGdplY_I,70027
6
- mwx/images.py,sha256=mrnUYH12I3XLVSZcEXlpVltX0XMxufbl2yRvDIQJZqc,49957
7
- mwx/matplot2.py,sha256=qaF_gvLoLn-TimLbRR59KUavNr1ZpZQdSMqjzJk47rk,32682
8
- mwx/matplot2g.py,sha256=mDaD367wjq6xsyIDX9ot8jLwYYGayoavWMhqsQVBHac,65442
9
- mwx/matplot2lg.py,sha256=tg8u7w4DxiJdPN-E197NOmbQpc_1gZkgDHYv_xUhbFA,27224
10
- mwx/mgplt.py,sha256=ITzxA97yDwr_35BUk5OqnyskSuKVDbpf2AQCKY1jHTI,5671
11
- mwx/nutshell.py,sha256=4yFPmBfjUGyx9GGXEvKadWsPkIHwOloNp44UCGu7f9U,135788
12
- mwx/utilus.py,sha256=FTJhVFmx6TAE5rvZ_nfxZgyyaW4zMpXEz74v72X6m7Y,37399
13
- mwx/wxmon.py,sha256=Qk86VbuuW2rR46pqEYLur13G_aloWz5SVv6sib30YY0,12717
14
- mwx/wxpdb.py,sha256=2z3ZD9Oo1H-ONBHlaprkB9hrTmAI7o03sqO46ppEFE4,19129
15
- mwx/wxwil.py,sha256=JK1du4i1RVMbDLqN8jLRDSu_JhKEp4mhHVMElzo4yoE,5578
16
- mwx/wxwit.py,sha256=MQxXR6VqqT25K6dTQ1U_42SMq1yJT6y54xrMq-OMOaQ,7334
17
- mwx/plugins/__init__.py,sha256=jnJ-Sl9XJ_7BFDslD_r7dsbxsOT57q_IaEriV53XIGY,41
18
- mwx/plugins/ffmpeg_view.py,sha256=vUYNybIJsF1JGkDzjBgDyBQvDh8e1oKHlEMY5Fwc8L4,9399
19
- mwx/plugins/fft_view.py,sha256=evj2kCe6N10JQczW8IajgLVrUWOihQaHQ2xiBzAsAl4,2675
20
- mwx/plugins/frame_listview.py,sha256=T-2xSv_D2bk9fJ64aiSEe1rJRTeqaIpLVAYEUXW5vz8,10110
21
- mwx/plugins/line_profile.py,sha256=WJB5z7F53yg4dII2R36IFZvtkSOGWT669b1HmAAXSnQ,816
22
- mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
23
- mwx/py/filling.py,sha256=KaHooM32hrGGgqw75Cbt8lAvACwC6RXadob9LGgNnEc,16806
24
- mwxlib-0.95.0.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
- mwxlib-0.95.0.dist-info/METADATA,sha256=ybRT30kEPrD9gLt1a8MReKmNeSGbYiqLPfe3N79UABM,1925
26
- mwxlib-0.95.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
27
- mwxlib-0.95.0.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
- mwxlib-0.95.0.dist-info/RECORD,,