Changeset 4913


Ignore:
Timestamp:
May 22, 2021 7:13:58 PM (4 months ago)
Author:
toby
Message:

Add mult, divide & incr. options to GridFracEdit?; make GridFracEdit? the default for numeric columns in grids

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIctrlGUI.py

    r4912 r4913  
    45014501        self.SetCellBackgroundColour(r,c,color)
    45024502        self.SetReadOnly(r,c,isReadOnly=readonly)
    4503        
     4503
     4504    def SetTable(self, table, *args, **kwargs):
     4505        '''Overrides the standard SetTable method with one that uses
     4506        GridFractionEditor for all numeric columns (unless useFracEdit
     4507        is false)
     4508        '''
     4509        setFracEdit = kwargs.get('useFracEdit',True)
     4510        if 'useFracEdit' in kwargs: del kwargs['useFracEdit']
     4511        wg.Grid.SetTable(self, table, *args, **kwargs)
     4512        if setFracEdit:
     4513            for i,t in enumerate(table.dataTypes):
     4514                if not t.startswith(wg.GRID_VALUE_FLOAT): continue
     4515                attr = wx.grid.GridCellAttr()
     4516                attr.IncRef()
     4517                attr.SetEditor(GridFractionEditor(self))
     4518                self.SetColAttr(i, attr)
     4519
    45044520    def GetSelection(self):
    45054521        #this is to satisfy structure drawing stuff in G2plt when focus changes
     
    47714787class GridFractionEditor(wg.PyGridCellEditor):
    47724788    '''A grid cell editor class that allows entry of values as fractions as well
    4773     as sine and cosine values [as s() and c()]
     4789    as sine and cosine values [as s() and c(), sin() or sind(), etc]. Any valid
     4790    Python expression will be evaluated.
     4791
     4792    The current value can be incremented, multiplied or divided by prefixing
     4793    an expression by +, * or / respectively.
    47744794    '''
    47754795    def __init__(self,grid):
     
    48124832            changed = True
    48134833            neg = False
     4834            mult = False
     4835            divide = False
     4836            add = False
     4837            if val.startswith('*'):
     4838                mult = True
     4839                val = val[1:]
     4840            elif val.startswith('/'):
     4841                divide = True
     4842                val = val[1:]
     4843            elif val.startswith('+'):
     4844                add = True
     4845                val = val[1:]
    48144846            if val.startswith('-'):
    48154847                neg = True
     
    48244856            val = G2py3.FormulaEval(val)
    48254857            if val is not None:
    4826                 self.nextval = val
     4858                if mult:
     4859                    self.nextval *= val
     4860                elif divide:
     4861                    if val != 0: self.nextval /= val
     4862                elif add:
     4863                    self.nextval += val
     4864                else:
     4865                    self.nextval = val
    48274866            else:
    48284867                return None
  • trunk/GSASIIrestrGUI.py

    r4908 r4913  
    4343WACV = wx.ALIGN_CENTER_VERTICAL
    4444VERY_LIGHT_GREY = wx.Colour(235,235,235)
    45 VERY_RED = wx.Colour(255,0,0)
     45VERY_YELLOW = wx.Colour(255,255,0)
    4646TabSelectionIdDict = {}
    4747
     
    970970                bondList.remove(bondList[row])
    971971            UpdateBondRestr(bondRestData)               
    972            
    973         if BondRestr.GetSizer(): BondRestr.GetSizer().Clear(True)
     972
     973        try:
     974            if BondRestr.GetSizer(): BondRestr.GetSizer().Clear(True)
     975        except:
     976            pass
    974977        mainSizer = wx.BoxSizer(wx.VERTICAL)
    975978        mainSizer.Add((5,5),0)
     
    10261029                Bonds.SetTable(bondTable, True)
    10271030                Bonds.AutoSizeColumns(False)
    1028                 for r in range(len(bondList)):
    1029                     for c in [0,1,4]:
    1030                         Bonds.SetReadOnly(r,c,True)
    1031                         Bonds.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1031                for c in [0,1,4]: # format read-only rows
     1032                    attr = wx.grid.GridCellAttr()
     1033                    attr.IncRef()
     1034                    attr.SetBackgroundColour(VERY_LIGHT_GREY)
     1035                    attr.SetReadOnly(True)
     1036                    Bonds.SetColAttr(c, attr)
    10321037                Bonds.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK,OnRowSelect)
    10331038                if 'phoenix' in wx.version():
     
    11061111            UpdateAngleRestr(angleRestData)               
    11071112           
    1108         if AngleRestr.GetSizer():
    1109             AngleRestr.GetSizer().Clear(True)
     1113        try:
     1114            if AngleRestr.GetSizer():
     1115                AngleRestr.GetSizer().Clear(True)
     1116        except:
     1117            pass
    11101118        mainSizer = wx.BoxSizer(wx.VERTICAL)
    11111119        mainSizer.Add((5,5),0)
     
    11621170                Angles.SetTable(angleTable, True)
    11631171                Angles.AutoSizeColumns(False)
    1164                 for r in range(len(angleList)):
    1165                     for c in [0,1,4]:
    1166                         Angles.SetReadOnly(r,c,True)
    1167                         Angles.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1172                for c in [0,1,4]: # format readonly columns
     1173                    attr = wx.grid.GridCellAttr()
     1174                    attr.IncRef()
     1175                    attr.SetBackgroundColour(VERY_LIGHT_GREY)
     1176                    attr.SetReadOnly(True)
     1177                    Angles.SetColAttr(c, attr)
    11681178                Angles.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK,OnRowSelect)
    11691179                if 'phoenix' in wx.version():
     
    12321242            UpdatePlaneRestr(planeRestData)               
    12331243           
    1234         if PlaneRestr.GetSizer():
    1235             PlaneRestr.GetSizer().Clear(True)
     1244        try:
     1245            if PlaneRestr.GetSizer():
     1246                PlaneRestr.GetSizer().Clear(True)
     1247        except:
     1248            pass
    12361249        mainSizer = wx.BoxSizer(wx.VERTICAL)
    12371250        mainSizer.Add((5,5),0)
     
    13721385            dlg.Destroy()
    13731386            UpdateChiralRestr(chiralRestData)               
    1374                                            
    1375         if ChiralRestr.GetSizer(): ChiralRestr.GetSizer().Clear(True)
     1387
     1388        try:
     1389            if ChiralRestr.GetSizer(): ChiralRestr.GetSizer().Clear(True)
     1390        except:
     1391            pass
    13761392        mainSizer = wx.BoxSizer(wx.VERTICAL)
    13771393        mainSizer.Add((5,5),0)
     
    15131529            return Coeff
    15141530                                           
    1515         if TorsionRestr.GetSizer(): TorsionRestr.GetSizer().Clear(True)
     1531        try:
     1532            if TorsionRestr.GetSizer(): TorsionRestr.GetSizer().Clear(True)
     1533        except:
     1534            pass
    15161535        mainSizer = wx.BoxSizer(wx.VERTICAL)
    15171536        mainSizer.Add((5,5),0)
     
    16441663            return Coeff
    16451664                                                   
    1646         if RamaRestr.GetSizer(): RamaRestr.GetSizer().Clear(True)
     1665        try:
     1666            if RamaRestr.GetSizer(): RamaRestr.GetSizer().Clear(True)
     1667        except:
     1668            pass
    16471669        mainSizer = wx.BoxSizer(wx.VERTICAL)
    16481670        mainSizer.Add((5,5),0)
     
    17741796        #     UpdateChemcompRestr(chemcompRestData)               
    17751797
    1776         if ChemCompRestr.GetSizer(): ChemCompRestr.GetSizer().Clear(True)
     1798        try:
     1799            if ChemCompRestr.GetSizer(): ChemCompRestr.GetSizer().Clear(True)
     1800        except:
     1801            pass
    17771802        mainSizer = wx.BoxSizer(wx.VERTICAL)
    17781803        mainSizer.Add((5,5),0)
     
    18031828                        table.append([atom,mf,fr,clc,'',''])
    18041829                        rowLabels.append('term:'+str(i)+':'+str(iatm))
    1805                     table.append(['Sum','','',np.sum(calcs),obs,esd])
     1830                    table.append(['(Sum)','','',np.sum(calcs),obs,esd])
    18061831                    rowLabels.append('Restr:'+str(i))
    18071832                except KeyError:
     
    18221847                        ChemComps.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
    18231848                    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)
    18281849                        for c in range(4):
    18291850                            ChemComps.SetReadOnly(r,c,True)
    1830                             ChemComps.SetCellStyle(r,c,VERY_RED,True)
     1851                            ChemComps.SetCellStyle(r,c,VERY_YELLOW,True)
     1852                        ChemComps.SetCellTextColour(r,1,VERY_YELLOW) # make spurious #'s disappear
     1853                        ChemComps.SetCellTextColour(r,2,VERY_YELLOW)
    18311854                    else:
    18321855                        for c in [3,4,5]:
     
    18871910            wx.CallAfter(UpdateTextureRestr,textureRestData)               
    18881911
    1889         if TextureRestr.GetSizer(): TextureRestr.GetSizer().Clear(True)
     1912        try:
     1913            if TextureRestr.GetSizer(): TextureRestr.GetSizer().Clear(True)
     1914        except:
     1915            pass
    18901916        mainSizer = wx.BoxSizer(wx.VERTICAL)
    18911917        mainSizer.Add((5,5),0)
     
    19521978            del restrData['General']['General'][n]
    19531979            wx.CallAfter(UpdateGeneralRestr,restrData['General'])
    1954            
    1955         if GeneralRestr.GetSizer(): GeneralRestr.GetSizer().Clear(True)
     1980
     1981        try:
     1982            if GeneralRestr.GetSizer(): GeneralRestr.GetSizer().Clear(True)
     1983        except:
     1984            pass
    19561985        mainSizer = wx.BoxSizer(wx.VERTICAL)
    19571986        mainSizer.Add((5,5),0)
Note: See TracChangeset for help on using the changeset viewer.