Changeset 765


Ignore:
Timestamp:
Sep 28, 2012 9:25:04 PM (11 years ago)
Author:
toby
Message:

refactor menus on Mac, clean up main menu generation

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r762 r765  
    9999    return GSASII(parent)
    100100
    101 [wxID_PATTERNTREE,
    102 ] = [wx.NewId() for _init_ctrls in range(1)]
    103 
    104 [wxID_FILECLOSE, wxID_FILEEXIT, wxID_FILEOPEN,  wxID_FILESAVE, wxID_FILESAVEAS,
    105 wxID_REFINE,  wxID_MAKEPDFS, wxID_VIEWLSPARMS, wxID_SEQREFINE,
    106 ] = [wx.NewId() for _init_coll_File_Items in range(9)]
    107 
    108 [wxID_PWDRREAD,wxID_SNGLREAD,wxID_ADDPHASE,wxID_DELETEPHASE,
    109  wxID_DATADELETE,wxID_READPEAKS,wxID_PWDSUM,wxID_IMGREAD,
    110  wxID_IMSUM, wxID_DATARENAME,
    111 ] = [wx.NewId() for _init_coll_Data_Items in range(10)]
    112 
    113 [wxID_EXPORT, wxID_EXPORTPATTERN, wxID_EXPORTHKL, wxID_EXPORTPHASE,
    114 wxID_EXPORTCIF, wxID_EXPORTPEAKLIST, wxID_EXPORTPDF,
    115 ] = [wx.NewId() for _init_coll_Export_Items in range(7)]
    116 
    117101class GSASII(wx.Frame):
    118102   
    119     def _init_coll_GSASIIMenu_Menus(self, parent):
    120         parent.Append(menu=self.File, title='File')
    121         parent.Append(menu=self.Data, title='Data')
    122         parent.Append(menu=self.Calculate, title='Calculate')
    123         parent.Append(menu=self.Import, title='Import')
    124         parent.Append(menu=self.Export, title='Export')
    125         self.HelpMenu=G2gd.MyHelp(self,helpType='Data tree',
    126             morehelpitems=[('&Tutorials','Tutorials')])
    127         parent.Append(menu=self.HelpMenu,title='&Help')
    128        
    129     def _init_coll_File_Items(self, parent):
    130         parent.Append(help='Open a gsasii project file (*.gpx)', id=wxID_FILEOPEN,
    131              kind=wx.ITEM_NORMAL,text='Open project...')
    132         parent.Append(help='Save project to old file', id=wxID_FILESAVE,
     103    def _Add_FileMenuItems(self, parent):
     104        item = parent.Append(
     105            help='Open a gsasii project file (*.gpx)', id=wx.ID_ANY,
     106            kind=wx.ITEM_NORMAL,text='Open project...')
     107        self.Bind(wx.EVT_MENU, self.OnFileOpen, id=item.GetId())
     108        item = parent.Append(
     109            help='Save project to old file', id=wx.ID_ANY,
    133110            kind=wx.ITEM_NORMAL,text='Save project')
    134         parent.Append(help='Save project to new file', id=wxID_FILESAVEAS,
     111        self.Bind(wx.EVT_MENU, self.OnFileSave, id=item.GetId())
     112        item = parent.Append(
     113            help='Save project to new file', id=wx.ID_ANY,
    135114            kind=wx.ITEM_NORMAL,text='Save As...')
    136         parent.Append(help='Close project, saving is optional', id=wxID_FILECLOSE,
     115        self.Bind(wx.EVT_MENU, self.OnFileSaveas, id=item.GetId())
     116        item = parent.Append(
     117            help='Close project, saving is optional', id=wx.ID_ANY,
    137118            kind=wx.ITEM_NORMAL,text='Close project')
    138         parent.Append(help='Exit from gsasii', id=wxID_FILEEXIT, kind=wx.ITEM_NORMAL,
    139             text='Exit')
    140         self.Bind(wx.EVT_MENU, self.OnFileOpen, id=wxID_FILEOPEN)
    141         self.Bind(wx.EVT_MENU, self.OnFileSave, id=wxID_FILESAVE)
    142         self.Bind(wx.EVT_MENU, self.OnFileSaveas, id=wxID_FILESAVEAS)
    143         self.Bind(wx.EVT_MENU, self.OnFileClose, id=wxID_FILECLOSE)
    144         self.Bind(wx.EVT_MENU, self.OnFileExit, id=wxID_FILEEXIT)
    145        
    146     def _init_coll_Data_Items(self,parent):
    147         parent.Append(help='',id=wxID_IMGREAD, kind=wx.ITEM_NORMAL,
     119        self.Bind(wx.EVT_MENU, self.OnFileClose, id=item.GetId())
     120        item = parent.Append(
     121            help='Exit from gsasii', id=wx.ID_ANY,
     122            kind=wx.ITEM_NORMAL,text='Exit')
     123        self.Bind(wx.EVT_MENU, self.OnFileExit, id=item.GetId())
     124       
     125    def _Add_DataMenuItems(self,parent):
     126        item = parent.Append(
     127            help='',id=wx.ID_ANY,
     128            kind=wx.ITEM_NORMAL,
    148129            text='Read image data...')
    149         parent.Append(help='',id=wxID_READPEAKS, kind=wx.ITEM_NORMAL,
     130        self.Bind(wx.EVT_MENU, self.OnImageRead, id=item.GetId())
     131        item = parent.Append(
     132            help='',id=wx.ID_ANY,
     133            kind=wx.ITEM_NORMAL,
    150134            text='Read Powder Pattern Peaks...')
    151         parent.Append(help='', id=wxID_PWDSUM, kind=wx.ITEM_NORMAL,
     135        self.Bind(wx.EVT_MENU, self.OnReadPowderPeaks, id=item.GetId())
     136        item = parent.Append(
     137            help='',id=wx.ID_ANY,
     138            kind=wx.ITEM_NORMAL,
    152139            text='Sum powder data')
    153         parent.Append(help='',id=wxID_IMSUM, kind=wx.ITEM_NORMAL,
     140        self.Bind(wx.EVT_MENU, self.OnPwdrSum, id=item.GetId())
     141        item = parent.Append(
     142            help='',id=wx.ID_ANY,
     143            kind=wx.ITEM_NORMAL,
    154144            text='Sum image data')
    155         parent.Append(help='', id=wxID_ADDPHASE, kind=wx.ITEM_NORMAL,
     145        self.Bind(wx.EVT_MENU, self.OnImageSum, id=item.GetId())
     146        item = parent.Append(
     147            help='',id=wx.ID_ANY,
     148            kind=wx.ITEM_NORMAL,
    156149            text='Add phase')
    157         parent.Append(help='', id=wxID_DELETEPHASE, kind=wx.ITEM_NORMAL,
     150        self.Bind(wx.EVT_MENU, self.OnAddPhase, id=item.GetId())
     151        item = parent.Append(
     152            help='',id=wx.ID_ANY,
     153            kind=wx.ITEM_NORMAL,
    158154            text='Delete phase')
    159         parent.Append(help='', id=wxID_DATARENAME, kind=wx.ITEM_NORMAL,
     155        self.Bind(wx.EVT_MENU, self.OnDeletePhase, id=item.GetId())
     156        item = parent.Append(
     157            help='',id=wx.ID_ANY,
     158            kind=wx.ITEM_NORMAL,
    160159            text='Rename data')
    161         parent.Append(help='', id=wxID_DATADELETE, kind=wx.ITEM_NORMAL,
     160        self.Bind(wx.EVT_MENU, self.OnRenameData, id=item.GetId())
     161        item = parent.Append(
     162            help='',id=wx.ID_ANY,
     163            kind=wx.ITEM_NORMAL,
    162164            text='Delete data')
    163         self.Bind(wx.EVT_MENU, self.OnPwdrSum, id=wxID_PWDSUM)
    164         self.Bind(wx.EVT_MENU, self.OnReadPowderPeaks, id=wxID_READPEAKS)
    165         self.Bind(wx.EVT_MENU, self.OnImageRead, id=wxID_IMGREAD)
    166         self.Bind(wx.EVT_MENU, self.OnImageSum, id=wxID_IMSUM)
    167         self.Bind(wx.EVT_MENU, self.OnAddPhase, id=wxID_ADDPHASE)
    168         self.Bind(wx.EVT_MENU, self.OnDeletePhase, id=wxID_DELETEPHASE)
    169         self.Bind(wx.EVT_MENU, self.OnRenameData, id=wxID_DATARENAME)
    170         self.Bind(wx.EVT_MENU, self.OnDataDelete, id=wxID_DATADELETE)
     165        self.Bind(wx.EVT_MENU, self.OnDataDelete, id=item.GetId())
    171166               
    172     def _init_coll_Calculate_Items(self,parent):
    173         self.MakePDF = parent.Append(help='Make new PDFs from selected powder patterns',
    174             id=wxID_MAKEPDFS, kind=wx.ITEM_NORMAL,text='Make new PDFs')
    175         self.Bind(wx.EVT_MENU, self.OnMakePDFs, id=wxID_MAKEPDFS)
    176         self.ViewLSParms = parent.Append(help='View least squares parameters',
    177             id=wxID_VIEWLSPARMS, kind=wx.ITEM_NORMAL,text='View LS parms')
    178         self.Bind(wx.EVT_MENU, self.OnViewLSParms, id=wxID_VIEWLSPARMS)
    179         self.Refine = parent.Append(help='', id=wxID_REFINE, kind=wx.ITEM_NORMAL,
     167    def _Add_CalculateMenuItems(self,parent):
     168        item = parent.Append(help='Make new PDFs from selected powder patterns',
     169            id=wx.ID_ANY, kind=wx.ITEM_NORMAL,text='Make new PDFs')
     170        self.MakePDF.append(item)
     171        item.Enable(False)
     172        self.Bind(wx.EVT_MENU, self.OnMakePDFs, id=item.GetId())
     173       
     174        item = parent.Append(help='View least squares parameters',
     175            id=wx.ID_ANY, kind=wx.ITEM_NORMAL,text='View LS parms')
     176        self.Bind(wx.EVT_MENU, self.OnViewLSParms, id=item.GetId())
     177       
     178        item = parent.Append(help='', id=wx.ID_ANY, kind=wx.ITEM_NORMAL,
    180179            text='Refine')
    181         self.Refine.Enable(False)
    182         self.Bind(wx.EVT_MENU, self.OnRefine, id=wxID_REFINE)
    183         self.SeqRefine = parent.Append(help='', id=wxID_SEQREFINE, kind=wx.ITEM_NORMAL,
     180        self.Refine.append(item)
     181        item.Enable(False)
     182        self.Bind(wx.EVT_MENU, self.OnRefine, id=item.GetId())
     183       
     184        item = parent.Append(help='', id=wx.ID_ANY, kind=wx.ITEM_NORMAL,
    184185            text='Sequental refine')
    185         self.SeqRefine.Enable(False)
    186         self.Bind(wx.EVT_MENU, self.OnSeqRefine, id=wxID_SEQREFINE)
    187        
    188     def _init_Import_routines(self,parent,prefix,readerlist,errprefix):
     186        self.SeqRefine.append(item)
     187        item.Enable(False)
     188        self.Bind(wx.EVT_MENU, self.OnSeqRefine, id=item.GetId())
     189       
     190    def _init_Imports(self):
     191        '''import all the G2phase*.py & G2sfact*.py & G2pwd*.py files that
     192        are found in the path
     193        '''
     194
     195        self.ImportPhaseReaderlist = []
     196        self._init_Import_routines('phase',self.ImportPhaseReaderlist,'Phase')
     197        self.ImportSfactReaderlist = []
     198        self._init_Import_routines('sfact',self.ImportSfactReaderlist,'Struct_Factor')
     199        self.ImportPowderReaderlist = []
     200        self._init_Import_routines('pwd',self.ImportPowderReaderlist,'Powder_Data')
     201        self.ImportMenuId = {}
     202
     203    def _init_Import_routines(self,prefix,readerlist,errprefix):
    189204        '''import all the import readers matching the prefix
    190205        '''
     
    401416        return rd_list
    402417
    403     def _init_Import_Phase(self,parent):
    404         '''import all the G2phase*.py files that are found in the
    405         path and configure the Import Phase menus accordingly
     418    def _Add_ImportMenu_Phase(self,parent):
     419        '''configure the Import Phase menus accord to the readers found in _init_Imports
    406420        '''
    407         self.ImportPhaseReaderlist = []
    408         self._init_Import_routines(parent,'phase',
    409                                    self.ImportPhaseReaderlist,
    410                                    'Phase')
    411421        submenu = wx.Menu()
    412422        item = parent.AppendMenu(wx.ID_ANY, 'Phase',
     
    455465        return # success
    456466       
    457     def _init_Import_Sfact(self,parent):
    458         '''import all the G2sfact*.py files that are found in the
    459         path and configure the Import Structure Factor menus accordingly
     467    def _Add_ImportMenu_Sfact(self,parent):
     468        '''configure the Import Structure Factor menus accord to the readers found in _init_Imports
    460469        '''
    461         self.ImportSfactReaderlist = []
    462         self._init_Import_routines(parent,'sfact',
    463                                    self.ImportSfactReaderlist,
    464                                    'Struct_Factor')
    465470        submenu = wx.Menu()
    466471        item = parent.AppendMenu(wx.ID_ANY, 'Structure Factor',
     
    511516        return # success
    512517
    513     def _init_Import_powder(self,parent):
    514         '''import all the G2pwd*.py files that are found in the
    515         path and configure the Import Powder Data menus accordingly
     518    def _Add_ImportMenu_powder(self,parent):
     519        '''configure the Powder Data menus accord to the readers found in _init_Imports
    516520        '''
    517         self.ImportPowderReaderlist = []
    518         self._init_Import_routines(parent,'pwd',self.ImportPowderReaderlist,
    519             'Powder_Data')
    520521        submenu = wx.Menu()
    521522        item = parent.AppendMenu(wx.ID_ANY, 'Powder Data',
     
    842843
    843844    def _init_Exports(self,parent):
    844         '''
     845        '''This is a place holder for when exports are handled in a manner similar to imports
    845846        '''
    846847#        submenu = wx.Menu()
     
    860861#        G2export.ProjExport(self)
    861862
    862     def _init_coll_Export_Items(self,parent):
    863         self.ExportPattern = parent.Append(help='Select PWDR item to enable',id=wxID_EXPORTPATTERN, kind=wx.ITEM_NORMAL,
     863    def _Add_ExportMenuItems(self,parent):
     864        item = parent.Append(
     865            help='Select PWDR item to enable',id=wx.ID_ANY,
     866            kind=wx.ITEM_NORMAL,
    864867            text='Export Powder Patterns...')
    865         self.ExportPeakList = parent.Append(help='',id=wxID_EXPORTPEAKLIST, kind=wx.ITEM_NORMAL,
     868        self.ExportPattern.append(item)
     869        item.Enable(False)
     870        self.Bind(wx.EVT_MENU, self.OnExportPatterns, id=item.GetId())
     871
     872        item = parent.Append(
     873            help='',id=wx.ID_ANY,
     874            kind=wx.ITEM_NORMAL,
    866875            text='Export All Peak Lists...')
    867         self.ExportHKL = parent.Append(help='',id=wxID_EXPORTHKL, kind=wx.ITEM_NORMAL,
     876        self.ExportPeakList.append(item)
     877        item.Enable(True)
     878        self.Bind(wx.EVT_MENU, self.OnExportPeakList, id=item.GetId())
     879
     880        item = parent.Append(
     881            help='',id=wx.ID_ANY,
     882            kind=wx.ITEM_NORMAL,
    868883            text='Export HKLs...')
    869         self.ExportPDF = parent.Append(help='Select PDF item to enable',id=wxID_EXPORTPDF, kind=wx.ITEM_NORMAL,
     884        self.ExportHKL.append(item)
     885        item.Enable(False)
     886        self.Bind(wx.EVT_MENU, self.OnExportHKL, id=item.GetId())
     887
     888        item = parent.Append(
     889            help='Select PDF item to enable',
     890            id=wx.ID_ANY,
     891            kind=wx.ITEM_NORMAL,
    870892            text='Export PDF...')
    871         self.ExportPhase = parent.Append(help='',id=wxID_EXPORTPHASE, kind=wx.ITEM_NORMAL,
     893        self.ExportPDF.append(item)
     894        item.Enable(False)
     895        self.Bind(wx.EVT_MENU, self.OnExportPDF, id=item.GetId())
     896
     897        item = parent.Append(
     898            help='',id=wx.ID_ANY,
     899            kind=wx.ITEM_NORMAL,
    872900            text='Export Phase...')
    873         self.ExportCIF = parent.Append(help='',id=wxID_EXPORTCIF, kind=wx.ITEM_NORMAL,
     901        self.ExportPhase.append(item)
     902        item.Enable(False)
     903        self.Bind(wx.EVT_MENU, self.OnExportPhase, id=item.GetId())
     904
     905        item = parent.Append(
     906            help='',id=wx.ID_ANY,
     907            kind=wx.ITEM_NORMAL,
    874908            text='Export CIF...')
    875         self.ExportPattern.Enable(False)
    876         self.ExportPeakList.Enable(True)
    877         self.ExportHKL.Enable(False)
    878         self.ExportPDF.Enable(False)
    879         self.ExportPhase.Enable(False)
    880         self.ExportCIF.Enable(False)
    881         self.Bind(wx.EVT_MENU, self.OnExportPatterns, id=wxID_EXPORTPATTERN)
    882         self.Bind(wx.EVT_MENU, self.OnExportPeakList, id=wxID_EXPORTPEAKLIST)
    883         self.Bind(wx.EVT_MENU, self.OnExportHKL, id=wxID_EXPORTHKL)
    884         self.Bind(wx.EVT_MENU, self.OnExportPDF, id=wxID_EXPORTPDF)
    885         self.Bind(wx.EVT_MENU, self.OnExportPhase, id=wxID_EXPORTPHASE)
    886         self.Bind(wx.EVT_MENU, self.OnExportCIF, id=wxID_EXPORTCIF)
     909        self.ExportCIF.append(item)
     910        item.Enable(False)
     911        self.Bind(wx.EVT_MENU, self.OnExportCIF, id=item.GetId())
    887912               
    888     def _init_utils(self):
    889         self.GSASIIMenu = wx.MenuBar()
    890         self.File = wx.Menu(title='')
    891         self.Data = wx.Menu(title='')       
    892         self.Calculate = wx.Menu(title='')       
    893         self.Import = wx.Menu(title='')       
    894         self.Export = wx.Menu(title='')       
    895 
    896         self._init_coll_GSASIIMenu_Menus(self.GSASIIMenu)
    897         self._init_coll_File_Items(self.File)
    898         self._init_coll_Data_Items(self.Data)
    899         self._init_coll_Calculate_Items(self.Calculate)
    900         self.ImportMenuId = {}
    901         self._init_Import_Phase(self.Import)
    902         self._init_Import_powder(self.Import)
    903         self._init_Import_Sfact(self.Import)
    904         self._init_coll_Export_Items(self.Export)
    905         self._init_Exports(self.Export)
    906        
     913    def FillMainMenu(self,menubar):
     914        '''Define contents of the main GSAS-II menu for the (main) data tree window
     915        in the mac, used also for the data item windows as well.
     916        '''
     917        File = wx.Menu(title='')
     918        menubar.Append(menu=File, title='File')
     919        self._Add_FileMenuItems(File)
     920        Data = wx.Menu(title='')
     921        menubar.Append(menu=Data, title='Data')
     922        self._Add_DataMenuItems(Data)
     923        Calculate = wx.Menu(title='')       
     924        menubar.Append(menu=Calculate, title='Calculate')
     925        self._Add_CalculateMenuItems(Calculate)
     926        Import = wx.Menu(title='')       
     927        menubar.Append(menu=Import, title='Import')
     928        self._Add_ImportMenu_Phase(Import)
     929        self._Add_ImportMenu_powder(Import)
     930        self._Add_ImportMenu_Sfact(Import)
     931        Export = wx.Menu(title='')       
     932        menubar.Append(menu=Export, title='Export')
     933        self._Add_ExportMenuItems(Export)
     934        #self._init_Exports(Export)
     935        HelpMenu=G2gd.MyHelp(self,helpType='Data tree',
     936            morehelpitems=[('&Tutorials','Tutorials')])
     937        menubar.Append(menu=HelpMenu,title='&Help')
     938
    907939    def _init_ctrls(self, parent):
    908940        wx.Frame.__init__(self, name='GSASII', parent=parent,
     
    912944        xPos = clientSize[2]-Size[0]
    913945        self.SetPosition(wx.Point(xPos,clientSize[1]))
    914         self._init_utils()
     946        self._init_Imports()
     947        #self._init_utils()
     948        #initialize Menu item objects (these contain lists of menu items that are enabled or disabled)
     949        self.MakePDF = []
     950        self.Refine = []
     951        self.SeqRefine = []
     952        self.ExportPattern = []
     953        self.ExportPeakList = []
     954        self.ExportHKL = []
     955        self.ExportPDF = []
     956        self.ExportPhase = []
     957        self.ExportCIF = []
     958        #
     959        self.GSASIIMenu = wx.MenuBar()
     960        self.FillMainMenu(self.GSASIIMenu)
    915961        self.SetMenuBar(self.GSASIIMenu)
    916962        self.Bind(wx.EVT_SIZE, self.OnSize)
     
    918964        self.mainPanel = wx.Panel(self,-1)
    919965       
     966        wxID_PATTERNTREE = wx.NewId()
    920967        self.PatternTree = wx.TreeCtrl(id=wxID_PATTERNTREE,
    921968            parent=self.mainPanel, pos=wx.Point(0, 0),style=wx.TR_DEFAULT_STYLE )
     
    9881035            G2IO.ProjFileOpen(self)
    9891036            self.PatternTree.Expand(self.root)
    990             self.Refine.Enable(True)
    991             self.SeqRefine.Enable(True)
     1037            for item in self.Refine: item.Enable(True)
     1038            for item in self.SeqRefine: item.Enable(True)
    9921039
    9931040    def OnSize(self,event):
     
    17281775                            data = self.PatternTree.GetItemPyData(item)
    17291776                            if data:
    1730                                 self.Refine.Enable(True)
    1731                                 self.SeqRefine.Enable(True)
     1777                                for item in self.Refine: item.Enable(True)
     1778                                for item in self.SeqRefine: item.Enable(True)
    17321779                        item, cookie = self.PatternTree.GetNextChild(self.root, cookie)               
    17331780                    if Id:
     
    19221969                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='F(Q)'+PWDRname),[])       
    19231970                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='G(R)'+PWDRname),[])       
    1924                 self.ExportPDF.Enable(True)
     1971                for item in self.ExportPDF: item.Enable(True)
    19251972            finally:
    19261973                dlg.Destroy()
  • trunk/GSASIIgrid.py

    r762 r765  
    144144      About: opens an About dialog using OnHelpAbout. N.B. on the Mac this
    145145      gets moved to the App menu to be consistent with Apple style.
    146     NOTE: the title for this menu should be '&Help' so the wx handles
     146    NOTE: the title when appending this menu should be '&Help' so the wx handles
    147147    it correctly. BHT
    148148    '''
    149     def __init__(self,frame,title='',helpType=None,morehelpitems=[]):
     149    def __init__(self,frame,helpType=None,helpLbl=None,morehelpitems=[],title=''):
    150150        wx.Menu.__init__(self,title)
    151151        self.HelpById = {}
     
    153153        # add a help item only when helpType is specified
    154154        if helpType is not None:
    155             helpobj = self.Append(text='Help on '+helpType,
    156                 id=wx.ID_ANY, kind=wx.ITEM_NORMAL)
     155            if helpLbl is None: helpLbl = helpType
     156            helpobj = self.Append(text='Help on '+helpLbl,
     157                                  id=wx.ID_ANY, kind=wx.ITEM_NORMAL)
    157158            frame.Bind(wx.EVT_MENU, self.OnHelpById, helpobj)
    158159            self.HelpById[helpobj.GetId()] = helpType
     
    242243                                   'You have version '+local+
    243244                                   ' of GSAS-II installed, but the current version is '+repos+
    244                                    'However, you have modified '+str(len(mods))+
     245                                   '. However, you have modified '+str(len(mods))+
    245246                                   ' file(s) on your local computer have been modified.'
    246247                                   ' Updating could wipe out your local changes. Press OK to start an update:',
     
    282283        dlg.ShowModal()
    283284        return
    284  
     285
     286class AddHelp(wx.Menu):
     287    '''This class a single entry for the help menu (used on the Mac only):
     288      'Help on <helpType>': where helpType is a reference to an HTML page to
     289      be opened
     290    NOTE: the title when appending this menu should be '&Help' so the wx handles
     291    it correctly. BHT
     292    '''
     293    def __init__(self,frame,helpType,helpLbl=None,title=''):
     294        wx.Menu.__init__(self,title)
     295        self.frame = frame
     296        if helpLbl is None: helpLbl = helpType
     297        # add a help item only when helpType is specified
     298        helpobj = self.Append(text='Help on '+helpLbl,
     299                              id=wx.ID_ANY, kind=wx.ITEM_NORMAL)
     300        frame.Bind(wx.EVT_MENU, self.OnHelpById, helpobj)
     301        self.HelpById = helpType
     302       
     303    def OnHelpById(self,event):
     304        '''Called when Help on... is pressed in a menu. Brings up
     305        a web page for documentation.
     306        '''
     307        ShowHelp(self.HelpById,self.frame)
     308
    285309class MyHtmlPanel(wx.Panel):
    286310    '''Defines a panel to display Help information'''
     
    341365
    342366class DataFrame(wx.Frame):
     367    '''Create the dataframe window and its menus
     368    '''
     369    def FillDataMenu(self,menu,helpType,helpLbl=None):
     370        '''Create the "standard" part of data frame menus. Note that on Linux and
     371        Windows, this is the standard help Menu. On Mac, this menu duplicates the
     372        tree menu, but adds an extra help command for the data item and a separator.
     373        '''
     374        if sys.platform == "darwin": # mac                         
     375            menu.Append(AddHelp(self.G2frame,helpType=helpType, helpLbl=helpLbl),
     376                        title='&Help')
     377            self.G2frame.FillMainMenu(menu) # add the data tree menu items
     378            menu.Append(wx.Menu(title=''),title='|') # add a separator
     379        else: # other
     380            menu.Append(menu=MyHelp(self,helpType=helpType, helpLbl=helpLbl),
     381                        title='&Help')
    343382
    344383    def _init_menus(self):
    345384       
    346 # define all GSAS-II menus       
    347        
     385# define all GSAS-II data frame menus       
     386
     387# for use where no menu or data frame help is provided
    348388        self.BlankMenu = wx.MenuBar()
    349389       
    350390# Controls
    351391        self.ControlsMenu = wx.MenuBar()
    352         self.ControlsMenu.Append(menu=MyHelp(self,helpType='Controls'),title='&Help')
     392        self.FillDataMenu(self.ControlsMenu,helpType='Controls')
    353393       
    354394# Notebook
    355395        self.DataNotebookMenu = wx.MenuBar()
    356         self.DataNotebookMenu.Append(menu=MyHelp(self,helpType='Notebook'),title='&Help')
     396        self.FillDataMenu(self.DataNotebookMenu,helpType='Notebook')
    357397       
    358398# Comments
    359399        self.DataCommentsMenu = wx.MenuBar()
    360         self.DataCommentsMenu.Append(menu=MyHelp(self,helpType='Comments'),title='&Help')
     400        self.FillDataMenu(self.DataCommentsMenu,helpType='Comments')
    361401       
    362402# Constraints
    363403        self.ConstraintMenu = wx.MenuBar()
     404        self.FillDataMenu(self.ConstraintMenu,helpType='Constraints')
    364405        self.ConstraintEdit = wx.Menu(title='')
    365406        self.ConstraintMenu.Append(menu=self.ConstraintEdit, title='Edit')
    366         self.ConstraintMenu.Append(menu=MyHelp(self,helpType='Constraints'),title='&Help')
    367407        self.ConstraintEdit.Append(id=wxID_HOLDADD, kind=wx.ITEM_NORMAL,text='Add hold',
    368408            help='Add hold on a parameter value')
     
    376416# Restraints
    377417        self.RestraintMenu = wx.MenuBar()
     418        self.FillDataMenu(self.RestraintMenu,helpType='Restraints')
    378419        self.RestraintEdit = wx.Menu(title='')
    379420        self.RestraintMenu.Append(menu=self.RestraintEdit, title='Edit')
    380         self.RestraintMenu.Append(menu=MyHelp(self,helpType='Restraints'),title='&Help')
    381421        self.RestraintEdit.Append(id=wxID_RESTSELPHASE, kind=wx.ITEM_NORMAL,text='Select phase',
    382422            help='Select phase')
     
    392432# Sequential results
    393433        self.SequentialMenu = wx.MenuBar()
     434        self.FillDataMenu(self.SequentialMenu,helpType='Sequential',helpLbl='Sequential Refinement')
    394435        self.SequentialFile = wx.Menu(title='')
    395436        self.SequentialMenu.Append(menu=self.SequentialFile, title='File')
    396         self.SequentialMenu.Append(menu=MyHelp(self,helpType='Sequential'),title='&Help')
    397437        self.SequentialFile.Append(id=wxID_SAVESEQSEL, kind=wx.ITEM_NORMAL,text='Save...',
    398438            help='Save selected sequential refinement results')
     
    400440# PDR
    401441        self.ErrorMenu = wx.MenuBar()
     442        self.FillDataMenu(self.ErrorMenu,helpType='PWD Analysis',helpLbl='Powder Fit Error Analysis')
    402443        self.ErrorAnal = wx.Menu(title='')
    403444        self.ErrorMenu.Append(menu=self.ErrorAnal,title='Analysis')
    404         self.ErrorMenu.Append(menu=MyHelp(self,helpType='PWD Analysis'),title='&Help')
    405445        self.ErrorAnal.Append(id=wxID_PWDANALYSIS,kind=wx.ITEM_NORMAL,text='Analyze',
    406             help='Error analysis on ppowder pattern')
     446            help='Error analysis on powder pattern')
    407447           
    408448# PDR / Limits
    409449        self.LimitMenu = wx.MenuBar()
     450        self.FillDataMenu(self.LimitMenu,helpType='Limits')
    410451        self.LimitEdit = wx.Menu(title='')
    411452        self.LimitMenu.Append(menu=self.LimitEdit, title='File')
    412         self.LimitMenu.Append(menu=MyHelp(self,helpType='Limits'),title='&Help')
    413453        self.LimitEdit.Append(id=wxID_LIMITCOPY, kind=wx.ITEM_NORMAL,text='Copy',
    414454            help='Copy limits to other histograms')
     
    416456# PDR / Background
    417457        self.BackMenu = wx.MenuBar()
     458        self.FillDataMenu(self.BackMenu,helpType='Background')
    418459        self.BackEdit = wx.Menu(title='')
    419460        self.BackMenu.Append(menu=self.BackEdit, title='File')
    420         self.BackMenu.Append(menu=MyHelp(self,helpType='Background'),title='&Help')
    421461        self.BackEdit.Append(id=wxID_BACKCOPY, kind=wx.ITEM_NORMAL,text='Copy',
    422462            help='Copy background parameters to other histograms')
     
    426466# PDR / Instrument Parameters
    427467        self.InstMenu = wx.MenuBar()
     468        self.FillDataMenu(self.InstMenu,helpType='Instrument Parameters')
    428469        self.InstEdit = wx.Menu(title='')
    429470        self.InstMenu.Append(menu=self.InstEdit, title='Operations')
    430         self.InstMenu.Append(menu=MyHelp(self,helpType='Instrument Parameters'),title='&Help')
    431471        self.InstEdit.Append(help='Reset instrument profile parameters to default',
    432472            id=wxID_INSTLOAD, kind=wx.ITEM_NORMAL,text='Load profile...')
     
    444484# PDR / Sample Parameters
    445485        self.SampleMenu = wx.MenuBar()
     486        self.FillDataMenu(self.SampleMenu,helpType='Sample Parameters')
    446487        self.SampleEdit = wx.Menu(title='')
    447488        self.SampleMenu.Append(menu=self.SampleEdit, title='File')
    448         self.SampleMenu.Append(menu=MyHelp(self,helpType='Sample Parameters'),title='&Help')
    449489        self.SampleEdit.Append(id=wxID_SAMPLELOAD, kind=wx.ITEM_NORMAL,text='Load',
    450490            help='Load sample parameters from file')
     
    458498# PDR / Peak List
    459499        self.PeakMenu = wx.MenuBar()
     500        self.FillDataMenu(self.PeakMenu,helpType='Peak List')
    460501        self.PeakEdit = wx.Menu(title='')
    461502        self.PeakMenu.Append(menu=self.PeakEdit, title='Peak Fitting')
    462         self.PeakMenu.Append(menu=MyHelp(self,helpType='Peak List'),title='&Help')
    463503        self.UnDo = self.PeakEdit.Append(help='Undo last least squares refinement',
    464504            id=wxID_UNDO, kind=wx.ITEM_NORMAL,text='UnDo')
     
    477517# PDR / Index Peak List
    478518        self.IndPeaksMenu = wx.MenuBar()
     519        self.FillDataMenu(self.IndPeaksMenu,helpType='Index Peak List')
    479520        self.IndPeaksEdit = wx.Menu(title='')
    480521        self.IndPeaksMenu.Append(menu=self.IndPeaksEdit,title='Operations')
    481         self.IndPeaksMenu.Append(menu=MyHelp(self,helpType='Index Peak List'),title='&Help')
    482522        self.IndPeaksEdit.Append(help='Load/Reload index peaks from peak list',id=wxID_INDXRELOAD,
    483523            kind=wx.ITEM_NORMAL,text='Load/Reload')
     
    485525# PDR / Unit Cells List
    486526        self.IndexMenu = wx.MenuBar()
     527        self.FillDataMenu(self.IndexMenu,helpType='Unit Cells List')
    487528        self.IndexEdit = wx.Menu(title='')
    488529        self.IndexMenu.Append(menu=self.IndexEdit, title='Cell Index/Refine')
    489         self.IndexMenu.Append(menu=MyHelp(self,helpType='Unit Cells List'),title='&Help')
    490530        self.IndexPeaks = self.IndexEdit.Append(help='', id=wxID_INDEXPEAKS, kind=wx.ITEM_NORMAL,
    491531            text='Index Cell')
     
    503543# PDR / Reflection Lists
    504544        self.ReflMenu = wx.MenuBar()
     545        self.FillDataMenu(self.ReflMenu,helpType='Reflection List')
    505546        self.ReflEdit = wx.Menu(title='')
    506547        self.ReflMenu.Append(menu=self.ReflEdit, title='Reflection List')
    507         self.ReflMenu.Append(menu=MyHelp(self,helpType='Reflection List'),title='&Help')
    508548        self.SelectPhase = self.ReflEdit.Append(help='Select phase for reflection list',id=wxID_SELECTPHASE,
    509549            kind=wx.ITEM_NORMAL,text='Select phase')
     
    511551# IMG / Image Controls
    512552        self.ImageMenu = wx.MenuBar()
     553        self.FillDataMenu(self.ImageMenu,helpType='Image Controls')
    513554        self.ImageEdit = wx.Menu(title='')
    514555        self.ImageMenu.Append(menu=self.ImageEdit, title='Operations')
    515         self.ImageMenu.Append(menu=MyHelp(self,helpType='Image Controls'),title='&Help')
    516556        self.ImageEdit.Append(help='Calibrate detector by fitting to calibrant lines',
    517557            id=wxID_IMCALIBRATE, kind=wx.ITEM_NORMAL,text='Calibrate')
     
    533573# IMG / Masks
    534574        self.MaskMenu = wx.MenuBar()
     575        self.FillDataMenu(self.MaskMenu,helpType='Image Masks')
    535576        self.MaskEdit = wx.Menu(title='')
    536577        self.MaskMenu.Append(menu=self.MaskEdit, title='Operations')
    537         self.MaskMenu.Append(menu=MyHelp(self,helpType='Image Masks'),title='&Help')
    538578        self.MaskEdit.Append(help='Copy mask to other images',
    539579            id=wxID_MASKCOPY, kind=wx.ITEM_NORMAL,text='Copy mask')
     
    546586
    547587        self.StrStaMenu = wx.MenuBar()
     588        self.FillDataMenu(self.StrStaMenu,helpType='Stress/Strain')
    548589        self.StrStaEdit = wx.Menu(title='')
    549590        self.StrStaMenu.Append(menu=self.StrStaEdit, title='Operations')
    550         self.StrStaMenu.Append(menu=MyHelp(self,helpType='Stress/Strain'),title='&Help')
    551591        self.StrStaEdit.Append(help='Append d-zero for one ring',
    552592            id=wxID_APPENDDZERO, kind=wx.ITEM_NORMAL,text='Append d-zero')
     
    562602# PDF / PDF Controls
    563603        self.PDFMenu = wx.MenuBar()
     604        self.FillDataMenu(self.PDFMenu,helpType='PDF Controls')
    564605        self.PDFEdit = wx.Menu(title='')
    565606        self.PDFMenu.Append(menu=self.PDFEdit, title='PDF Controls')
    566         self.PDFMenu.Append(menu=MyHelp(self,helpType='PDF Controls'),title='&Help')
    567607        self.PDFEdit.Append(help='Add element to sample composition',id=wxID_PDFADDELEMENT, kind=wx.ITEM_NORMAL,
    568608            text='Add element')
     
    581621           
    582622# Phase / General tab
     623
    583624        self.DataGeneral = wx.MenuBar()
     625        self.FillDataMenu(self.DataGeneral,helpType='General', helpLbl='Phase/General')
    584626        self.GeneralCalc = wx.Menu(title='')
    585627        self.DataGeneral.Append(menu=self.GeneralCalc,title='Compute')
    586         self.DataGeneral.Append(menu=MyHelp(self,helpType='General'),title='&Help')
    587628        self.GeneralCalc.Append(help='Compute Fourier map',id=wxID_FOURCALC, kind=wx.ITEM_NORMAL,
    588629            text='Fourier map')
     
    596637# Phase / Data tab
    597638        self.DataMenu = wx.MenuBar()
     639        self.FillDataMenu(self.DataMenu,helpType='Data', helpLbl='Phase/Data')
    598640        self.DataEdit = wx.Menu(title='')
    599641        self.DataMenu.Append(menu=self.DataEdit, title='Edit')
    600         self.DataMenu.Append(menu=MyHelp(self,helpType='Data'),title='&Help')
    601642        self.DataEdit.Append(id=wxID_PWDRADD, kind=wx.ITEM_NORMAL,text='Add powder histograms',
    602643            help='Select new powder histograms to be used for this phase')
     
    608649# Phase / Atoms tab
    609650        self.AtomsMenu = wx.MenuBar()
     651        self.FillDataMenu(self.AtomsMenu,helpType='Atoms')
    610652        self.AtomEdit = wx.Menu(title='')
    611653        self.AtomCompute = wx.Menu(title='')
    612654        self.AtomsMenu.Append(menu=self.AtomEdit, title='Edit')
    613655        self.AtomsMenu.Append(menu=self.AtomCompute, title='Compute')
    614         self.AtomsMenu.Append(menu=MyHelp(self,helpType='Atoms'),title='&Help')
    615656        self.AtomEdit.Append(id=wxID_ATOMSEDITADD, kind=wx.ITEM_NORMAL,text='Append atom',
    616657            help='Appended as an H atom')
     
    631672        self.AtomEdit.Append(id=wxID_RELOADDRAWATOMS, kind=wx.ITEM_NORMAL,text='Reload draw atoms',
    632673            help='Reload atom drawing list')
    633         self.AtomCompute.Append(id=wxID_ATOMSDISAGL, kind=wx.ITEM_NORMAL,text='Distances & Angles',
     674        self.AtomCompute.Append(id=wxID_ATOMSDISAGL, kind=wx.ITEM_NORMAL,text='Distances && Angles',
    634675            help='Compute distances & angles for selected atoms')
    635676                 
    636677# Phase / Draw Options tab
    637678        self.DataDrawOptions = wx.MenuBar()
    638         self.DataDrawOptions.Append(menu=MyHelp(self,helpType='Draw Options'),title='&Help')
     679        self.FillDataMenu(self.DataDrawOptions,helpType='Draw Options', helpLbl='Phase/Draw Options')
    639680       
    640681# Phase / Draw Atoms tab
    641682        self.DrawAtomsMenu = wx.MenuBar()
     683        self.FillDataMenu(self.DrawAtomsMenu,helpType='Draw Atoms')
    642684        self.DrawAtomEdit = wx.Menu(title='')
    643685        self.DrawAtomCompute = wx.Menu(title='')
     
    646688        self.DrawAtomsMenu.Append(menu=self.DrawAtomCompute,title='Compute')
    647689        self.DrawAtomsMenu.Append(menu=self.DrawAtomRestraint, title='Restraints')
    648         self.DrawAtomsMenu.Append(menu=MyHelp(self,helpType='Draw Atoms'),title='&Help')
    649690        self.DrawAtomEdit.Append(id=wxID_DRAWATOMSTYLE, kind=wx.ITEM_NORMAL,text='Atom style',
    650691            help='Select atoms first')
     
    684725# Phase / Texture tab
    685726        self.TextureMenu = wx.MenuBar()
     727        self.FillDataMenu(self.TextureMenu,helpType='Texture')
    686728        self.TextureEdit = wx.Menu(title='')
    687729        self.TextureMenu.Append(menu=self.TextureEdit, title='Texture')
    688         self.TextureMenu.Append(menu=MyHelp(self,helpType='Texture'),title='&Help')
    689730        self.TextureEdit.Append(id=wxID_REFINETEXTURE, kind=wx.ITEM_NORMAL,text='Refine texture',
    690731            help='Refine the texture coefficients from sequential Pawley results')
     
    694735# Phase / Pawley tab
    695736        self.PawleyMenu = wx.MenuBar()
     737        self.FillDataMenu(self.PawleyMenu,helpType='Pawley')
    696738        self.PawleyEdit = wx.Menu(title='')
    697739        self.PawleyMenu.Append(menu=self.PawleyEdit,title='Operations')
    698         self.PawleyMenu.Append(menu=MyHelp(self,helpType='Pawley'),title='&Help')
    699740        self.PawleyEdit.Append(id=wxID_PAWLEYLOAD, kind=wx.ITEM_NORMAL,text='Pawley create',
    700741            help='Initialize Pawley reflection list')
     
    708749# Phase / Map peaks tab
    709750        self.MapPeaksMenu = wx.MenuBar()
     751        self.FillDataMenu(self.MapPeaksMenu,helpType='Map peaks')
    710752        self.MapPeaksEdit = wx.Menu(title='')
    711753        self.MapPeaksMenu.Append(menu=self.MapPeaksEdit, title='Map peaks')
    712         self.MapPeaksMenu.Append(menu=MyHelp(self,helpType='Map peaks'),title='&Help')
    713754        self.MapPeaksEdit.Append(id=wxID_PEAKSMOVE, kind=wx.ITEM_NORMAL,text='Move peaks',
    714755            help='Move selected peaks to atom list')
     
    737778        self.Show()
    738779       
    739     def __init__(self,parent,data=None,name=None, size=None,pos=None):
     780    def __init__(self,parent,frame,data=None,name=None, size=None,pos=None):
     781        self.G2frame = frame
    740782        self._init_ctrls(parent,name,size,pos)
    741783        self.data = data
     
    9681010        data['minF/sig'] = 0
    9691011    #end patch
     1012
    9701013    def SeqSizer():
    9711014       
     
    10931136    G2frame.dataFrame.SetLabel('Controls')
    10941137    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
    1095     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ControlsMenu)
     1138    SetDataMenuBar(G2frame,G2frame.dataFrame.ControlsMenu)
    10961139    mainSizer = wx.BoxSizer(wx.VERTICAL)
    10971140    mainSizer.Add((5,5),0)
     
    12431286    sampleParms = GetSampleParms()
    12441287    Rwps = GetRwps()
    1245     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.SequentialMenu)
     1288    SetDataMenuBar(G2frame,G2frame.dataFrame.SequentialMenu)
    12461289    G2frame.dataFrame.SetLabel('Sequental refinement results')
    12471290    G2frame.dataFrame.CreateStatusBar()
     
    17191762    if G2frame.dataDisplay:
    17201763        G2frame.dataDisplay.Destroy()
    1721     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ConstraintMenu)
     1764    SetDataMenuBar(G2frame,G2frame.dataFrame.ConstraintMenu)
    17221765    G2frame.dataFrame.SetLabel('Constraints')
    17231766    if not G2frame.dataFrame.GetStatusBar():
     
    17251768    SetStatusLine('')
    17261769   
    1727     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ConstraintMenu)
     1770    SetDataMenuBar(G2frame,G2frame.dataFrame.ConstraintMenu)
    17281771    G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddConstraint, id=wxID_CONSTRAINTADD)
    17291772    G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddFunction, id=wxID_FUNCTADD)
     
    21232166        text = G2frame.dataDisplay.GetPageText(page)
    21242167        if text == 'Bond restraints':
    2125             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     2168            SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
    21262169            bondRestData = restrData['Bond']
    21272170            UpdateBondRestr(bondRestData)
    21282171        elif text == 'Angle restraints':
    2129             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     2172            SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
    21302173            angleRestData = restrData['Angle']
    21312174            UpdateAngleRestr(angleRestData)
    21322175        elif text == 'Plane restraints':
    2133             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     2176            SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
    21342177            planeRestData = restrData['Plane']
    21352178            UpdatePlaneRestr(planeRestData)
    21362179        elif text == 'Chiral restraints':
    2137             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     2180            SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
    21382181            chiralRestData = restrData['Chiral']
    21392182            UpdateChiralRestr(chiralRestData)
     
    21432186        G2frame.dataDisplay.Destroy()
    21442187       
    2145     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     2188    SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
    21462189    G2frame.dataFrame.SetLabel('restraints for '+phaseName)
    21472190    G2frame.dataFrame.RestraintEdit.Enable(wxID_RESTSELPHASE,False)
     
    21862229    if G2frame.dataDisplay:
    21872230        G2frame.dataDisplay.Destroy()
    2188     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ErrorMenu)
     2231    SetDataMenuBar(G2frame,G2frame.dataFrame.ErrorMenu)
    21892232    G2frame.dataFrame.Bind(wx.EVT_MENU,OnErrorAnalysis, id=wxID_PWDANALYSIS)
    21902233    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
     
    22512294        typeChoices = ['Fosq','Fo']
    22522295    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
    2253     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     2296    SetDataMenuBar(G2frame)
    22542297    G2frame.dataFrame.SetTitle('HKL Plot Controls')
    22552298    mainSizer = wx.BoxSizer(wx.VERTICAL)
     
    23322375    oldPage = 0
    23332376    if G2frame.dataFrame:
    2334         G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     2377        SetDataMenuBar(G2frame)
    23352378        if G2frame.dataFrame.GetLabel() == 'Comments':
    23362379            data = [G2frame.dataDisplay.GetValue()]
     
    23502393    else:
    23512394        #create the frame for the data item window
    2352         G2frame.dataFrame = DataFrame(parent=G2frame.mainPanel)
     2395        G2frame.dataFrame = DataFrame(parent=G2frame.mainPanel,frame=G2frame)
    23532396
    23542397    G2frame.dataFrame.Raise()           
    23552398    G2frame.PickId = 0
    23562399    parentID = G2frame.root
    2357     G2frame.ExportPattern.Enable(False)
     2400    for i in G2frame.ExportPattern: i.Enable(False)
    23582401    defWid = [250,150]
    23592402    if item != G2frame.root:
     
    23632406        G2frame.PickId = item
    23642407        if G2frame.PatternTree.GetItemText(item) == 'Notebook':
    2365             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DataNotebookMenu)
     2408            SetDataMenuBar(G2frame,G2frame.dataFrame.DataNotebookMenu)
    23662409            G2frame.PatternId = 0
    2367             G2frame.ExportPattern.Enable(False)
     2410            for i in G2frame.ExportPattern: i.Enable(False)
    23682411            data = G2frame.PatternTree.GetItemPyData(item)
    23692412            UpdateNotebook(G2frame,data)
    23702413        elif G2frame.PatternTree.GetItemText(item) == 'Controls':
    23712414            G2frame.PatternId = 0
    2372             G2frame.ExportPattern.Enable(False)
     2415            for i in G2frame.ExportPattern: i.Enable(False)
    23732416            data = G2frame.PatternTree.GetItemPyData(item)
    23742417            if not data:           #fill in defaults
     
    23772420                    'deriv type':'analytic Hessian','min dM/M':0.0001,'shift factor':1.0,'max cyc':3}
    23782421                G2frame.PatternTree.SetItemPyData(item,data)                             
    2379             G2frame.Refine.Enable(True)
    2380             G2frame.SeqRefine.Enable(True)
     2422            for i in G2frame.Refine: i.Enable(True)
     2423            for i in G2frame.SeqRefine: i.Enable(True)
    23812424            UpdateControls(G2frame,data)
    23822425        elif G2frame.PatternTree.GetItemText(item) == 'Sequental results':
     
    24142457            G2plt.PlotPowderLines(G2frame)
    24152458        elif 'PWDR' in G2frame.PatternTree.GetItemText(item):
    2416             G2frame.ExportPattern.Enable(True)
     2459            for i in G2frame.ExportPattern: i.Enable(True)
    24172460            UpdatePWHKPlot(G2frame,'PWDR',item)
    24182461        elif 'HKLF' in G2frame.PatternTree.GetItemText(item):
     
    24212464        elif 'PDF' in G2frame.PatternTree.GetItemText(item):
    24222465            G2frame.PatternId = item
    2423             G2frame.ExportPDF.Enable(True)
     2466            for i in G2frame.ExportPDF: i.Enable(True)
    24242467            G2plt.PlotISFG(G2frame,type='S(Q)')
    24252468        elif G2frame.PatternTree.GetItemText(item) == 'Phases':
     
    24482491        G2phG.UpdatePhaseData(G2frame,item,data,oldPage)
    24492492    elif G2frame.PatternTree.GetItemText(item) == 'Comments':
    2450         G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DataCommentsMenu)
     2493        SetDataMenuBar(G2frame,G2frame.dataFrame.DataCommentsMenu)
    24512494        G2frame.PatternId = G2frame.PatternTree.GetItemParent(item)
    24522495        G2frame.PickId = item
     
    24842527    elif G2frame.PatternTree.GetItemText(item) == 'PDF Controls':
    24852528        G2frame.PatternId = G2frame.PatternTree.GetItemParent(item)
    2486         G2frame.ExportPDF.Enable(True)
     2529        for i in G2frame.ExportPDF: i.Enable(True)
    24872530        G2frame.PickId = item
    24882531        data = G2frame.PatternTree.GetItemPyData(item)
     
    24942537    elif G2frame.PatternTree.GetItemText(item) == 'Peak List':
    24952538        G2frame.PatternId = G2frame.PatternTree.GetItemParent(item)
    2496         G2frame.ExportPeakList.Enable(True)
     2539        for i in G2frame.ExportPeakList: i.Enable(True)
    24972540        G2frame.PickId = item
    24982541        data = G2frame.PatternTree.GetItemPyData(item)
     
    25322575    elif G2frame.PatternTree.GetItemText(item) == 'Index Peak List':
    25332576        G2frame.PatternId = G2frame.PatternTree.GetItemParent(item)
    2534         G2frame.ExportPeakList.Enable(True)
     2577        for i in G2frame.ExportPeakList: i.Enable(True)
    25352578        G2frame.PickId = item
    25362579        data = G2frame.PatternTree.GetItemPyData(item)
     
    25692612        data = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)
    25702613        G2pdG.UpdateReflectionGrid(G2frame,data,HKLF=True,Name=name)
     2614
     2615def SetDataMenuBar(G2frame,menu=None):
     2616        '''Set the menu for the data frame. On the Mac put this
     2617        menu for the data tree window instead.
     2618
     2619        Note that data frame items do not have menus, for these (menu=None)
     2620        display a blank menu or on the Mac display the standard menu for
     2621        the data tree window.
     2622        '''
     2623        if sys.platform == "darwin":
     2624            if menu is None:
     2625                G2frame.SetMenuBar(G2frame.GSASIIMenu)
     2626            else:
     2627                G2frame.SetMenuBar(menu)
     2628        else:
     2629            if menu is None:
     2630                G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     2631            else:
     2632                G2frame.dataFrame.SetMenuBar(menu)
  • trunk/GSASIIimgGUI.py

    r762 r765  
    5555           
    5656    def OnIntegrate(event):
    57        
    5857        if data['background image'][0]:
    5958            maskCopy = copy.deepcopy(masks)
     
    7271        G2plt.PlotIntegration(G2frame,newPlot=True)
    7372        G2IO.SaveIntegration(G2frame,G2frame.PickId,data)
    74         G2frame.MakePDF.Enable(True)
     73        for item in G2frame.MakePDF: item.Enable(True)
    7574       
    7675    def OnIntegrateAll(event):
     
    718717    if G2frame.dataDisplay:
    719718        G2frame.dataDisplay.Destroy()
    720     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ImageMenu)
     719    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.ImageMenu)
    721720    if not G2frame.dataFrame.GetStatusBar():
    722721        G2frame.dataFrame.CreateStatusBar()
     
    913912    if G2frame.dataDisplay:
    914913        G2frame.dataDisplay.Destroy()
    915     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.MaskMenu)
     914    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.MaskMenu)
    916915    G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyMask, id=G2gd.wxID_MASKCOPY)
    917916    G2frame.dataFrame.Bind(wx.EVT_MENU, OnLoadMask, id=G2gd.wxID_MASKLOAD)
     
    12851284    if G2frame.dataDisplay:
    12861285        G2frame.dataDisplay.Destroy()
    1287     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.StrStaMenu)
     1286    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.StrStaMenu)
    12881287    G2frame.dataFrame.Bind(wx.EVT_MENU, OnAppendDzero, id=G2gd.wxID_APPENDDZERO)
    12891288    G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitStrSta, id=G2gd.wxID_STRSTAFIT)
  • trunk/GSASIIphsGUI.py

    r764 r765  
    381381        G2frame.dataDisplay.Destroy()
    382382    PhaseName = G2frame.PatternTree.GetItemText(Item)
    383     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     383    G2gd.SetDataMenuBar(G2frame)
    384384    G2frame.dataFrame.SetLabel('Phase Data for '+PhaseName)
    385385    G2frame.dataFrame.CreateStatusBar()
     
    29972997        if UseList:
    29982998            G2frame.dataFrame.DataMenu.Enable(G2gd.wxID_DATADELETE,True)
    2999             G2frame.Refine.Enable(True)
     2999            for item in G2frame.Refine: item.Enable(True)
    30003000        else:
    30013001            G2frame.dataFrame.DataMenu.Enable(G2gd.wxID_DATADELETE,False)
    3002             G2frame.Refine.Enable(False)           
     3002            for item in G2frame.Refine: item.Enable(False)
    30033003        generalData = data['General']       
    30043004        SGData = generalData['SGData']
     
    43104310            Page = G2frame.dataDisplay.FindPage('Map peaks')
    43114311            G2frame.dataDisplay.ChangeSelection(Page)
    4312             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.MapPeaksMenu)
     4312            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.MapPeaksMenu)
    43134313            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPeaksMove, id=G2gd.wxID_PEAKSMOVE)
    43144314            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPeaksDA, id=G2gd.wxID_PEAKSDA)
     
    43724372        text = G2frame.dataDisplay.GetPageText(page)
    43734373        if text == 'Atoms':
    4374             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.AtomsMenu)
     4374            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.AtomsMenu)
    43754375            G2frame.dataFrame.Bind(wx.EVT_MENU, OnAtomAdd, id=G2gd.wxID_ATOMSEDITADD)
    43764376            G2frame.dataFrame.Bind(wx.EVT_MENU, OnAtomViewAdd, id=G2gd.wxID_ATOMSVIEWADD)
     
    43854385            FillAtomsGrid()
    43864386        elif text == 'General':
    4387             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DataGeneral)
     4387            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.DataGeneral)
    43884388            G2frame.dataFrame.Bind(wx.EVT_MENU, OnFourierMaps, id=G2gd.wxID_FOURCALC)
    43894389            G2frame.dataFrame.Bind(wx.EVT_MENU, OnSearchMaps, id=G2gd.wxID_FOURSEARCH)
     
    43924392            UpdateGeneral()
    43934393        elif text == 'Data':
    4394             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DataMenu)
     4394            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.DataMenu)
    43954395            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPwdrAdd, id=G2gd.wxID_PWDRADD)
    43964396            G2frame.dataFrame.Bind(wx.EVT_MENU, OnHklfAdd, id=G2gd.wxID_HKLFADD)
     
    43994399            G2plt.PlotSizeStrainPO(G2frame,data,Start=True)
    44004400        elif text == 'Draw Options':
    4401             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DataDrawOptions)
     4401            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.DataDrawOptions)
    44024402            UpdateDrawOptions()
    44034403            G2plt.PlotStructure(G2frame,data)
    44044404        elif text == 'Draw Atoms':
    4405             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DrawAtomsMenu)
     4405            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.DrawAtomsMenu)
    44064406            G2frame.dataFrame.Bind(wx.EVT_MENU, DrawAtomStyle, id=G2gd.wxID_DRAWATOMSTYLE)
    44074407            G2frame.dataFrame.Bind(wx.EVT_MENU, DrawAtomLabel, id=G2gd.wxID_DRAWATOMLABEL)
     
    44244424            G2plt.PlotStructure(G2frame,data)
    44254425        elif text == 'Pawley reflections':
    4426             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.PawleyMenu)
     4426            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.PawleyMenu)
    44274427            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPawleyLoad, id=G2gd.wxID_PAWLEYLOAD)
    44284428            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPawleyEstimate, id=G2gd.wxID_PAWLEYESTIMATE)
     
    44314431            FillPawleyReflectionsGrid()
    44324432        elif text == 'Texture':
    4433             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.TextureMenu)
     4433            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.TextureMenu)
    44344434            G2frame.dataFrame.Bind(wx.EVT_MENU, OnTextureRefine, id=G2gd.wxID_REFINETEXTURE)
    44354435            G2frame.dataFrame.Bind(wx.EVT_MENU, OnTextureClear, id=G2gd.wxID_CLEARTEXTURE)
     
    44374437            G2plt.PlotTexture(G2frame,data,Start=True)
    44384438        elif text == 'Map peaks':
    4439             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.MapPeaksMenu)
     4439            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.MapPeaksMenu)
    44404440            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPeaksMove, id=G2gd.wxID_PEAKSMOVE)
    44414441            G2frame.dataFrame.Bind(wx.EVT_MENU, OnPeaksViewPoint, id=G2gd.wxID_PEAKSVIEWPT)
     
    44494449           
    44504450        else:
    4451             G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     4451            G2gd.SetDataMenuBar(G2frame)
    44524452        event.Skip()
    44534453       
    44544454    General = wx.Window(G2frame.dataDisplay)
    44554455    G2frame.dataDisplay.AddPage(General,'General')
    4456     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.DataGeneral)
     4456    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.DataGeneral)
    44574457    G2frame.dataFrame.Bind(wx.EVT_MENU, OnFourierMaps, id=G2gd.wxID_FOURCALC)
    44584458    G2frame.dataFrame.Bind(wx.EVT_MENU, OnSearchMaps, id=G2gd.wxID_FOURSEARCH)
  • trunk/GSASIIpwdGUI.py

    r738 r765  
    236236        G2plt.PlotPatterns(G2frame)
    237237           
    238     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.PeakMenu)
     238    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.PeakMenu)
    239239    if not G2frame.dataFrame.GetStatusBar():
    240240        Status = G2frame.dataFrame.CreateStatusBar()
     
    528528        G2frame.dataFrame.DestroyChildren()
    529529    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
    530     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BackMenu)
     530    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.BackMenu)
    531531    G2frame.dataFrame.SetLabel('Background')
    532532    if not G2frame.dataFrame.GetStatusBar():
     
    590590    G2frame.LimitsTable = G2gd.Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    591591    G2frame.dataFrame.SetLabel('Limits')
    592     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.LimitMenu)
     592    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.LimitMenu)
    593593    if not G2frame.dataFrame.GetStatusBar():
    594594        Status = G2frame.dataFrame.CreateStatusBar()
     
    841841    except TypeError:       #PKS data never used in a phase as data
    842842        ifhisto = False
    843     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     843    G2gd.SetDataMenuBar(G2frame)
    844844    G2frame.dataFrame.SetLabel('Instrument Parameters')
    845845    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
     
    847847    instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Histogram Type:'),0,wx.ALIGN_CENTER_VERTICAL)
    848848    if 'P' in insVal['Type']:                   #powder data
    849         G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.InstMenu)
     849        G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.InstMenu)
    850850        if not G2frame.dataFrame.GetStatusBar():
    851851            Status = G2frame.dataFrame.CreateStatusBar()
     
    11291129    if G2frame.dataDisplay:
    11301130        G2frame.dataFrame.Clear()
    1131     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.SampleMenu)
     1131    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.SampleMenu)
    11321132    G2frame.dataFrame.SetLabel('Sample Parameters')
    11331133    G2frame.Bind(wx.EVT_MENU, OnSampleCopy, id=G2gd.wxID_SAMPLECOPY)
     
    13151315        Status = G2frame.dataFrame.CreateStatusBar()
    13161316    if 'PWD' in G2frame.PatternTree.GetItemText(G2frame.PatternId):
    1317         G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.IndPeaksMenu)
     1317        G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.IndPeaksMenu)
    13181318        G2frame.Bind(wx.EVT_MENU, OnReload, id=G2gd.wxID_INDXRELOAD)
    13191319    G2frame.dataFrame.IndexPeaks.Enable(False)
     
    16561656    if G2frame.dataDisplay:
    16571657        G2frame.dataFrame.Clear()
    1658     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.IndexMenu)
     1658    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.IndexMenu)
    16591659    if not G2frame.dataFrame.GetStatusBar():
    16601660        Status = G2frame.dataFrame.CreateStatusBar()
     
    18641864    rowLabels = []
    18651865    if HKLF:
    1866         G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.BlankMenu)
     1866        G2gd.SetDataMenuBar(G2frame)
    18671867        refList = [refl[:11] for refl in data[1]]
    18681868    else:       
    1869         G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.ReflMenu)
     1869        G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.ReflMenu)
    18701870        if not G2frame.dataFrame.GetStatusBar():
    18711871            Status = G2frame.dataFrame.CreateStatusBar()   
     
    22842284    if G2frame.dataDisplay:
    22852285        G2frame.dataFrame.Clear()
    2286     G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.PDFMenu)
     2286    G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.PDFMenu)
    22872287    if not G2frame.dataFrame.GetStatusBar():
    22882288        Status = G2frame.dataFrame.CreateStatusBar()   
Note: See TracChangeset for help on using the changeset viewer.