Changeset 683 for trunk/GSASIIgrid.py


Ignore:
Timestamp:
Jul 10, 2012 10:23:32 AM (13 years ago)
Author:
vondreele
Message:

fix dlg.Destroy as needed
continue restraints work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/GSASIIgrid.py

    r661 r683  
    5555] = [wx.NewId() for item in range(12)]
    5656
     57[ wxID_DRAWRESTRBOND, wxID_DRAWRESTRANGLE, wxID_DRAWRESTRPLANE, wxID_DRAWRESTRCHIRAL,
     58] = [wx.NewId() for item in range(4)]
     59
    5760[ wxID_CLEARTEXTURE,wxID_REFINETEXTURE,
    5861] = [wx.NewId() for item in range(2)]
     
    8487] = [wx.NewId() for item in range(4)]
    8588
    86 [ wxID_RESTRAINTADD,wxID_PWDANALYSIS,
    87 ] = [wx.NewId() for item in range(2)]
     89[ wxID_RESTRAINTADD,wxID_PWDANALYSIS, wxID_RESTSELPHASE,
     90] = [wx.NewId() for item in range(3)]
    8891
    8992[ wxID_SAVESEQSEL,
     
    278281        self.RestraintMenu.Append(menu=self.RestraintEdit, title='Edit')
    279282        self.RestraintMenu.Append(menu=MyHelp(self,helpType='Restraints'),title='&Help')
    280         self.RestraintEdit.Append(id=wxID_RESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add restraint',
    281             help='restraint dummy menu item')
     283        self.RestraintEdit.Append(id=wxID_RESTSELPHASE, kind=wx.ITEM_NORMAL,text='Select phase',
     284            help='Select phase')
     285        self.RestraintEdit.Append(id=wxID_RESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add restraints',
     286            help='Add restraints')
    282287           
    283288# Sequential results
     
    500505            help='Reload atom drawing list')
    501506        self.AtomCompute.Append(id=wxID_ATOMSDISAGL, kind=wx.ITEM_NORMAL,text='Distances & Angles',
    502             help='Compute distances & angles for selected atoms')   
     507            help='Compute distances & angles for selected atoms')
    503508                 
    504509# Phase / Draw Options tab
     
    510515        self.DrawAtomEdit = wx.Menu(title='')
    511516        self.DrawAtomCompute = wx.Menu(title='')
     517        self.DrawAtomRestraint = wx.Menu(title='')
    512518        self.DrawAtomsMenu.Append(menu=self.DrawAtomEdit, title='Edit')
    513519        self.DrawAtomsMenu.Append(menu=self.DrawAtomCompute,title='Compute')
     520        self.DrawAtomsMenu.Append(menu=self.DrawAtomRestraint, title='Restraints')
    514521        self.DrawAtomsMenu.Append(menu=MyHelp(self,helpType='Draw Atoms'),title='&Help')
    515522        self.DrawAtomEdit.Append(id=wxID_DRAWATOMSTYLE, kind=wx.ITEM_NORMAL,text='Atom style',
     
    537544        self.DrawAtomCompute.Append(id=wxID_DRAWPLANE, kind=wx.ITEM_NORMAL,text='Best plane',
    538545            help='Compute best plane for 4+ selected atoms')   
     546        self.DrawAtomRestraint.Append(id=wxID_DRAWRESTRBOND, kind=wx.ITEM_NORMAL,text='Add bond restraint',
     547            help='Add bond restraint for selected atoms (2)')
     548        self.DrawAtomRestraint.Append(id=wxID_DRAWRESTRANGLE, kind=wx.ITEM_NORMAL,text='Add angle restraint',
     549            help='Add angle restraint for selected atoms (3: one end 1st)')
     550        self.DrawAtomRestraint.Append(id=wxID_DRAWRESTRPLANE, kind=wx.ITEM_NORMAL,text='Add plane restraint',
     551            help='Add plane restraint for selected atoms (4+)')
     552        self.DrawAtomRestraint.Append(id=wxID_DRAWRESTRCHIRAL, kind=wx.ITEM_NORMAL,text='Add chiral restraint',
     553            help='Add chiral restraint for selected atoms (4: center atom 1st)')
    539554           
    540555# Phase / Texture tab
     
    15691584    elif warnmsg:
    15701585        print 'Unexpected contraint warning:\n',warnmsg
    1571 
    1572 def UpdateRestraints(G2frame,data):
    1573 
     1586       
     1587def UpdateRestraints(G2frame,data,Phases,phaseName):
     1588    if not len(Phases):
     1589        print 'There are no phases to form restraints'
     1590        return
     1591    phasedata = Phases[phaseName]
     1592    if phaseName not in data:
     1593        data[phaseName] = {}
     1594    restrData = data[phaseName]
     1595    if 'Bond' not in restrData:
     1596        restrData['Bond'] = {'wtFactor':1.0,'Bonds':[]}
     1597    if 'Angle' not in restrData:
     1598        restrData['Angle'] = {'wtFactor':1.0,'Angles':[]}
     1599    if 'Plane' not in restrData:
     1600        restrData['Plane'] = {'wtFactor':1.0,'Planes':[]}
     1601    if 'Chiral' not in restrData:
     1602        restrData['Chiral'] = {'wtFactor':1.0,'Volumes':[]}
     1603   
     1604    def OnSelectPhase(event):
     1605        dlg = wx.SingleChoiceDialog(G2frame,'Select','Phase',Phases.keys())
     1606        try:
     1607            if dlg.ShowModal() == wx.ID_OK:
     1608                phaseName = Phases.keys()[dlg.GetSelection()]
     1609                UpdateRestraints(G2frame,data,Phases,phaseName)
     1610        finally:
     1611            dlg.Destroy()
     1612   
    15741613    def OnAddRestraint(event):
    15751614        page = G2frame.dataDisplay.GetSelection()
    1576         print G2frame.dataDisplay.GetPageText(page)
    1577 
    1578     def UpdateAtomRestr():
    1579         AtomRestr.DestroyChildren()
    1580         dataDisplay = wx.Panel(AtomRestr)
     1615        if 'Bond' in G2frame.dataDisplay.GetPageText(page):
     1616            AddBondRestraint()
     1617        elif 'Angle' in G2frame.dataDisplay.GetPageText(page):
     1618            AddAngleRestraint()
     1619        elif 'Plane' in G2frame.dataDisplay.GetPageText(page):
     1620            AddPlaneRestraint()
     1621        elif 'Chiral' in G2frame.dataDisplay.GetPageText(page):
     1622            AddChiralRestraint()
     1623           
     1624    def AddBondRestraint():
     1625        print 'Bond restraint'
     1626
     1627    def AddAngleRestraint():
     1628        print 'Angle restraint'
     1629
     1630    def AddPlaneRestraint():
     1631        print 'Plane restraint'
     1632
     1633    def AddChiralRestraint():
     1634        print 'Chiral restraint'
     1635       
     1636    def WtBox(wind,restData):
     1637       
     1638        def OnWtFactor(event):
     1639            try:
     1640                value = float(wtfactor.GetValue())
     1641            except ValueError:
     1642                value = 1.0
     1643            restData['wtFactor'] = value
     1644            wtfactor.SetValue('%.2f'%(value))
     1645           
     1646        wtBox = wx.BoxSizer(wx.HORIZONTAL)
     1647        wtBox.Add(wx.StaticText(wind,-1,'Restraint weight factor:'),0,wx.ALIGN_CENTER_VERTICAL)
     1648        wtfactor = wx.TextCtrl(wind,-1,value='%.2f'%(restData['wtFactor']),style=wx.TE_PROCESS_ENTER)
     1649        wtfactor.Bind(wx.EVT_TEXT_ENTER,OnWtFactor)
     1650        wtfactor.Bind(wx.EVT_KILL_FOCUS,OnWtFactor)
     1651        wtBox.Add(wtfactor,0,wx.ALIGN_CENTER_VERTICAL)
     1652        return wtBox
     1653       
     1654    def UpdateBondRestr(bondRestData):
     1655        BondRestr.DestroyChildren()
     1656        dataDisplay = wx.Panel(BondRestr)
    15811657        mainSizer = wx.BoxSizer(wx.VERTICAL)
    15821658        mainSizer.Add((5,5),0)
    1583         mainSizer.Add(wx.StaticText(dataDisplay,-1,'Atom restraint data:'),0,wx.ALIGN_CENTER_VERTICAL)
    1584         mainSizer.Add((5,5),0)
    1585 
    1586 
    1587         dataDisplay.SetSizer(mainSizer)
     1659        mainSizer.Add(WtBox(BondRestr,bondRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1660        for bond in bondRestData['Bonds']:
     1661            print bond
     1662
     1663        BondRestr.SetSizer(mainSizer)
    15881664        Size = mainSizer.Fit(G2frame.dataFrame)
    1589         Size[1] += 26                           #compensate for status bar
    1590         dataDisplay.SetSize(Size)
     1665        Size[1] += 25       #make room for tab
     1666        BondRestr.SetSize(Size)
    15911667        G2frame.dataFrame.setSizePosLeft(Size)
    15921668       
    1593     def UpdatePhaseRestr():
    1594         PhaseRestr.DestroyChildren()
    1595         dataDisplay = wx.Panel(PhaseRestr)
     1669    def UpdateAngleRestr(angleRestData):
     1670        AngleRestr.DestroyChildren()
     1671        dataDisplay = wx.Panel(AngleRestr)
    15961672        mainSizer = wx.BoxSizer(wx.VERTICAL)
    15971673        mainSizer.Add((5,5),0)
    1598         mainSizer.Add(wx.StaticText(dataDisplay,-1,'Phase restraint data:'),0,wx.ALIGN_CENTER_VERTICAL)
     1674        mainSizer.Add(WtBox(AngleRestr,angleRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1675        for angle in angleRestData['Angles']:
     1676            print angle
     1677
     1678
     1679        AngleRestr.SetSizer(mainSizer)
     1680        Size = mainSizer.Fit(G2frame.dataFrame)
     1681        Size[1] += 25       #make room for tab
     1682        AngleRestr.SetSize(Size)
     1683        G2frame.dataFrame.setSizePosLeft(Size)
     1684   
     1685    def UpdatePlaneRestr(planeRestData):
     1686        PlaneRestr.DestroyChildren()
     1687        dataDisplay = wx.Panel(PlaneRestr)
     1688        mainSizer = wx.BoxSizer(wx.VERTICAL)
    15991689        mainSizer.Add((5,5),0)
    1600 
    1601 
    1602         dataDisplay.SetSizer(mainSizer)
     1690        mainSizer.Add(WtBox(PlaneRestr,planeRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1691        for plane in planeRestData['Planes']:
     1692            print plane
     1693
     1694
     1695        PlaneRestr.SetSizer(mainSizer)
    16031696        Size = mainSizer.Fit(G2frame.dataFrame)
    1604         Size[1] += 26                           #compensate for status bar
    1605         dataDisplay.SetSize(Size)
     1697        Size[1] += 25       #make room for tab
     1698        PlaneRestr.SetSize(Size)
     1699        G2frame.dataFrame.setSizePosLeft(Size)
     1700   
     1701    def UpdateChiralRestr(chiralRestData):
     1702        ChiralRestr.DestroyChildren()
     1703        dataDisplay = wx.Panel(ChiralRestr)
     1704        mainSizer = wx.BoxSizer(wx.VERTICAL)
     1705        mainSizer.Add((5,5),0)
     1706        mainSizer.Add(WtBox(ChiralRestr,chiralRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1707        for volume in chiralRestData['Volumes']:
     1708            print volume
     1709
     1710
     1711        ChiralRestr.SetSizer(mainSizer)
     1712        Size = mainSizer.Fit(G2frame.dataFrame)
     1713        Size[1] += 25       #make room for tab
     1714        ChiralRestr.SetSize(Size)
    16061715        G2frame.dataFrame.setSizePosLeft(Size)
    16071716   
     
    16091718        page = event.GetSelection()
    16101719        text = G2frame.dataDisplay.GetPageText(page)
    1611         if text == 'Atom restraints':
     1720        if text == 'Bond restraints':
    16121721            G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
    1613             UpdateAtomRestr()
    1614         elif text == 'Phase restraints':
    1615             UpdatePhaseRestr()
     1722            bondRestData = restrData['Bond']
     1723            UpdateBondRestr(bondRestData)
     1724        elif text == 'Angle restraints':
    16161725            G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     1726            angleRestData = restrData['Angle']
     1727            UpdateAngleRestr(angleRestData)
     1728        elif text == 'Plane restraints':
     1729            G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     1730            planeRestData = restrData['Plane']
     1731            UpdatePlaneRestr(planeRestData)
     1732        elif text == 'Chiral restraints':
     1733            G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
     1734            chiralRestData = restrData['Chiral']
     1735            UpdateChiralRestr(chiralRestData)
    16171736        event.Skip()
    16181737
    16191738    if G2frame.dataDisplay:
    16201739        G2frame.dataDisplay.Destroy()
     1740       
    16211741    G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.RestraintMenu)
    1622     G2frame.dataFrame.SetLabel('restraints')
    1623     G2frame.dataFrame.CreateStatusBar()
     1742    G2frame.dataFrame.SetLabel('restraints for '+phaseName)
     1743    G2frame.dataFrame.RestraintEdit.Enable(wxID_RESTSELPHASE,False)
     1744    if len(Phases) > 1:
     1745        G2frame.dataFrame.RestraintEdit.Enable(wxID_RESTSELPHASE,True)
     1746        G2frame.dataFrame.Bind(wx.EVT_MENU, OnSelectPhase, id=wxID_RESTSELPHASE)
    16241747    G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddRestraint, id=wxID_RESTRAINTADD)
    16251748    G2frame.dataDisplay = GSNoteBook(parent=G2frame.dataFrame,size=G2frame.dataFrame.GetClientSize())
    16261749   
    1627     PhaseRestr = wx.ScrolledWindow(G2frame.dataDisplay)
    1628     G2frame.dataDisplay.AddPage(PhaseRestr,'Phase restraints')
    1629     AtomRestr = wx.ScrolledWindow(G2frame.dataDisplay)
    1630     G2frame.dataDisplay.AddPage(AtomRestr,'Atom restraints')
    1631     UpdatePhaseRestr()
    1632 #    AtomRestrData = data['AtomRestr']
     1750    BondRestr = wx.ScrolledWindow(G2frame.dataDisplay)
     1751    G2frame.dataDisplay.AddPage(BondRestr,'Bond restraints')
     1752    AngleRestr = wx.ScrolledWindow(G2frame.dataDisplay)
     1753    G2frame.dataDisplay.AddPage(AngleRestr,'Angle restraints')
     1754    PlaneRestr = wx.ScrolledWindow(G2frame.dataDisplay)
     1755    G2frame.dataDisplay.AddPage(PlaneRestr,'Plane restraints')
     1756    ChiralRestr = wx.ScrolledWindow(G2frame.dataDisplay)
     1757    G2frame.dataDisplay.AddPage(ChiralRestr,'Chiral restraints')
     1758    UpdateBondRestr(restrData['Bond'])
    16331759
    16341760    G2frame.dataDisplay.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, OnPageChanged)
     
    18371963        elif G2frame.PatternTree.GetItemText(item) == 'Restraints':
    18381964            data = G2frame.PatternTree.GetItemPyData(item)
    1839             UpdateRestraints(G2frame,data)
     1965            Phases = G2frame.GetPhaseData()
     1966            phase = ''
     1967            if Phases:
     1968                phaseName = Phases.keys()[0]
     1969            UpdateRestraints(G2frame,data,Phases,phaseName)
    18401970        elif 'IMG' in G2frame.PatternTree.GetItemText(item):
    18411971            G2frame.Image = item
Note: See TracChangeset for help on using the changeset viewer.