source: trunk/GSASIIElemGUI.py @ 2546

Last change on this file since 2546 was 2546, checked in by vondreele, 5 years ago

cleanup of all GSASII main routines - remove unused variables, dead code, etc.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Revision URL Id
File size: 13.8 KB
Line 
1# -*- coding: utf-8 -*-
2########### SVN repository information ###################
3# $Date: 2016-11-22 19:08:48 +0000 (Tue, 22 Nov 2016) $
4# $Author: vondreele $
5# $Revision: 2546 $
6# $URL: trunk/GSASIIElemGUI.py $
7# $Id: GSASIIElemGUI.py 2546 2016-11-22 19:08:48Z vondreele $
8########### SVN repository information ###################
9'''
10*GSASIIElemGUI: GUI to select and delete element lists*
11-------------------------------------------------------
12
13Module to select elements from a periodic table and
14to delete an element from a list of selected elements.
15'''
16"""ElementGUI: class defn. for element GUIs
17   Copyright: 2008, Robert B. Von Dreele & Brian H. Toby (Argonne National Laboratory)
18"""
19
20import GSASIIpath
21GSASIIpath.SetVersionNumber("$Revision: 2546 $")
22import wx
23import os
24import wx.lib.colourselect as wscs
25class PickElement(wx.Dialog):
26    "Makes periodic table widget for picking element - caller maintains element list"
27    Elem=None
28    def _init_ctrls(self,prnt,ifMag=False):
29        wx.Dialog.__init__(self, id=-1, name='PickElement',
30              parent=prnt, pos=wx.DefaultPosition, 
31              style=wx.DEFAULT_DIALOG_STYLE, title='Pick Element')
32        import ElementTable as ET
33        self.butWid = 60
34        if 'nt' in os.name:
35            self.butWid = 40
36        self.SetClientSize(wx.Size(50+18*self.butWid, 250))
37       
38        i=0
39        Elems = ET.ElTable
40        if ifMag:
41            Elems = ET.MagElTable
42        for E in Elems:
43            if E[1] < 0: continue
44            if self.oneOnly:
45                color=E[4]
46            else:
47                color=E[6]
48            self.ElButton(name=E[0],
49               pos=wx.Point(E[1]*self.butWid+25,E[2]*24+24),
50               tip=E[3],color=color)
51            i+=1
52
53    def __init__(self, parent,oneOnly=False,ifNone=False,ifMag=False):
54        'Needs a doc string'
55        self.oneOnly = oneOnly
56        self.ifNone = ifNone
57        self._init_ctrls(parent,ifMag=ifMag)
58       
59    def ElButton(self, name, pos, tip, color):
60        'Creates an element button widget'
61        if not self.ifNone and name[0] == 'None':
62            return
63        if self.oneOnly:
64            El = wscs.ColourSelect(label=name[0], parent=self,colour=color,
65                pos=pos, size=wx.Size(self.butWid,23), style=wx.RAISED_BORDER)
66            El.Bind(wx.EVT_BUTTON, self.OnElButton)
67        else:
68            butWid = self.butWid
69            if name[0] == 'None':
70                butWid *= 2
71            # patch for wx 2.9+ on Mac where EVT_COMBOBOX happens only on
72            # value change. Not ideal because wx.CB_READONLY is better.
73            i,j= wx.__version__.split('.')[0:2]
74            if int(i)+int(j)/10. > 2.8 and 'wxOSX' in wx.PlatformInfo:
75
76                El = wx.ComboBox(choices=name, parent=self, pos=pos, size=wx.Size(butWid,23),
77                    style=wx.CB_DROPDOWN, value=name[0]+' ') # add an invisible space
78            else:
79                El = wx.ComboBox(choices=name, parent=self, pos=pos, size=wx.Size(butWid,23),
80                    style=wx.CB_READONLY, value=name[0]) 
81            El.Bind(wx.EVT_COMBOBOX,self.OnElButton)
82       
83        El.SetBackgroundColour(color)
84        El.SetToolTipString(tip)
85
86    def OnElButton(self, event):
87        if self.oneOnly:
88            El = event.GetEventObject().GetLabel()
89        else:
90            El = event.GetEventObject().GetValue()
91        self.Elem = El
92        self.EndModal(wx.ID_OK)       
93       
94class PickElements(wx.Dialog):
95    """Makes periodic table widget for picking elements - caller maintains element list"""
96    Elem = []
97    def _init_ctrls(self, prnt,list):
98        wx.Dialog.__init__(self, id=-1, name='PickElements',
99              parent=prnt, pos=wx.DefaultPosition, size=wx.Size(580, 360),
100              style=wx.DEFAULT_DIALOG_STYLE, title='Pick Elements')
101        panel = wx.Panel(self)
102       
103        REcolor = wx.Colour(128, 128, 255)
104        Metcolor = wx.Colour(192, 192, 192)
105        Noblecolor = wx.Colour(255, 128, 255)
106        Alkcolor = wx.Colour(255, 255, 128)
107        AlkEcolor = wx.Colour(255, 128, 0)
108        SemMetcolor = wx.Colour(128, 255, 0)
109        NonMetcolor = wx.Colour(0, 255, 255)
110        White = wx.Colour(255, 255, 255)
111        self.Elem = []
112        for El in list:
113            self.Elem.append(El.lower().capitalize())
114       
115        self.ElTable = [
116            ("H",   0,0, "Hydrogen",    White,           0.0000),
117            ("He", 17,0, "Helium",      Noblecolor,      0.0000),
118            ("Li",  0,1, "Lithium",     Alkcolor,        0.0004),
119            ("Be",  1,1, "Beryllium",   AlkEcolor,       0.0006),
120            ("B",  12,1, "Boron",       NonMetcolor,     0.0012),
121            ("C",  13,1, "Carbon",      NonMetcolor,     0.0018),
122            ("N",  14,1, "Nitrogen",    NonMetcolor,     0.0030),
123            ("O",  15,1, "Oxygen",      NonMetcolor,     0.0042),
124            ("F",  16,1, "Fluorine",    NonMetcolor,     0.0054),
125            ("Ne", 17,1, "Neon",        Noblecolor,      0.0066),
126            ("Na",  0,2, "Sodium",      Alkcolor,        0.0084),
127            ("Mg",  1,2, "Magnesium",   AlkEcolor,       0.0110),
128            ("Al", 12,2, "Aluminum",    SemMetcolor,     0.0125),
129            ("Si", 13,2, "Silicon",     NonMetcolor,     0.0158),
130            ("P",  14,2, "Phosphorus",  NonMetcolor,     0.0180),
131            ("S",  15,2, "Sulphur",     NonMetcolor,     0.0210),
132            ("Cl", 16,2, "Chlorine",    NonMetcolor,     0.0250),
133            ("Ar", 17,2, "Argon",       Noblecolor,      0.0285),
134            ("K",   0,3, "Potassium",   Alkcolor,        0.0320),
135            ("Ca",  1,3, "Calcium",     AlkEcolor,       0.0362),
136            ("Sc",  2,3, "Scandium",    Metcolor,        0.0410),
137            ("Ti",  3,3, "Titanium",    Metcolor,        0.0460),
138            ("V",   4,3, "Vanadium",    Metcolor,        0.0510),
139            ("Cr",  5,3, "Chromium",    Metcolor,        0.0560),
140            ("Mn",  6,3, "Manganese",   Metcolor,        0.0616),
141            ("Fe",  7,3, "Iron",        Metcolor,        0.0680),
142            ("Co",  8,3, "Cobalt",      Metcolor,        0.0740),
143            ("Ni",  9,3, "Nickel",      Metcolor,        0.0815),
144            ("Cu", 10,3, "Copper",      Metcolor,        0.0878),
145            ("Zn", 11,3, "Zinc",        Metcolor,        0.0960),
146            ("Ga", 12,3, "Gallium",     SemMetcolor,      0.104),
147            ("Ge", 13,3, "Germanium",   SemMetcolor,      0.114),
148            ("As", 14,3, "Arsenic",     NonMetcolor,      0.120),
149            ("Se", 15,3, "Selenium",    NonMetcolor,      0.132),
150            ("Br", 16,3, "Bromine",     NonMetcolor,      0.141),
151            ("Kr", 17,3, "Krypton",     Noblecolor,       0.150),
152            ("Rb",  0,4, "Rubidium",    Alkcolor,         0.159),
153            ("Sr",  1,4, "Strontium",   AlkEcolor,        0.171),
154            ("Y",   2,4, "Yittrium",    Metcolor,         0.180),
155            ("Zr",  3,4, "Zirconium",   Metcolor,         0.192),
156            ("Nb",  4,4, "Niobium",     Metcolor,         0.204),
157            ("Mo",  5,4, "Molybdenium", Metcolor,         0.216),
158            ("Tc",  6,4, "Technetium",  Metcolor,         0.228),
159            ("Ru",  7,4, "Ruthenium",   Metcolor,         0.246),
160            ("Rh",  8,4, "Rhodium",     Metcolor,         0.258),
161            ("Pd",  9,4, "Palladium",   Metcolor,         0.270),
162            ("Ag", 10,4, "Silver",      Metcolor,         0.285),
163            ("Cd", 11,4, "Cadmium",     Metcolor,         0.300),
164            ("In", 12,4, "Indium",      SemMetcolor,      0.318),
165            ("Sn", 13,4, "Tin",         SemMetcolor,      0.330),
166            ("Sb", 14,4, "Antimony",    SemMetcolor,      0.348),
167            ("Te", 15,4, "Tellurium",   NonMetcolor,      0.363),
168            ("I",  16,4, "Iodine",      NonMetcolor,      0.384),
169            ("Xe", 17,4, "Xenon",       Noblecolor,       0.396),
170            ("Cs",  0,5, "Caesium",     Alkcolor,         0.414),
171            ("Ba",  1,5, "Barium",      AlkEcolor,        0.438),
172            ("La",  2,5, "Lanthanium",  Metcolor,         0.456),
173            ("Ce",  3.5,6.5, "Cerium",      REcolor,      0.474),
174            ("Pr",  4.5,6.5, "Praseodymium",REcolor,      0.492),
175            ("Nd",  5.5,6.5, "Neodymium",   REcolor,      0.516),
176            ("Pm",  6.5,6.5, "Promethium",  REcolor,      0.534),
177            ("Sm",  7.5,6.5, "Samarium",    REcolor,      0.558),
178            ("Eu",  8.5,6.5, "Europium",    REcolor,      0.582),
179            ("Gd",  9.5,6.5, "Gadolinium",  REcolor,      0.610),
180            ("Tb", 10.5,6.5, "Terbium",     REcolor,      0.624),
181            ("Dy", 11.5,6.5, "Dysprosium",  REcolor,      0.648),
182            ("Ho", 12.5,6.5, "Holmium",     REcolor,      0.672),
183            ("Er", 13.5,6.5, "Erbium",      REcolor,      0.696),
184            ("Tm", 14.5,6.5, "Thulium",     REcolor,      0.723),
185            ("Yb", 15.5,6.5, "Ytterbium",   REcolor,      0.750),
186            ("Lu", 16.5,6.5, "Lutetium",    REcolor,      0.780),
187            ("Hf",  3,5, "Hafnium",     Metcolor,         0.804),
188            ("Ta",  4,5, "Tantalum",    Metcolor,         0.834),
189            ("W",   5,5, "Tungsten",    Metcolor,         0.864),
190            ("Re",  6,5, "Rhenium",     Metcolor,         0.900),
191            ("Os",  7,5, "Osmium",      Metcolor,         0.919),
192            ("Ir",  8,5, "Iridium",     Metcolor,         0.948),
193            ("Pt",  9,5, "Platinium",   Metcolor,         0.984),
194            ("Au", 10,5, "Gold",        Metcolor,         1.014),
195            ("Hg", 11,5, "Mercury",     Metcolor,         1.046),
196            ("Tl", 12,5, "Thallium",    SemMetcolor,      1.080),
197            ("Pb", 13,5, "Lead",        SemMetcolor,      1.116),
198            ("Bi", 14,5, "Bismuth",     SemMetcolor,      1.149),
199            ("Po", 15,5, "Polonium",    SemMetcolor,      1.189),
200            ("At", 16,5, "Astatine",    NonMetcolor,      1.224),
201            ("Rn", 17,5, "Radon",       Noblecolor,       1.260),
202            ("Fr",  0,6, "Francium",    Alkcolor,         1.296),
203            ("Ra",  1,6, "Radium",      AlkEcolor,        1.332),
204            ("Ac",  2,6, "Actinium",    Metcolor,         1.374),
205            ("Th",  3.5,7.5, "Thorium",     REcolor,      1.416),
206            ("Pa",  4.5,7.5, "Protactinium",REcolor,      1.458),
207            ("U",   5.5,7.5, "Uranium",     REcolor,      1.470),
208            ("Np",  6.5,7.5, "Neptunium",   REcolor,      1.536),
209            ("Pu",  7.5,7.5, "Plutonium",   REcolor,      1.584),
210            ("Am",  8.5,7.5, "Americium",   REcolor,      1.626),
211            ("Cm",  9.5,7.5, "Curium",      REcolor,      1.669),
212            ("Bk", 10.5,7.5, "Berkelium",   REcolor,      1.716),
213            ("Cf", 11.5,7.5, "Californium", REcolor,      1.764)]
214           
215        mainSizer = wx.BoxSizer(wx.VERTICAL)
216        elPanel = wx.Panel(panel)
217           
218        i=0
219        for E in self.ElTable:
220            PickElements.ElButton(self,parent=elPanel,name=E[0],
221                pos=wx.Point(E[1]*30+20,E[2]*30+25),tip=E[3],color=E[4])
222            i+=1
223        mainSizer.Add(elPanel,0,wx.EXPAND)
224        mainSizer.Add((10,10),0)
225       
226        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
227        OkBtn = wx.Button(panel,-1,"Ok")
228        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
229        cancelBtn = wx.Button(panel,-1,"Cancel")
230        cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
231        btnSizer.Add((20,20),1)
232        btnSizer.Add(OkBtn)
233        btnSizer.Add((20,20),1)
234        btnSizer.Add(cancelBtn)
235        btnSizer.Add((20,20),1)
236        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM, 10)
237        panel.SetSizer(mainSizer)
238        panel.Fit()
239                 
240    def OnOk(self,event):
241        if self.Elem:
242            self.EndModal(wx.ID_OK)
243        else:       
244            self.EndModal(wx.ID_CANCEL)       
245       
246    def OnCancel(self,event):
247        self.EndModal(wx.ID_CANCEL)       
248
249    def __init__(self, parent,list):
250        self._init_ctrls(parent,list)
251       
252    def ElButton(self, parent, name, pos, tip, color):
253        Black = wx.Colour(0,0,0)
254        if name in self.Elem:
255            color = Black
256        El = wscs.ColourSelect(label=name, parent=parent,colour=color,
257            pos=pos, size=wx.Size(32, 32), style=wx.RAISED_BORDER)
258        El.SetBackgroundColour(color)
259        El.SetLabel(name)
260        El.SetToolTipString(tip)
261        El.Bind(wx.EVT_BUTTON, self.OnElButton)
262
263    def OnElButton(self, event):
264        Black = wx.Colour(0,0,0)
265        btn = event.GetEventObject()
266        El = btn.GetLabel()
267        if btn.GetColour() != Black:
268            for Elem in self.ElTable:
269                if El in Elem:
270                    ElColor = Elem[4]
271            if El in self.Elem:
272                btn.SetColour(ElColor)
273                self.Elem.remove(El)
274            else:
275                btn.SetColour(wx.Colour(255,0,0))
276                self.Elem.append(El)
277       
278class DeleteElement(wx.Dialog):
279    "Delete element from selected set widget"
280    def _init_ctrls(self, parent,choice):
281        l = len(choice)-1
282        wx.Dialog.__init__(self, id=-1, name='Delete', parent=parent, 
283              pos=wx.DefaultPosition, size=wx.Size(max(128,64+l*24), 87),
284              style=wx.DEFAULT_DIALOG_STYLE, title='Delete Element')
285        self.Show(True)
286        self.SetAutoLayout(True)
287        self.SetHelpText('Select element to delete')
288        self.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
289
290        i = 0
291        Elem = []
292        for Elem in choice:
293            self.ElButton(id=-1,name=Elem,pos=wx.Point(16+i*24, 16))
294            i+=1
295             
296    def __init__(self, parent,choice):
297        DeleteElement.El = ' '
298        self._init_ctrls(parent,choice)
299
300    def ElButton(self, id, name, pos):
301        'Needs a doc string'
302        White = wx.Colour(255, 255, 255)
303        El = wscs.ColourSelect(label=name, parent=self, colour = White,
304            pos=pos, size=wx.Size(24, 23), style=wx.RAISED_BORDER)
305        El.Bind(wx.EVT_BUTTON, self.OnDeleteButton)
306   
307    def OnDeleteButton(self, event):
308        DeleteElement.El=event.GetEventObject().GetLabel()
309        self.EndModal(wx.ID_OK)
310       
311    def GetDeleteElement(self):
312        return DeleteElement.El
313       
314
Note: See TracBrowser for help on using the repository browser.