Changeset 3056 for trunk/GSASIIconstrGUI.py
- Timestamp:
- Sep 8, 2017 2:17:29 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIconstrGUI.py
r3054 r3056 37 37 import GSASIIspc as G2spc 38 38 VERY_LIGHT_GREY = wx.Colour(235,235,235) 39 40 class MultiIntegerDialog(wx.Dialog):41 '''Input a series of integers based on prompts42 '''43 def __init__(self,parent,title,prompts,values):44 wx.Dialog.__init__(self,parent,-1,title,45 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)46 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw!47 self.values = values48 self.prompts = prompts49 self.Draw()50 51 def Draw(self):52 53 def OnValItem(event):54 event.Skip()55 Obj = event.GetEventObject()56 ind = Indx[Obj.GetId()]57 try:58 val = int(Obj.GetValue())59 if val <= 0:60 raise ValueError61 except ValueError:62 val = self.values[ind]63 self.values[ind] = val64 Obj.SetValue('%d'%(val))65 66 self.panel.Destroy()67 self.panel = wx.Panel(self)68 mainSizer = wx.BoxSizer(wx.VERTICAL)69 Indx = {}70 for ival,[prompt,value] in enumerate(zip(self.prompts,self.values)):71 mainSizer.Add(wx.StaticText(self.panel,-1,prompt),0,wx.ALIGN_CENTER)72 valItem = wx.TextCtrl(self.panel,-1,value='%d'%(value),style=wx.TE_PROCESS_ENTER)73 mainSizer.Add(valItem,0,wx.ALIGN_CENTER)74 Indx[valItem.GetId()] = ival75 valItem.Bind(wx.EVT_TEXT_ENTER,OnValItem)76 valItem.Bind(wx.EVT_KILL_FOCUS,OnValItem)77 OkBtn = wx.Button(self.panel,-1,"Ok")78 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)79 CancelBtn = wx.Button(self.panel,-1,'Cancel')80 CancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)81 btnSizer = wx.BoxSizer(wx.HORIZONTAL)82 btnSizer.Add((20,20),1)83 btnSizer.Add(OkBtn)84 btnSizer.Add(CancelBtn)85 btnSizer.Add((20,20),1)86 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)87 self.panel.SetSizer(mainSizer)88 self.panel.Fit()89 self.Fit()90 91 def GetValues(self):92 return self.values93 94 def OnOk(self,event):95 parent = self.GetParent()96 parent.Raise()97 self.EndModal(wx.ID_OK)98 99 def OnCancel(self,event):100 parent = self.GetParent()101 parent.Raise()102 self.EndModal(wx.ID_CANCEL)103 39 104 40 class ConstraintDialog(wx.Dialog): … … 234 170 AtomDict = dict([Phases[phase]['pId'],Phases[phase]['Atoms']] for phase in Phases) 235 171 except KeyError: 236 G2frame.ErrorDialog('Constraint Error',' You must run least squares at least once before setting constraints\n'+ \237 'We suggest you refine scale factor first')172 G2frame.ErrorDialog('Constraint Error','Constraints cannot be set until a cycle of least squares'+ 173 'has been run.\nWe suggest you refine a scale factor.') 238 174 return 239 175 … … 871 807 872 808 :param str name: the type of constraints to be displayed ('HAP', 873 'Hist', 'Phase', or 'Global')809 'Hist', 'Phase', 'Global', 'Sym-Generated') 874 810 :param wx.Panel pageDisplay: parent panel for sizer 875 811 :returns: wx.Sizer created by method 876 812 ''' 877 #TODO: show symmetry generated constraints - no clue how to do this. 813 if name == 'Sym-Generated': #show symmetry generated constraints 814 Sizer1 = wx.BoxSizer(wx.VERTICAL) 815 Sizer1.Add(wx.StaticText(pageDisplay,wx.ID_ANY, 816 'Equivalences generated based on cell/space group input')) 817 Sizer1.Add((-1,5)) 818 Sizer = wx.FlexGridSizer(0,2,0,0) 819 Sizer1.Add(Sizer) 820 for sym in G2mv.GetSymEquiv(): 821 Sizer.Add(wx.StaticText(pageDisplay,wx.ID_ANY,'EQUIV'), 822 0,wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER|wx.RIGHT|wx.LEFT,3) 823 Sizer.Add(wx.StaticText(pageDisplay,wx.ID_ANY,sym)) 824 Sizer.Add((-1,-1)) 825 Sizer.Add((-1,2)) 826 return Sizer1 878 827 constSizer = wx.FlexGridSizer(0,6,0,0) 879 maxlen = 70 # characters before wrapping a constraint828 maxlen = 50 # characters before wrapping a constraint 880 829 for Id,item in enumerate(data[name]): 881 830 refineflag = False 882 831 helptext = "" 883 832 eqString = ['',] 833 problemItem = False 834 for term in item[:-3]: 835 if str(term[1]) in G2mv.problemVars: 836 problemItem = True 884 837 if item[-1] == 'h': # Hold on variable 885 838 constSizer.Add((-1,-1),0) # blank space for edit button … … 890 843 helptext = "Prevents variable:\n"+ var + " ("+ varMean + ")\nfrom being changed" 891 844 elif isinstance(item[-1],str): # not true on original-style (2011?) constraints 892 constEdit = wx.Button(pageDisplay, -1,'Edit',style=wx.BU_EXACTFIT)845 constEdit = wx.Button(pageDisplay,wx.ID_ANY,'Edit',style=wx.BU_EXACTFIT) 893 846 constEdit.Bind(wx.EVT_BUTTON,OnConstEdit) 894 847 constSizer.Add(constEdit,0,wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER,1) # edit button … … 966 919 data[name] = [] 967 920 return constSizer 968 constDel = wx.Button(pageDisplay, -1,'Delete',style=wx.BU_EXACTFIT)921 constDel = wx.Button(pageDisplay,wx.ID_ANY,'Delete',style=wx.BU_EXACTFIT) 969 922 constDel.Bind(wx.EVT_BUTTON,OnConstDel) 970 923 Indx[constDel.GetId()] = [Id,name] … … 980 933 else: 981 934 constSizer.Add((-1,-1)) 982 constSizer.Add(wx.StaticText(pageDisplay, -1,typeString),935 constSizer.Add(wx.StaticText(pageDisplay,wx.ID_ANY,typeString), 983 936 0,wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER|wx.RIGHT|wx.LEFT,3) 937 if problemItem: eqString[-1] += ' -- Conflict: see console' 984 938 if len(eqString) > 1: 985 939 Eq = wx.BoxSizer(wx.VERTICAL) 986 940 for s in eqString: 987 Eq.Add(wx.StaticText(pageDisplay,-1,s),0,wx.ALIGN_CENTER_VERTICAL) 941 line = wx.StaticText(pageDisplay,wx.ID_ANY,s) 942 if problemItem: line.SetBackgroundColour(wx.YELLOW) 943 Eq.Add(line,0,wx.ALIGN_CENTER_VERTICAL) 944 Eq.Add((-1,4)) 988 945 else: 989 Eq = wx.StaticText(pageDisplay,-1,eqString[0]) 946 Eq = wx.StaticText(pageDisplay,wx.ID_ANY,eqString[0]) 947 if problemItem: Eq.SetBackgroundColour(wx.YELLOW) 990 948 constSizer.Add(Eq,1,wx.ALIGN_CENTER_VERTICAL) 991 949 return constSizer … … 1104 1062 G2frame.Page = [page,'glb'] 1105 1063 UpdateConstraintPanel(GlobalConstr,'Global') 1064 else: 1065 G2frame.Page = [page,'sym'] 1066 UpdateConstraintPanel(SymConstr,'Sym-Generated') 1067 G2frame.dataWindow.SetDataSize() 1106 1068 1107 1069 def RaisePage(event): … … 1150 1112 GlobalConstr = wx.ScrolledWindow(G2frame.constr) 1151 1113 G2frame.constr.AddPage(GlobalConstr,'Global') 1114 SymConstr = wx.ScrolledWindow(G2frame.constr) 1115 G2frame.constr.AddPage(SymConstr,'Sym-Generated') 1152 1116 wx.CallAfter(OnPageChanged,None) 1153 1117 G2frame.constr.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged) … … 1158 1122 allcons += data[key] 1159 1123 if not len(allcons): return 1124 #reload(G2mv) # TODO: for testing 1160 1125 G2mv.InitVars() 1161 1126 constDictList,fixedList,ignored = G2stIO.ProcessConstraints(allcons) 1127 # generate symmetry constraints to check for conflicts 1128 rigidbodyDict = G2frame.GPXtree.GetItemPyData( 1129 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 1130 rbIds = rigidbodyDict.get('RBIds',{'Vector':[],'Residue':[]}) 1131 rbVary,rbDict = G2stIO.GetRigidBodyModels(rigidbodyDict,Print=False) 1132 Natoms,atomIndx,phaseVary,phaseDict,pawleyLookup,FFtables,BLtables,MFtables,maxSSwave = G2stIO.GetPhaseData( 1133 Phases,RestraintDict=None,rbIds=rbIds,Print=False) # generates atom symmetry constraints 1162 1134 errmsg, warnmsg = G2mv.CheckConstraints('',constDictList,fixedList) 1163 1135 if errmsg: 1164 G2frame.ErrorDialog('Constraint Error','Error in constraints:\n'+errmsg, 1165 parent=G2frame) 1136 G2frame.ErrorDialog('Constraint Error', 1137 'Error in constraints:\n'+errmsg+'\nCheck console output for more information', 1138 parent=G2frame) 1139 print errmsg 1140 print G2mv.VarRemapShow([],True) 1166 1141 elif warnmsg: 1167 1142 print 'Unexpected contraint warning:\n',warnmsg … … 1391 1366 def AddVectorRB(event): 1392 1367 AtInfo = data['Vector']['AtInfo'] 1393 dlg = MultiIntegerDialog(G2frame,'New Rigid Body',['No. atoms','No. translations'],[1,1])1368 dlg = G2G.MultiIntegerDialog(G2frame,'New Rigid Body',['No. atoms','No. translations'],[1,1]) 1394 1369 if dlg.ShowModal() == wx.ID_OK: 1395 1370 nAtoms,nTrans = dlg.GetValues()
Note: See TracChangeset
for help on using the changeset viewer.