Beispiel #1
0
     def onCheckPackageUpdate(self, e):
         from ifigure.mto.hg_support import hg_check_all_incoming_outgoing, hg_verify_all_repo
         broken_repo = hg_verify_all_repo(self)
         if len(broken_repo) != 0:
            txt = ['Some repo are broken\n'] + '\n'.join(['  ' + str(o) for o in broken_repo])
            ret=dialog.message(e.GetEventObject(), txt,'Broken Repo', 0)
            return
         updated_obj, newer_obj, both_obj = hg_check_all_incoming_outgoing(self)
         #app = wx.GetApp().TopWindow
         #app.proj_tree_viewer.update_widget()#_request2() 

         labels = ['pull  ' + obj.get_full_path()+ '(local:'+str(rev) + ' <<-- repo' + str(rev2) + ')' for obj, l, rev, rev2 in updated_obj] + ['push ' + obj.get_full_path()+ '(local:'+str(rev) + ' -->> repo: ' + str(rev2) + ')' for obj, l, rev, rev2 in newer_obj]
         if len(labels) == 0:
            ret=dialog.message(e.GetEventObject(), 'No update is found','No Update', 0)
            return
         #print labels, e.GetEventObject()
         from ifigure.utils.checkbox_panel import checkbox_panel
         value = checkbox_panel(e.GetEventObject(), col = 1, labels = labels,
                                values = [True]*len(updated_obj) +  [False]*len(newer_obj),
                                message = 'Select packages to update',
                                title = 'Package updage', blabel='Update')

         if value is None: return
         from ifigure.mto.hg_support import update_to_latest
         for i, v in enumerate(value):
             label, flag = v
             if flag:
                 if i < len(updated_obj):
                     new_rev, new_obj = update_to_latest(updated_obj[i][0])
                     dprint1(str(new_obj)+'was updated to ' + str(new_rev))
                 else:
                     new_rev, url = update_to_latest(newer_obj[i-len(updated_obj)][0], rev = True)
                     dprint1('repo('+url+') was updated to ' + str(new_rev))
         #dprint1('skipping')
         e.Skip() # this will update widget
Beispiel #2
0
    def Run(self, filename, d, odir):
        if not self.isReady():
            return False

        print("starting tar....(save)")

        try:
            tarname = self.make_tar(filename, d)
        except PermissionError:
            message(wx.GetApp().TopWindow, 'Permission error', 'Error', 0)
            return False
        except:
            showtraceback(wx.GetApp().TopWindow, txt=traceback.format_exc())
            return False

        print("starting tar.gz....(save)")
        MPTarzip.worker = Process(target=do_zip, args=(filename, tarname, d))

        try:
            MPTarzip.worker.start()
        except:
            showtraceback(wx.GetApp().TopWindow, txt=traceback.format_exc())
            return False

        self.odir = odir
        self.d = d
        wx.CallLater(100, self.CheckFinished)

        return True
Beispiel #3
0
    def onClosePage(self, evt):
        #        print("onClose")
        ipage = self.nb.GetSelection()
        label = str(self.nb.GetPageText(ipage))
        if label.startswith('*'):
            label = label[1:]
        mods = [self.nb.GetPage(x).GetModify()
                for x in range(self.nb.GetPageCount())]
        del mods[ipage]
        if str(label) in self._rvars:
            ret = dialog.message(self,
                                 '"'+label+'"' +
                                 " cannot deleted for current plot type\n(Leave it empty, if you don't need it)",
                                 'Error',
                                 0)
            evt.Veto()
            return
        npage = self.nb.GetPageCount()
        if npage == 1 or npage == 0:
            ret = dialog.message(self,
                                 '"'+label+'"' + " cannot deleted since this is the last page.",
                                 'Error',
                                 0)
            evt.Veto()
            return
        else:
            ret = dialog.message(self,
                                 'Do you want to delete "'+label+'"',
                                 'Error',
                                 2)
            if ret != 'ok':
                evt.Veto()
                return

#        if label == 'script.py' or label == '*script.py':
#            fmds = self.figmds()
#            if fmds is not None:
#              if (fmds.has_owndir() and
#                  fmds.hasvar('path')):
#                  fname = os.path.join(fmds.owndir(), fmds.getvar('path'))
#                  if os.path.exists(fname):
#                      os.remove(fname)
#                      fmds.delvar('pathmode')
#                      fmds.delvar('path')
        self.data = None
#        print label
        if str(label) == 'script.py':
            self.bt_script.Enable(True)

        wx.CallAfter(self._set_save_point, mods)
Beispiel #4
0
    def onSubmit(self, evt):
        self.value = self.elp.GetValue()

        if (self.value[6].strip() == ''
                or not any([x[1] for x in self.value[7]])):

            from ifigure.widgets.dialog import message
            message(
                self,
                title="Error",
                message="Enter job description and select at least one keyword"
            )
            return

        self.EndModal(wx.ID_OK)
Beispiel #5
0
    def onCheckPackageUpdate(self, e):
        from ifigure.mto.hg_support import hg_check_all_incoming_outgoing, hg_verify_all_repo
        broken_repo = hg_verify_all_repo(self)
        if len(broken_repo) != 0:
            txt = ['Some repo are broken\n'] + '\n'.join(
                ['  ' + str(o) for o in broken_repo])
            ret = dialog.message(e.GetEventObject(), txt, 'Broken Repo', 0)
            return
        updated_obj, newer_obj, both_obj = hg_check_all_incoming_outgoing(self)
        #app = wx.GetApp().TopWindow
        #app.proj_tree_viewer.update_widget()#_request2()

        labels = [
            'pull  ' + obj.get_full_path() + '(local:' + str(rev) +
            ' <<-- repo' + str(rev2) + ')' for obj, l, rev, rev2 in updated_obj
        ] + [
            'push ' + obj.get_full_path() + '(local:' + str(rev) +
            ' -->> repo: ' + str(rev2) + ')' for obj, l, rev, rev2 in newer_obj
        ]
        if len(labels) == 0:
            ret = dialog.message(e.GetEventObject(), 'No update is found',
                                 'No Update', 0)
            return
        #print labels, e.GetEventObject()
        from ifigure.utils.checkbox_panel import checkbox_panel
        value = checkbox_panel(e.GetEventObject(),
                               col=1,
                               labels=labels,
                               values=[True] * len(updated_obj) +
                               [False] * len(newer_obj),
                               message='Select packages to update',
                               title='Package updage',
                               blabel='Update')

        if value is None: return
        from ifigure.mto.hg_support import update_to_latest
        for i, v in enumerate(value):
            label, flag = v
            if flag:
                if i < len(updated_obj):
                    new_rev, new_obj = update_to_latest(updated_obj[i][0])
                    dprint1(str(new_obj) + 'was updated to ' + str(new_rev))
                else:
                    new_rev, url = update_to_latest(
                        newer_obj[i - len(updated_obj)][0], rev=True)
                    dprint1('repo(' + url + ') was updated to ' + str(new_rev))
        #dprint1('skipping')
        e.Skip()  # this will update widget
Beispiel #6
0
    def onImportScriptFile(self, e=None, file=None):
        from ifigure.utils.addon_utils import onLoadFile
        ret = onLoadFile(self,
                         message="Enter script file name",
                         modename='pathmode',
                         pathname='path',
                         extname='.py',
                         reject_loc=['wdir', 'owndir'],
                         file=file,
                         wildcard='*.py')

        if not ret:
            return
        file = self.path2fullpath()
        if self.getvar('pathmode') == 'owndir':
            newname = str(os.path.basename(file).split('.')[0])
            self.rename(newname)
        else:
            self.load_script(file)
#        ifigure.events.SendFileSystemChangedEvent(self)
#        self.load_script(file)
        return
        file = dialog.read(None, message="Select script", wildcard='*.py')
        mode, path = FileHolder.fullpath2path(self, file)
        if (mode == 'wdir' or mode == 'owndir'):
            m = 'Import should import from somewhere outside project directory',
            ret = dialog.message(None, message=m, title='Import error')
            return
        self.import_script(file)
Beispiel #7
0
    def onImportScriptFile(self, e=None, file = None):
        from ifigure.utils.addon_utils import onLoadFile
        ret = onLoadFile(self, message="Enter script file name", 
                         modename = 'pathmode',
                         pathname = 'path',
                         extname  = '.py',
                         reject_loc = ['wdir', 'owndir'],
                         file = file,
                         wildcard='*.py')

        if not ret: return
        file=self.path2fullpath()
        if self.getvar('pathmode') == 'owndir':
            newname = str(os.path.basename(file).split('.')[0])
            self.rename(newname)
        else:
            self.load_script(file)
#        ifigure.events.SendFileSystemChangedEvent(self)
#        self.load_script(file)
        return
        file = dialog.read(None, message="Select script", 
                             wildcard='*.py')
        mode, path = FileHolder.fullpath2path(self, file)
        if (mode == 'wdir' or mode == 'owndir'):
           m = 'Import should import from somewhere outside project directory',
           ret=dialog.message(None, message=m, 
               title='Import error')
           return
        self.import_script(file)
Beispiel #8
0
    def onClosePage(self, evt):
#        print("onClose")
        ipage = self.nb.GetSelection()
        label  = str(self.nb.GetPageText(ipage))
        if label.startswith('*'): label = label[1:]
        mods = [self.nb.GetPage(x).GetModify() for x in range(self.nb.GetPageCount())]
        del mods[ipage]
        if str(label) in self._rvars:
            ret=dialog.message(self,
                          '"'+label+'"' + " cannot deleted for current plot type\n(Leave it empty, if you don't need it)",
                          'Error',
                          0)
            evt.Veto()
            return
        npage = self.nb.GetPageCount()
        if npage == 1 or npage == 0:
            ret=dialog.message(self,
                          '"'+label+'"' + " cannot deleted since this is the last page.",
                          'Error',
                          0)
            evt.Veto()
            return
        else:
            ret=dialog.message(self,
                              'Do you want to delete "'+label+'"',
                              'Error',
                               2)
            if ret != 'ok': 
                evt.Veto()
                return

#        if label == 'script.py' or label == '*script.py':
#            fmds = self.figmds()
#            if fmds is not None:
#              if (fmds.has_owndir() and
#                  fmds.hasvar('path')):
#                  fname = os.path.join(fmds.owndir(), fmds.getvar('path'))
#                  if os.path.exists(fname):
#                      os.remove(fname)
#                      fmds.delvar('pathmode')
#                      fmds.delvar('path')
        self.data = None
#        print label
        if str(label) == 'script.py':
            self.bt_script.Enable(True)           
        
        wx.CallAfter(self._set_save_point, mods)
Beispiel #9
0
 def Debug(self,  *args, **kargs):
     se = wx.GetApp().TopWindow.script_editor
     if not se.CheckDebuggerStatus():
         ret=dialog.message(self, 'Debugger is running.','Please wait', 0)           
         return
     self._script._debug = 2
     se.GoDebugMode(self.path2fullpath(), enter = True)
     wx.CallAfter(self.Run, *args, **kargs)
Beispiel #10
0
 def onImportModuleFile(self, e=None):
     file = dialog.read(None, message="Select Module", wildcard='*.py')
     mode, path = self.fullpath2path(file)
     if (mode == 'wdir' or mode == 'owndir'):
         m = 'Import should import from somewhere outside project directory',
         ret = dialog.message(None, message=m, title='Import error')
         return
     self.import_module(file)
Beispiel #11
0
 def onDebug2(self, e):
     se = wx.GetApp().TopWindow.script_editor
     if not se.CheckDebuggerStatus():
         ret=dialog.message(self, 'Debugger is running.','Please wait', 0)           
         return
     self._script._debug = 2
     se.GoDebugMode(self.path2fullpath(), enter = True)
     self.onRunFull(e, title = 'Debug run...')
Beispiel #12
0
 def onDebug2(self, e):
     se = wx.GetApp().TopWindow.script_editor
     if not se.CheckDebuggerStatus():
         ret = dialog.message(self, 'Debugger is running.', 'Please wait',
                              0)
         return
     self._script._debug = 2
     se.GoDebugMode(self.path2fullpath(), enter=True)
     self.onRunFull(e, title='Debug run...')
Beispiel #13
0
 def Debug(self, *args, **kargs):
     se = wx.GetApp().TopWindow.script_editor
     if not se.CheckDebuggerStatus():
         ret = dialog.message(self, 'Debugger is running.', 'Please wait',
                              0)
         return
     self._script._debug = 2
     se.GoDebugMode(self.path2fullpath(), enter=True)
     wx.CallAfter(self.Run, *args, **kargs)
Beispiel #14
0
    def Toggle3D(self):
        asel = self.GetParent().axes_selection
        if asel is None: return
        a = asel()
        if a is not None:
            figobj = a.figobj

            if figobj is None: return
            if a.figobj.get_3d():
                if sum([len(x._member) for x in figobj._zaxis]) != 0:
                    dialog.message(self, 'panel has 3D plot', 'error')
                    return
                figobj.set_3d(False)
            else:
                figobj.set_3d(True)
#           figobj.reset_artist()
            canvas = self.GetParent().canvas
            canvas.draw()
            self.GetParent().set_axes_selection(figobj._artists[0])
Beispiel #15
0
    def OnExportToShell(self, evt):
        indices = self.tree.GetIndexOfItem(self.tree.GetSelection())
        mm = self.model.GetItem(indices)

        import wx

        app = wx.GetApp().TopWindow
        app.shell.lvar[mm.name()] = mm
        app.shell.SendShellEnterEvent()
        ret = dialog.message(app, mm.name() + ' is exported', 'Export', 0)
Beispiel #16
0
    def Toggle3D(self):
        asel = self.GetParent().axes_selection
        if asel is None: return
        a = asel()
        if a is not None:
           figobj = a.figobj

           if figobj is None: return 
           if a.figobj.get_3d(): 
               if sum([len(x._member) for x in figobj._zaxis]) != 0:
                   dialog.message(self, 'panel has 3D plot', 'error')   
                   return                
               figobj.set_3d(False)
           else:
               figobj.set_3d(True)
#           figobj.reset_artist()
           canvas = self.GetParent().canvas
           canvas.draw()          
           self.GetParent().set_axes_selection(figobj._artists[0])
Beispiel #17
0
 def onImportModuleFile(self, e=None):
     file = dialog.read(None, message="Select Module", 
                          wildcard='*.py')
     mode, path=self.fullpath2path(file)
     if (mode == 'wdir' or mode == 'owndir'):
        m = 'Import should import from somewhere outside project directory',
        ret=dialog.message(None, message=m, 
            title='Import error')
        return
     self.import_module(file)
Beispiel #18
0
 def onExport(self, evt):
     import ifigure.widgets.dialog as dialog
     flags = self.model.export_flag
     dataset = self.model.dataset
     metadata = self.model.metadata
     path = self.filepicker.GetPath()
     try:
         hdf_data_export(data=dataset,
                         metadata=metadata,
                         export_flag=flags,
                         filename=path,
                         verbose=True)
         print('HDF export finished : ' + path)
     except:
         dialog.showtraceback(parent=self,
                              txt='Failed to export HDF',
                              title='Error during HDF export',
                              traceback=traceback.format_exc())
     dialog.message(parent=self, style=0, message='Export finished')
     # self.Close()
     evt.Skip()
Beispiel #19
0
def callback(parent, value, setting, gwparam):
    gs = gwparam.getvar('globalsets')
    gv = gwparam.getvar()

    if not '_flag' in gs:
        gs['_flag'] = [[], [], [], []]
    for m in range(4):
        for key in value[m][0]:
            if not key in gs:
                gs[key] = [None] * 4
            gs[key][m] = value[m][0][key]
    gv['event'] = str(value[4][1])
    gv['shot_global'] = str(value[4][5])
    gv['use_shot_global'] = (value[4][6] == 'on')
    parent.book.setvar('global_tdi', str(value[4][2]))
    parent.book.setvar('global_tdi_event', str(value[4][3]))
    parent.book._use_global_tdi = value[4][4] == 'on'
    gv['global_choice'] = value[4][7]
    parent.mpanalysis = (value[4][8] == "on")

    if not value[5][1][0]:
        parent.book._parallel_page = False
        parent.book._parallel_shot = False
        parent.book._parallel_sec = False
    else:
        parent.book._parallel_page = True
        if not value[5][1][1][0][0]:
            parent.book._parallel_shot = False
            parent.book._parallel_sec = False
        else:
            parent.book._parallel_shot = True
            parent.book._parallel_sec = value[5][1][1][0][1][0]

    parent.book.setvar('mdsscript_main', value[5][2])
    parent.book.setvar('mdsplus_server', str(value[4][0]))

    from ifigure.utils.setting_parser import iFigureSettingParser as SettingParser
    p = SettingParser()
    v = p.read_setting('mdsplus.default_mdsserver')
    if str(v['server']) != str(value[4][0]):
        ret = dialog.message(
            parent,
            '\n'.join([
                'Selected MDS+ server is different from your default setting',
                'Do you want to use this server as your default server?'
            ]),
            'MDS+ server setting',
            4,
            icon=wx.ICON_QUESTION)
        #           print ret
        if ret == 'yes':
            v['server'] = str(value[4][0])
            p.write_setting('mdsplus.default_mdsserver', v)
Beispiel #20
0
 def onAddScriptFromFile(self, e):
     
     file = dialog.read(None, message="Select script", 
                          wildcard='*.py')
     if file == '':
         e.Skip()
         return 
     # this call is just import check..
     from ifigure.mto.py_script import PyScript        
     tmp_child=PyScript()        
     idx=self.add_child('_tempraroy_script', tmp_child)        
     mode, path = tmp_child.fullpath2path(file)
     if (mode == 'wdir' or mode == 'owndir'):
        m = 'Import should import from somewhere outside project directory'
        ret=dialog.message(None, message=m, 
            title='Import error')
        return
     
     if not file.endswith('.py'):
        m = 'Script fils should be a .py file'
        ret=dialog.message(None, message=m, 
            title='Import error')
        return
     name = os.path.basename(file)[:-3]
     
     from ifigure.widgets.dlg_fileimportmode import DlgFileimportmode
     
     copy, modes, copy_org = DlgFileimportmode(self,
                                               parent =  e.GetEventObject())
     if copy:
          newfile =  os.path.join(self.owndir()
                                    , os.path.basename(file))
          if not self.has_owndir(): self.mk_owndir()
          shutil.copyfile(file, newfile)
          file = newfile
          modes = ['owndir']
     mode, path = tmp_child.fullpath2path(file, modes)
     tmp_child.destroy()
     self.onAddAbsScript(e, file=file, name=name)
     e.Skip()
Beispiel #21
0
    def onClosePage(self, evt):
        print('onClose')
        ipage = self.nb.GetSelection()
        label = str(self.nb.GetPageText(ipage))
        if label.startswith('*'):
            label = label[1:]
        mods = [
            self.nb.GetPage(x).GetModify()
            for x in range(self.nb.GetPageCount())
        ]
        del mods[ipage]
        if str(label) in self._rvars:
            ret = dialog.message(
                self, '"' + label + '"' +
                " cannot be deleted for current plot type\n(Leave it empty, if you don't need it)",
                'Error', 0)
            evt.Veto()
            return
        npage = self.nb.GetPageCount()
        if npage == 1 or npage == 0:
            ret = dialog.message(
                None, '"' + label + '"' +
                " cannot be deleted since this is the last page.", 'Error', 0)
            evt.Veto()
            return
        else:
            ret = dialog.message(self, 'Do you want to delete "' + label + '"',
                                 'Error', 2)
            if ret != 'ok':
                evt.Veto()
                return

        self.data = None
        if str(label) == 'script.py':
            self.bt_script.Enable(True)

        if self.cb is not None:
            v = self.elp2.GetValue()
            self.cb(v)
        wx.CallAfter(self._set_save_point, mods)
Beispiel #22
0
def setSetting(solver, value):
    app = solver.get_app()
    try:
       root = solver.get_root_parent()
       exec root._name + ' = root'
       if len(value[1].split()) != 0:
         a = eval(value[1])
         if isinstance(a, PyModel):
            solver._model = weakref.proxy(a)
         else:
            dialog.message(app, 'Model should be PyModel', 'Error')
            solver._model = None
       if len(value[2].split()) != 0:
         b = eval(value[2])
         if isinstance(b, PySol):
            solver._sol = weakref.proxy(b)
         else:
            dialog.message(app, 'Sol should be PySol', 'Error')
            solver._sol = None
       if len(value[3].split()) != 0:
         b = eval(value[3])
         if isinstance(b, PyParam):
            solver._param = weakref.proxy(b)
         else:
            dialog.message(app, 'Parameter should be PyParam', 'Error')
            solver._param = None
    except Exception:
       logging.exception("Solver Setting Failed")
Beispiel #23
0
def setSetting(solver, value):
    app = solver.get_app()
    try:
        root = solver.get_root_parent()
        exec root._name + ' = root'
        if len(value[1].split()) != 0:
            a = eval(value[1])
            if isinstance(a, PyModel):
                solver._model = weakref.proxy(a)
            else:
                dialog.message(app, 'Model should be PyModel', 'Error')
                solver._model = None
        if len(value[2].split()) != 0:
            b = eval(value[2])
            if isinstance(b, PySol):
                solver._sol = weakref.proxy(b)
            else:
                dialog.message(app, 'Sol should be PySol', 'Error')
                solver._sol = None
        if len(value[3].split()) != 0:
            b = eval(value[3])
            if isinstance(b, PyParam):
                solver._param = weakref.proxy(b)
            else:
                dialog.message(app, 'Parameter should be PyParam', 'Error')
                solver._param = None
    except Exception:
        logging.exception("Solver Setting Failed")
Beispiel #24
0
 def onExport(self, evt):
     import ifigure.widgets.dialog as dialog        
     flags = self.model.export_flag
     dataset = self.model.dataset
     metadata = self.model.metadata        
     path  = self.filepicker.GetPath()
     try:
         hdf_data_export(data = dataset,
                     metadata = metadata, 
                     export_flag = flags,
                     filename = path,
                     verbose = True)
         print('HDF export finished : '+path)
     except:   
         dialog.showtraceback(parent = self,
                            txt='Failed to export HDF', 
                            title='Error during HDF export',
                            traceback=traceback.format_exc())
     dialog.message(parent = self, style = 0,
                    message = 'Export finished')
     #self.Close()
     evt.Skip()
Beispiel #25
0
    def onRun(self, e=None):
        if not self.is_valid_setting(): return

        if self._sol:
           ret = dialog.message(message="Solution folder exists. Do you want to erase it?\n (No: New Sol, Yes:Overwrite, Cancel:Stop)", style = 5)
           if ret == 'cancel': return
           if ret == 'yes':
               self._sol.destroy()
           ifigure.events.SendChangedEvent(self, wx.GetApp().TopWindow)

        self.init_sol()
        self.solver_script.Run()
        if e is not None: e.Skip()
        return
Beispiel #26
0
    def onInitSol(self, e):
        if not cbook.ProxyAlive(self._model):
            ret = dialog.message(None, 
                    'Set working model in setting panel',
                    'Model is not specified',
                    )
            return

        val = self.init_sol()
#        if not cbook.ProxyAlive(self._param):
#            ret=dialog.message(None,
#                      'global parameter is not specified and was not copied',
#                      'Warning: No global parameter copied')
        ifigure.events.SendChangedEvent(self, e.GetEventObject())      
Beispiel #27
0
def callback(parent, value, setting, gwparam):
    gs = gwparam.getvar('globalsets')
    gv = gwparam.getvar()

    if not '_flag' in gs: gs['_flag'] = [[],[],[],[]]
    for m in range(4):
             for key in value[m][0].keys():
                  if not key in gs:
                     gs[key] = [None]*4
                  gs[key][m] = value[m][0][key]
    gv['event'] = str(value[4][1])
    gv['shot_global'] = str(value[4][5])
    gv['use_shot_global'] = (value[4][6] == 'on')
    parent.book.setvar('global_tdi', str(value[4][2]))
    parent.book.setvar('global_tdi_event', str(value[4][3]))
    parent.book._use_global_tdi = value[4][4] == 'on'
    gv['global_choice'] = value[4][7]
    parent.mpanalysis = (value[4][8] == "on")

    if not value[5][1][0]:
             parent.book._parallel_page=False
             parent.book._parallel_shot=False
             parent.book._parallel_sec=False
    else:
             parent.book._parallel_page=True
             if not value[5][1][1][0][0]:
                 parent.book._parallel_shot=False
                 parent.book._parallel_sec=False
             else:
                 parent.book._parallel_shot=True
                 parent.book._parallel_sec=value[5][1][1][0][1][0]

    parent.book.setvar('mdsscript_main',
                             value[5][2])
    parent.book.setvar('mdsplus_server',
                             str(value[4][0]))

    from ifigure.utils.setting_parser import iFigureSettingParser as SettingParser
    p = SettingParser()
    v = p.read_setting('mdsplus.default_mdsserver')
    if str(v['server']) !=  str(value[4][0]):
           ret=dialog.message(parent,
                             '\n'.join(['Selected MDS+ server is different from your default setting', 'Do you want to use this server as your default server?']),
                             'MDS+ server setting',
                             4, icon=wx.ICON_QUESTION)
#           print ret
           if ret  == 'yes':
               v['server'] =  str(value[4][0])
               p.write_setting('mdsplus.default_mdsserver', v)
Beispiel #28
0
    def onInitSol(self, e):
        if not cbook.ProxyAlive(self._model):
            ret = dialog.message(
                None,
                'Set working model in setting panel',
                'Model is not specified',
            )
            return

        val = self.init_sol()
        #        if not cbook.ProxyAlive(self._param):
        #            ret=dialog.message(None,
        #                      'global parameter is not specified and was not copied',
        #                      'Warning: No global parameter copied')
        ifigure.events.SendChangedEvent(self, e.GetEventObject())
Beispiel #29
0
    def onExportFile(self, e):
        opath = self.path2fullpath('file_pathmode', 'file_path')

        file = dialog.write(None, defaultfile=opath,
                            message="Enter file name")
        if file == '':
            return
        mode, path = self.fullpath2path(file)
        if (mode == 'wdir' or mode == 'owndir'):
            m = 'Export should export to somewhere outside project directory',
            ret = dialog.message(None, message=m,
                                 title='Import error')
            return

        shutil.copyfile(opath, file)
Beispiel #30
0
 def onExportScriptFile(self, e):
     opath=self.path2fullpath()
     file = dialog.write(None, defaultfile=opath,
                         message="Enter script file name", 
                         wildcard='*.py')
     if file == '':
         return
     mode, path=FileHolder.fullpath2path(self, file)
     if (mode == 'wdir' or mode == 'owndir'):
         m = 'Export should export to somewhere outside project directory',
         ret=dialog.message(None, message=m, 
            title='Import error')
         return
     path = FileHolder.path2fullpath(self)
     shutil.copyfile(path, file)
Beispiel #31
0
    def onExportFile(self, e):
        opath=self.path2fullpath('file_pathmode', 'file_path')

        file = dialog.write(None, defaultfile=opath,
                            message="Enter file name")
        if file == '':
            return
        mode, path=self.fullpath2path(file)
        if (mode == 'wdir' or mode == 'owndir'):
            m = 'Export should export to somewhere outside project directory',
            ret=dialog.message(None, message=m, 
               title='Import error')
            return

        shutil.copyfile(opath, file)
Beispiel #32
0
    def onImportFile(self, e):
        '''
        import file from outside project directory
        pathmode will be set to 'owndir'
        '''
 
        file = dialog.read(None, message="Select file")
        if file == '': return
        mode, path=self.fullpath2path(file)
        if (mode == 'wdir' or mode == 'owndir'):
           m = 'Import should import from somewhere outside project directory',
           ret=dialog.message(None, message=m, 
               title='Import error')
           return
        self.import_file(file)
Beispiel #33
0
 def onExportScriptFile(self, e):
     opath = self.path2fullpath()
     file = dialog.write(None,
                         defaultfile=opath,
                         message="Enter script file name",
                         wildcard='*.py')
     if file == '':
         return
     mode, path = FileHolder.fullpath2path(self, file)
     if (mode == 'wdir' or mode == 'owndir'):
         m = 'Export should export to somewhere outside project directory',
         ret = dialog.message(None, message=m, title='Import error')
         return
     path = FileHolder.path2fullpath(self)
     shutil.copyfile(path, file)
Beispiel #34
0
    def onExportModuleFile(self, e=None):
        opath = self.path2fullpath()
        file = dialog.write(None,
                            defaultfile=opath,
                            message="Select script",
                            wildcard='*.py')
        if file == '':
            return
        mode, path = self.fullpath2path(file)
        if (mode == 'wdir' or mode == 'owndir'):
            m = 'Export should export to somewhere outside project directory',
            ret = dialog.message(None, message=m, title='Import error')
            return

        shutil.copyfile(opath, file)
Beispiel #35
0
    def onExportModuleFile(self, e=None):
        opath=self.path2fullpath()
        file = dialog.write(None, defaultfile=opath,
                            message="Select script", 
                            wildcard='*.py')
        if file == '':
            return
        mode, path=self.fullpath2path(file)
        if (mode == 'wdir' or mode == 'owndir'):
            m = 'Export should export to somewhere outside project directory',
            ret=dialog.message(None, message=m, 
               title='Import error')
            return

        shutil.copyfile(opath, file)
Beispiel #36
0
    def onRun(self, evt):
        if not self.is_valid_setting(): return
        if self._sol:
           ret = dialog.message(message="Solution folder exists. Do you want to erase it?\n(No: New Sol, Yes:Overwrite, Cancel:Stop)", style = 5)
           if ret == 'cancel': return
           if ret == 'yes':
               self._sol.destroy()
           ifigure.events.SendChangedEvent(self, wx.GetApp().TopWindow)

        self.init_sol()
        sc=self.solver_script
        self._run_cases =  [True]*len(self._pvalue)
        sc.setvar("task", 2)
        sc.do_run()
        sc.setvar("task", 2)
        if evt is not None: evt.Skip()
Beispiel #37
0
    def onRun(self, e=None):
        if not self.is_valid_setting(): return

        if self._sol:
            ret = dialog.message(
                message=
                "Solution folder exists. Do you want to erase it?\n (No: New Sol, Yes:Overwrite, Cancel:Stop)",
                style=5)
            if ret == 'cancel': return
            if ret == 'yes':
                self._sol.destroy()
            ifigure.events.SendChangedEvent(self, wx.GetApp().TopWindow)

        self.init_sol()
        self.solver_script.Run()
        if e is not None: e.Skip()
        return
Beispiel #38
0
    def onDelete(self, e):
        row=self.parent._startrow2
        if row == -1:return

        gt=self.parent.grid.GetTable()
        obj=gt.GetTreeDict()
        name=(get_varlist(obj))[row] 
        name = gt.get_row_name(row)

        ret = dialog.message(parent=self.parent.GetTopLevelParent(), 
                       message='Do you want to delete '+ name + '?', 
                       title= "Delete variable",
                       style=4)                 
        if ret != 'yes': return
        obj.delvar(name)
        if hasattr(obj, '_local_vars'):
            if name in obj._local_vars:
                obj._local_vars.remove(name)
        gt.SetTreeDict(obj)
Beispiel #39
0
    def onDelete(self, e):
        row = self.parent._startrow2
        if row == -1: return

        gt = self.parent.grid.GetTable()
        obj = gt.GetTreeDict()
        name = (get_varlist(obj))[row]
        name = gt.get_row_name(row)

        ret = dialog.message(parent=self.parent.GetTopLevelParent(),
                             message='Do you want to delete ' + name + '?',
                             title="Delete variable",
                             style=4)
        if ret != 'yes': return
        obj.delvar(name)
        if hasattr(obj, '_local_vars'):
            if name in obj._local_vars:
                obj._local_vars.remove(name)
        gt.SetTreeDict(obj)
Beispiel #40
0
    def onRun(self, evt):
        if not self.is_valid_setting(): return
        if self._sol:
            ret = dialog.message(
                message=
                "Solution folder exists. Do you want to erase it?\n(No: New Sol, Yes:Overwrite, Cancel:Stop)",
                style=5)
            if ret == 'cancel': return
            if ret == 'yes':
                self._sol.destroy()
            ifigure.events.SendChangedEvent(self, wx.GetApp().TopWindow)

        self.init_sol()
        sc = self.solver_script
        self._run_cases = [True] * len(self._pvalue)
        sc.setvar("task", 2)
        sc.do_run()
        sc.setvar("task", 2)
        if evt is not None: evt.Skip()
Beispiel #41
0
    def onClearMeshSq(self, evt):
        dlg = evt.GetEventObject().GetTopLevelParent()
        viewer = dlg.GetParent()
        engine = viewer.engine

        import ifigure.widgets.dialog as dialog
        ret = dialog.message(
            parent=dlg,
            message='Are you sure to delete all Mesh sequence',
            title='Mesh Sequence Delete',
            style=2)
        if ret == 'ok':
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to generate meshing script',
                                 title='Error',
                                 traceback=traceback.format_exc())

            for x in self.keys():
                del self[x]
            dlg.tree.RefreshItems()
Beispiel #42
0
 def onRename(self, evt):
     ret = dialog.message(wx.GetApp().TopWindow, 
                          'Rename to this object is not implemented',
                          'Not Inmplemented', 
                          0)
     return
Beispiel #43
0
 def onRename(self, evt):
     ret = dialog.message(wx.GetApp().TopWindow,
                          'Rename to this object is not implemented',
                          'Not Inmplemented',
                          0)
     return
Beispiel #44
0
def MDS_setting(parent, setting,  gwparam, mds_server, thread_main):
   def make_gs_arr(gs, s):
       return [gs[key][s] for key in pkeys]

   gs = gwparam.getvar('globalsets')
   gv = gwparam.getvar()
   tab   = ['Set1', 'Set2', 'Set3', 'Set4','config', 'more']

   list1 = [[None, make_gs_arr(gs, 0), 118, None]]
   list2 = [[None, make_gs_arr(gs, 1), 118, None]]
   list3 = [[None, make_gs_arr(gs, 2), 118, None]]
   list4 = [[None, make_gs_arr(gs, 3), 118, None]]


   txt = "on" if parent.mpanalysis else "off"
   txt2 = "on" if gv['use_shot_global'] else "off"
   txt7 = "on" if parent.init_beginning else "off"
   txt6 = "on" if parent.init_sec else "off"
   txt5 = "on" if parent.init_page  else "off"


   list5 = [["MDSconnect", mds_server, 204, None],
            ["Update", gv['event'], 0, None],
            ["Common vars", gv['shot_global'], 0, None],
            ["Use common vars",  txt2,  1, {"values":["on", "off"]}],
            ["Global setting", gv['global_choice'], 21, None],
            ["Multipage mode",  txt, 1, {"values":["on", "off"]}],
#            ["Color Order", gv['color_order'], 22, {}],]
            ]

   tmp2=    [[None,  parent.parallel_sec, 3, 
             {"text":'Parallelize Panels', "noindent":True}],]
   tmp =    [[None,  (parent.parallel_shot, [parent.parallel_sec]), 27, 
                     ({"text":'Parallelize Pages'}, {"elp": tmp2})]]
   list6 = [[None,"MDSplus session parallelization",  102, None],
            [None,  (parent.parallel_page, 
                    [(parent.parallel_shot, [parent.parallel_sec])]), 
                    27, 
                    ({"text":'Parallelize Shots', "space":15},{"elp":tmp})],
            #["At session start",txt7, 1, {"values":["on", "off"]}],
            #["At every page",   txt5, 1, {"values":["on", "off"]}],
            #["At every panel",  txt6, 1, {"values":["on", "off"]}],
            [None, thread_main,  3, 
                        {"text":"Run python script in main thread",
                         "noindent":None }],
            [None, "(!) MDS+ connection is initialized when opening new tree",  102, None],]




   tip1 = None
   tip2 = None
   tip3 = None
   tip4 = None
   tip5 = ['MDSplus server and default Tree',
           'Update event', 
           'MDS command called at the begining of page',
           'MDS command called at the begining of section',
           'Global setting selection for shots',
           'Use the same shot numbers for all pages. (shot numbers after semi-colon are ignored)',]

   tip6 = [ None,
           'Parallelization of MDS session',
            None, 
           #'Initialize global/local variables when analysis loop starts',
           #'Initialize global/local variables when analyzing a new panel',
           #'Initialize global/local variables when analyzing a new page',
            None,  ]


   l  = [list1, list2, list3, list4, list5, list6]
   tip= [tip1, tip2, tip3, tip4, tip5, tip6]

   value = DialogEditListTab(tab, l, modal=False,tip=tip, parent=parent, 
                 title = 'Global Setting',
                 style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)

   if value[0]:
      for m in range(4):
          for i, v in enumerate(value[1][m][0]):
               gs[pkeys[i]][m] = str(v[1])
      gv['event'] = str(value[1][4][1])
      gv['shot_global'] = str(value[1][4][2])
      gv['use_shot_global'] = (value[1][4][3] == 'on')
      gv['global_choice'] = value[1][4][4]
      parent.mpanalysis = (value[1][4][5] == "on")
#      gv['color_order'] = value[1][4][5]

#      parent.init_beginning = (value[1][5][3] == "on")
#      parent.init_page = (value[1][5][4] == "on")
#      parent.init_sec = (value[1][5][5] == "on")

      if not value[1][5][1][0]:
          parent.parallel_page=False
          parent.parallel_shot=False
          parent.parallel_sec=False
      else:
          parent.parallel_page=True
          if not value[1][5][1][1][0][0]:
              parent.parallel_shot=False
              parent.parallel_sec=False
          else:
              parent.parallel_shot=True
              parent.parallel_sec=value[1][5][1][1][0][1][0]

      parent.book.setvar('mdsscript_main',
                          value[1][5][2])
      parent.book.setvar('mdsplus_server',
                          str(value[1][4][0]))

   from ifigure.utils.setting_parser import iFigureSettingParser as SettingParser
   p = SettingParser()
   v = p.read_setting('mdsplus.default_mdsserver')
   if str(v['server']) !=  str(value[1][4][0]):
        ret=dialog.message(parent,
                          '\n'.join(['Selected MDS+ server is different from your default setting', 'Do you want to use this server as your default server?']),
                          'MDS+ server setting',
                          2, icon=wx.ICON_QUESTION)
        print(ret)
        if ret  == 'ok':
            v['server'] =  str(value[1][4][0])
            p.write_setting('mdsplus.default_mdsserver', v)

   return value
Beispiel #45
0
def MDS_setting(parent, setting, gwparam, mds_server, thread_main):
    def make_gs_arr(gs, s):
        return [gs[key][s] for key in pkeys]

    gs = gwparam.getvar('globalsets')
    gv = gwparam.getvar()
    tab = ['Set1', 'Set2', 'Set3', 'Set4', 'config', 'more']

    list1 = [[None, make_gs_arr(gs, 0), 118, None]]
    list2 = [[None, make_gs_arr(gs, 1), 118, None]]
    list3 = [[None, make_gs_arr(gs, 2), 118, None]]
    list4 = [[None, make_gs_arr(gs, 3), 118, None]]

    txt = "on" if parent.mpanalysis else "off"
    txt2 = "on" if gv['use_shot_global'] else "off"
    txt7 = "on" if parent.init_beginning else "off"
    txt6 = "on" if parent.init_sec else "off"
    txt5 = "on" if parent.init_page else "off"

    list5 = [
        ["MDSconnect", mds_server, 204, None],
        ["Update", gv['event'], 0, None],
        ["Common vars", gv['shot_global'], 0, None],
        ["Use common vars", txt2, 1, {
            "values": ["on", "off"]
        }],
        ["Global setting", gv['global_choice'], 21, None],
        ["Multipage mode", txt, 1, {
            "values": ["on", "off"]
        }],
        #            ["Color Order", gv['color_order'], 22, {}],]
    ]

    tmp2 = [
        [
            None, parent.parallel_sec, 3, {
                "text": 'Parallelize Panels',
                "noindent": True
            }
        ],
    ]
    tmp = [[
        None, (parent.parallel_shot, [parent.parallel_sec]), 27,
        ({
            "text": 'Parallelize Pages'
        }, {
            "elp": tmp2
        })
    ]]
    list6 = [
        [None, "MDSplus session parallelization", 102, None],
        [
            None,
            (parent.parallel_page, [(parent.parallel_shot,
                                     [parent.parallel_sec])]), 27,
            ({
                "text": 'Parallelize Shots',
                "space": 15
            }, {
                "elp": tmp
            })
        ],
        #["At session start",txt7, 1, {"values":["on", "off"]}],
        #["At every page",   txt5, 1, {"values":["on", "off"]}],
        #["At every panel",  txt6, 1, {"values":["on", "off"]}],
        [
            None, thread_main, 3, {
                "text": "Run python script in main thread",
                "noindent": None
            }
        ],
        [
            None, "(!) MDS+ connection is initialized when opening new tree",
            102, None
        ],
    ]

    tip1 = None
    tip2 = None
    tip3 = None
    tip4 = None
    tip5 = [
        'MDSplus server and default Tree',
        'Update event',
        'MDS command called at the begining of page',
        'MDS command called at the begining of section',
        'Global setting selection for shots',
        'Use the same shot numbers for all pages. (shot numbers after semi-colon are ignored)',
    ]

    tip6 = [
        None,
        'Parallelization of MDS session',
        None,
        #'Initialize global/local variables when analysis loop starts',
        #'Initialize global/local variables when analyzing a new panel',
        #'Initialize global/local variables when analyzing a new page',
        None,
    ]

    l = [list1, list2, list3, list4, list5, list6]
    tip = [tip1, tip2, tip3, tip4, tip5, tip6]

    value = DialogEditListTab(tab,
                              l,
                              modal=False,
                              tip=tip,
                              parent=parent,
                              title='Global Setting',
                              style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)

    if value[0]:
        for m in range(4):
            for i, v in enumerate(value[1][m][0]):
                gs[pkeys[i]][m] = str(v[1])
        gv['event'] = str(value[1][4][1])
        gv['shot_global'] = str(value[1][4][2])
        gv['use_shot_global'] = (value[1][4][3] == 'on')
        gv['global_choice'] = value[1][4][4]
        parent.mpanalysis = (value[1][4][5] == "on")
        #      gv['color_order'] = value[1][4][5]

        #      parent.init_beginning = (value[1][5][3] == "on")
        #      parent.init_page = (value[1][5][4] == "on")
        #      parent.init_sec = (value[1][5][5] == "on")

        if not value[1][5][1][0]:
            parent.parallel_page = False
            parent.parallel_shot = False
            parent.parallel_sec = False
        else:
            parent.parallel_page = True
            if not value[1][5][1][1][0][0]:
                parent.parallel_shot = False
                parent.parallel_sec = False
            else:
                parent.parallel_shot = True
                parent.parallel_sec = value[1][5][1][1][0][1][0]

        parent.book.setvar('mdsscript_main', value[1][5][2])
        parent.book.setvar('mdsplus_server', str(value[1][4][0]))

    from ifigure.utils.setting_parser import iFigureSettingParser as SettingParser
    p = SettingParser()
    v = p.read_setting('mdsplus.default_mdsserver')
    if str(v['server']) != str(value[1][4][0]):
        ret = dialog.message(
            parent,
            '\n'.join([
                'Selected MDS+ server is different from your default setting',
                'Do you want to use this server as your default server?'
            ]),
            'MDS+ server setting',
            2,
            icon=wx.ICON_QUESTION)
        print(ret)
        if ret == 'ok':
            v['server'] = str(value[1][4][0])
            p.write_setting('mdsplus.default_mdsserver', v)

    return value
Beispiel #46
0
        def onHGupdate(self, evt=None, m=None):
            repo = hgapi.Repo(self.owndir())
            app0 = wx.GetApp().TopWindow
            if m is None:
                latest = repo.revisions(slice(-1, -1))[0].rev
                ret, m = dialog.textentry(app0, "Enter revision #",
                                          "Mercurial Update", str(latest))
                if not ret: return None
            status = repo.hg_status()
            for key in status:
                if key == '?': continue
                if len(status[key]) != 0:
                    print(status)
                    ret, m = dialog.message(
                        app0, "Local repo status is not clean. \n(" +
                        self.get_full_path() + ')', "Mercurial Update Error")
                    self.hg_set_projtreeviewer_status(repo)
                    #                    self._status = '!'
                    return None

            repo.hg_update(long(m))

            parent = self.get_parent()
            owndir = self.owndir()
            name = self._name
            ichild = self.get_ichild()
            url, root, path = self.get_mercurial_url()

            self.destroy(clean_owndir=False)

            del_old_treedata = False
            load_fpath = True

            fpath = os.path.join(owndir, ".tree_data_hg")
            if not os.path.exists(fpath):
                fpath = os.path.join(owndir, ".tree_data")
                if not os.path.exists(fpath):
                    print((url, root, path))
                    td = handle_pure_file_repo(parent, name, owndir)
                    load_fpath = False
                else:
                    dlg = wx.MessageDialog(
                        None,
                        'HG update succeeded but .tree_data_hg is not found.',
                        'Old style for HG repo', wx.OK)
                    ret = dlg.ShowModal()
                    dlg.Destroy()
                    fpath = os.path.join(owndir, ".tree_data")
                    del_old_treedata = True
            if load_fpath:
                fid = open(fpath, 'rb')
                td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
                fid.close()
                parent.add_child(name, td, keep_zorder=True)
            parent.move_child(td.get_ichild(), ichild)
            if load_fpath:
                for obj in td.walk_tree():
                    obj.init_after_load(olist, nlist)
            if del_old_treedata:
                os.remove(fpath)

            if url is not None:
                td.set_mercurial_url(root, path)
            if evt is not None:
                #               evt.GetEventObject().update_widget_request2()
                ifigure.events.SendFileSystemChangedEvent(parent, reload=True)
                evt.Skip()
            return td
Beispiel #47
0
       def onHGupdate(self, evt=None, m=None):
           repo = hgapi.Repo(self.owndir())
           app0 = wx.GetApp().TopWindow
           if m is None:
              latest = repo.revisions(slice(-1,-1))[0].rev
              ret, m = dialog.textentry(app0,
                    "Enter revision #", "Mercurial Update", str(latest))
              if not ret: return None
           status = repo.hg_status()
           for key in status:
               if key == '?': continue
               if len(status[key]) != 0:
                    print(status)
                    ret, m = dialog.message(app0,
                                "Local repo status is not clean. \n(" + 
                                 self.get_full_path()+')', 
                                "Mercurial Update Error")
                    self.hg_set_projtreeviewer_status(repo)
#                    self._status = '!'
                    return None

           repo.hg_update(long(m))

           parent = self.get_parent()
           owndir = self.owndir()
           name = self._name
           ichild = self.get_ichild()
           url, root, path = self.get_mercurial_url()
           
           self.destroy(clean_owndir=False)

           del_old_treedata = False
           load_fpath = True
           
           fpath=os.path.join(owndir, ".tree_data_hg")
           if not os.path.exists(fpath): 
               fpath=os.path.join(owndir, ".tree_data")
               if not os.path.exists(fpath): 
                  print((url, root, path))
                  td = handle_pure_file_repo(parent, name, owndir)
                  load_fpath = False
               else:
                  dlg=wx.MessageDialog(None, 
                                    'HG update succeeded but .tree_data_hg is not found.',
                       'Old style for HG repo',
                                     wx.OK)
                  ret=dlg.ShowModal()
                  dlg.Destroy()
                  fpath=os.path.join(owndir, ".tree_data")
                  del_old_treedata = True
           if load_fpath:
               fid= open(fpath, 'rb')
               td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
               fid.close()
               parent.add_child(name, td, keep_zorder = True)
           parent.move_child(td.get_ichild(), ichild)
           if load_fpath:
               for obj in td.walk_tree():
                   obj.init_after_load(olist, nlist)
           if del_old_treedata:
               os.remove(fpath)

           if url is not None:
               td.set_mercurial_url(root, path)
           if evt is not None:
#               evt.GetEventObject().update_widget_request2()
               ifigure.events.SendFileSystemChangedEvent(parent, reload = True)
               evt.Skip()
           return td