Changeset 1770


Ignore:
Timestamp:
Mar 30, 2015 1:39:46 PM (7 years ago)
Author:
vondreele
Message:

moved MultipleChoicesDialog? and SingleChoiceDialog? from G2grid to G2ctrls

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1769 r1770  
    28552855#            if ifHKLF: TextList.insert(1,'All HKLF')
    28562856#            if ifPDF: TextList.insert(1,'All PDF')               
    2857             dlg = G2gd.G2MultiChoiceDialog(self, 'Which data to delete?', 'Delete data', TextList, wx.CHOICEDLG_STYLE)
     2857            dlg = G2G.G2MultiChoiceDialog(self, 'Which data to delete?', 'Delete data', TextList, wx.CHOICEDLG_STYLE)
    28582858            try:
    28592859                if dlg.ShowModal() == wx.ID_OK:
  • trunk/GSASIIIO.py

    r1762 r1770  
    13941394        # select one or more from a from list
    13951395        choices = [i.filename for i in zinfo]
    1396         dlg = G2gd.G2MultiChoiceDialog(parent,'Select file(s) to extract from zip file '+str(filename),
     1396        dlg = G2G.G2MultiChoiceDialog(parent,'Select file(s) to extract from zip file '+str(filename),
    13971397            'Choose file(s)',choices)
    13981398        if dlg.ShowModal() == wx.ID_OK:
  • trunk/GSASIIconstrGUI.py

    r1657 r1770  
    445445            fmt = "{:"+str(l1)+"s} {:"+str(l2)+"s} {:s}"
    446446            atchoice = [fmt.format(*i) for i in choices]
    447             dlg = G2gd.G2MultiChoiceDialog(
     447            dlg = G2G.G2MultiChoiceDialog(
    448448                G2frame.dataFrame,legend,
    449449                'Constrain '+str(FrstVarb)+' with...',atchoice,
     
    650650        #varListlbl = ["("+i+") "+G2obj.fmtVarDescr(i) for i in varList]
    651651        legend = "Select variables to hold (Will not be varied, even if vary flag is set)"
    652         dlg = G2gd.G2MultiChoiceDialog(
     652        dlg = G2G.G2MultiChoiceDialog(
    653653            G2frame.dataFrame,
    654654            legend,title1,varListlbl,toggle=False,size=(625,400),monoFont=True)
     
    715715        fmt = "{:"+str(l1)+"s} {:"+str(l2)+"s} {:s}"
    716716        varListlbl = [fmt.format(i,*G2obj.VarDescr(i)) for i in varList]       
    717         dlg = G2gd.G2SingleChoiceDialog(G2frame.dataFrame,'Select 1st variable:',
     717        dlg = G2G.G2SingleChoiceDialog(G2frame.dataFrame,'Select 1st variable:',
    718718                                      title1,varListlbl,
    719719                                      monoFont=True,size=(625,400))
  • trunk/GSASIIctrls.py

    r1729 r1770  
    10081008
    10091009################################################################################
    1010 ####
    1011 ################################################################################
     1010#### Multichoice Dialog with set all, toggle & filter options
     1011################################################################################
     1012class G2MultiChoiceDialog(wx.Dialog):
     1013    '''A dialog similar to MultiChoiceDialog except that buttons are
     1014    added to set all choices and to toggle all choices.
     1015
     1016    :param wx.Frame ParentFrame: reference to parent frame
     1017    :param str title: heading above list of choices
     1018    :param str header: Title to place on window frame
     1019    :param list ChoiceList: a list of choices where one will be selected
     1020    :param bool toggle: If True (default) the toggle and select all buttons
     1021      are displayed
     1022    :param bool monoFont: If False (default), use a variable-spaced font;
     1023      if True use a equally-spaced font.
     1024    :param bool filterBox: If True (default) an input widget is placed on
     1025      the window and only entries matching the entered text are shown.
     1026    :param kw: optional keyword parameters for the wx.Dialog may
     1027      be included such as size [which defaults to `(320,310)`] and
     1028      style (which defaults to `wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.CENTRE| wx.OK | wx.CANCEL`);
     1029      note that `wx.OK` and `wx.CANCEL` controls
     1030      the presence of the eponymous buttons in the dialog.
     1031    :returns: the name of the created dialog 
     1032    '''
     1033    def __init__(self,parent, title, header, ChoiceList, toggle=True,
     1034                 monoFont=False, filterBox=True, **kw):
     1035        # process keyword parameters, notably style
     1036        options = {'size':(320,310), # default Frame keywords
     1037                   'style':wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.CENTRE| wx.OK | wx.CANCEL,
     1038                   }
     1039        options.update(kw)
     1040        self.ChoiceList = ChoiceList # list of choices (list of str values)
     1041        self.Selections = len(self.ChoiceList) * [False,] # selection status for each choice (list of bools)
     1042        self.filterlist = range(len(self.ChoiceList)) # list of the choice numbers that have been filtered (list of int indices)
     1043        if options['style'] & wx.OK:
     1044            useOK = True
     1045            options['style'] ^= wx.OK
     1046        else:
     1047            useOK = False
     1048        if options['style'] & wx.CANCEL:
     1049            useCANCEL = True
     1050            options['style'] ^= wx.CANCEL
     1051        else:
     1052            useCANCEL = False       
     1053        # create the dialog frame
     1054        wx.Dialog.__init__(self,parent,wx.ID_ANY,header,**options)
     1055        # fill the dialog
     1056        Sizer = wx.BoxSizer(wx.VERTICAL)
     1057        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     1058        topSizer.Add(
     1059            wx.StaticText(self,wx.ID_ANY,title,size=(-1,35)),
     1060            1,wx.ALL|wx.EXPAND|WACV,1)
     1061        if filterBox:
     1062            self.timer = wx.Timer()
     1063            self.timer.Bind(wx.EVT_TIMER,self.Filter)
     1064            topSizer.Add(wx.StaticText(self,wx.ID_ANY,'Name \nFilter: '),0,wx.ALL|WACV,1)
     1065            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)
     1067            self.filterBox.Bind(wx.EVT_TEXT_ENTER,self.Filter)
     1068            topSizer.Add(self.filterBox,0,wx.ALL|WACV,0)
     1069        Sizer.Add(topSizer,0,wx.ALL|wx.EXPAND,8)
     1070        self.trigger = False
     1071        self.clb = wx.CheckListBox(self, wx.ID_ANY, (30,30), wx.DefaultSize, ChoiceList)
     1072        self.clb.Bind(wx.EVT_CHECKLISTBOX,self.OnCheck)
     1073        if monoFont:
     1074            font1 = wx.Font(self.clb.GetFont().GetPointSize(),
     1075                            wx.MODERN, wx.NORMAL, wx.NORMAL, False)
     1076            self.clb.SetFont(font1)
     1077        Sizer.Add(self.clb,1,wx.LEFT|wx.RIGHT|wx.EXPAND,10)
     1078        Sizer.Add((-1,10))
     1079        # set/toggle buttons
     1080        if toggle:
     1081            bSizer = wx.BoxSizer(wx.VERTICAL)
     1082            setBut = wx.Button(self,wx.ID_ANY,'Set All')
     1083            setBut.Bind(wx.EVT_BUTTON,self._SetAll)
     1084            bSizer.Add(setBut,0,wx.ALIGN_CENTER)
     1085            bSizer.Add((-1,5))
     1086            togBut = wx.Button(self,wx.ID_ANY,'Toggle All')
     1087            togBut.Bind(wx.EVT_BUTTON,self._ToggleAll)
     1088            bSizer.Add(togBut,0,wx.ALIGN_CENTER)
     1089            Sizer.Add(bSizer,0,wx.LEFT,12)
     1090        # OK/Cancel buttons
     1091        btnsizer = wx.StdDialogButtonSizer()
     1092        if useOK:
     1093            self.OKbtn = wx.Button(self, wx.ID_OK)
     1094            self.OKbtn.SetDefault()
     1095            btnsizer.AddButton(self.OKbtn)
     1096        if useCANCEL:
     1097            btn = wx.Button(self, wx.ID_CANCEL)
     1098            btnsizer.AddButton(btn)
     1099        btnsizer.Realize()
     1100        Sizer.Add((-1,5))
     1101        Sizer.Add(btnsizer,0,wx.ALIGN_RIGHT,50)
     1102        Sizer.Add((-1,20))
     1103        # OK done, let's get outa here
     1104        self.SetSizer(Sizer)
     1105        self.CenterOnParent()
     1106       
     1107    def GetSelections(self):
     1108        'Returns a list of the indices for the selected choices'
     1109        # update self.Selections with settings for displayed items
     1110        for i in range(len(self.filterlist)):
     1111            self.Selections[self.filterlist[i]] = self.clb.IsChecked(i)
     1112        # return all selections, shown or hidden
     1113        return [i for i in range(len(self.Selections)) if self.Selections[i]]
     1114       
     1115    def SetSelections(self,selList):
     1116        '''Sets the selection indices in selList as selected. Resets any previous
     1117        selections for compatibility with wx.MultiChoiceDialog. Note that
     1118        the state for only the filtered items is shown.
     1119
     1120        :param list selList: indices of items to be selected. These indices
     1121          are referenced to the order in self.ChoiceList
     1122        '''
     1123        self.Selections = len(self.ChoiceList) * [False,] # reset selections
     1124        for sel in selList:
     1125            self.Selections[sel] = True
     1126        self._ShowSelections()
     1127
     1128    def _ShowSelections(self):
     1129        'Show the selection state for displayed items'
     1130        self.clb.SetChecked(
     1131            [i for i in range(len(self.filterlist)) if self.Selections[self.filterlist[i]]]
     1132            ) # Note anything previously checked will be cleared.
     1133           
     1134    def _SetAll(self,event):
     1135        'Set all viewed choices on'
     1136        self.clb.SetChecked(range(len(self.filterlist)))
     1137       
     1138    def _ToggleAll(self,event):
     1139        'flip the state of all viewed choices'
     1140        for i in range(len(self.filterlist)):
     1141            self.clb.Check(i,not self.clb.IsChecked(i))
     1142           
     1143    def onChar(self,event):
     1144        'for keyboard events. self.trigger is used in self.OnCheck below'
     1145        self.OKbtn.Enable(False)
     1146        if event.GetKeyCode() == wx.WXK_SHIFT:
     1147            self.trigger = True
     1148        if self.timer.IsRunning():
     1149            self.timer.Stop()
     1150        self.timer.Start(1000,oneShot=True)
     1151        event.Skip()
     1152       
     1153    def OnCheck(self,event):
     1154        '''for CheckListBox events; if Shift key down this sets all unset
     1155            entries below the selected one'''
     1156        if self.trigger:
     1157            id = event.GetSelection()
     1158            name = self.clb.GetString(id)           
     1159            iB = id-1
     1160            if iB < 0:
     1161                return
     1162            while not self.clb.IsChecked(iB):
     1163                self.clb.Check(iB)
     1164                iB -= 1
     1165                if iB < 0:
     1166                    break
     1167        self.trigger = not self.trigger
     1168       
     1169    def Filter(self,event):
     1170        if self.timer.IsRunning():
     1171            self.timer.Stop()
     1172        self.GetSelections() # record current selections
     1173        txt = self.filterBox.GetValue()
     1174        self.clb.Clear()
     1175       
     1176        self.Update()
     1177        self.filterlist = []
     1178        if txt:
     1179            txt = txt.lower()
     1180            ChoiceList = []
     1181            for i,item in enumerate(self.ChoiceList):
     1182                if item.lower().find(txt) != -1:
     1183                    ChoiceList.append(item)
     1184                    self.filterlist.append(i)
     1185        else:
     1186            self.filterlist = range(len(self.ChoiceList))
     1187            ChoiceList = self.ChoiceList
     1188        self.clb.AppendItems(ChoiceList)
     1189        self._ShowSelections()
     1190        self.OKbtn.Enable(True)
     1191
    10121192def SelectEdit1Var(G2frame,array,labelLst,elemKeysLst,dspLst,refFlgElem):
    10131193    '''Select a variable from a list, then edit it and select histograms
     
    11831363            array.update(saveArray)
    11841364        dlg.Destroy()
     1365
     1366################################################################################
     1367#### Single choice Dialog with set all, toggle & filter options
     1368################################################################################
     1369class G2SingleChoiceDialog(wx.Dialog):
     1370    '''A dialog similar to wx.SingleChoiceDialog except that a filter can be
     1371    added.
     1372
     1373    :param wx.Frame ParentFrame: reference to parent frame
     1374    :param str title: heading above list of choices
     1375    :param str header: Title to place on window frame
     1376    :param list ChoiceList: a list of choices where one will be selected
     1377    :param bool monoFont: If False (default), use a variable-spaced font;
     1378      if True use a equally-spaced font.
     1379    :param bool filterBox: If True (default) an input widget is placed on
     1380      the window and only entries matching the entered text are shown.
     1381    :param kw: optional keyword parameters for the wx.Dialog may
     1382      be included such as size [which defaults to `(320,310)`] and
     1383      style (which defaults to ``wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.CENTRE | wx.OK | wx.CANCEL``);
     1384      note that ``wx.OK`` and ``wx.CANCEL`` controls
     1385      the presence of the eponymous buttons in the dialog.
     1386    :returns: the name of the created dialog
     1387    '''
     1388    def __init__(self,parent, title, header, ChoiceList,
     1389                 monoFont=False, filterBox=True, **kw):
     1390        # process keyword parameters, notably style
     1391        options = {'size':(320,310), # default Frame keywords
     1392                   'style':wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.CENTRE| wx.OK | wx.CANCEL,
     1393                   }
     1394        options.update(kw)
     1395        self.ChoiceList = ChoiceList
     1396        self.filterlist = range(len(self.ChoiceList))
     1397        if options['style'] & wx.OK:
     1398            useOK = True
     1399            options['style'] ^= wx.OK
     1400        else:
     1401            useOK = False
     1402        if options['style'] & wx.CANCEL:
     1403            useCANCEL = True
     1404            options['style'] ^= wx.CANCEL
     1405        else:
     1406            useCANCEL = False       
     1407        # create the dialog frame
     1408        wx.Dialog.__init__(self,parent,wx.ID_ANY,header,**options)
     1409        # fill the dialog
     1410        Sizer = wx.BoxSizer(wx.VERTICAL)
     1411        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     1412        topSizer.Add(
     1413            wx.StaticText(self,wx.ID_ANY,title,size=(-1,35)),
     1414            1,wx.ALL|wx.EXPAND|WACV,1)
     1415        if filterBox:
     1416            self.timer = wx.Timer()
     1417            self.timer.Bind(wx.EVT_TIMER,self.Filter)
     1418            topSizer.Add(wx.StaticText(self,wx.ID_ANY,'Filter: '),0,wx.ALL,1)
     1419            self.filterBox = wx.TextCtrl(self, wx.ID_ANY, size=(80,-1),
     1420                                         style=wx.TE_PROCESS_ENTER)
     1421            self.filterBox.Bind(wx.EVT_CHAR,self.onChar)
     1422            self.filterBox.Bind(wx.EVT_TEXT_ENTER,self.Filter)
     1423        topSizer.Add(self.filterBox,0,wx.ALL,0)
     1424        Sizer.Add(topSizer,0,wx.ALL|wx.EXPAND,8)
     1425        self.clb = wx.ListBox(self, wx.ID_ANY, (30,30), wx.DefaultSize, ChoiceList)
     1426        self.clb.Bind(wx.EVT_LEFT_DCLICK,self.onDoubleClick)
     1427        if monoFont:
     1428            font1 = wx.Font(self.clb.GetFont().GetPointSize(),
     1429                            wx.MODERN, wx.NORMAL, wx.NORMAL, False)
     1430            self.clb.SetFont(font1)
     1431        Sizer.Add(self.clb,1,wx.LEFT|wx.RIGHT|wx.EXPAND,10)
     1432        Sizer.Add((-1,10))
     1433        # OK/Cancel buttons
     1434        btnsizer = wx.StdDialogButtonSizer()
     1435        if useOK:
     1436            self.OKbtn = wx.Button(self, wx.ID_OK)
     1437            self.OKbtn.SetDefault()
     1438            btnsizer.AddButton(self.OKbtn)
     1439        if useCANCEL:
     1440            btn = wx.Button(self, wx.ID_CANCEL)
     1441            btnsizer.AddButton(btn)
     1442        btnsizer.Realize()
     1443        Sizer.Add((-1,5))
     1444        Sizer.Add(btnsizer,0,wx.ALIGN_RIGHT,50)
     1445        Sizer.Add((-1,20))
     1446        # OK done, let's get outa here
     1447        self.SetSizer(Sizer)
     1448    def GetSelection(self):
     1449        'Returns the index of the selected choice'
     1450        i = self.clb.GetSelection()
     1451        if i < 0 or i >= len(self.filterlist):
     1452            return wx.NOT_FOUND
     1453        return self.filterlist[i]
     1454    def onChar(self,event):
     1455        self.OKbtn.Enable(False)
     1456        if self.timer.IsRunning():
     1457            self.timer.Stop()
     1458        self.timer.Start(1000,oneShot=True)
     1459        event.Skip()
     1460    def Filter(self,event):
     1461        if self.timer.IsRunning():
     1462            self.timer.Stop()
     1463        txt = self.filterBox.GetValue()
     1464        self.clb.Clear()
     1465        self.Update()
     1466        self.filterlist = []
     1467        if txt:
     1468            txt = txt.lower()
     1469            ChoiceList = []
     1470            for i,item in enumerate(self.ChoiceList):
     1471                if item.lower().find(txt) != -1:
     1472                    ChoiceList.append(item)
     1473                    self.filterlist.append(i)
     1474        else:
     1475            self.filterlist = range(len(self.ChoiceList))
     1476            ChoiceList = self.ChoiceList
     1477        self.clb.AppendItems(ChoiceList)
     1478        self.OKbtn.Enable(True)
     1479    def onDoubleClick(self,event):
     1480        self.EndModal(wx.ID_OK)
    11851481
    11861482################################################################################
  • trunk/GSASIIddataGUI.py

    r1731 r1770  
    3434import GSASIIpwd as G2pwd
    3535import GSASIIphsGUI as G2phsGUI
     36import GSASIIctrls as G2G
    3637import numpy as np
    3738
     
    166167        keyList = sorted(UseList.keys())
    167168        if UseList:
    168             dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Copy parameters',
     169            dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 'Copy parameters',
    169170                'Copy parameters to which histograms?',
    170171                keyList)
     
    211212        keyList = sorted(UseList.keys())
    212213        if UseList:
    213             dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Copy parameters',
     214            dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 'Copy parameters',
    214215                'Copy parameters to which histograms?',
    215216                keyList)
  • trunk/GSASIIexprGUI.py

    r1627 r1770  
    573573        varListlbl = [fmt.format(i,*G2obj.VarDescr(i)) for i in parmList]
    574574
    575         dlg = G2gd.G2SingleChoiceDialog(
     575        dlg = G2G.G2SingleChoiceDialog(
    576576            self,'Select GSAS-II variable for '+str(var)+':',
    577577            'Select variable',
  • trunk/GSASIIgrid.py

    r1699 r1770  
    1414Note that a number of routines here should be moved to GSASIIctrls eventually, such as
    1515G2LoggedButton, EnumSelector, G2ChoiceButton, SingleFloatDialog, SingleStringDialog,
    16 MultiStringDialog, G2MultiChoiceDialog, G2SingleChoiceDialog, G2ColumnIDDialog, ItemSelector, GridFractionEditor
     16MultiStringDialog, G2ColumnIDDialog, ItemSelector, GridFractionEditor
    1717
    1818Probably SGMessageBox, SymOpDialog, DisAglDialog, too.
     
    746746        '''
    747747        return self.values
    748 
    749 ################################################################################
    750 
    751 class G2MultiChoiceDialog(wx.Dialog):
    752     '''A dialog similar to MultiChoiceDialog except that buttons are
    753     added to set all choices and to toggle all choices.
    754 
    755     :param wx.Frame ParentFrame: reference to parent frame
    756     :param str title: heading above list of choices
    757     :param str header: Title to place on window frame
    758     :param list ChoiceList: a list of choices where one will be selected
    759     :param bool toggle: If True (default) the toggle and select all buttons
    760       are displayed
    761     :param bool monoFont: If False (default), use a variable-spaced font;
    762       if True use a equally-spaced font.
    763     :param bool filterBox: If True (default) an input widget is placed on
    764       the window and only entries matching the entered text are shown.
    765     :param kw: optional keyword parameters for the wx.Dialog may
    766       be included such as size [which defaults to `(320,310)`] and
    767       style (which defaults to `wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.CENTRE| wx.OK | wx.CANCEL`);
    768       note that `wx.OK` and `wx.CANCEL` controls
    769       the presence of the eponymous buttons in the dialog.
    770     :returns: the name of the created dialog 
    771     '''
    772     def __init__(self,parent, title, header, ChoiceList, toggle=True,
    773                  monoFont=False, filterBox=True, **kw):
    774         # process keyword parameters, notably style
    775         options = {'size':(320,310), # default Frame keywords
    776                    'style':wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.CENTRE| wx.OK | wx.CANCEL,
    777                    }
    778         options.update(kw)
    779         self.ChoiceList = ChoiceList # list of choices (list of str values)
    780         self.Selections = len(self.ChoiceList) * [False,] # selection status for each choice (list of bools)
    781         self.filterlist = range(len(self.ChoiceList)) # list of the choice numbers that have been filtered (list of int indices)
    782         if options['style'] & wx.OK:
    783             useOK = True
    784             options['style'] ^= wx.OK
    785         else:
    786             useOK = False
    787         if options['style'] & wx.CANCEL:
    788             useCANCEL = True
    789             options['style'] ^= wx.CANCEL
    790         else:
    791             useCANCEL = False       
    792         # create the dialog frame
    793         wx.Dialog.__init__(self,parent,wx.ID_ANY,header,**options)
    794         # fill the dialog
    795         Sizer = wx.BoxSizer(wx.VERTICAL)
    796         topSizer = wx.BoxSizer(wx.HORIZONTAL)
    797         topSizer.Add(
    798             wx.StaticText(self,wx.ID_ANY,title,size=(-1,35)),
    799             1,wx.ALL|wx.EXPAND|WACV,1)
    800         if filterBox:
    801             self.timer = wx.Timer()
    802             self.timer.Bind(wx.EVT_TIMER,self.Filter)
    803             topSizer.Add(wx.StaticText(self,wx.ID_ANY,'Name \nFilter: '),0,wx.ALL|WACV,1)
    804             self.filterBox = wx.TextCtrl(self, wx.ID_ANY, size=(80,-1),style=wx.TE_PROCESS_ENTER)
    805             self.filterBox.Bind(wx.EVT_CHAR,self.onChar)
    806             self.filterBox.Bind(wx.EVT_TEXT_ENTER,self.Filter)
    807             topSizer.Add(self.filterBox,0,wx.ALL|WACV,0)
    808         Sizer.Add(topSizer,0,wx.ALL|wx.EXPAND,8)
    809         self.trigger = False
    810         self.clb = wx.CheckListBox(self, wx.ID_ANY, (30,30), wx.DefaultSize, ChoiceList)
    811         self.clb.Bind(wx.EVT_CHECKLISTBOX,self.OnCheck)
    812         if monoFont:
    813             font1 = wx.Font(self.clb.GetFont().GetPointSize(),
    814                             wx.MODERN, wx.NORMAL, wx.NORMAL, False)
    815             self.clb.SetFont(font1)
    816         Sizer.Add(self.clb,1,wx.LEFT|wx.RIGHT|wx.EXPAND,10)
    817         Sizer.Add((-1,10))
    818         # set/toggle buttons
    819         if toggle:
    820             bSizer = wx.BoxSizer(wx.VERTICAL)
    821             setBut = wx.Button(self,wx.ID_ANY,'Set All')
    822             setBut.Bind(wx.EVT_BUTTON,self._SetAll)
    823             bSizer.Add(setBut,0,wx.ALIGN_CENTER)
    824             bSizer.Add((-1,5))
    825             togBut = wx.Button(self,wx.ID_ANY,'Toggle All')
    826             togBut.Bind(wx.EVT_BUTTON,self._ToggleAll)
    827             bSizer.Add(togBut,0,wx.ALIGN_CENTER)
    828             Sizer.Add(bSizer,0,wx.LEFT,12)
    829         # OK/Cancel buttons
    830         btnsizer = wx.StdDialogButtonSizer()
    831         if useOK:
    832             self.OKbtn = wx.Button(self, wx.ID_OK)
    833             self.OKbtn.SetDefault()
    834             btnsizer.AddButton(self.OKbtn)
    835         if useCANCEL:
    836             btn = wx.Button(self, wx.ID_CANCEL)
    837             btnsizer.AddButton(btn)
    838         btnsizer.Realize()
    839         Sizer.Add((-1,5))
    840         Sizer.Add(btnsizer,0,wx.ALIGN_RIGHT,50)
    841         Sizer.Add((-1,20))
    842         # OK done, let's get outa here
    843         self.SetSizer(Sizer)
    844         self.CenterOnParent()
    845        
    846     def GetSelections(self):
    847         'Returns a list of the indices for the selected choices'
    848         # update self.Selections with settings for displayed items
    849         for i in range(len(self.filterlist)):
    850             self.Selections[self.filterlist[i]] = self.clb.IsChecked(i)
    851         # return all selections, shown or hidden
    852         return [i for i in range(len(self.Selections)) if self.Selections[i]]
    853        
    854     def SetSelections(self,selList):
    855         '''Sets the selection indices in selList as selected. Resets any previous
    856         selections for compatibility with wx.MultiChoiceDialog. Note that
    857         the state for only the filtered items is shown.
    858 
    859         :param list selList: indices of items to be selected. These indices
    860           are referenced to the order in self.ChoiceList
    861         '''
    862         self.Selections = len(self.ChoiceList) * [False,] # reset selections
    863         for sel in selList:
    864             self.Selections[sel] = True
    865         self._ShowSelections()
    866 
    867     def _ShowSelections(self):
    868         'Show the selection state for displayed items'
    869         self.clb.SetChecked(
    870             [i for i in range(len(self.filterlist)) if self.Selections[self.filterlist[i]]]
    871             ) # Note anything previously checked will be cleared.
    872            
    873     def _SetAll(self,event):
    874         'Set all viewed choices on'
    875         self.clb.SetChecked(range(len(self.filterlist)))
    876        
    877     def _ToggleAll(self,event):
    878         'flip the state of all viewed choices'
    879         for i in range(len(self.filterlist)):
    880             self.clb.Check(i,not self.clb.IsChecked(i))
    881            
    882     def onChar(self,event):
    883         'for keyboard events. self.trigger is used in self.OnCheck below'
    884         self.OKbtn.Enable(False)
    885         if event.GetKeyCode() == wx.WXK_SHIFT:
    886             self.trigger = True
    887         if self.timer.IsRunning():
    888             self.timer.Stop()
    889         self.timer.Start(1000,oneShot=True)
    890         event.Skip()
    891        
    892     def OnCheck(self,event):
    893         '''for CheckListBox events; if Shift key down this sets all unset
    894             entries below the selected one'''
    895         if self.trigger:
    896             id = event.GetSelection()
    897             name = self.clb.GetString(id)           
    898             iB = id-1
    899             if iB < 0:
    900                 return
    901             while not self.clb.IsChecked(iB):
    902                 self.clb.Check(iB)
    903                 iB -= 1
    904                 if iB < 0:
    905                     break
    906         self.trigger = not self.trigger
    907        
    908     def Filter(self,event):
    909         if self.timer.IsRunning():
    910             self.timer.Stop()
    911         self.GetSelections() # record current selections
    912         txt = self.filterBox.GetValue()
    913         self.clb.Clear()
    914        
    915         self.Update()
    916         self.filterlist = []
    917         if txt:
    918             txt = txt.lower()
    919             ChoiceList = []
    920             for i,item in enumerate(self.ChoiceList):
    921                 if item.lower().find(txt) != -1:
    922                     ChoiceList.append(item)
    923                     self.filterlist.append(i)
    924         else:
    925             self.filterlist = range(len(self.ChoiceList))
    926             ChoiceList = self.ChoiceList
    927         self.clb.AppendItems(ChoiceList)
    928         self._ShowSelections()
    929         self.OKbtn.Enable(True)
    930 
    931 ################################################################################
    932 
    933 class G2SingleChoiceDialog(wx.Dialog):
    934     '''A dialog similar to wx.SingleChoiceDialog except that a filter can be
    935     added.
    936 
    937     :param wx.Frame ParentFrame: reference to parent frame
    938     :param str title: heading above list of choices
    939     :param str header: Title to place on window frame
    940     :param list ChoiceList: a list of choices where one will be selected
    941     :param bool monoFont: If False (default), use a variable-spaced font;
    942       if True use a equally-spaced font.
    943     :param bool filterBox: If True (default) an input widget is placed on
    944       the window and only entries matching the entered text are shown.
    945     :param kw: optional keyword parameters for the wx.Dialog may
    946       be included such as size [which defaults to `(320,310)`] and
    947       style (which defaults to ``wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.CENTRE | wx.OK | wx.CANCEL``);
    948       note that ``wx.OK`` and ``wx.CANCEL`` controls
    949       the presence of the eponymous buttons in the dialog.
    950     :returns: the name of the created dialog
    951     '''
    952     def __init__(self,parent, title, header, ChoiceList,
    953                  monoFont=False, filterBox=True, **kw):
    954         # process keyword parameters, notably style
    955         options = {'size':(320,310), # default Frame keywords
    956                    'style':wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.CENTRE| wx.OK | wx.CANCEL,
    957                    }
    958         options.update(kw)
    959         self.ChoiceList = ChoiceList
    960         self.filterlist = range(len(self.ChoiceList))
    961         if options['style'] & wx.OK:
    962             useOK = True
    963             options['style'] ^= wx.OK
    964         else:
    965             useOK = False
    966         if options['style'] & wx.CANCEL:
    967             useCANCEL = True
    968             options['style'] ^= wx.CANCEL
    969         else:
    970             useCANCEL = False       
    971         # create the dialog frame
    972         wx.Dialog.__init__(self,parent,wx.ID_ANY,header,**options)
    973         # fill the dialog
    974         Sizer = wx.BoxSizer(wx.VERTICAL)
    975         topSizer = wx.BoxSizer(wx.HORIZONTAL)
    976         topSizer.Add(
    977             wx.StaticText(self,wx.ID_ANY,title,size=(-1,35)),
    978             1,wx.ALL|wx.EXPAND|WACV,1)
    979         if filterBox:
    980             self.timer = wx.Timer()
    981             self.timer.Bind(wx.EVT_TIMER,self.Filter)
    982             topSizer.Add(wx.StaticText(self,wx.ID_ANY,'Filter: '),0,wx.ALL,1)
    983             self.filterBox = wx.TextCtrl(self, wx.ID_ANY, size=(80,-1),
    984                                          style=wx.TE_PROCESS_ENTER)
    985             self.filterBox.Bind(wx.EVT_CHAR,self.onChar)
    986             self.filterBox.Bind(wx.EVT_TEXT_ENTER,self.Filter)
    987         topSizer.Add(self.filterBox,0,wx.ALL,0)
    988         Sizer.Add(topSizer,0,wx.ALL|wx.EXPAND,8)
    989         self.clb = wx.ListBox(self, wx.ID_ANY, (30,30), wx.DefaultSize, ChoiceList)
    990         self.clb.Bind(wx.EVT_LEFT_DCLICK,self.onDoubleClick)
    991         if monoFont:
    992             font1 = wx.Font(self.clb.GetFont().GetPointSize(),
    993                             wx.MODERN, wx.NORMAL, wx.NORMAL, False)
    994             self.clb.SetFont(font1)
    995         Sizer.Add(self.clb,1,wx.LEFT|wx.RIGHT|wx.EXPAND,10)
    996         Sizer.Add((-1,10))
    997         # OK/Cancel buttons
    998         btnsizer = wx.StdDialogButtonSizer()
    999         if useOK:
    1000             self.OKbtn = wx.Button(self, wx.ID_OK)
    1001             self.OKbtn.SetDefault()
    1002             btnsizer.AddButton(self.OKbtn)
    1003         if useCANCEL:
    1004             btn = wx.Button(self, wx.ID_CANCEL)
    1005             btnsizer.AddButton(btn)
    1006         btnsizer.Realize()
    1007         Sizer.Add((-1,5))
    1008         Sizer.Add(btnsizer,0,wx.ALIGN_RIGHT,50)
    1009         Sizer.Add((-1,20))
    1010         # OK done, let's get outa here
    1011         self.SetSizer(Sizer)
    1012     def GetSelection(self):
    1013         'Returns the index of the selected choice'
    1014         i = self.clb.GetSelection()
    1015         if i < 0 or i >= len(self.filterlist):
    1016             return wx.NOT_FOUND
    1017         return self.filterlist[i]
    1018     def onChar(self,event):
    1019         self.OKbtn.Enable(False)
    1020         if self.timer.IsRunning():
    1021             self.timer.Stop()
    1022         self.timer.Start(1000,oneShot=True)
    1023         event.Skip()
    1024     def Filter(self,event):
    1025         if self.timer.IsRunning():
    1026             self.timer.Stop()
    1027         txt = self.filterBox.GetValue()
    1028         self.clb.Clear()
    1029         self.Update()
    1030         self.filterlist = []
    1031         if txt:
    1032             txt = txt.lower()
    1033             ChoiceList = []
    1034             for i,item in enumerate(self.ChoiceList):
    1035                 if item.lower().find(txt) != -1:
    1036                     ChoiceList.append(item)
    1037                     self.filterlist.append(i)
    1038         else:
    1039             self.filterlist = range(len(self.ChoiceList))
    1040             ChoiceList = self.ChoiceList
    1041         self.clb.AppendItems(ChoiceList)
    1042         self.OKbtn.Enable(True)
    1043     def onDoubleClick(self,event):
    1044         self.EndModal(wx.ID_OK)
    1045748
    1046749################################################################################
     
    1199902    if multiple:
    1200903        if useCancel:
    1201             dlg = G2MultiChoiceDialog(
     904            dlg = G2G.G2MultiChoiceDialog(
    1202905                ParentFrame,title, header, ChoiceList)
    1203906        else:
    1204             dlg = G2MultiChoiceDialog(
     907            dlg = G2G.G2MultiChoiceDialog(
    1205908                ParentFrame,title, header, ChoiceList,
    1206909                style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.OK|wx.CENTRE)
     
    25732276                    sel.append(choices.index(item))
    25742277                sel = [choices.index(item) for item in data['Seq Data']]
    2575             dlg = G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential refinement',
     2278            dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential refinement',
    25762279                                      'Select dataset to include',
    25772280                                      choices)
     
    29942697        ncols = G2frame.SeqTable.GetNumberCols()
    29952698        colNames = [G2frame.SeqTable.GetColLabelValue(r) for r in range(ncols)]
    2996         dlg = G2SingleChoiceDialog(
     2699        dlg = G2G.G2SingleChoiceDialog(
    29972700            G2frame.dataDisplay,
    29982701            'Select x-axis parameter for plot or Cancel for sequence number',
  • trunk/GSASIIimgGUI.py

    r1764 r1770  
    15691569                return
    15701570            sel = []
    1571             dlg = G2gd.G2MultiChoiceDialog(G2frame,'Stress/Strain fitting','Select images to fit:',choices)
     1571            dlg = G2G.G2MultiChoiceDialog(G2frame,'Stress/Strain fitting','Select images to fit:',choices)
    15721572            dlg.SetSelections(sel)
    15731573            names = []
  • trunk/GSASIIphsGUI.py

    r1762 r1770  
    709709               
    710710            def OnRefList(event):
    711                 dlg = G2gd.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
     711                dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
    712712                    'Use data',refsList,filterBox=False)
    713713                try:
     
    780780           
    781781            def OnRefList(event):
    782                 dlg = G2gd.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
     782                dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
    783783                    'Use data',refsList,filterBox=False)
    784784                try:
     
    22262226
    22272227            def OnRefList(event):
    2228                 dlg = G2gd.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
     2228                dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use',
    22292229                    'Use data',refsList,filterBox=False)
    22302230                try:
  • trunk/GSASIIpwdGUI.py

    r1765 r1770  
    223223        G2frame.PatternTree.SetItemPyData(G2frame.PatternId,sourceData)
    224224       
    225     dlg = G2gd.G2MultiChoiceDialog(
     225    dlg = G2G.G2MultiChoiceDialog(
    226226        G2frame.dataFrame,
    227227        'Copy plot controls from\n'+str(hst[5:])+' to...',
     
    255255        return
    256256    choices = ['Limits','Background','Instrument Parameters','Sample Parameters']
    257     dlg = G2gd.G2MultiChoiceDialog(
     257    dlg = G2G.G2MultiChoiceDialog(
    258258        G2frame.dataFrame,
    259259        'Copy which histogram sections from\n'+str(hst[5:]),
     
    265265    if not choiceList: return
    266266   
    267     dlg = G2gd.G2MultiChoiceDialog(
     267    dlg = G2G.G2MultiChoiceDialog(
    268268        G2frame.dataFrame,
    269269        'Copy parameters from\n'+str(hst[5:])+' to...',
     
    377377            return
    378378        copyList = []
    379         dlg = G2gd.G2MultiChoiceDialog(
     379        dlg = G2G.G2MultiChoiceDialog(
    380380            G2frame.dataFrame,
    381381            'Copy peak list from\n'+str(hst[5:])+' to...',
     
    436436            return
    437437        sel = []
    438         dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential peak fits',
     438        dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential peak fits',
    439439             'Select dataset to include',histList)
    440440        dlg.SetSelections(sel)
     
    744744            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
    745745            return
    746         dlg = G2gd.G2MultiChoiceDialog(
     746        dlg = G2G.G2MultiChoiceDialog(
    747747            G2frame.dataFrame,
    748748            'Copy bkg ref. flags from\n'+str(hst[5:])+' to...',
     
    774774            return
    775775        copyList = []
    776         dlg = G2gd.G2MultiChoiceDialog(
     776        dlg = G2G.G2MultiChoiceDialog(
    777777            G2frame.dataFrame,
    778778            'Copy bkg params from\n'+str(hst[5:])+' to...',
     
    10361036            return
    10371037        copyList = []
    1038         dlg = G2gd.G2MultiChoiceDialog(
     1038        dlg = G2G.G2MultiChoiceDialog(
    10391039            G2frame.dataFrame,
    10401040            'Copy limits from\n'+str(hst[5:])+' to...',
     
    12191219        instType = data['Type'][0]
    12201220        copyList = []
    1221         dlg = G2gd.G2MultiChoiceDialog(
     1221        dlg = G2G.G2MultiChoiceDialog(
    12221222            G2frame.dataFrame,
    12231223            'Copy inst ref. flags from\n'+hst[5:],
     
    12471247        copyList = []
    12481248        instType = data['Type'][0]
    1249         dlg = G2gd.G2MultiChoiceDialog(
     1249        dlg = G2G.G2MultiChoiceDialog(
    12501250            G2frame.dataFrame,
    12511251            'Copy inst params from\n'+hst,
     
    17531753            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
    17541754            return
    1755         dlg = G2gd.G2MultiChoiceDialog(
     1755        dlg = G2G.G2MultiChoiceDialog(
    17561756            G2frame.dataFrame,
    17571757            'Copy sample params from\n'+str(hst[5:])+' to...',
     
    17961796        keyText, keyList = zip(*sorted(zip(keyText,keyList))) # sort lists
    17971797        selectedKeys = []
    1798         dlg = G2gd.G2MultiChoiceDialog(
     1798        dlg = G2G.G2MultiChoiceDialog(
    17991799            G2frame.dataFrame,
    18001800            'Select which sample parameters\nto copy',
     
    18091809        for parm in selectedKeys:
    18101810            copyDict[parm] = data[parm]
    1811         dlg = G2gd.G2MultiChoiceDialog(
     1811        dlg = G2G.G2MultiChoiceDialog(
    18121812            G2frame.dataFrame,
    18131813            'Copy sample params from\n'+str(hst[5:])+' to...',
     
    18351835            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
    18361836            return
    1837         dlg = G2gd.G2MultiChoiceDialog(
     1837        dlg = G2G.G2MultiChoiceDialog(
    18381838            G2frame.dataFrame,
    18391839            'Copy sample ref. flags from\n'+str(hst[5:])+' to...',
     
    31423142            return
    31433143        copyList = []
    3144         dlg = G2gd.G2MultiChoiceDialog(
     3144        dlg = G2G.G2MultiChoiceDialog(
    31453145            G2frame.dataFrame,
    31463146            'Copy substances from\n'+hst[5:]+' to...',
     
    34313431            return
    34323432        copyList = []
    3433         dlg = G2gd.G2MultiChoiceDialog(
     3433        dlg = G2G.G2MultiChoiceDialog(
    34343434            G2frame.dataFrame,
    34353435            'Copy models from\n'+hst[5:]+' to...',
     
    34593459            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
    34603460            return
    3461         dlg = G2gd.G2MultiChoiceDialog(
     3461        dlg = G2G.G2MultiChoiceDialog(
    34623462            G2frame.dataFrame,
    34633463            'Copy sample ref. flags from\n'+str(hst[5:])+' to...',
     
    34933493        choices = G2gd.GetPatternTreeDataNames(G2frame,['SASD',])
    34943494        sel = []
    3495         dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential SASD refinement',
     3495        dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential SASD refinement',
    34963496             'Select dataset to include',choices)
    34973497        dlg.SetSelections(sel)
  • trunk/GSASIIstrMain.py

    r1688 r1770  
    4242   
    4343ateln2 = 8.0*math.log(2.0)
    44 DEBUG = False
     44DEBUG = True
    4545
    4646def RefineCore(Controls,Histograms,Phases,restraintDict,rigidbodyDict,parmDict,varyList,
  • trunk/GSASIIstrMath.py

    r1767 r1770  
    13651365        Icorr *= G2pwd.Polarization(parmDict[hfx+'Polariz.'],refl[5+im],parmDict[hfx+'Azimuth'])[0]
    13661366    POcorr = 1.0
    1367     if pfx+'SHorder' in parmDict:                 #generalized spherical harmonics texture
     1367    if pfx+'SHorder' in parmDict:                 #generalized spherical harmonics texture - takes precidence
    13681368        POcorr = SHTXcal(refl,im,g,pfx,hfx,SGData,calcControls,parmDict)
    13691369    elif calcControls[phfx+'poType'] == 'MD':         #March-Dollase
Note: See TracChangeset for help on using the changeset viewer.