Ignore:
Timestamp:
Nov 12, 2022 4:36:04 PM (7 months ago)
Author:
toby
Message:

fix validatedTextCtrl; add sliders for contour thresholds

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIctrlGUI.py

    r5368 r5370  
    728728            self.Refresh()
    729729
     730    def _GetNumValue(self):
     731        'Get and where needed convert string from GetValue into int or float'
     732        try:
     733            val = self.GetValue()
     734            if self.type is int:
     735                val = int(val)
     736            elif self.type is float:
     737                val = float(val)
     738        except:
     739            if self.CIFinput and (val == '?' or val == '.'):
     740                pass
     741            else:
     742                self.invalid = True
     743        return val
     744   
    730745    def ShowStringValidity(self,previousInvalid=True):
    731746        '''Check if input is valid. Anytime the input is
     
    801816            self._setValue(self.result[self.key])
    802817        elif self.result is not None: # show formatted result, as Bob wants
    803             self.result[self.key] = self.GetValue()
     818            self.result[self.key] = self._GetNumValue()
    804819            if not self.invalid: # don't update an invalid expression
    805820                self._setValue(self.result[self.key])
     
    83718386        return None
    83728387
     8388def makeContourSliders(G2frame,Ymax,PlotPatterns,newPlot,plottype):
     8389    '''Create a non-modal dialog for sliders to set contour plot
     8390    intensity thresholds.
     8391    '''
     8392    def updatePlot():
     8393        'updates plot after a change in values'
     8394        wx.CallAfter(PlotPatterns,G2frame,newPlot=newPlot,plotType=plottype)
     8395    def OnSlider(event):
     8396        'respond when min or max slider is moved'
     8397        obj = event.GetEventObject()
     8398        val = obj.GetValue()/100.
     8399        if obj.mode == 'max':
     8400            G2frame.Cmax = val
     8401        else:
     8402            G2frame.Cmin = val
     8403        obj.txt.SetValue(int(Ymax*val))
     8404        updatePlot()
     8405    def OnNewVal(*args,**kwargs):
     8406        'respond when a value is placed in the min or max text box'
     8407        obj = kwargs['tc']
     8408        if obj.mode == 'max':
     8409            val = Range[1]
     8410            G2frame.Cmax = val/Ymax
     8411        else:
     8412            val = Range[0]
     8413            G2frame.Cmin = val/Ymax
     8414        obj.slider.SetValue(int((100*val/Ymax) + 0.5))
     8415        updatePlot()
     8416    # makeContourSliders starts here
     8417    Range = [Ymax*G2frame.Cmin,Ymax*G2frame.Cmax]
     8418    dlg = wx.Dialog(G2frame.plotFrame,style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
     8419    vbox = wx.BoxSizer(wx.VERTICAL)
     8420    vbox.Add((-1,5))
     8421    hbox = wx.BoxSizer(wx.HORIZONTAL)
     8422    hbox.Add((-1,-1),1,wx.EXPAND,1)
     8423    hbox.Add(wx.StaticText(
     8424                dlg,wx.ID_ANY,'Set Contour Intensity Limits'),1,wx.ALL)
     8425    hbox.Add((-1,-1),1,wx.EXPAND,1)
     8426    vbox.Add(hbox)
     8427    vbox.Add((-1,10))
     8428    dlg.slideSizer = wx.FlexGridSizer(2,3,5,5)
     8429    dlg.slideSizer.AddGrowableCol(2)
     8430
     8431    dlg.slideSizer.Add(wx.StaticText(parent=dlg,label=' Min intensity'),0,WACV)
     8432    minSel = wx.Slider(parent=dlg,style=wx.SL_HORIZONTAL,
     8433                           value=int(100*G2frame.Cmin+0.5))
     8434    minSel.Bind(wx.EVT_SLIDER, OnSlider)
     8435    minVal = ValidatedTxtCtrl(dlg,Range,0,xmin=0,
     8436                xmax=Ymax-1, OnLeave=OnNewVal)
     8437    minVal.slider = minSel
     8438    minVal.mode = 'min'
     8439    minSel.txt = minVal
     8440    minSel.mode = 'min'
     8441    dlg.slideSizer.Add(minVal,0,WACV)
     8442    dlg.slideSizer.Add(minSel,0,wx.EXPAND|wx.ALL,3)
     8443
     8444    dlg.slideSizer.Add(wx.StaticText(parent=dlg,label=' Max intensity'),0,WACV)
     8445    maxSel = wx.Slider(parent=dlg,style=wx.SL_HORIZONTAL,
     8446                           value=int(100*G2frame.Cmax+0.5))
     8447    maxSel.Bind(wx.EVT_SLIDER, OnSlider)
     8448    maxVal = ValidatedTxtCtrl(dlg,Range,1,xmin=1,
     8449                xmax=Ymax, OnLeave=OnNewVal)
     8450    maxVal.slider = maxSel
     8451    maxVal.mode = 'max'
     8452    maxSel.txt = maxVal
     8453    maxSel.mode = 'max'
     8454    dlg.slideSizer.Add(maxVal,0,WACV)
     8455    dlg.slideSizer.Add(maxSel,0,wx.EXPAND|wx.ALL,3)
     8456
     8457    vbox.Add(dlg.slideSizer,0,wx.EXPAND,0)
     8458    vbox.Add((-1,15))
     8459
     8460    hbox = wx.BoxSizer(wx.HORIZONTAL)
     8461    hbox.Add((-1,-1),1,wx.EXPAND,1)
     8462    btn = wx.Button(dlg, wx.ID_CLOSE)
     8463    hbox.Add(btn,0,wx.ALL,0)
     8464    btn.Bind(wx.EVT_BUTTON,lambda x: dlg.Destroy())
     8465    hbox.Add((-1,-1),1,wx.EXPAND,1)
     8466    vbox.Add(hbox,0,wx.EXPAND,0)
     8467    vbox.Add((-1,5))
     8468
     8469    dlg.SetSizer(vbox)
     8470    vbox.Fit(dlg)
     8471    wx.CallLater(100,minVal.SetValue,Range[0])
     8472    dlg.Show()
     8473
    83738474if __name__ == '__main__':
    83748475    app = wx.App()
Note: See TracChangeset for help on using the changeset viewer.