Changeset 1803


Ignore:
Timestamp:
Apr 22, 2015 4:29:05 PM (9 years ago)
Author:
toby
Message:

fix range selection in G2MultiChoiceDialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIctrls.py

    r1801 r1803  
    10641064            topSizer.Add(wx.StaticText(self,wx.ID_ANY,'Name \nFilter: '),0,wx.ALL|WACV,1)
    10651065            self.filterBox = wx.TextCtrl(self, wx.ID_ANY, size=(80,-1),style=wx.TE_PROCESS_ENTER)
    1066             self.filterBox.Bind(wx.EVT_CHAR,self.onChar)
     1066            self.filterBox.Bind(wx.EVT_TEXT,self.onChar)
    10671067            self.filterBox.Bind(wx.EVT_TEXT_ENTER,self.Filter)
    10681068            topSizer.Add(self.filterBox,0,wx.ALL|WACV,0)
    10691069        Sizer.Add(topSizer,0,wx.ALL|wx.EXPAND,8)
    1070         self.trigger = False
     1070        self.settingRange = False
     1071        self.rangeFirst = None
    10711072        self.clb = wx.CheckListBox(self, wx.ID_ANY, (30,30), wx.DefaultSize, ChoiceList)
    10721073        self.clb.Bind(wx.EVT_CHECKLISTBOX,self.OnCheck)
     
    10791080        # set/toggle buttons
    10801081        if toggle:
    1081             bSizer = wx.BoxSizer(wx.VERTICAL)
     1082            tSizer = wx.FlexGridSizer(cols=2,hgap=5,vgap=5)
    10821083            setBut = wx.Button(self,wx.ID_ANY,'Set All')
    10831084            setBut.Bind(wx.EVT_BUTTON,self._SetAll)
    1084             bSizer.Add(setBut,0,wx.ALIGN_CENTER)
    1085             bSizer.Add((-1,5))
     1085            tSizer.Add(setBut)
    10861086            togBut = wx.Button(self,wx.ID_ANY,'Toggle All')
    10871087            togBut.Bind(wx.EVT_BUTTON,self._ToggleAll)
    1088             bSizer.Add(togBut,0,wx.ALIGN_CENTER)
    1089             Sizer.Add(bSizer,0,wx.LEFT,12)
     1088            tSizer.Add(togBut)
     1089            self.rangeBut = wx.ToggleButton(self,wx.ID_ANY,'Set Range')
     1090            self.rangeBut.Bind(wx.EVT_TOGGLEBUTTON,self.SetRange)
     1091            tSizer.Add(self.rangeBut)           
     1092            self.rangeCapt = wx.StaticText(self,wx.ID_ANY,'')
     1093            tSizer.Add(self.rangeCapt)
     1094            Sizer.Add(tSizer,0,wx.LEFT,12)
    10901095        # OK/Cancel buttons
    10911096        btnsizer = wx.StdDialogButtonSizer()
     
    11041109        self.SetSizer(Sizer)
    11051110        self.CenterOnParent()
     1111
     1112    def SetRange(self,event):
     1113        '''Respond to a press of the Set Range button. Set the range flag and
     1114        the caption next to the button
     1115        '''
     1116        self.settingRange = self.rangeBut.GetValue()
     1117        if self.settingRange:
     1118            self.rangeCapt.SetLabel('Select range start')
     1119        else:
     1120            self.rangeCapt.SetLabel('')           
     1121        self.rangeFirst = None
    11061122       
    11071123    def GetSelections(self):
     
    11421158           
    11431159    def onChar(self,event):
    1144         'for keyboard events. self.trigger is used in self.OnCheck below'
     1160        'Respond to keyboard events in the Filter box'
    11451161        self.OKbtn.Enable(False)
    1146         if event.GetKeyCode() == wx.WXK_SHIFT:
    1147             self.trigger = True
    1148             print 'debug: Shift pressed'
    11491162        if self.timer.IsRunning():
    11501163            self.timer.Stop()
     
    11531166       
    11541167    def OnCheck(self,event):
    1155         '''for CheckListBox events; if Shift key down this sets all unset
    1156             entries below the selected one'''
    1157         if self.trigger:
    1158             id = event.GetSelection()
    1159             name = self.clb.GetString(id)           
    1160             iB = id-1
    1161             if iB < 0:
    1162                 return
    1163             while not self.clb.IsChecked(iB):
    1164                 self.clb.Check(iB)
    1165                 iB -= 1
    1166                 if iB < 0:
    1167                     break
    1168             self.trigger = False
     1168        '''for CheckListBox events; if Set Range is in use, this sets/clears all
     1169        entries in range between start and end according to the value in start.
     1170        Repeated clicks on the start change the checkbox state, but do not trigger
     1171        the range copy.
     1172        The caption next to the button is updated on the first button press.
     1173        '''
     1174        if self.settingRange:
     1175            id = event.GetInt()
     1176            if self.rangeFirst is None:
     1177                name = self.clb.GetString(id)
     1178                self.rangeCapt.SetLabel(name+' to...')
     1179                self.rangeFirst = id
     1180            elif self.rangeFirst == id:
     1181                pass
     1182            else:
     1183                for i in range(min(self.rangeFirst,id), max(self.rangeFirst,id)+1):
     1184                    self.clb.Check(i,self.clb.IsChecked(self.rangeFirst))
     1185                self.rangeBut.SetValue(False)
     1186                self.rangeCapt.SetLabel('')
     1187            return
    11691188       
    11701189    def Filter(self,event):
     1190        '''Read text from filter control and select entries that match. Called by
     1191        Timer after a delay with no input or if Enter is pressed.
     1192        '''
    11711193        if self.timer.IsRunning():
    11721194            self.timer.Stop()
Note: See TracChangeset for help on using the changeset viewer.