@@ -1292,11 +1292,18 @@ def popupSelector(self,event):
12921292 for i in self .choiceDict : self .choiceDict [i ] = False
12931293 self .choiceDict [self .choices [new ]] = True
12941294 self .selected [new ] = True
1295- elif self .choices [0 ] == "all" :
1296- # special handling when 1st item is all: turn on everything
1297- # when all is selected.
1298- if new == 0 :
1299- self .selected [:] = [False ] + (len (self .selected )- 1 )* [True ]
1295+ # elif self.choices[0] == "all":
1296+ # # special handling when 1st item is all: turn on everything
1297+ # # when all is selected.
1298+ # if new == 0:
1299+ # self.selected[:] = [False] + (len(self.selected)-1)*[True]
1300+ # if self.choices[-1] == "(clear)":
1301+ # self.selected[-1] = [False]
1302+ # elif self.choices[-1] == "(clear)":
1303+ # # special handling when last item is all: clear off everything
1304+ # # when that is selected.
1305+ # if new == len:
1306+ # self.selected[:] = (len(self.selected))*[False]
13001307
13011308 menu .Destroy ()
13021309 if self .OnChange : wx .CallAfter (self .OnChange ,** self .kw )
@@ -5009,6 +5016,9 @@ def _onClose(self,event):
50095016 self .EndModal (wx .ID_CANCEL )
50105017
50115018class VirtualVarBox (wx .ListCtrl ):
5019+ '''This is used to construct the parameter list display for viewing
5020+ least squares parameters
5021+ '''
50125022 def __init__ (self , parent ):
50135023 self .parmWin = parent
50145024 #patch (added Oct 2020) convert variable names for parm limits to G2VarObj
@@ -5020,8 +5030,8 @@ def __init__(self, parent):
50205030 )
50215031
50225032 for i ,(lbl ,wid ) in enumerate (zip (
5023- ('#' , "Parameter" , "Ref" , "Value" , "Min" , "Max" , "Explanation" ),
5024- (40 , 125 , 30 , 100 , 75 , 75 , 700 ),)):
5033+ ('#' , "Parameter" , "Ref" , 'Log' , "Value" , "Min" , "Max" , "Explanation" ),
5034+ (40 , 125 , 30 , 30 , 75 , 75 , 75 , 700 ),)):
50255035 self .InsertColumn (i , lbl )
50265036 self .SetColumnWidth (i , wid )
50275037
@@ -5034,6 +5044,7 @@ def __init__(self, parent):
50345044 self .attr1 .SetBackgroundColour ((255 ,255 ,150 ))
50355045
50365046 self .Bind (wx .EVT_LIST_ITEM_SELECTED , self .OnRowSelected )
5047+ self .Bind (wx .EVT_LIST_ITEM_RIGHT_CLICK , self .OnRowRightClick )
50375048
50385049 def SetContents (self ,parent ):
50395050 self .varList = []
@@ -5055,6 +5066,30 @@ def SetContents(self,parent):
50555066 #oldlen = self.GetItemCount()
50565067 self .SetItemCount (len (self .varList ))
50575068
5069+ def OnRowRightClick (self , event , row = None ):
5070+ '''This adds or removes a variable from the list of logged
5071+ paremeters.
5072+
5073+ When a row is right-clicked this seems to be called twice, once
5074+ event.GetIndex() of -1, then OnRowSelected is called and then this
5075+ is called again, but where event.GetIndex() is the row that was
5076+ selected.
5077+ '''
5078+ def RightClickClear ():
5079+ self .RightClick = False
5080+ row = event .GetIndex ()
5081+ self .RightClick = True # inhibit use of OnRowSelected
5082+ if row < 0 : return
5083+ var = self .varList [row ]
5084+ self .parmWin .Controls ['LoggedVars' ] = self .parmWin .Controls .get ('LoggedVars' ,[])
5085+ if var in self .parmWin .Controls ['LoggedVars' ]:
5086+ self .parmWin .Controls ['LoggedVars' ].remove (var )
5087+ else :
5088+ self .parmWin .Controls ['LoggedVars' ].append (var )
5089+ if GSASIIpath .GetConfigValue ('debug' ): print (self .parmWin .Controls ['LoggedVars' ])
5090+ self .parmWin .SendSizeEvent () # redraws the window
5091+ wx .CallAfter (RightClickClear )
5092+
50585093 def OnRowSelected (self , event , row = None ):
50595094 'Creates an edit window when a parameter is selected'
50605095 def ResetFrozen (event ):
@@ -5140,6 +5175,10 @@ def SetWildAfter(d,name,wname,mode):
51405175 self .OnRowSelected (None , row )
51415176
51425177 # start of OnRowSelected
5178+ if getattr (self ,'RightClick' ,False ): # ignore calls generated by right-click
5179+ self .RightClick = False
5180+ return
5181+ self .RightClick = False
51435182 if event is not None :
51445183 row = event .Index
51455184 elif row is None :
@@ -5219,18 +5258,18 @@ def SetWildAfter(d,name,wname,mode):
52195258 subSizer .Add (wx .StaticText (dlg ,wx .ID_ANY ,'Minimum limit' ),0 ,wx .CENTER )
52205259 subSizer .Add (ValidatedTxtCtrl (dlg ,self .parmWin .Controls ['parmMinDict' ],n ,nDig = (10 ,2 ,'g' )),0 ,WACV )
52215260 delMbtn = wx .Button (dlg , wx .ID_ANY ,'Delete' ,style = wx .BU_EXACTFIT )
5222- subSizer .Add ((5 ,- 1 ), 0 , WACV )
5261+ subSizer .Add ((5 ,- 1 ))
52235262 subSizer .Add (delMbtn ,0 ,WACV )
52245263 delMbtn .Bind (wx .EVT_BUTTON , delM )
52255264 if name .split (':' )[1 ]: # is this using a histogram?
5226- subSizer .Add ((5 ,- 1 ), 0 , WACV )
5265+ subSizer .Add ((5 ,- 1 ))
52275266 wild = wx .CheckBox (dlg ,wx .ID_ANY ,label = 'Match all histograms ' )
52285267 wild .SetValue (str (n ).split (':' )[1 ] == '*' )
52295268 wild .Bind (wx .EVT_CHECKBOX ,SetWild )
52305269 wild .hist = True
52315270 subSizer .Add (wild ,0 ,WACV )
52325271 elif len (name .split (':' )) > 3 :
5233- subSizer .Add ((5 ,- 1 ), 0 , WACV )
5272+ subSizer .Add ((5 ,- 1 ))
52345273 wild = wx .CheckBox (dlg ,wx .ID_ANY ,label = 'Match all atoms ' )
52355274 wild .SetValue (str (n ).split (':' )[3 ] == '*' )
52365275 wild .Bind (wx .EVT_CHECKBOX ,SetWild )
@@ -5249,27 +5288,49 @@ def SetWildAfter(d,name,wname,mode):
52495288 subSizer .Add (wx .StaticText (dlg ,wx .ID_ANY ,'Maximum limit' ),0 ,wx .CENTER )
52505289 subSizer .Add (ValidatedTxtCtrl (dlg ,self .parmWin .Controls ['parmMaxDict' ],n ,nDig = (10 ,2 ,'g' )),0 ,WACV )
52515290 delMbtn = wx .Button (dlg , wx .ID_ANY ,'Delete' ,style = wx .BU_EXACTFIT )
5252- subSizer .Add ((5 ,- 1 ), 0 , WACV )
5291+ subSizer .Add ((5 ,- 1 ))
52535292 subSizer .Add (delMbtn ,0 ,WACV )
52545293 delMbtn .Bind (wx .EVT_BUTTON , delM )
52555294 delMbtn .max = True
52565295 if name .split (':' )[1 ]: # is this using a histogram?
5257- subSizer .Add ((5 ,- 1 ), 0 , WACV )
5296+ subSizer .Add ((5 ,- 1 ))
52585297 wild = wx .CheckBox (dlg ,wx .ID_ANY ,label = 'Match all histograms ' )
52595298 wild .SetValue (str (n ).split (':' )[1 ] == '*' )
52605299 wild .Bind (wx .EVT_CHECKBOX ,SetWild )
52615300 wild .max = True
52625301 wild .hist = True
52635302 subSizer .Add (wild ,0 ,WACV )
52645303 elif len (name .split (':' )) > 3 :
5265- subSizer .Add ((5 ,- 1 ), 0 , WACV )
5304+ subSizer .Add ((5 ,- 1 ))
52665305 wild = wx .CheckBox (dlg ,wx .ID_ANY ,label = 'Match all atoms ' )
52675306 wild .SetValue (str (n ).split (':' )[3 ] == '*' )
52685307 wild .Bind (wx .EVT_CHECKBOX ,SetWild )
52695308 wild .max = True
52705309 subSizer .Add (wild ,0 ,WACV )
52715310 mainSizer .Add (subSizer ,0 )
52725311
5312+ self .parmWin .Controls ['LoggedVars' ] = self .parmWin .Controls .get ('LoggedVars' ,[])
5313+ def LogLblButton (button ):
5314+ if name in self .parmWin .Controls ['LoggedVars' ]:
5315+ lbl = 'Remove from Logging'
5316+ else :
5317+ lbl = 'Log var'
5318+ button .SetLabel (lbl )
5319+ def LogAddRemove (event ):
5320+ if name in self .parmWin .Controls ['LoggedVars' ]:
5321+ self .parmWin .Controls ['LoggedVars' ].remove (name )
5322+ else :
5323+ self .parmWin .Controls ['LoggedVars' ].append (name )
5324+ LogLblButton (event .GetEventObject ())
5325+ dlg .Layout ()
5326+ self .parmWin .SendSizeEvent ()
5327+
5328+ mainSizer .Add ((- 1 ,10 ))
5329+ addbtn = wx .Button (dlg , wx .ID_ANY ,'' )
5330+ LogLblButton (addbtn )
5331+ addbtn .Bind (wx .EVT_BUTTON , LogAddRemove )
5332+ mainSizer .Add (addbtn ,0 )
5333+
52735334 btnsizer = wx .StdDialogButtonSizer ()
52745335 OKbtn = wx .Button (dlg , wx .ID_OK )
52755336 OKbtn .SetDefault ()
@@ -5310,6 +5371,18 @@ def OnGetItemText(self, item, col):
53105371 return "C"
53115372 return ""
53125373 elif col == 3 :
5374+ logged = self .parmWin .Controls .get ('LoggedVars' ,[])
5375+ if GSASIIpath .GetConfigValue ('LogAllVars' ) and not logged :
5376+ if name in self .parmWin .varyList :
5377+ if self .parmWin .varyList .index (name ) < 50 :
5378+ return 'A'
5379+ else :
5380+ return ' '
5381+ return ' '
5382+ elif name in logged :
5383+ return 'Y'
5384+ return 'N'
5385+ elif col == 4 :
53135386 if atmParNam : name = atmParNam
53145387 try :
53155388 value = G2fil .FormatSigFigs (self .parmWin .parmDict [name ])
@@ -5318,8 +5391,8 @@ def OnGetItemText(self, item, col):
53185391 except TypeError :
53195392 value = str (self .parmWin .parmDict [name ])+ ' -?' # unexpected
53205393 return value
5321- elif col == 4 or col == 5 : # min/max value
5322- if col == 4 : # min
5394+ elif col == 5 or col == 6 : # min/max value
5395+ if col == 5 : # min
53235396 d = self .parmWin .Controls ['parmMinDict' ]
53245397 else :
53255398 d = self .parmWin .Controls ['parmMaxDict' ]
@@ -5329,7 +5402,7 @@ def OnGetItemText(self, item, col):
53295402 return G2fil .FormatSigFigs (val ,8 )
53305403 except TypeError :
53315404 return "?"
5332- elif col == 6 :
5405+ elif col == 7 :
53335406 v = G2obj .getVarDescr (name )
53345407 if v is not None and v [- 1 ] is not None :
53355408 txt = G2obj .fmtVarDescr (name )
0 commit comments