Changeset 4908


Ignore:
Timestamp:
May 19, 2021 2:22:22 PM (2 years ago)
Author:
toby
Message:

fix deleting of restraints

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIrestrGUI.py

    r4905 r4908  
    4343WACV = wx.ALIGN_CENTER_VERTICAL
    4444VERY_LIGHT_GREY = wx.Colour(235,235,235)
     45VERY_RED = wx.Colour(255,0,0)
    4546TabSelectionIdDict = {}
    4647
     
    4849#####  Restraints
    4950################################################################################           
    50 def GetSelectedRows(widget):
     51def GetSelectedRows(widget,lbl='edit',G2frame=None):
    5152    '''Returns a list of selected rows. Rows can be selected, blocks of cells
    5253    or individual cells can be selected. The column for selected cells is ignored.
     
    5455    try:
    5556        rows = widget.GetSelectedRows()
    56     except:
    57         return
    58     if not rows:
     57        if rows: return rows
     58           
    5959        top = widget.GetSelectionBlockTopLeft()
    6060        bot = widget.GetSelectionBlockBottomRight()
    6161        if top and bot:
    6262            rows = range(top[0][0],bot[0][0]+1)
    63     if not rows:
     63            if rows: return rows
     64
    6465        rows = sorted(list(set([cell[0] for cell in widget.GetSelectedCells()])))
    65     return rows
    66        
     66        if rows: return rows
     67
     68        choices = ["{}: {}".format(widget.GetRowLabelValue(i),widget.GetCellValue(i,0))
     69                       for i in range(widget.GetNumberRows())]
     70        try:
     71            dlg = G2G.G2MultiChoiceDialog(G2frame,'Restraints to '+lbl,
     72                                                  'Select restraints',choices)
     73            if dlg.ShowModal() != wx.ID_OK: return
     74            return dlg.GetSelections()
     75        finally:
     76            dlg.Destroy()
     77    except:
     78        return
     79   
    6780def UpdateRestraints(G2frame,data,phaseName):
    6881    '''Respond to selection of the Restraints item on the
     
    946959                               
    947960        def OnDeleteRestraint(event):
    948             rows = GetSelectedRows(Bonds)
     961            rows = GetSelectedRows(Bonds,'delete',G2frame)
    949962            G2frame.GetStatusBar().SetStatusText('',1)
    950963            if not rows:
     
    963976        mainSizer.Add(WtBox(BondRestr,bondRestData),0)
    964977
     978        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     979            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    965980        bondList = bondRestData['Bonds']
    966981        if len(bondList) and len(bondList[0]) == 6:   #patch
     
    10201035                else:
    10211036                    Bonds.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1037                for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1038                    G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=True)
    10221039                G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    10231040                G2frame.Bind(wx.EVT_MENU, OnChangeValue, id=G2G.wxID_RESRCHANGEVAL)
     
    10781095                                           
    10791096        def OnDeleteRestraint(event):
    1080             rows = GetSelectedRows(Angles)
     1097            rows = GetSelectedRows(Angles,'delete',G2frame)
    10811098            G2frame.GetStatusBar().SetStatusText('',1)
    10821099            if not rows:
     
    10951112        mainSizer.Add(WtBox(AngleRestr,angleRestData),0)
    10961113
     1114        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1115            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    10971116        angleList = angleRestData['Angles']
    10981117        if len(angleList):
     
    11521171                else:
    11531172                    Angles.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1173                for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1174                    G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=True)
    11541175                G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    11551176                G2frame.Bind(wx.EVT_MENU, OnChangeValue, id=G2G.wxID_RESRCHANGEVAL)
     
    12001221                                           
    12011222        def OnDeleteRestraint(event):
    1202             rows = GetSelectedRows(Planes)
     1223            rows = GetSelectedRows(Planes,'delete',G2frame)
    12031224            G2frame.GetStatusBar().SetStatusText('',1)
    12041225            if not rows:
     
    12171238        mainSizer.Add(WtBox(PlaneRestr,planeRestData),0)
    12181239
     1240        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1241            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    12191242        planeList = planeRestData['Planes']
    12201243        if len(planeList):
     
    12801303                else:
    12811304                    Planes.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1305                for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESTCHANGEESD):
     1306                    G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=True)
    12821307                G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    12831308                G2frame.Bind(wx.EVT_MENU, OnChangeEsd, id=G2G.wxID_RESTCHANGEESD)
     
    13091334           
    13101335        def OnDeleteRestraint(event):
    1311             rows = GetSelectedRows(Volumes)
     1336            rows = GetSelectedRows(Volumes,'delete',G2frame)
    13121337            G2frame.GetStatusBar().SetStatusText('',1)
    13131338            if not rows:
     
    13531378        mainSizer.Add(WtBox(ChiralRestr,chiralRestData),0)
    13541379
     1380        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1381            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    13551382        volumeList = chiralRestData['Volumes']
    13561383        if len(volumeList):
     
    14101437                else:
    14111438                    Volumes.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1439                for i in (G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1440                    G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=True)
    14121441                G2frame.Bind(wx.EVT_MENU, OnChangeValue, id=G2G.wxID_RESRCHANGEVAL)
    14131442                G2frame.Bind(wx.EVT_MENU, OnChangeEsd, id=G2G.wxID_RESTCHANGEESD)
     
    14391468           
    14401469        def OnDeleteRestraint(event):
    1441             rows = GetSelectedRows(TorsionRestr.Torsions)
     1470            rows = GetSelectedRows(TorsionRestr.Torsions,'delete',G2frame)
    14421471            G2frame.GetStatusBar().SetStatusText('',1)
    14431472            if not rows:
     1473                G2frame.GetStatusBar().SetStatusText('First select restraints to be deleted',1)
    14441474                return
    1445                 G2frame.GetStatusBar().SetStatusText('First select restraints to be deleted',1)
    14461475            rows.sort()
    14471476            rows.reverse()
     
    14961525            mainSizer.Add(coeffSizer(),1,wx.EXPAND,1)       
    14971526       
     1527        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1528            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    14981529        if len(torsionList):
    14991530            mainSizer.Add(wx.StaticText(TorsionRestr,-1,'Torsion restraints:'),0)
     
    15371568            else:
    15381569                TorsionRestr.Torsions.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1570            for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESTCHANGEESD):
     1571                G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=True)
    15391572            G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    15401573            G2frame.Bind(wx.EVT_MENU, OnChangeEsd, id=G2G.wxID_RESTCHANGEESD)
     
    15651598           
    15661599        def OnDeleteRestraint(event):
    1567             rows = GetSelectedRows(RamaRestr.Ramas)
     1600            rows = GetSelectedRows(RamaRestr.Ramas,'delete',G2frame)
    15681601            G2frame.GetStatusBar().SetStatusText('',1)
    15691602            if not rows:
     
    16491682                for ibad in bad:
    16501683                    del ramaList[ibad]
     1684            for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1685                G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    16511686            if len(ramaList):
    16521687                ramaTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    16631698                else:
    16641699                    RamaRestr.Ramas.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1700                for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESTCHANGEESD):
     1701                    G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=True)
    16651702                G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    16661703                G2frame.Bind(wx.EVT_MENU, OnChangeEsd, id=G2G.wxID_RESTCHANGEESD)
     
    16981735           
    16991736        def OnDeleteRestraint(event):
    1700             #rows = GetSelectedRows()
    1701             rows = ChemComps.GetSelectedRows()
     1737            rows = GetSelectedRows(ChemComps,'delete',G2frame)
     1738            #rows = ChemComps.GetSelectedRows()
    17021739            G2frame.GetStatusBar().SetStatusText('',1)
    17031740            if not rows:
    17041741                G2frame.GetStatusBar().SetStatusText('First select restraints to be deleted',1)
    17051742                return
    1706             rowLabl = ChemComps.GetRowLabelValue(r)
    1707             row = int(rowLabl.split(':')[1])
    1708             if 'Restr' in rowLabl:
    1709                 del chemcompList[row]
    1710             else:
    1711                 term = int(rowLabl.split(':')[2])
     1743            terms = []
     1744            restrs = []
     1745            for r in sorted(rows,reverse=True):
     1746                rowLabl = ChemComps.GetRowLabelValue(r)               
     1747                if 'Restr' in rowLabl:
     1748                    restrs.append(int(rowLabl.split(':')[1]))
     1749                else:
     1750                    terms.append([int(i) for i in rowLabl.split(':')[1:]])
     1751            # delete terms first in case someone deletes a term in a restraint to be deleted
     1752            for row,term in terms:           
    17121753                del chemcompList[row][0][term]
    17131754                del chemcompList[row][1][term]
     1755            for row in restrs:
     1756                del chemcompList[row]
    17141757            UpdateChemcompRestr(chemcompRestData)               
    17151758           
    1716         def OnChangeValue(event):
    1717             rows = GetSelectedRows(ChemComps)
    1718             if not rows:
    1719                 return
    1720             ChemComps.ClearSelection()
    1721             dlg = G2G.SingleFloatDialog(G2frame,'New value',
    1722                 'Enter new value for restraint multiplier',1.0,[-1.e6,1.e6],'%.2f')
    1723             if dlg.ShowModal() == wx.ID_OK:
    1724                 parm = dlg.GetValue()
    1725                 for r in rows:
    1726                     rowLabl = ChemComps.GetRowLabelValue(r)
    1727                     if 'term' in rowLabl:
    1728                         items = rowLabl.split(':')
    1729                         chemcompRestData['Sites'][int(items[1])][1][int(items[2])] = parm
    1730             dlg.Destroy()
    1731             UpdateChemcompRestr(chemcompRestData)               
     1759        # def OnChangeValue(event):
     1760        #     rows = GetSelectedRows(ChemComps)
     1761        #     if not rows:
     1762        #         return
     1763        #     ChemComps.ClearSelection()
     1764        #     dlg = G2G.SingleFloatDialog(G2frame,'New value',
     1765        #         'Enter new value for restraint multiplier',1.0,[-1.e6,1.e6],'%.2f')
     1766        #     if dlg.ShowModal() == wx.ID_OK:
     1767        #         parm = dlg.GetValue()
     1768        #         for r in rows:
     1769        #             rowLabl = ChemComps.GetRowLabelValue(r)
     1770        #             if 'term' in rowLabl:
     1771        #                 items = rowLabl.split(':')
     1772        #                 chemcompRestData['Sites'][int(items[1])][1][int(items[2])] = parm
     1773        #     dlg.Destroy()
     1774        #     UpdateChemcompRestr(chemcompRestData)               
    17321775
    17331776        if ChemCompRestr.GetSizer(): ChemCompRestr.GetSizer().Clear(True)
     
    17391782        mainSizer.Add((5,5),0)
    17401783
     1784        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1785            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    17411786        chemcompList = chemcompRestData['Sites']
    17421787        if len(chemcompList):
     
    17771822                        ChemComps.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
    17781823                    if 'Restr' in ChemComps.GetRowLabelValue(r):
     1824                        ChemComps.SetCellTextColour(r,0,VERY_LIGHT_GREY)
     1825                        ChemComps.SetCellTextColour(r,1,VERY_RED) # make spurious #'s disappear
     1826                        ChemComps.SetCellTextColour(r,2,VERY_RED)
     1827                        ChemComps.SetCellTextColour(r,3,VERY_LIGHT_GREY)
    17791828                        for c in range(4):
    17801829                            ChemComps.SetReadOnly(r,c,True)
    1781                             ChemComps.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
    1782                         for c in [1,2]:
    1783                             ChemComps.SetCellTextColour(r,c,VERY_LIGHT_GREY)
     1830                            ChemComps.SetCellStyle(r,c,VERY_RED,True)
    17841831                    else:
    17851832                        for c in [3,4,5]:
     
    17941841                else:
    17951842                    ChemComps.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1843                G2frame.dataWindow.RestraintEdit.Enable(id=G2G.wxID_RESTDELETE,enable=True)
    17961844                G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    1797                 G2frame.Bind(wx.EVT_MENU, OnChangeValue, id=G2G.wxID_RESRCHANGEVAL)
     1845                #G2frame.Bind(wx.EVT_MENU, OnChangeValue, id=G2G.wxID_RESRCHANGEVAL)
    17981846                mainSizer.Add(wx.StaticText(ChemCompRestr,-1,
    17991847                    'Chemical composition restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1800                     %(chisq,chisq/len(chemcompList))),0,WACV)
    1801                 mainSizer.Add(ChemComps,0,)
     1848                    %(chisq,chisq/len(chemcompList))))
     1849                mainSizer.Add(ChemComps)
    18021850            else:
    18031851                mainSizer.Add(wx.StaticText(ChemCompRestr,-1,'No chemical composition restraints for this phase'),0,)
     
    18101858           
    18111859        def OnDeleteRestraint(event):
    1812             rows = GetSelectedRows(Textures)
     1860            rows = GetSelectedRows(Textures,'delete',G2frame)
    18131861            G2frame.GetStatusBar().SetStatusText('',1)
    18141862            if not rows:
     
    18481896        mainSizer.Add((5,5),0)
    18491897
     1898        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1899            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    18501900        textureList = textureRestData['HKLs']
    18511901        if len(textureList):
     
    18741924            else:
    18751925                Textures.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1926            G2frame.dataWindow.RestraintEdit.Enable(id=G2G.wxID_RESTDELETE,enable=True)
    18761927            G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    18771928            mainSizer.Add(Textures,0,)
     
    19171968        mainSizer.Add(hSizer,0)
    19181969        mainSizer.Add((5,5),0)
     1970        for i in (G2G.wxID_RESTDELETE,G2G.wxID_RESRCHANGEVAL,G2G.wxID_RESTCHANGEESD):
     1971            G2frame.dataWindow.RestraintEdit.Enable(id=i,enable=False)
    19191972        if generalRestData['General']:
    19201973            parmDict = SetupParmDict(G2frame)
Note: See TracChangeset for help on using the changeset viewer.