def __init__(self, parent, app=None): wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(300, 200), style=wx.TAB_TRAVERSAL) sizer = wx.BoxSizer(wx.VERTICAL) mrecorder = recorder(self) self.notebook = aui.AuiNotebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE) self.notebook.AddPage(mrecorder, mrecorder.title, True, wx.NullBitmap) self.notebook.AddPage(console(self), console.title, False, wx.NullBitmap) self.notebook.AddPage(plglist(self), plglist.title, False, wx.NullBitmap) self.notebook.AddPage(plgtree(self), plgtree.title, False, wx.NullBitmap) self.notebook.AddPage(toltree(self), toltree.title, False, wx.NullBitmap) for i in range(5): self.notebook.GetPage(i).app = parent Source.manager('widget').add('Macros Recorder', mrecorder) sizer.Add(self.notebook, 1, wx.EXPAND | wx.ALL, 0) self.SetSizer(sizer) self.Fit() self.Layout()
def _alert(self, info, title='ImagePy'): lang = Source.manager('config').get('language') dics = Source.manager('dictionary').gets(tag=lang) dialog = wx.MessageDialog(self, info, title, wx.OK) self.translate([i[1] for i in dics])(dialog) dialog.ShowModal() == wx.ID_OK dialog.Destroy()
def build_dictionary(path): for lang in [osp.split(i)[1] for i in glob(path + '/*') if osp.isdir(i)]: for dirpath, dirnames, filenames in os.walk(path + '/' + lang): for filename in filenames: if filename[-3:] != 'dic': continue with open(os.path.join(dirpath, filename), encoding='utf-8') as f: lines = f.read().replace('\r', '').split('\n') dic = [] for line in lines: if line == '': dic[-1] = (dic[-1][0][0], dict(dic[-1])) elif line[0] == '\t': dic[-1].append(line[1:].split('::')) else: dic.append([line.split('::')]) if isinstance(dic[-1], list): dic[-1] = (dic[-1][0][0], dict(dic[-1])) dic = dict(dic) for i in dic: obj = Source.manager('dictionary').get(i, tag=lang) if not obj is None: obj.update(dic[i]) else: Source.manager('dictionary').add(i, dic[i], lang) common = Source.manager('dictionary').get('common', tag=lang) if common is None: return objs = Source.manager('dictionary').gets(tag=lang) for i in objs: i[1].update(common)
def extend_tools(path, lst, err): rst = [] for i in lst: if i[-3:] in ('.mc', '.md', '.wf', 'rpt'): pt = os.path.join(root_dir, path) # if i[-3:] == '.md':print(pt) f = open(pt + '/' + i) cmds = f.readlines() f.close() rst.append((Macros(i[:-3], [getpath(pt, i) for i in cmds]), os.path.join(root_dir, path) + '/' + i[:-3] + '.gif')) else: #try: rpath = path.replace('/', '.').replace('\\', '.') #rpath = rpath[rpath.index('imagepy.'):] plg = __import__('imagepy.' + rpath + '.' + i, '', '', ['']) if hasattr(plg, 'plgs'): for i, j in plg.plgs: rst.append((i, path + '/' + j)) else: rst.append((plg.Plugin, os.path.join(root_dir, path) + '/' + i.split('_')[0] + '.gif')) #except Exception as e: # err.append((path, i, sys.exc_info()[1])) for i in rst: Source.manager('tool').add(obj=i[0], name=i[0].title) return rst
def extend_tools(path, lst, err): rst = [] for i in lst: if i[-3:] in ('.mc', '.md', '.wf', 'rpt'): p = os.path.join(os.path.join(root_dir, path), i).replace('\\', '/') rst.append((Macros(i[:-3], ['Open>{"path":"%s"}' % p]), os.path.join(root_dir, path) + '/' + i[:-3] + '.gif')) #rst.append((Macros(i[:-3], [getpath(pt, i) for i in cmds]), # os.path.join(root_dir, path)+'/'+i[:-3]+'.gif')) else: try: rpath = path.replace('/', '.').replace('\\', '.') plg = __import__('imagepy.' + rpath + '.' + i, '', '', ['']) if hasattr(plg, 'plgs'): for i, j in plg.plgs: rst.append((i, path + '/' + j)) else: rst.append((plg.Plugin, os.path.join(root_dir, path) + '/' + i.split('_')[0] + '.gif')) except Exception as e: err.append((path, i, sys.exc_info()[1])) for i in rst: Source.manager('tool').add(obj=i[0], name=i[0].title) return rst
def load_menu(self, data): self.menubar.clear() lang = Source.manager('config').get('language') ls = Source.manager('dictionary').gets(tag=lang) short = Source.manager('shortcut').gets() acc = self.menubar.load(data, dict([i[:2] for i in short])) self.translate(dict([(i,j[i]) for i,j,_ in ls]))(self.menubar) self.SetAcceleratorTable(acc)
def on_close(self, event): print('close') #ConfigManager.write() self.auimgr.UnInit() del self.auimgr self.Destroy() Source.manager('config').write() sys.exit()
def on_select(self, event): plg = self.tre_plugins.GetItemData(event.GetItem()) if plg != None: self.plg = plg name = self.tre_plugins.GetItemText(event.GetItem()) lang = Source.manager('config').get('language') doc = Source.manager('document').get(name, tag=lang) doc = doc or Source.manager('document').get(name, tag='English') self.txt_info.set_cont(doc or 'No Document!')
def load_dictionary(): lans = glob(root_dir + '/lang/*') lans += glob(root_dir + '/plugins/*/lang/*') lans = [i for i in lans if os.path.isdir(i)] lans = [os.path.split(i) for i in lans] lan = sorted(set([i[1] for i in lans])) Source.manager('dictionary').add('language', lan) lans = sorted(set([i[0] for i in lans])) for i in lans: loader.build_dictionary(i)
def load(self): lst = Source.manager('plugin').names() self.plgs = [[ i, Source.manager('shotcut').get(item='shotcut', name=i) ] for i in lst] for i in self.plgs: if i[1] == None: i[1] = '' self.plgs.sort() self.buf = self.plgs self.lst_plgs.set_data(self.plgs)
def load_tool(self, data, default=None): self.toolbar.clear() lang = Source.manager('config').get('language') ls = Source.manager('dictionary').gets(tag=lang) dic = dict([(i,j[i]) for i,j,_ in ls]) for i, (name, tols) in enumerate(data[1]): name = dic[name] if name in dic else name self.toolbar.add_tools(name, tols, i==0) default = dic[default] if default in dic else default if not default is None: self.toolbar.add_pop(os.path.join(root_dir, 'tools/drop.gif'), default) self.toolbar.Layout()
def load_widget(self, data): self.widgets.clear() lang = Source.manager('config').get('language') self.widgets.load(data) for cbk in self.widgets.GetChildren(): for i in range(cbk.GetPageCount()): dic = Source.manager('dictionary').get(cbk.GetPageText(i), tag=lang) or {} translate = self.translate(dic) title = cbk.GetPageText(i) cbk.SetPageText(i, dic[title] if title in dic else title) self.translate(dic)(cbk.GetPage(i))
def extend_widgets(path, lst, err): rst = [] for i in lst: try: rpath = path.replace('/', '.').replace('\\', '.') plg = __import__('imagepy.' + rpath + '.' + i, '', '', ['']) rst.append(plg.Plugin) except Exception as e: err.append((path, i, sys.exc_info()[1])) for i in rst: Source.manager('widget').add(obj=i, name=i.title) return rst
def build_document(path): docs = [] for lang in [osp.split(i)[1] for i in glob(path + '/*') if osp.isdir(i)]: for dirpath, dirnames, filenames in os.walk(path + '/' + lang): for filename in filenames: if filename[-3:] != '.md': continue docs.append(os.path.join(dirpath, filename)) f = open(docs[-1], encoding='utf-8') cont = f.read() f.close() Source.manager('document').add(filename[:-3], cont, lang) return docs
def add_recent(path): global recent, rlist if path in recent: idx = recent.index(path) recent.insert(0, recent.pop(idx)) rlist.insert(0, rlist.pop(idx)) else: recent.insert(0, path) rlist.insert(0, f(path)) if len(recent) >= 5: recent.pop(-1) rlist.pop(-1) Source.manager('config').add('recent', recent)
def getpath(self, title, filt, io, name=''): filt = '|'.join(['%s files (*.%s)|*.%s'%(i.upper(),i,i) for i in filt]) dic = {'open':wx.FD_OPEN, 'save':wx.FD_SAVE} dialog = wx.FileDialog(self, title, '', name, filt, dic[io]) rst = dialog.ShowModal() path = dialog.GetPath() if rst == wx.ID_OK else None dialog.Destroy() return path lang = Source.manager('config').get('language') doc = Source.manager('document').get(self.title, tag=lang) doc = doc or Source.manager('document').get(tol.title, tag='English') self.app.show_md(doc or 'No Document!', self.title)
def show_widget(self, panel, title='Widgets'): obj = self.manager('widget').get(panel.title) if obj is None: obj = panel(self, self) self.manager('widget').add(panel.title, obj) self.auimgr.AddPane(obj, aui.AuiPaneInfo().Caption(title).Left().Layer( 15 ).PinButton( True ) .Float().Resizable().FloatingSize( wx.DefaultSize ).Dockable(True)) #.DestroyOnClose()) lang = Source.manager('config').get('language') dic = Source.manager('dictionary').get(obj.title, tag=lang) or {} info = self.auimgr.GetPane(obj) info.Show(True).Caption(dic[obj.title] if obj.title in dic else obj.title) self.translate(dic)(obj) self.Layout() self.auimgr.Update()
def show_para(self, title, view, para, on_handle=None, on_ok=None, on_cancel=None, on_help=None, preview=False, modal=True): lang = Source.manager('config').get('language') dic = Source.manager('dictionary').get(name=title, tag=lang) doc = Source.manager('document').get(title, tag=lang) doc = doc or Source.manager('document').get(title, tag='English') on_help = lambda x=doc:self.show_md(x or 'No Document!', title) dialog = ParaDialog(self, title) dialog.init_view(view, para, preview, modal=modal, app=self) self.translate(dic)(dialog) dialog.Bind('cancel', on_cancel) dialog.Bind('parameter', on_handle) dialog.Bind('commit', on_ok) dialog.Bind('help', on_help) return dialog.show()
def run(self, ips, imgs, para=None): fp, fn = os.path.split(para['path']) fn, fe = os.path.splitext(fn) writer = Source.manager('writer').gets(name=fe[1:].lower(), tag=self.tag) if len(writer) == 1: writer[0][1](para['path'], ips.img if self.tag == 'img' else imgs)
def one(cmds, after): cmd = cmds.pop(0) title, para = cmd.split('>') plg = Source.manager('plugin').get(name=title)() after = lambda cmds=cmds: one(cmds, one) if len(cmds) == 0: after = callafter wx.CallAfter(plg.start, self, eval(para), after)
def start(): from skimage.data import camera, astronaut import wx.lib.agw.advancedsplash as AS app = wx.App(False) ''' bitmap = wx.Bitmap('data/logolong.png', wx.BITMAP_TYPE_PNG) shadow = wx.Colour(255,255,255) asp = AS.AdvancedSplash(None, bitmap=bitmap, timeout=1000, agwStyle=AS.AS_TIMEOUT | AS.AS_CENTER_ON_PARENT | AS.AS_SHADOW_BITMAP, shadowcolour=shadow) asp.Update()''' uistyle = Source.manager('config').get('uistyle') or 'imagepy' frame = ImageJ(None) if uistyle == 'imagej' else ImagePy(None) frame.load_menu(extend_plgs(loader.build_plugins('menus'))) frame.load_tool(extend_tols(loader.build_tools('tools')), 'Transform') frame.load_widget(extend_wgts(loader.build_widgets('widgets'))) frame.Fit() #frame.show_img([camera()], 'camera') #frame.show_img([astronaut()], 'astronaut') frame.Show() app.MainLoop()
def run(self, ips, imgs, para = None): path = para['path']+'/'+para['name'] write = Source.manager('writer').get(para['format']) print(path) for i in range(len(imgs)): self.progress(i, len(imgs)) name = '%s-%.4d.%s'%(path,i,para['format']) write(name, imgs[i])
def run(self, ips, imgs, para=None): cmap = Source.manager('colormap').get(para['LUT']) imglut = color_code(imgs[para['Start image'] - 1:para['End image']], cmap) self.app.show_img([imglut], 'Color-coded %s' % ips.title) if para['Creatbar']: cmapshow = np.ones([32, 256, 3]) * cmap self.app.show_img([cmapshow.astype('uint8')], 'Color bar')
def __init__(self): for i in Source.manager('plugin').names(): if not isinstance(i, str) or i == 'Command Line': #print(PluginsManager.plgs[i]) continue name = ''.join(list(filter(str.isalnum, i))) exec( "self.run_%s = lambda para=None, plg=Source.manager('plugin').get(i):plg().start(cmds['app'], para)" % name)
def extend_plugins(path, lst, err): rst = [] for i in lst: if isinstance(i, tuple) or i == '-': rst.append(i) elif i[-3:] == 'rpt': pt = os.path.join(root_dir, path) rst.append(Report(i[:-4], pt + '/' + i)) # Source.manager('plugin').add(obj=rst[-1], name=rst[-1].title) elif i[-3:] in {'.md', '.mc', '.wf'}: p = os.path.join(os.path.join(root_dir, path), i).replace('\\', '/') rst.append(Macros(i[:-3], ['Open>{"path":"%s"}' % p])) # Source.manager('plugin').add(rst[-1].title, rst[-1]) elif i[-6:] in ['wgt.py', 'gts.py']: try: rpath = path.replace('/', '.').replace('\\', '.') plg = __import__('imagepy.' + rpath + '.' + i[:-3], '', '', ['']) if hasattr(plg, 'wgts'): rst.extend( [j if j == '-' else Widget(j) for j in plg.wgts]) for p in plg.wgts: if not isinstance(p, str): Source.manager('widget').add(p.title, p) else: rst.append(Widget(plg.Plugin)) except Exception as e: err.append((path, i, sys.exc_info()[1])) else: try: rpath = path.replace('/', '.').replace('\\', '.') plg = __import__('imagepy.' + rpath + '.' + i[:-3], '', '', ['']) if hasattr(plg, 'plgs'): rst.extend([j for j in plg.plgs]) for p in plg.plgs: if not isinstance(p, str): pass # Source.manager('plugin').add(p.title, p) else: rst.append(plg.Plugin) # Source.manager('plugin').add(plg.Plugin.title, plg.Plugin) except Exception as e: err.append((path, i, sys.exc_info()[1])) return rst
def show_para(self, title, view, para, on_handle=None, on_ok=None, on_cancel=None, on_help=None, preview=False, modal=True): lang = Source.manager('config').get('language') dic = Source.manager('dictionary').get(name=title, tag=lang) dialog = ParaDialog(self, title, dic or {}) dialog.init_view(view, para, preview, modal=modal, app=self) dialog.Bind('cancel', on_cancel) dialog.Bind('parameter', on_handle) dialog.Bind('commit', on_ok) dialog.Bind('help', on_help) return dialog.show()
def load(self, ips): self.slength = len(ips.imgs) self.para['End image'] = self.slength self.view = [(list, 'LUT', Source.manager('colormap').names(), str, 'LUT', ''), (int, 'Start image', (1, self.slength), 0, 'Start image', '1~%d' % self.slength), (int, 'End image', (2, self.slength), 0, 'End image', 'start~%d' % self.slength), (bool, 'Creatbar', 'Creat time color scale bar')] return True
def run(self, para=None): add_recent(para['path']) fp, fn = os.path.split(para['path']) fn, fe = os.path.splitext(fn) readers = Source.manager('reader').gets(name=fe[1:], tag=self.tag) if len(readers) == 0: return self.app.alert('no reader found for %s file' % fe[1:]) if not self.tag is None: self.app.show(self.tag, readers[0][1](para['path']), fn) else: self.app.show(readers[0][2], readers[0][1](para['path']), fn)
def _load_all(self): lang = Source.manager('config').get('language') dic = Source.manager('dictionary').get('common', tag=lang) or {} self.auimgr.GetPane(self.widgets).Caption('Widgets') for i in self.auimgr.GetAllPanes(): i.Caption(dic[i.caption] if i.caption in dic else i.caption) self.auimgr.Update() plgs, errplg = load_plugins() for name, plg in self.flatten(plgs): self.add_plugin(name, plg) self.load_menu(plgs) dtool = Source.manager('tools').get('default') tols, errtol = load_tools() self.load_tool(tols, dtool or 'Transform') wgts, errwgt = load_widgets() self.load_widget(wgts) err = errplg + errtol + errwgt if len(err)>0: err = [('File', 'Name', 'Error')] + err cont = '\n'.join(['%-30s\t%-20s\t%s'%i for i in err]) self.show_txt(cont, 'loading error log')
def run(self, ips, imgs, para = None): shp = ips.img.shape[:2] imgs = [np.zeros(shp, dtype=np.uint8) for i in range([1, len(imgs)][para['slice']])] newips = ImagePlus(imgs, ips.title+'-mark') newips.back = ips idx = ['None', 'Max', 'Min', 'Mask', '2-8mix', '4-6mix', '5-5mix', '6-4mix', '8-2mix'] modes = ['set', 'max', 'min', 'msk', 0.2, 0.4, 0.5, 0.6, 0.8] newips.lut = Source.manager('colormap').get(para['cm']) newips.chan_mode = modes[idx.index(para['mode'])] #newips.range = (0, para['n']) IPy.show_ips(newips)