示例#1
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
示例#2
0
    def onBuildAll(self, evt):
        dlg = evt.GetEventObject().GetTopLevelParent()
        viewer = dlg.GetParent()
        engine = viewer.engine
        engine.build_ns()

        try:
            od = os.getcwd()
            os.chdir(viewer.model.owndir())
            self.build_geom(finalize=True, gui_parent=dlg)
            os.chdir(od)
        except:
            import ifigure.widgets.dialog as dialog
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to build geometry',
                                 title='Error',
                                 traceback=traceback.format_exc())
        dlg.OnRefreshTree()

        filename = os.path.join(viewer.model.owndir(), self.name())
        self.onUpdateGeoView(evt, filename=filename)
        '''
        if not use_gmsh_api:
            fid = open(filename + '.geo_unrolled', 'w')
            fid.write('\n'.join(self._txt_unrolled))
            fid.close()
        '''
        self.geom_finalized = True
        self.geom_timestamp = time.ctime()
        evt.Skip()
示例#3
0
    def onBuildAll(self, evt):
        dlg = evt.GetEventObject().GetTopLevelParent()
        dlg.import_selected_panel_value()

        viewer = dlg.GetParent()
        engine = viewer.engine
        engine.build_ns()

        geom_root = self.geom_root
        if not geom_root.is_finalized:
            geom_root.onBuildAll(evt)

        do_clear = True
        try:
            filename = os.path.join(viewer.model.owndir(),
                                    self.name()) + '.msh'
            count = self.build_mesh(geom_root,
                                    finalize=True,
                                    filename=filename,
                                    gui_parent=dlg)
            do_clear = count == 0
        except:
            import ifigure.widgets.dialog as dialog
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to generate mesh script',
                                 title='Error',
                                 traceback=traceback.format_exc())
        dlg.OnRefreshTree()

        self.update_meshview(dlg, viewer, clear=do_clear)
示例#4
0
    def _doPlotExpr(self, value):
        model = self.parent.model.param.getvar('mfem_model')
        if model is None: return

        expr = str(value[0])
        phys = str(value[3])
        use_2dplot = model['Phys'][phys].dim == 1

        from petram.utils import eval_expr
        try:
            engine = self.parent.engine
            d = eval_expr(model, engine, expr, value[1], phys=phys)
        except:
            dialog.showtraceback(parent=self,
                                 txt='Failed to evauate expression',
                                 title='Error',
                                 traceback=traceback.format_exc())
            return

        from ifigure.interactive import figure
        v = figure()
        v.update(False)
        v.suptitle(expr)
        if use_2dplot:
            for k in d.keys():
                v.plot(d[k][0][:, 0, 0].flatten(), d[k][1][:, 0].flatten())
            v.update(True)
        else:
            from petram.pi.dlg_plot_sol import setup_figure
            setup_figure(v, self.GetParent())
            for k in d.keys():
                v.solid(d[k][0], cz=True, cdata=d[k][1])
            v.update(True)
            v.view('noclip')
            v.lighting(light=0.5)
示例#5
0
 def _do_make_hg(self, value):
     app = wx.GetApp().TopWindow
     try:
         self.setvar('include',
                     [x.strip() for x in str(value[0]).split(',')])
         self.setvar('exclude',
                     [x.strip() for x in str(value[1]).split(',')])
     except:
         dialog.showtraceback(parent=app,
                              txt='Failed to set include/exclude',
                              title='Failure',
                              traceback=traceback.format_exc())
         return
     repo = hgapi.Repo(self.owndir())
     repo.hg_init()
     self.update_hgsub()
     addfile, rmfile, skipfile, txt = hg_add_no_binary(
         repo,
         self.owndir(),
         include=self.getvar('include'),
         exclude=self.getvar('exclude'))
     dlg = wx.MessageDialog(None, txt, "HG add/remove", wx.OK)
     ret = dlg.ShowModal()
     dlg.Destroy()
     self._image_update = False
     _add_include_exclude(self)
     tv = app.proj_tree_viewer
     tv.update_widget()
示例#6
0
    def onButton(self, evt, mode):
        from ifigure.ifigure_config import vv_scratch
        import ifigure.utils.pickle_wrapper as pickle

        idx = self.grid.GetSelectedRows()
        if len(idx) == 0 and mode != 'paste':
            return
        gt = self.grid.GetTable()
        obj = gt.GetTreeDict()

        if mode == 'copy':
            name = str(self.grid.GetRowLabelValue(idx[0]))
            self.GetTopLevelParent().set_status_text('Copy ' + name,
                                                     timeout=3000)
            try:
                fid = open(vv_scratch, 'wb')
                data = {name: obj.getvar(name)}
                pickle.dump(data, fid)
                fid.close()
            except:
                dialog.showtraceback(parent=self,
                                     txt='Failed to copy',
                                     title='Failed to copy',
                                     traceback=traceback.format_exc())
        elif mode == 'paste':
            if not os.path.exists(vv_scratch):
                dialog.showtraceback(parent=self,
                                     txt='paste data does not exists',
                                     title='Failed to paste',
                                     traceback='')
                return
            fid = open(vv_scratch, 'rb')
            data = pickle.load(fid)
            fid.close()
            for key in data:
                if obj.hasvar(key):
                    dlg = wx.MessageDialog(
                        None, 'Do you want to overwrite ' + key + '?',
                        'Variable already existws', wx.OK | wx.CANCEL)
                    ret = dlg.ShowModal()
                    dlg.Destroy()
                    if ret != wx.ID_OK:
                        continue
                self.GetTopLevelParent().set_status_text('Paste tree variable',
                                                         timeout=3000)
                obj.setvar(key, data[key])
                obj._var_changed = True
            self.update()
        elif mode == 'trash':
            name = str(self.grid.GetRowLabelValue(idx[0]))
            dlg = wx.MessageDialog(None, 'Do you want to delete ' + name + '?',
                                   'Deleting variable', wx.OK | wx.CANCEL)
            ret = dlg.ShowModal()
            dlg.Destroy()
            if ret == wx.ID_OK:
                obj.delvar(name)
                obj._var_changed = True
                self.GetTopLevelParent().set_status_text('Deltete ' + name,
                                                         timeout=3000)
                wx.CallAfter(self.update)
示例#7
0
    def _onBuildThis(self, evt, **kwargs):
        dlg = evt.GetEventObject().GetTopLevelParent()
        viewer = dlg.GetParent()
        engine = viewer.engine
        engine.build_ns()
        geom_root = self.root()['Geometry'][self.parent.geom_group]

        do_clear = True
        if not geom_root.is_finalized:
            geom_root.onBuildAll(evt)

        try:
            filename = os.path.join(viewer.model.owndir(),
                                    self.name()) + '.msh'
            kwargs['gui_parent'] = dlg
            kwargs['filename'] = filename

            count = self.parent.build_mesh(geom_root, **kwargs)
            do_clear = (count == 0)
        except:
            import ifigure.widgets.dialog as dialog
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to generate meshing script',
                                 title='Error',
                                 traceback=traceback.format_exc())
        dlg.OnRefreshTree()
        self.parent.update_meshview(dlg, viewer, clear=do_clear)
示例#8
0
    def _onBuildThis(self, evt, **kwargs):
        dlg = evt.GetEventObject().GetTopLevelParent()
        viewer = dlg.GetParent()
        engine = viewer.engine
        engine.build_ns()
        kwargs['gui_parent'] = dlg

        try:
            p = self.parent
            if isinstance(p, GmshGeom):
                rootg = p
            else:  # work plane
                rootg = p.parent
            rootg._geom_finalized = False

            od = os.getcwd()
            os.chdir(viewer.model.owndir())
            rootg.build_geom(**kwargs)
            os.chdir(od)

        except:
            import ifigure.widgets.dialog as dialog
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to build geometry',
                                 title='Error',
                                 traceback=traceback.format_exc())
        dlg.OnRefreshTree()
        rootg.onUpdateGeoView(evt)
示例#9
0
 def _do_make_hg(self, value):
     app = wx.GetApp().TopWindow
     try:
         self.setvar('include', [x.strip() for x in str(value[0]).split(',')])
         self.setvar('exclude', [x.strip() for x in str(value[1]).split(',')])
     except:
         dialog.showtraceback(parent = app,
                              txt='Failed to set include/exclude',
                              title='Failure',
                              traceback=traceback.format_exc()) 
         return 
     repo = hgapi.Repo(self.owndir())
     repo.hg_init()
     self.update_hgsub()
     addfile, rmfile, skipfile, txt = hg_add_no_binary(repo, 
                  self.owndir(), 
                  include=self.getvar('include'), 
                  exclude=self.getvar('exclude')) 
     dlg=wx.MessageDialog(None, txt, "HG add/remove", wx.OK)
     ret=dlg.ShowModal()
     dlg.Destroy()
     self._image_update = False
     _add_include_exclude(self)
     tv = app.proj_tree_viewer
     tv.update_widget()
示例#10
0
    def onClearMesh(self, evt):
        dlg = evt.GetEventObject().GetTopLevelParent()
        viewer = dlg.GetParent()
        engine = viewer.engine
        engine.build_ns()
        geom_root = self.geom_root

        if not geom_root.is_finalized:
            geom_root.onBuildAll(evt)

        do_clear = True
        try:
            count = self.build_mesh(geom_root, nochild=True, gui_parent=dlg)
            do_clear = (count == 0)
        except:
            import ifigure.widgets.dialog as dialog
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to generate meshing script',
                                 title='Error',
                                 traceback=traceback.format_exc())
        dlg.OnRefreshTree()
        self.update_meshview(dlg, viewer, clear=do_clear)

        viewer._view_mode_group = ''
        viewer.set_view_mode('mesh', self)
示例#11
0
                    def add_func(evt,
                                 cls=cls,
                                 indices=indices,
                                 tree=tree,
                                 namebase=txt2,
                                 model=self.model):
                        parent = model.GetItem(indices)

                        # build stop is a flag for precedual construction of geom/mesh
                        if hasattr(parent, '_build_stop'):
                            before, after = parent.build_stop
                        elif hasattr(parent.parent, 'build_stop'):
                            before, after = parent.parent.build_stop
                        else:
                            before, after = None, None

                        try:
                            name = parent.add_item(namebase,
                                                   cls,
                                                   before=before,
                                                   after=after)
                        except:
                            dialog.showtraceback(
                                parent=self,
                                txt="Failed to add child",
                                title='Error',
                                traceback=traceback.format_exc())
                            return

                        child = parent[name]
                        try:
                            child.on_created_in_tree()
                        except:
                            del parent[name]
                            dialog.showtraceback(
                                parent=self,
                                txt="Failed to add child",
                                title='Error',
                                traceback=traceback.format_exc())
                            return

                        viewer = self.GetParent()
                        viewer.model.scripts.helpers.rebuild_ns()
                        engine = viewer.engine
                        model.GetItem(indices)[name].postprocess_after_add(
                            engine)
                        tree.RefreshItems()

                        viewer.engine.run_mesh_extension_prep(reset=True)

                        old_item = tree.GetItemByIndex(parent.GetIndices())
                        tree.Expand(old_item)
                        tree.SelectItem(old_item, select=False)

                        new_item = tree.GetItemByIndex(child.GetIndices())
                        tree.SelectItem(new_item)
                        evt.Skip()
示例#12
0
 def handle_hg_setting(self, value, event = None):
     app = wx.GetApp().TopWindow
     try:
         self.setvar('include', [x.strip() for x in str(value[0]).split(',')])
         self.setvar('exclude', [x.strip() for x in str(value[1]).split(',')])
     except:
         dialog.showtraceback(parent = app,
                              txt='Failed to set include/exclude',
                              title='Failure',
                              traceback=traceback.format_exc())       
示例#13
0
        def onHGclone(self, evt):
            app = wx.GetApp().TopWindow
            name = self.getvar('mercurial_path')
            if name is None:
                name = self._name
            l2 = [
                ["commit message", '', 0, None],
            ]
            list6 = [
                ["root repository", None, 304,
                 dlg_s()],
                ["name", name, 0, None],
                #               [None, (False, ['change #1']),  27,
                #                      ({"text": 'commit modification'},
                #                      {"elp": l2},)],
                [
                    None, True, 3, {
                        "text": 'change source tree to the new clone'
                    }
                ]
            ]

            value = DialogEditList(list6,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='HG clone')
            if not value[0]:
                return
            if not self.update_hgsub():
                return
#           if value[1][2][0]:
#               if not self.do_commit(str(value[1][2][1])): return
            url = rootpath2url(str(value[1][0]), str(value[1][1]))

            ocwd = os.getcwd()
            os.chdir(self.owndir())
            try:
                repo = hgapi.Repo(self.owndir())
                if not url.startswith('ssh://'):
                    # for local repo, check if directory exists
                    dirname = os.path.dirname(url)
                    if not os.path.exists(dirname):
                        os.makedirs(dirname)
                repo.hg_clone('.', url)
            except:
                dialog.showtraceback(parent=app,
                                     txt='Failed to clone subtree to ' + url,
                                     title='Failed to clone',
                                     traceback=traceback.format_exc())
            if value[1][2]:
                self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
            os.chdir(ocwd)
示例#14
0
 def handle_hg_setting(self, value, event=None):
     app = wx.GetApp().TopWindow
     try:
         self.setvar('include',
                     [x.strip() for x in str(value[0]).split(',')])
         self.setvar('exclude',
                     [x.strip() for x in str(value[1]).split(',')])
     except:
         dialog.showtraceback(parent=app,
                              txt='Failed to set include/exclude',
                              title='Failure',
                              traceback=traceback.format_exc())
示例#15
0
    def onButton(self, evt, mode):
        from ifigure.ifigure_config import vv_scratch
        import cPickle as pickle

        idx = self.grid.GetSelectedRows()
        if len(idx)==0 and mode != 'paste':  return
        gt=self.grid.GetTable()        
        obj=gt.GetTreeDict()      

        if mode == 'copy':
            name = str(self.grid.GetRowLabelValue(idx[0]))
            self.GetTopLevelParent().set_status_text('Copy '+ name, timeout = 3000)
            try:
                fid = open(vv_scratch, 'wb')
                data = {name:obj.getvar(name)}
                pickle.dump(data, fid)
                fid.close()
            except:
               dialog.showtraceback(parent = self,
                                    txt='Failed to copy',
                                    title='Failed to copy',
                                    traceback=traceback.format_exc()) 
        elif mode == 'paste':
            fid = open(vv_scratch, 'rb')
            data = pickle.load(fid)
            fid.close()
            for key in data:
               if obj.hasvar(key):
                   dlg=wx.MessageDialog(None, 
                          'Do you want to overwrite '+key + '?',
                          'Variable already existws',
                           wx.OK|wx.CANCEL)
                   ret=dlg.ShowModal()
                   dlg.Destroy()
                   if ret  != wx.ID_OK: continue
               self.GetTopLevelParent().set_status_text('Paste tree variable', timeout = 3000)
               obj.setvar(key, data[key])
               obj._var_changed = True
            self.update()
        elif mode == 'trash':
            name = str(self.grid.GetRowLabelValue(idx[0]))
            dlg=wx.MessageDialog(None, 
                        'Do you want to delete '+ name + '?',
                          'Deleting variable',
                           wx.OK|wx.CANCEL)
            ret=dlg.ShowModal()
            dlg.Destroy()
            if ret == wx.ID_OK: 
                obj.delvar(name)
                obj._var_changed = True
                self.GetTopLevelParent().set_status_text('Deltete '+name, timeout = 3000)
                wx.CallAfter(self.update)
示例#16
0
        def onHGDiff(self, evt=None):
            app = wx.GetApp().TopWindow
            repo = self.get_repo()
            latest = repo.revisions(slice(-1, -1))[0].rev
            current = repo.hg_rev()
            ll = [
                [None, 'Enter revision numbers to compare', 2, None],
                ["revision (older)", str(current), 0, None],
                ["revision (newer)", str(latest), 0, None],
                [None, 'newer == "", diff against working dir.', 2, None],
                [
                    None,
                    'older == newer, diff between the latest and current', 2,
                    None
                ],
            ]

            value = DialogEditList(ll,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='HG diff')
            if not value[0]:
                return
            a = str(value[1][1])
            b = str(value[1][2])
            if b == '':
                args = (str(a), )
            elif int(a) != int(b):
                args = (
                    str(a),
                    str(b),
                )
            elif int(a) == int(b):
                args = tuple()
            try:
                res = repo.hg_diff(*args)
            except:
                dialog.showtraceback(parent=app,
                                     txt='Failed to hg_diff',
                                     title='Failed to hg_diff',
                                     traceback=traceback.format_exc())
            if globals()['diffwindow'] is not None:
                try:
                    globals()['diffwindow'].Destroy()
                except PyDeadObjectError:
                    pass
                globals()['diffwindow'] = None
            from ifigure.widgets.hgdiff_window import HGDiffWindow
            globals()['diffwindow'] = HGDiffWindow(res, wx.GetApp().TopWindow)
示例#17
0
    def OnMoveItemTo(self, evt):
        from ifigure.utils.edit_list import DialogEditList
        import ifigure.widgets.dialog as dialog

        if self.tree.GetSelection() is None:
            return

        indices = self.tree.GetIndexOfItem(self.tree.GetSelection())
        mm = self.model.GetItem(indices)
        p = mm.parent
        names = list(p._contents)
        idx = names.index(mm.name())

        list6 = [
            ["New parent", p.name(), 0],
            ["Index (0-base)", str(idx), 0],
        ]
        value = DialogEditList(list6,
                               modal=True,
                               style=wx.DEFAULT_DIALOG_STYLE
                               | wx.RESIZE_BORDER,
                               tip=None,
                               parent=self,
                               title='Move item to...')
        if not value[0]:
            return

        if value[1][0] != p.name():
            try:
                assert False, "Moving under diffent parent is not supported"
            except AssertionError:
                dialog.showtraceback(
                    parent=self,
                    txt='Moving under diffent parent is not supported',
                    title='Error',
                    traceback=traceback.format_exc())
                return

        new_idx = int(value[1][1])
        names = list(p._contents)
        new_idx = max([0, new_idx])
        new_idx = min([len(names) - 1, new_idx])

        idx = names.index(mm.name())
        new_names = self.MoveItemInList(names, idx, new_idx)
        p._contents = OrderedDict((k, p._contents[k]) for k in new_names)
        self.tree.RefreshItems()

        indices = self.tree.GetIndexOfItem(self.tree.GetSelection())
        mm = self.model.GetItem(indices)
        self.show_panel(mm)
示例#18
0
        def onHGpush(self, evt):
            app = wx.GetApp().TopWindow
            url, root, path = self.get_mercurial_url()
            if url is not None:
                root = root
                name = path
            else:
                root = None
                name = self._name

            list6 = [
                ["root repository", root, 304,
                 dlg_s()],
                ["name", name, 0, None],
                [None, True, 3, {
                    "text": 'Perform HG update'
                }],
            ]

            value = DialogEditList(list6,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='HG push')
            if not value[0]:
                return
            if not self.update_hgsub():
                return
            url = rootpath2url(str(value[1][0]), str(value[1][1]))

            ocwd = os.getcwd()
            os.chdir(self.owndir())
            try:
                urlbk, rootbk, pathbk = self.get_mercurial_url()
                repo = hgapi.Repo(self.owndir())
                self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
                repo.hg_push(url)
                if value[1][2] and not url.startswith('ssh'):
                    repo2 = hgapi.Repo(url)
                    latest = repo2.revisions(slice(-1, -1))[0].rev
                    repo2.hg_update(int(latest))
            except:
                dialog.showtraceback(parent=app,
                                     txt='Failed to push',
                                     title='Failed to push',
                                     traceback=traceback.format_exc())
            self.set_mercurial_url(rootbk, pathbk)
            os.chdir(ocwd)
示例#19
0
    def onExportMsh(self, evt):
        dlg = evt.GetEventObject().GetTopLevelParent()
        viewer = dlg.GetParent()

        src = os.path.join(viewer.model.owndir(), self.name()) + '.msh'

        from ifigure.widgets.dialog import write
        parent = evt.GetEventObject()
        dst = write(parent, message='Enter .msh file name', wildcard='*.msh')
        if dst == '': return
        try:
            import shutil
            shutil.copyfile(src, dst)
        except:
            import ifigure.widgets.dialog as dialog
            dialog.showtraceback(parent=dlg,
                                 txt='Failed to export msh file',
                                 title='Error',
                                 traceback=traceback.format_exc())
示例#20
0
       def onHGpush(self, evt):
           app = wx.GetApp().TopWindow
           url, root, path = self.get_mercurial_url()
           if url is not None:
               root = root
               name = path
           else:
               root = None
               name = self._name

           list6 = [
               ["root repository", root, 304, dlg_s()],
               ["name", name, 0, None],
               [None, True, 3, {"text":'Perform HG update'}],]


           value = DialogEditList(list6, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app, title = 'HG push')
           if not value[0]: return 
           if not self.update_hgsub(): return
           url = rootpath2url(str(value[1][0]), str(value[1][1]))

           ocwd = os.getcwd()
           os.chdir(self.owndir())
           try:
               urlbk, rootbk, pathbk = self.get_mercurial_url()
               repo = hgapi.Repo(self.owndir())
               self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
               repo.hg_push(url)
               if value[1][2] and not url.startswith('ssh'):
                   repo2 = hgapi.Repo(url)
                   latest = repo2.revisions(slice(-1,-1))[0].rev
                   repo2.hg_update(long(latest))
           except:
               dialog.showtraceback(parent = app,
                                    txt='Failed to push',
                                    title='Failed to push',
                                    traceback=traceback.format_exc()) 
           self.set_mercurial_url(rootbk, pathbk)
           os.chdir(ocwd)
示例#21
0
        def onHGpull(self, evt):
            url, root, path = self.get_mercurial_url()
            if url is not None:
                root = root
                name = path
            else:
                root = None
                name = self._name
            app = wx.GetApp().TopWindow
            list6 = [
                ["root repository", root, 304,
                 dlg_s()],
                ["name", name, 0, None],
            ]

            value = DialogEditList(list6,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='HG pull')
            if not value[0]:
                return

            url = rootpath2url(str(value[1][0]), str(value[1][1]))

            ocwd = os.getcwd()
            os.chdir(self.owndir())
            try:
                repo = hgapi.Repo(self.owndir())
                repo.hg_pull(url)
            except:
                dialog.showtraceback(parent=app,
                                     txt='Failed to pull',
                                     title='Failed to pull',
                                     traceback=traceback.format_exc())
            os.chdir(ocwd)
            self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
            self.hg_set_projtreeviewer_status(repo=repo)
            #           self.setvar('mercurial_url', url
            evt.Skip()
示例#22
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()
示例#23
0
 def do_commit(self, m, user='', no_treedata = False):
     if not no_treedata:
         if not self._save_tree_data(): return
     app = wx.GetApp().TopWindow               
     repo = hgapi.Repo(self.owndir())
     try:
         addfile, rmfile, skipfile, txt = hg_add_no_binary(repo, self.owndir(), 
                 include=self.getvar('include'), exclude=self.getvar('exclude')) 
         dlg=wx.MessageDialog(None, txt, "HG add/remove", wx.OK)
         ret=dlg.ShowModal()
         dlg.Destroy()
        
         repo.hg_commit('"'+m+'"', user=user)
     except:
         dialog.showtraceback(parent = app,
                              txt='Failed to commit changes',
                              title='Failed to commit',
                              traceback=traceback.format_exc())       
         return False
     return True
示例#24
0
       def onHGclone(self, evt):
           app = wx.GetApp().TopWindow                             
           name  = self.getvar('mercurial_path')
           if name is None: name = self._name
           l2 =    [["commit message", '',  0, None ],]
           list6 = [
               ["root repository", None, 304, dlg_s()],
               ["name", name, 0, None],
#               [None, (False, ['change #1']),  27,
#                      ({"text": 'commit modification'}, 
#                      {"elp": l2},)],
               [None, True,  3, {"text":'change source tree to the new clone'}]]

           value = DialogEditList(list6, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app, title='HG clone')
           if not value[0]: return 
           if not self.update_hgsub(): return
#           if value[1][2][0]:
#               if not self.do_commit(str(value[1][2][1])): return
           url = rootpath2url(str(value[1][0]), str(value[1][1]))

           ocwd = os.getcwd()
           os.chdir(self.owndir())
           try:
               repo = hgapi.Repo(self.owndir())
               if not url.startswith('ssh://'): 
                   # for local repo, check if directory exists
                   dirname = os.path.dirname(url)
                   if not os.path.exists(dirname):
                       os.makedirs(dirname)
               repo.hg_clone('.', url)
           except:
               dialog.showtraceback(parent = app,
                                    txt='Failed to clone subtree to '+url, 
                                    title='Failed to clone',
                                    traceback=traceback.format_exc())       
           if value[1][2]:
               self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
           os.chdir(ocwd)
示例#25
0
 def import_panel1_value(self, v):
     import ifigure.widgets.dialog as dialog
     
     v = super(WF, self).import_panel1_value(v)
     self.ind_vars =  str(v[0])
     self.is_complex_valued = bool(v[1])
     self.dep_vars_suffix =  str(v[2])
     if len(v[3].split(',')) > 1:
         if (self.element.startswith('RT') or
             self.element.startswith('ND')):
             dialog.showtraceback(parent = None,
                                  txt="RT/ND element can not be vectorized",
                                  title="Error",
                                  traceback="No vector dim for RT/ND")
             self.element = "H1_FECollection"
     self.dep_vars_base_txt = ','.join([x.strip() for x in str(v[3]).split(',')])
     if self.element.startswith("H1") or self.element.startswith("L2"):
         self.vdim = len(str(v[3]).split(','))
     else:
         self.vdim = 1
     self.generate_dt_fespace = bool(v[6])
示例#26
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()
示例#27
0
       def onHGDiff(self, evt=None):
           app = wx.GetApp().TopWindow           
           repo = self.get_repo()
           latest = repo.revisions(slice(-1,-1))[0].rev         
           current = repo.hg_rev()
           ll= [[None, 'Enter revision numbers to compare', 2, None],
                ["revision (older)", str(current), 0, None],
                ["revision (newer)", str(latest), 0, None],
                [None, 'newer == "", diff against working dir.' , 2, None],
                [None, 'older == newer, diff between the latest and current' , 2, None],]

           value = DialogEditList(ll, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app, title = 'HG diff')
           if not value[0]: return 
           a = str(value[1][1])
           b = str(value[1][2])
           if b == '':
              args = (str(a),)
           elif long(a) != long(b):
              args = (str(a), str(b),)
           elif long(a) == long(b):
              args = tuple()
           try:
               res = repo.hg_diff(*args)
           except:
               dialog.showtraceback(parent = app,
                                    txt='Failed to hg_diff',
                                    title='Failed to hg_diff',
                                    traceback=traceback.format_exc())       
           if globals()['diffwindow'] is not None: 
               try:
                   globals()['diffwindow'].Destroy()
               except PyDeadObjectError:     
                   pass
               globals()['diffwindow'] = None
           from ifigure.widgets.hgdiff_window import HGDiffWindow
           globals()['diffwindow']= HGDiffWindow(res, wx.GetApp().TopWindow)
示例#28
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()
示例#29
0
        def do_commit(self, m, user='', no_treedata=False):
            if not no_treedata:
                if not self._save_tree_data(): return
            app = wx.GetApp().TopWindow
            repo = hgapi.Repo(self.owndir())
            try:
                addfile, rmfile, skipfile, txt = hg_add_no_binary(
                    repo,
                    self.owndir(),
                    include=self.getvar('include'),
                    exclude=self.getvar('exclude'))
                dlg = wx.MessageDialog(None, txt, "HG add/remove", wx.OK)
                ret = dlg.ShowModal()
                dlg.Destroy()

                repo.hg_commit('"' + m + '"', user=user)
            except:
                dialog.showtraceback(parent=app,
                                     txt='Failed to commit changes',
                                     title='Failed to commit',
                                     traceback=traceback.format_exc())
                return False
            return True
示例#30
0
       def onHGpull(self, evt):
           url, root, path = self.get_mercurial_url()
           if url is not None:
               root = root
               name = path
           else:
               root = None
               name = self._name
           app = wx.GetApp().TopWindow               
           list6 = [
               ["root repository", root, 304, dlg_s()],
               ["name", name, 0, None],]

           value = DialogEditList(list6, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app, title = 'HG pull')
           if not value[0]: return 

           url = rootpath2url(str(value[1][0]), str(value[1][1]))

           ocwd = os.getcwd()
           os.chdir(self.owndir())
           try:
               repo = hgapi.Repo(self.owndir())
               repo.hg_pull(url)
           except:
               dialog.showtraceback(parent = app,
                                    txt='Failed to pull',
                                    title='Failed to pull',
                                    traceback=traceback.format_exc())       
           os.chdir(ocwd)
           self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
           self.hg_set_projtreeviewer_status(repo=repo)
#           self.setvar('mercurial_url', url
           evt.Skip()
示例#31
0
        def onHGIncoming(self, evt):

            url, root, path = self.get_mercurial_url()
            if url is not None:
                root = root
                name = path
            else:
                root = None
                name = self._name
            app = wx.GetApp().TopWindow
            list6 = [
                ["root repository", root, 304,
                 dlg_s()],
                ["name", name, 0, None],
            ]

            value = DialogEditList(list6,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='HG incoming')
            if not value[0]:
                return

            url = rootpath2url(str(value[1][0]), str(value[1][1]))
            ocwd = os.getcwd()
            os.chdir(self.owndir())
            try:
                repo = hgapi.Repo(self.owndir())
                l1, l2 = self.hg_incoming_outgoing_changesets_list(repo, url)
                if len(l1) > 0:
                    self._status = '!'
                    out = repo.hg_command('incoming', url)
                    dialog.showtraceback(parent=app,
                                         txt=out,
                                         title='Incoming changeset',
                                         traceback=traceback.format_exc())
                else:
                    self._status = ''
                    dialog.showtraceback(parent=app,
                                         txt='No incoming change',
                                         title='Incoming changeset',
                                         traceback=traceback.format_exc())

            except:
                dialog.showtraceback(parent=app,
                                     txt='Failed to hg_command',
                                     title='Failed to hg_command',
                                     traceback=traceback.format_exc())
            os.chdir(ocwd)
            #           self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
            self.hg_set_projtreeviewer_status(repo=repo)
            evt.Skip()
示例#32
0
       def onHGIncoming(self, evt):

           url, root, path = self.get_mercurial_url()
           if url is not None:
               root = root
               name = path
           else:
               root = None
               name = self._name
           app = wx.GetApp().TopWindow                              
           list6 = [
               ["root repository", root, 304, dlg_s()],
               ["name", name, 0, None],]

           value = DialogEditList(list6, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app, title = 'HG incoming')
           if not value[0]: return 

           url = rootpath2url(str(value[1][0]), str(value[1][1]))
           ocwd = os.getcwd()
           os.chdir(self.owndir())
           try:
               repo = hgapi.Repo(self.owndir())
               l1, l2 = self.hg_incoming_outgoing_changesets_list(repo, url)
               if len(l1) > 0: 
                   self._status = '!'
                   out = repo.hg_command('incoming', url)
                   dialog.showtraceback(parent = app,
                                        txt=out,
                                        title='Incoming changeset',
                                        traceback=traceback.format_exc())       
               else:
                   self._status = ''
                   dialog.showtraceback(parent = app,
                                        txt='No incoming change',
                                        title='Incoming changeset',
                                        traceback=traceback.format_exc())       

           except:
               dialog.showtraceback(parent = app,
                                    txt='Failed to hg_command',
                                    title='Failed to hg_command',
                                    traceback=traceback.format_exc())       
           os.chdir(ocwd)
#           self.set_mercurial_url(str(value[1][0]), str(value[1][1]))
           self.hg_set_projtreeviewer_status(repo=repo)
           evt.Skip()
示例#33
0
   def load_subtree_hg(parent, root = '', path='', name = '', overwrite=False,
                       run_setup=False, launch_gui=False):
       app = wx.GetApp().TopWindow       
       if root == '':
           list6 = [
               ["root repository", None, 304, dlg_s()],
               ["source ", path, 0],
               ["destination", '', 0],
               [None, True, 3, {"text":'Run setup script'}],]


           value = DialogEditList(list6, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app,
                                  title = 'retrieve subtree from HG repo.')
           if not value[0]: return
           if not parent.has_owndir(): parent.mk_owndir()

#           url = rootpath2url(
           root = str(value[1][0]) 
           path = str(value[1][1])
           name = str(value[1][2])
           run_setup = value[1][3]
           if name.strip() == '':
              name = value[1][1].split('/')[-1]
       else:
           if not parent.has_owndir(): parent.mk_owndir()
           if name == '':
              name = path.split('/')[-1]

       if parent.has_child(name): 
           if overwrite:
               parent.get_child(name = name).destroy()
           else:
               print(parent.get_full_path()+'.'+name + ' already exists.')
               obj = parent.get_child(name = name)
               _add_include_exclude(obj)
               return obj
       if path.startswith('/'): path = path[1:]
       url = rootpath2url(root, path)
       dpath = os.path.join(parent.owndir(), name)
       repo = hgapi.Repo(parent.owndir())
       try:
          repo2 = repo.hg_clone(url, dpath)
       except:
          print url, dpath
          dialog.showtraceback(parent = app,
                                   txt='Failed to clone subtree from '+url, 
                                   title='Failed to clone',
                                   traceback=traceback.format_exc())       

          return

       load_fpath = True
       fpath=os.path.join(dpath, ".tree_data_hg")
       if not os.path.exists(fpath): 
           fpath=os.path.join(dpath, ".tree_data")
           if not os.path.exists(fpath): 
               #
               #  In this case, it makes a containing folder
               #  and gather *.py to make PyScript
               #  I should be handling other files here too?  
               #

               td = handle_pure_file_repo(parent, name, dpath)
               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()
               del_old_treedata = True
       else:
           del_old_treedata = False
       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)

          ### for sub repo
          subrepos = []
          for name, child in td.get_children():
#           print child
              for obj in child.walk_tree():
                  if has_repo(obj):
                       #print 'subrepo', obj
                       load_repo_treedata(obj)

          if del_old_treedata:
               os.remove(fpath)

          for obj in td.walk_tree():
              obj.init_after_load(olist, nlist)

       td.set_mercurial_url(root, path)

       for name, child in td.get_children():
#           print child
           for obj in child.walk_tree():
               if has_repo(obj):
                    r = hgapi.Repo(obj.owndir())
                    latest = r.revisions(slice(-1,-1))[0].rev
                    current = r.hg_rev()
                    if latest > current:
                        dprint1('updating ' + str(obj)+ ' ' +  str(r.hg_rev()) +  '->' + str(latest))
                        obj.onHGupdate(evt=None, m=latest)
          
       if run_setup:
#           try:
           if (td.has_child("scripts") and
               td.scripts.has_child("setup")):
#               wx.CallAfter(td.scripts.setup.Run)
               td.scripts.setup.Run()
#           except:
#               dialog.showtraceback(parent = td.get_root_parent().app,
#                                    txt='Failed to run setup script',
#                                    title='Setup script failced',
#                                    traceback=traceback.format_exc())       
       _add_include_exclude(td)
       return td
示例#34
0
    def load_subtree_hg(parent,
                        root='',
                        path='',
                        name='',
                        overwrite=False,
                        run_setup=False,
                        launch_gui=False):
        app = wx.GetApp().TopWindow
        if root == '':
            list6 = [
                ["root repository", None, 304,
                 dlg_s()],
                ["source ", path, 0],
                ["destination", '', 0],
                [None, True, 3, {
                    "text": 'Run setup script'
                }],
            ]

            value = DialogEditList(list6,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='retrieve subtree from HG repo.')
            if not value[0]: return
            if not parent.has_owndir(): parent.mk_owndir()

            #           url = rootpath2url(
            root = str(value[1][0])
            path = str(value[1][1])
            name = str(value[1][2])
            run_setup = value[1][3]
            if name.strip() == '':
                name = value[1][1].split('/')[-1]
        else:
            if not parent.has_owndir(): parent.mk_owndir()
            if name == '':
                name = path.split('/')[-1]

        if parent.has_child(name):
            if overwrite:
                parent.get_child(name=name).destroy()
            else:
                print(parent.get_full_path() + '.' + name + ' already exists.')
                obj = parent.get_child(name=name)
                _add_include_exclude(obj)
                return obj
        if path.startswith('/'): path = path[1:]
        url = rootpath2url(root, path)
        dpath = os.path.join(parent.owndir(), name)
        repo = hgapi.Repo(parent.owndir())
        try:
            repo2 = repo.hg_clone(url, dpath)
        except:
            print url, dpath
            dialog.showtraceback(parent=app,
                                 txt='Failed to clone subtree from ' + url,
                                 title='Failed to clone',
                                 traceback=traceback.format_exc())

            return

        load_fpath = True
        fpath = os.path.join(dpath, ".tree_data_hg")
        if not os.path.exists(fpath):
            fpath = os.path.join(dpath, ".tree_data")
            if not os.path.exists(fpath):
                #
                #  In this case, it makes a containing folder
                #  and gather *.py to make PyScript
                #  I should be handling other files here too?
                #

                td = handle_pure_file_repo(parent, name, dpath)
                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()
                del_old_treedata = True
        else:
            del_old_treedata = False
        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)

            ### for sub repo
            subrepos = []
            for name, child in td.get_children():
                #           print child
                for obj in child.walk_tree():
                    if has_repo(obj):
                        #print 'subrepo', obj
                        load_repo_treedata(obj)

            if del_old_treedata:
                os.remove(fpath)

            for obj in td.walk_tree():
                obj.init_after_load(olist, nlist)

        td.set_mercurial_url(root, path)

        for name, child in td.get_children():
            #           print child
            for obj in child.walk_tree():
                if has_repo(obj):
                    r = hgapi.Repo(obj.owndir())
                    latest = r.revisions(slice(-1, -1))[0].rev
                    current = r.hg_rev()
                    if latest > current:
                        dprint1('updating ' + str(obj) + ' ' +
                                str(r.hg_rev()) + '->' + str(latest))
                        obj.onHGupdate(evt=None, m=latest)

        if run_setup:
            #           try:
            if (td.has_child("scripts") and td.scripts.has_child("setup")):
                #               wx.CallAfter(td.scripts.setup.Run)
                td.scripts.setup.Run()
#           except:
#               dialog.showtraceback(parent = td.get_root_parent().app,
#                                    txt='Failed to run setup script',
#                                    title='Setup script failced',
#                                    traceback=traceback.format_exc())
        _add_include_exclude(td)
        return td