Changeset 1257


Ignore:
Timestamp:
Mar 20, 2014 12:52:14 PM (8 years ago)
Author:
toby
Message:

change selector for hist. copy & copy flags; change seq ref hist select; change enabling of seq ref menu item; rework G2MultiChoiceDialog to save selections and add SetSelections?

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1256 r1257  
    202202            state = False
    203203        item.Enable(state)
    204         self.SeqRefine.append(item)
     204        self.SeqRefine.append(item) # save menu obj for use in self.EnableSeqRefineMenu
    205205        self.Bind(wx.EVT_MENU, self.OnSeqRefine, id=item.GetId())
    206206       
     
    264264                pass
    265265            if fp: fp.close()
     266
     267    def EnableSeqRefineMenu(self):
     268        '''Enable or disable the sequential refinement menu items based on the
     269        contents of the Controls 'Seq Data' item (if present)
     270        '''
     271        controls = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.root, 'Controls'))
     272        if controls.get('Seq Data'):
     273            for i in self.SeqRefine: i.Enable(True)
     274        else:
     275            for i in self.SeqRefine: i.Enable(False)
    266276
    267277    def OnImportGeneric(self,reader,readerlist,label,multiple=False,usedRanIdList=[]):
     
    17971807        self.MakePDF = []
    17981808        self.Refine = []
    1799         self.SeqRefine = []
     1809        self.SeqRefine = [] # pointer(s) to Sequential Refinement menu objects
    18001810        #self.ExportPattern = []
    18011811        self.ExportPeakList = []
     
    19011911                self.PatternTree.Expand(self.root)
    19021912                for item in self.Refine: item.Enable(True)
    1903                 for item in self.SeqRefine: item.Enable(True)
     1913                self.EnableSeqRefineMenu()
     1914
    19041915            except:
    19051916                print 'Error opening file',arg[1]
     
    26292640                if data:
    26302641                    for item in self.Refine: item.Enable(True)
    2631                     for item in self.SeqRefine: item.Enable(True)
     2642                    self.EnableSeqRefineMenu()
    26322643            item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
    26332644        if Id:
  • trunk/GSASIIddataGUI.py

    r1239 r1257  
    167167        for name in copyNames:
    168168            copyDict[name] = copy.deepcopy(sourceDict[name])        #force copy
    169         keyList = ['All',]+UseList.keys()
     169        keyList = sorted(UseList.keys())
    170170        if UseList:
    171             copyList = []
    172             dlg = wx.MultiChoiceDialog(G2frame,
    173                 'Copy parameters to which histograms?', 'Copy parameters',
    174                 keyList, wx.CHOICEDLG_STYLE)
     171            dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Copy parameters',
     172                'Copy parameters to which histograms?',
     173                keyList)
    175174            try:
    176175                if dlg.ShowModal() == wx.ID_OK:
    177                     result = dlg.GetSelections()
    178                     for i in result:
    179                         copyList.append(keyList[i])
    180                     if 'All' in copyList:
    181                         copyList = keyList[1:]
    182                     for item in copyList:
    183                         UseList[item].update(copy.deepcopy(copyDict))
     176                    for sel in dlg.GetSelections():
     177                        UseList[keyList[sel]].update(copy.deepcopy(copyDict))
    184178                    wx.CallAfter(UpdateDData,G2frame,DData,data)
    185179            finally:
     
    210204                for bab in babNames:
    211205                    copyDict[name][bab] = sourceDict[name][bab][1]                       
    212         keyList = ['All',]+UseList.keys()
     206        keyList = sorted(UseList.keys())
    213207        if UseList:
    214             copyList = []
    215             dlg = wx.MultiChoiceDialog(G2frame,
    216                 'Copy parameters to which histograms?', 'Copy parameters',
    217                 keyList, wx.CHOICEDLG_STYLE)
     208            dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Copy parameters',
     209                'Copy parameters to which histograms?',
     210                keyList)
    218211            try:
    219212                if dlg.ShowModal() == wx.ID_OK:
    220                     result = dlg.GetSelections()
    221                     for i in result:
    222                         copyList.append(keyList[i])
    223                     if 'All' in copyList:
    224                         copyList = keyList[1:]
    225                     for item in copyList:
    226                         UseList[item]                           
     213                    for sel in dlg.GetSelections():
     214                        item = keyList[sel]
     215                        UseList[item]
    227216                        for name in copyNames:
    228217                            if name in ['Scale','Extinction','HStrain']:
     
    246235            finally:
    247236                dlg.Destroy()
    248        
    249        
     237               
    250238    def OnLGmixRef(event):
    251239        Obj = event.GetEventObject()
  • trunk/GSASIIgrid.py

    r1248 r1257  
    14041404                   }
    14051405        options.update(kw)
    1406         self.ChoiceList = ChoiceList
    1407         self.filterlist = range(len(self.ChoiceList))
     1406        self.ChoiceList = ChoiceList # list of choices (list of str values)
     1407        self.Selections = len(self.ChoiceList) * [False,] # selection status for each choice (list of bools)
     1408        self.filterlist = range(len(self.ChoiceList)) # list of the choice numbers that have been filtered (list of int indices)
    14081409        if options['style'] & wx.OK:
    14091410            useOK = True
     
    14361437                            wx.MODERN, wx.NORMAL, wx.NORMAL, False)
    14371438            self.clb.SetFont(font1)
    1438         self.numchoices = len(ChoiceList)
    14391439        Sizer.Add(self.clb,1,wx.LEFT|wx.RIGHT|wx.EXPAND,10)
    14401440        Sizer.Add((-1,10))
     
    14671467    def GetSelections(self):
    14681468        'Returns a list of the indices for the selected choices'
    1469         return [self.filterlist[i] for i in range(self.numchoices) if self.clb.IsChecked(i)]
     1469        # update self.Selections with settings for displayed items
     1470        for i in range(len(self.filterlist)):
     1471            self.Selections[self.filterlist[i]] = self.clb.IsChecked(i)
     1472        # return all selections, shown or hidden
     1473        return [i for i in range(len(self.Selections)) if self.Selections[i]]
     1474    def SetSelections(self,selList):
     1475        '''Sets the selection indices in selList as selected. Resets any previous
     1476        selections for compatibility with wx.MultiChoiceDialog. Note that
     1477        the state for only the filtered items is shown.
     1478
     1479        :param list selList: indices of items to be selected. These indices
     1480          are referenced to the order in self.ChoiceList
     1481        '''
     1482        self.Selections = len(self.ChoiceList) * [False,] # reset selections
     1483        for sel in selList:
     1484            self.Selections[sel] = True
     1485        self._ShowSelections()
     1486
     1487    def _ShowSelections(self):
     1488        'Show the selection state for displayed items'
     1489        self.clb.SetChecked(
     1490            [i for i in range(len(self.filterlist)) if self.Selections[self.filterlist[i]]]
     1491            ) # Note anything previously checked will be cleared.
    14701492    def _SetAll(self,event):
    1471         'Set all choices on'
    1472         self.clb.SetChecked(range(self.numchoices))
     1493        'Set all viewed choices on'
     1494        self.clb.SetChecked(range(len(self.filterlist)))
    14731495    def _ToggleAll(self,event):
    1474         'flip the state of all choices'
    1475         for i in range(self.numchoices):
     1496        'flip the state of all viewed choices'
     1497        for i in range(len(self.filterlist)):
    14761498            self.clb.Check(i,not self.clb.IsChecked(i))
    14771499    def onChar(self,event):
     
    14841506        if self.timer.IsRunning():
    14851507            self.timer.Stop()
     1508        self.GetSelections() # record current selections
    14861509        txt = self.filterBox.GetValue()
    14871510        self.clb.Clear()
     
    14991522            ChoiceList = self.ChoiceList
    15001523        self.clb.AppendItems(ChoiceList)
     1524        self._ShowSelections()
    15011525        self.OKbtn.Enable(True)
    15021526
     
    15631587                            wx.MODERN, wx.NORMAL, wx.NORMAL, False)
    15641588            self.clb.SetFont(font1)
    1565         self.numchoices = len(ChoiceList)
    15661589        Sizer.Add(self.clb,1,wx.LEFT|wx.RIGHT|wx.EXPAND,10)
    15671590        Sizer.Add((-1,10))
     
    32453268       
    32463269        def OnSelectData(event):
    3247             choices = ['All',]+GetPatternTreeDataNames(G2frame,['PWDR',])
     3270            choices = GetPatternTreeDataNames(G2frame,['PWDR',])
    32483271            sel = []
    32493272            if 'Seq Data' in data:
    32503273                for item in data['Seq Data']:
    32513274                    sel.append(choices.index(item))
     3275                sel = [choices.index(item) for item in data['Seq Data']]
     3276            dlg = G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential refinement',
     3277                                      'Select dataset to include',
     3278                                      choices)
     3279            dlg.SetSelections(sel)
    32523280            names = []
    3253             dlg = wx.MultiChoiceDialog(G2frame,'Select data:','Sequential refinement',choices)
    3254             dlg.SetSelections(sel)
    32553281            if dlg.ShowModal() == wx.ID_OK:
    3256                 sel = dlg.GetSelections()
    3257                 for i in sel: names.append(choices[i])
    3258                 if 'All' in names:
    3259                     names = choices[1:]
     3282                for sel in dlg.GetSelections():
     3283                    names.append(choices[sel])
    32603284                data['Seq Data'] = names               
     3285                G2frame.EnableSeqRefineMenu()
    32613286            dlg.Destroy()
    3262             reverseSel.Enable(True)
     3287            wx.CallAfter(UpdateControls,G2frame,data)
    32633288           
    32643289        def OnReverse(event):
     
    32703295        seqSizer = wx.BoxSizer(wx.VERTICAL)
    32713296        dataSizer = wx.BoxSizer(wx.HORIZONTAL)
    3272         dataSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Sequential Refinement Powder Data: '),0,WACV)
     3297        dataSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Sequential Refinement: '),0,WACV)
    32733298        selSeqData = wx.Button(G2frame.dataDisplay,-1,label=' Select data')
    32743299        selSeqData.Bind(wx.EVT_BUTTON,OnSelectData)
    32753300        dataSizer.Add(selSeqData,0,WACV)
     3301        SeqData = data.get('Seq Data',[])
     3302        if not SeqData:
     3303            lbl = ' (no powder data selected)'
     3304        else:
     3305            lbl = ' ('+str(len(SeqData))+' dataset(s) selected)'
     3306
     3307        dataSizer.Add(wx.StaticText(G2frame.dataDisplay,label=lbl),0,WACV)
    32763308        seqSizer.Add(dataSizer,0)
    3277         if 'Seq Data' in data:
     3309        if SeqData:
    32783310            selSizer = wx.BoxSizer(wx.HORIZONTAL)
    32793311            reverseSel = wx.CheckBox(G2frame.dataDisplay,-1,label=' Reverse order?')
     
    38283860
    38293861def MovePatternTreeToGrid(G2frame,item):
    3830     '''Needs a doc string
     3862    '''Called from GSASII.OnPatternTreeSelChanged when a item is selected on the tree
    38313863    '''
    38323864   
     
    38863918                G2frame.PatternTree.SetItemPyData(item,data)                             
    38873919            for i in G2frame.Refine: i.Enable(True)
    3888             for i in G2frame.SeqRefine: i.Enable(True)
     3920            G2frame.EnableSeqRefineMenu()
    38893921            UpdateControls(G2frame,data)
    38903922        elif G2frame.PatternTree.GetItemText(item) == 'Sequential results':
     
    41304162
    41314163if __name__ == '__main__':
    4132     # test ScrolledMultiEditor
    41334164    app = wx.PySimpleApp()
    41344165    frm = wx.Frame(None) # create a frame
    41354166    frm.Show(True)
    4136     Data1 = {
    4137         'Order':1,
    4138         'omega':'string',
    4139         'chi':2.0,
    4140         'phi':'',
    4141         }
    4142     elemlst = sorted(Data1.keys())
    4143     postlbl = sorted(Data1.keys())
    4144     dictlst = len(elemlst)*[Data1,]
    4145 
    4146     Data2 = list(range(100))
    4147     elemlst += range(2,6)
    4148     postlbl += range(2,6)
    4149     dictlst += len(range(2,6))*[Data2,]
    4150 
    4151     prelbl = range(len(elemlst))
    4152     postlbl[1] = "a very long label for the 2nd item to force a horiz. scrollbar"
    4153     header="""This is a longer\nmultiline and perhaps silly header"""
    4154     dlg = ScrolledMultiEditor(frm,dictlst,elemlst,prelbl,postlbl,
    4155                               header=header,CopyButton=True)
    4156     print Data1
     4167
     4168    # # test ScrolledMultiEditor
     4169    # Data1 = {
     4170    #     'Order':1,
     4171    #     'omega':'string',
     4172    #     'chi':2.0,
     4173    #     'phi':'',
     4174    #     }
     4175    # elemlst = sorted(Data1.keys())
     4176    # postlbl = sorted(Data1.keys())
     4177    # dictlst = len(elemlst)*[Data1,]
     4178
     4179    # Data2 = list(range(100))
     4180    # elemlst += range(2,6)
     4181    # postlbl += range(2,6)
     4182    # dictlst += len(range(2,6))*[Data2,]
     4183
     4184    # prelbl = range(len(elemlst))
     4185    # postlbl[1] = "a very long label for the 2nd item to force a horiz. scrollbar"
     4186    # header="""This is a longer\nmultiline and perhaps silly header"""
     4187    # dlg = ScrolledMultiEditor(frm,dictlst,elemlst,prelbl,postlbl,
     4188    #                           header=header,CopyButton=True)
     4189    # print Data1
     4190    # if dlg.ShowModal() == wx.ID_OK:
     4191    #     for d,k in zip(dictlst,elemlst):
     4192    #         print k,d[k]
     4193    # dlg.Destroy()
     4194    # if CallScrolledMultiEditor(frm,dictlst,elemlst,prelbl,postlbl,
     4195    #                            header=header):
     4196    #     for d,k in zip(dictlst,elemlst):
     4197    #         print k,d[k]
     4198
     4199    choices = []
     4200    for i in range(21):
     4201        choices.append("option_"+str(i))
     4202    dlg = G2MultiChoiceDialog(frm, 'Sequential refinement',
     4203                              'Select dataset to include',
     4204                              choices)
     4205    sel = range(2,11,2)
     4206    dlg.SetSelections(sel)
     4207    dlg.SetSelections((1,5))
    41574208    if dlg.ShowModal() == wx.ID_OK:
    4158         for d,k in zip(dictlst,elemlst):
    4159             print k,d[k]
    4160     dlg.Destroy()
    4161     if CallScrolledMultiEditor(frm,dictlst,elemlst,prelbl,postlbl,
    4162                                header=header):
    4163         for d,k in zip(dictlst,elemlst):
    4164             print k,d[k]
    4165 
    4166 #app.MainLoop()
     4209        for sel in dlg.GetSelections():
     4210            print sel,choices[sel]
     4211
     4212    # dlg = wx.MultiChoiceDialog(frm, 'Sequential refinement',
     4213    #                           'Select dataset to include',
     4214    #                           choices)
     4215    # sel = range(2,11,2)
     4216    # dlg.SetSelections(sel)
     4217    # dlg.SetSelections((1,5))
     4218    # if dlg.ShowModal() == wx.ID_OK:
     4219    #     for sel in dlg.GetSelections():
     4220    #         print sel,choices[sel]
     4221
     4222
     4223    #app.MainLoop()
Note: See TracChangeset for help on using the changeset viewer.