Ignore:
Timestamp:
Sep 16, 2014 2:28:31 PM (7 years ago)
Author:
toby
Message:

logging more complete

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branch/logging/GSASII.py

    r1477 r1497  
    123123    '''Define the main GSAS-II frame and its associated menu items
    124124    '''
     125    def MenuBinding(self,event):
     126        import log
     127        log.InvokeMenuCommand(event.GetId(),self,event)
     128           
     129    def Bind(self,eventtype,handler,*args,**kwargs):
     130        '''Override the Bind() function so that we can wrap calls that will be logged.
     131        '''
     132        import log
     133        #print 'main frame bind',handler
     134        if eventtype == wx.EVT_MENU and 'id' in kwargs:
     135            menulabels = log.SaveMenuCommand(kwargs['id'],self,handler)
     136            if menulabels:
     137                #print 'intercepting bind for',handler,menulabels,kwargs['id']
     138                wx.Frame.Bind(self,eventtype,self.MenuBinding,*args,**kwargs)
     139                return
     140        wx.Frame.Bind(self,eventtype,handler,*args,**kwargs)     
     141       
    125142   
    126143    def _Add_FileMenuItems(self, parent):
     
    16071624        return # success
    16081625
     1626       
     1627    def _init_Macro(self):
     1628        menu = self.MacroMenu
     1629        self.MacroRecordStatus = menu.Append(
     1630            help='Start or stop recording of menu actions, etc.', id=wx.ID_ANY,
     1631            kind=wx.ITEM_NORMAL,text='Record actions')
     1632        self.MacroRecordStatus.SetText('Stop recording') # debug, start w/logging enabled
     1633        import log
     1634        log.LogOn()           
     1635        def OnMacroRecordStatus(event):
     1636            import log
     1637            if 'actions' in self.MacroRecordStatus.GetText():
     1638                self.MacroRecordStatus.SetText('Stop recording')
     1639                log.LogOn()           
     1640            else:
     1641                self.MacroRecordStatus.SetText('Record actions')
     1642                log.LogOff()
     1643        self.Bind(wx.EVT_MENU, OnMacroRecordStatus, self.MacroRecordStatus)
     1644       
     1645        item = menu.Append(
     1646            help='Show logged commands', id=wx.ID_ANY,
     1647            kind=wx.ITEM_NORMAL,text='Show log')
     1648        def OnShowLog(event):
     1649            import log
     1650            print 70*'='
     1651            print 'List of logged actions'
     1652            for line in log.G2logList:
     1653                if line: print line
     1654            print 70*'='
     1655        self.Bind(wx.EVT_MENU, OnShowLog, item)
     1656
     1657        item = menu.Append(
     1658            help='Save logged commands to file', id=wx.ID_ANY,
     1659            kind=wx.ITEM_NORMAL,text='Save log')
     1660        def OnSaveLog(event):
     1661            import log
     1662            import cPickle
     1663            defnam = os.path.splitext(
     1664                os.path.split(self.GSASprojectfile)[1]
     1665                )[0]+'.gcmd'
     1666            dlg = wx.FileDialog(self,
     1667                'Choose an file to save past actions', '.', defnam,
     1668                'GSAS-II cmd output (*.gcmd)|*.gcmd',
     1669                wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT|wx.CHANGE_DIR)
     1670            dlg.CenterOnParent()
     1671            try:
     1672                if dlg.ShowModal() == wx.ID_OK:
     1673                    filename = dlg.GetPath()
     1674                    # make sure extension is correct
     1675                    filename = os.path.splitext(filename)[0]+'.gcmd'
     1676                else:
     1677                    filename = None
     1678            finally:
     1679                dlg.Destroy()
     1680            if filename:
     1681                fp = open(filename,'wb')
     1682                fp.write(str(len(log.G2logList))+'\n')
     1683                for item in log.G2logList:
     1684                    cPickle.dump(item,fp)
     1685                fp.close()
     1686        self.Bind(wx.EVT_MENU, OnSaveLog, item)
     1687
     1688        item = menu.Append(
     1689            help='Load logged commands from file', id=wx.ID_ANY,
     1690            kind=wx.ITEM_NORMAL,text='Load log')
     1691        def OnLoadLog(event):
     1692            import log
     1693            import cPickle
     1694            defnam = os.path.splitext(
     1695                os.path.split(self.GSASprojectfile)[1]
     1696                )[0]+'.gcmd'
     1697            dlg = wx.FileDialog(self,
     1698                'Choose an file to read saved actions', '.', defnam,
     1699                'GSAS-II cmd output (*.gcmd)|*.gcmd',
     1700                wx.OPEN|wx.CHANGE_DIR)
     1701            dlg.CenterOnParent()
     1702            try:
     1703                if dlg.ShowModal() == wx.ID_OK:
     1704                    filename = dlg.GetPath()
     1705                    # make sure extension is correct
     1706                    filename = os.path.splitext(filename)[0]+'.gcmd'
     1707                else:
     1708                    filename = None
     1709            finally:
     1710                dlg.Destroy()
     1711            if filename and os.path.exists(filename):
     1712                fp = open(filename,'rb')
     1713                lines = fp.readline()
     1714                for i in range(int(lines)):
     1715                    log.G2logList.append(cPickle.load(fp))
     1716                fp.close()
     1717        self.Bind(wx.EVT_MENU, OnLoadLog, item)
     1718
     1719        item = menu.Append(
     1720            help='Replay saved commands', id=wx.ID_ANY,
     1721            kind=wx.ITEM_NORMAL,text='Replay log')
     1722        self.Bind(wx.EVT_MENU, log.ReplayLog, item)
     1723                               
    16091724    def _init_Exports(self,menu):
    16101725        '''Find exporter routines and add them into menus
     
    18141929        self._init_Exports(self.ExportMenu)
    18151930        self._Add_ExportMenuItems(self.ExportMenu)
     1931        self.MacroMenu = wx.Menu(title='')
     1932        menubar.Append(menu=self.MacroMenu, title='Macro')
     1933        self._init_Macro()
    18161934        HelpMenu=G2gd.MyHelp(self,helpType='Data tree',
    18171935            morehelpitems=[('&Tutorials','Tutorials')])
     
    18381956        #
    18391957        self.GSASIIMenu = wx.MenuBar()
     1958        # create a list of all dataframe menus (appended in PrefillDataMenu)
     1959        self.dataMenuBars = [self.GSASIIMenu]
    18401960        self.FillMainMenu(self.GSASIIMenu)
    18411961        self.SetMenuBar(self.GSASIIMenu)
     
    18491969        self.PatternTree = log.G2TreeCtrl(id=wxID_PATTERNTREE,
    18501970            parent=self.mainPanel, pos=wx.Point(0, 0),style=wx.TR_DEFAULT_STYLE )
    1851         self.PatternTree.Bind(wx.EVT_TREE_SEL_CHANGED,
    1852             self.OnPatternTreeSelChanged, id=wxID_PATTERNTREE)
     1971        self.PatternTree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnPatternTreeSelChanged)
    18531972        self.PatternTree.Bind(wx.EVT_TREE_ITEM_COLLAPSED,
    18541973            self.OnPatternTreeItemCollapsed, id=wxID_PATTERNTREE)
Note: See TracChangeset for help on using the changeset viewer.