Ignore:
Timestamp:
Jul 6, 2017 3:09:41 PM (4 years ago)
Author:
toby
Message:

implement restraint tab selection menu; fix restraint scroll bar problem (remove/comment all DestroyChildren?); consolidate menu generation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branch/2frame/GSASIIrestrGUI.py

    r2912 r2913  
    3232
    3333VERY_LIGHT_GREY = wx.Colour(235,235,235)
     34TabSelectionIdDict = {}
    3435
    3536################################################################################
     
    5455    data tree
    5556    '''
    56     if not Phases:
    57         print 'There are no phases to form restraints'
    58         return
    59     if not len(Phases):
    60         print 'There are no phases to form restraints'
    61         return
    62     phasedata = Phases[phaseName]
    63     if phaseName not in data:
    64         data[phaseName] = {}
    65     restrData = data[phaseName]
    66     if 'Bond' not in restrData:
    67         restrData['Bond'] = {'wtFactor':1.0,'Range':1.1,'Bonds':[],'Use':True}
    68     if 'Angle' not in restrData:
    69         restrData['Angle'] = {'wtFactor':1.0,'Range':0.85,'Angles':[],'Use':True}
    70     if 'Plane' not in restrData:
    71         restrData['Plane'] = {'wtFactor':1.0,'Planes':[],'Use':True}
    72     if 'Chiral' not in restrData:
    73         restrData['Chiral'] = {'wtFactor':1.0,'Volumes':[],'Use':True}
    74     if 'Torsion' not in restrData:
    75         restrData['Torsion'] = {'wtFactor':1.0,'Coeff':{},'Torsions':[],'Use':True}
    76     if 'Rama' not in restrData:
    77         restrData['Rama'] = {'wtFactor':1.0,'Coeff':{},'Ramas':[],'Use':True}
    78     if 'Texture' not in restrData:
    79         restrData['Texture'] = {'wtFactor':1.0,'HKLs':[],'Use':True}
    80     if 'ChemComp' not in restrData:
    81         restrData['ChemComp'] = {'wtFactor':1.0,'Sites':[],'Use':True}
    82     General = phasedata['General']
    83     Cell = General['Cell'][1:7]          #skip flag & volume   
    84     Amat,Bmat = G2lat.cell2AB(Cell)
    85     SGData = General['SGData']
    86     cx,ct,cs,cia = General['AtomPtrs']
    87     Atoms = phasedata['Atoms']
    88     AtLookUp = G2mth.FillAtomLookUp(Atoms,cia+8)
    89     if 'macro' in General['Type']:
    90         Names = [atom[0]+':'+atom[1]+atom[2]+' '+atom[3] for atom in Atoms]
    91         Ids = []
    92         Coords = []
    93         Types = []
    94     else:   
    95         Names = ['all '+ name for name in General['AtomTypes']]
    96         iBeg = len(Names)
    97         Types = [name for name in General['AtomTypes']]
    98         Coords = [ [] for type in Types]
    99         Ids = [ 0 for type in Types]
    100         Names += [atom[ct-1] for atom in Atoms]
    101     Types += [atom[ct] for atom in Atoms]
    102     Coords += [atom[cx:cx+3] for atom in Atoms]
    103     Ids += [atom[cia+8] for atom in Atoms]
    104     rama = G2data.ramachandranDist['All']
    105     ramaName = 'All'
    10657   
    10758    def OnSelectPhase(event):
     
    858809            UpdateBondRestr(bondRestData)               
    859810           
    860         BondRestr.DestroyChildren()
    861 #        if BondRestr.GetSizer():
    862 #            BondRestr.GetSizer().Clear(True)
     811        if BondRestr.GetSizer(): BondRestr.GetSizer().Clear(True)
    863812        mainSizer = wx.BoxSizer(wx.VERTICAL)
    864813        mainSizer.Add((5,5),0)
     
    994943            UpdateAngleRestr(angleRestData)               
    995944           
    996         AngleRestr.DestroyChildren()
    997 #        if AngleRestr.GetSizer():
    998 #            AngleRestr.GetSizer().Clear(True)
     945        if AngleRestr.GetSizer():
     946            AngleRestr.GetSizer().Clear(True)
    999947        mainSizer = wx.BoxSizer(wx.VERTICAL)
    1000948        mainSizer.Add((5,5),0)
     
    11161064            UpdatePlaneRestr(planeRestData)               
    11171065           
    1118         PlaneRestr.DestroyChildren()
    1119 #        if PlaneRestr.GetSizer():
    1120 #            PlaneRestr.GetSizer().Clear(True)
     1066        if PlaneRestr.GetSizer():
     1067            PlaneRestr.GetSizer().Clear(True)
    11211068        mainSizer = wx.BoxSizer(wx.VERTICAL)
    11221069        mainSizer.Add((5,5),0)
     
    12521199            UpdateChiralRestr(chiralRestData)               
    12531200                                           
    1254         ChiralRestr.DestroyChildren()
    1255 #        if ChiralRestr.GetSizer():
    1256 #            ChiralRestr.GetSizer().Clear(True)
     1201        if ChiralRestr.GetSizer(): ChiralRestr.GetSizer().Clear(True)
    12571202        mainSizer = wx.BoxSizer(wx.VERTICAL)
    12581203        mainSizer.Add((5,5),0)
     
    13691314            wx.CallAfter(UpdateTorsionRestr,torsionRestData)               
    13701315                                           
    1371         TorsionRestr.DestroyChildren()
    1372 #        if TorsionRestr.GetSizer():
    1373 #            TorsionRestr.GetSizer().Clear(True)
     1316        if TorsionRestr.GetSizer(): TorsionRestr.GetSizer().Clear(True)
    13741317        mainSizer = wx.BoxSizer(wx.VERTICAL)
    13751318        mainSizer.Add((5,5),0)
     
    14901433            UpdateRamaRestr(ramaRestData)               
    14911434                                           
    1492         RamaRestr.DestroyChildren()
    1493 #        if RamaRestr.GetSizer():
    1494 #            RamaRestr.GetSizer().Clear(True)
     1435        if RamaRestr.GetSizer(): RamaRestr.GetSizer().Clear(True)
    14951436        mainSizer = wx.BoxSizer(wx.VERTICAL)
    14961437        mainSizer.Add((5,5),0)
     
    16291570            UpdateChemcompRestr(chemcompRestData)               
    16301571
    1631         ChemCompRestr.DestroyChildren()
    1632 #        if ChemCompRestr.GetSizer():
    1633 #            ChemCompRestr.GetSizer().Clear(True)
     1572        if ChemCompRestr.GetSizer(): ChemCompRestr.GetSizer().Clear(True)
    16341573        mainSizer = wx.BoxSizer(wx.VERTICAL)
    16351574        mainSizer.Add((5,5),0)
     
    17391678            wx.CallAfter(UpdateTextureRestr,textureRestData)               
    17401679
    1741         TextureRestr.DestroyChildren()
     1680        if TextureRestr.GetSizer(): TextureRestr.GetSizer().Clear(True)
    17421681        mainSizer = wx.BoxSizer(wx.VERTICAL)
    17431682        mainSizer.Add((5,5),0)
     
    17831722           
    17841723    def OnPageChanged(event):
    1785         #print 'OnPageChanged'
    17861724        page = event.GetSelection()
    17871725        #G2frame.restrBook.SetSize(G2frame.dataWindow.GetClientSize())    #TODO -almost right
     
    18551793#        except ValueError:
    18561794#            print('Unexpected event in RaisePage')
    1857 #       
    1858     G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.RestraintMenu)
    1859     #G2frame.SetLabel(G2frame.GetLabel().split('||')[0]+' || '+'restraints for '+phaseName)
    1860     G2frame.SetTitle('restraints for '+phaseName)
    1861     #G2frame.restrBook = G2G.GSNoteBook(parent=G2frame.dataWindow,size=G2frame.dataWindow.GetClientSize())
    1862     G2frame.restrBook = G2G.GSNoteBook(parent=G2frame.dataWindow)
    1863     G2frame.dataWindow.GetSizer().Add(G2frame.restrBook,1,wx.ALL|wx.EXPAND,1)
    1864    
     1795#
     1796    def OnSelectPage(event):
     1797        'Called when an item is selected from the Select page menu'
     1798        # lookup the menu item that called us and get its text
     1799        tabname = TabSelectionIdDict.get(event.GetId())
     1800        if not tabname:
     1801            print 'Warning: menu item not in dict! id=',event.GetId()
     1802            return
     1803        # find the matching tab
     1804        for PageNum in range(G2frame.restrBook.GetPageCount()):
     1805            if tabname == G2frame.restrBook.GetPageText(PageNum):
     1806                G2frame.restrBook.SetSelection(PageNum)
     1807                return
     1808        else:
     1809            print "Warning: tab "+tabname+" was not found"
     1810
     1811    # UpdateRestraints execution starts here
     1812    if not Phases:
     1813        print 'There are no phases to form restraints'
     1814        return
     1815    if not len(Phases):
     1816        print 'There are no phases to form restraints'
     1817        return
     1818    phasedata = Phases[phaseName]
     1819    if phaseName not in data:
     1820        data[phaseName] = {}
     1821    restrData = data[phaseName]
     1822    if 'Bond' not in restrData:
     1823        restrData['Bond'] = {'wtFactor':1.0,'Range':1.1,'Bonds':[],'Use':True}
     1824    if 'Angle' not in restrData:
     1825        restrData['Angle'] = {'wtFactor':1.0,'Range':0.85,'Angles':[],'Use':True}
     1826    if 'Plane' not in restrData:
     1827        restrData['Plane'] = {'wtFactor':1.0,'Planes':[],'Use':True}
     1828    if 'Chiral' not in restrData:
     1829        restrData['Chiral'] = {'wtFactor':1.0,'Volumes':[],'Use':True}
     1830    if 'Torsion' not in restrData:
     1831        restrData['Torsion'] = {'wtFactor':1.0,'Coeff':{},'Torsions':[],'Use':True}
     1832    if 'Rama' not in restrData:
     1833        restrData['Rama'] = {'wtFactor':1.0,'Coeff':{},'Ramas':[],'Use':True}
     1834    if 'Texture' not in restrData:
     1835        restrData['Texture'] = {'wtFactor':1.0,'HKLs':[],'Use':True}
     1836    if 'ChemComp' not in restrData:
     1837        restrData['ChemComp'] = {'wtFactor':1.0,'Sites':[],'Use':True}
     1838    General = phasedata['General']
     1839    Cell = General['Cell'][1:7]          #skip flag & volume   
     1840    Amat,Bmat = G2lat.cell2AB(Cell)
     1841    SGData = General['SGData']
     1842    cx,ct,cs,cia = General['AtomPtrs']
     1843    Atoms = phasedata['Atoms']
     1844    AtLookUp = G2mth.FillAtomLookUp(Atoms,cia+8)
     1845    if 'macro' in General['Type']:
     1846        Names = [atom[0]+':'+atom[1]+atom[2]+' '+atom[3] for atom in Atoms]
     1847        Ids = []
     1848        Coords = []
     1849        Types = []
     1850    else:   
     1851        Names = ['all '+ name for name in General['AtomTypes']]
     1852        iBeg = len(Names)
     1853        Types = [name for name in General['AtomTypes']]
     1854        Coords = [ [] for type in Types]
     1855        Ids = [ 0 for type in Types]
     1856        Names += [atom[ct-1] for atom in Atoms]
     1857    Types += [atom[ct] for atom in Atoms]
     1858    Coords += [atom[cx:cx+3] for atom in Atoms]
     1859    Ids += [atom[cia+8] for atom in Atoms]
     1860    rama = G2data.ramachandranDist['All']
     1861    ramaName = 'All'
     1862    G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.RestraintMenu)   
    18651863    G2frame.dataWindow.RestraintEdit.Enable(G2gd.wxID_RESTSELPHASE,False)
    18661864    if len(Phases) > 1:
     
    18731871        G2frame.Bind(wx.EVT_MENU, OnPlotAARestraint, id=G2gd.wxID_AARESTRAINTPLOT)
    18741872   
     1873    # GUI defined here
     1874    G2frame.SetTitle('restraints for '+phaseName)
     1875    #G2frame.restrBook = G2G.GSNoteBook(parent=G2frame.dataWindow,size=G2frame.dataWindow.GetClientSize())
     1876    G2frame.restrBook = G2G.GSNoteBook(parent=G2frame.dataWindow)
     1877    G2frame.dataWindow.GetSizer().Add(G2frame.restrBook,1,wx.ALL|wx.EXPAND,1)
    18751878    # clear menu and menu pointers
     1879    Pages = []   
    18761880
    18771881    txt = 'Bond'
    18781882    BondRestr = wx.ScrolledWindow(G2frame.restrBook)
    18791883    G2frame.restrBook.AddPage(BondRestr,txt)
     1884    Pages.append(txt)
    18801885
    18811886    txt = 'Angle'
    18821887    AngleRestr = wx.ScrolledWindow(G2frame.restrBook)
    18831888    G2frame.restrBook.AddPage(AngleRestr,txt)
     1889    Pages.append(txt)
    18841890   
    18851891    txt = 'Plane'
    18861892    PlaneRestr = wx.ScrolledWindow(G2frame.restrBook)
    18871893    G2frame.restrBook.AddPage(PlaneRestr,txt)
     1894    Pages.append(txt)
    18881895
    18891896    txt = 'Chiral'
    18901897    ChiralRestr = wx.ScrolledWindow(G2frame.restrBook)
    18911898    G2frame.restrBook.AddPage(ChiralRestr,txt)
     1899    Pages.append(txt)
    18921900
    18931901    if 'macro' in General['Type']:
     
    18951903        TorsionRestr = wx.ScrolledWindow(G2frame.restrBook)
    18961904        G2frame.restrBook.AddPage(TorsionRestr,txt)
     1905        Pages.append(txt)
    18971906
    18981907        txt = 'Ramachandran'
    18991908        RamaRestr = wx.ScrolledWindow(G2frame.restrBook)
    19001909        G2frame.restrBook.AddPage(RamaRestr,txt)
     1910        Pages.append(txt)
    19011911
    19021912    txt = 'Chem. comp.'
    19031913    ChemCompRestr = wx.ScrolledWindow(G2frame.restrBook)
    19041914    G2frame.restrBook.AddPage(ChemCompRestr,txt)
     1915    Pages.append(txt)
    19051916   
    19061917    if General['SH Texture']['Order']:
     
    19081919        TextureRestr = wx.ScrolledWindow(G2frame.restrBook)
    19091920        G2frame.restrBook.AddPage(TextureRestr,txt)
    1910    
     1921        Pages.append(txt)
     1922
    19111923    UpdateBondRestr(restrData['Bond'])
    19121924
    19131925    G2frame.restrBook.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged)
     1926
     1927    # fill page selection menu
     1928    menu = G2frame.dataWindow.RestraintTab
     1929    for page in Pages:
     1930        if menu.FindItem(page) >= 0: continue # is tab already in menu?
     1931        Id = wx.NewId()
     1932        TabSelectionIdDict[Id] = page
     1933        menu.Append(id=Id,kind=wx.ITEM_NORMAL,text=page)
     1934        G2frame.Bind(wx.EVT_MENU, OnSelectPage, id=Id)
Note: See TracChangeset for help on using the changeset viewer.