def __init__(self, parent, analysis, orientation='horizontal', callback = None, *args, **kw): self.analysis = analysis self.callback = callback apply(Frame.__init__, (self, parent) + args, kw) label = Label(self, text='Experiment:') label.grid(row=0, column=0, sticky='ne') self.expt_list = ExperimentList(self, self.analysis.getExperiments, callback=self.setSpectra) self.expt_list.grid(row=0, column=1, sticky='nw') if orientation in ['horizontal','h','H',Tkinter.HORIZONTAL]: row = 0 col = 2 else: row = 1 col = 0 label = Label(self, text='Spectrum:') label.grid(row=row, column=col, sticky='ne') self.spectrum_list = SpectrumList(self, self.getSpectra, callback=self.setSpectrumProperties) self.spectrum_list.grid(row=row, column=col+1, sticky='nw') for func in notify_funcs: Implementation.registerNotify(self.setExperiments, 'ccp.nmr.Nmr.Experiment', func) Implementation.registerNotify(self.setSpectra, 'ccp.nmr.Nmr.DataSource', func)
def registerNotify(self, notify, classname, funcname='', application=None, keyword=None, modifyList=True): if application is None: application = self.application if self.application: self.application.registerNotify(notify, classname, funcname, keyword) elif application: Application.registerNotify(notify, classname, funcname, application, keyword) else: Implementation.registerNotify(notify, classname, funcname) if modifyList: cc = self.notifies.get(classname) if cc is None: cc = self.notifies[classname] = {} if application is None: key = funcname else: key = (funcname, application, keyword) ff = cc.get(key) if ff is None: ff = cc[key] = [] ff.append(notify)
def __init__(self, parent, getAxisUnits): self.getAxisUnits = getAxisUnits ScrolledListbox.__init__(self, parent, xscroll=False, selectmode=Tkinter.MULTIPLE) for func in notify_funcs: Implementation.registerNotify(self.setAxisUnits, 'ccpnmr.Analysis.AxisUnit', func)
def __init__(self, parent, getAxisUnits, *args, **kw): self.getAxisUnits = getAxisUnits PulldownMenu.__init__(self, parent, *args, **kw) for func in notify_funcs: Implementation.registerNotify(self.setAxisUnits, 'ccpnmr.Analysis.AxisUnit', func)
def __init__(self, parent, getSpectra, extra_label = '', *args, **kw): self.getSpectra = getSpectra self.extra_label = extra_label PulldownMenu.__init__(self, parent, *args, **kw) for func in notify_funcs: Implementation.registerNotify(self.setSpectra, 'ccp.nmr.Nmr.DataSource', func)
def doRegisters(self): try: Implementation.registerNotify(self.updateAfter, self.refClassName, 'delete') except AttributeError: # refClassName may be an abstract class, # in which case registering will fail return
def __init__(self, parent, getPeakLists, extra_label = '', *args, **kw): self.getPeakLists = getPeakLists self.extra_label = extra_label PulldownMenu.__init__(self, parent, *args, **kw) for func in notify_funcs: Implementation.registerNotify(self.setPeakLists, 'ccp.nmr.Nmr.PeakList', func)
def __init__(self, parent, getChains, extra_label='', *args, **kw): self.getChains = getChains self.extra_label = extra_label PulldownMenu.__init__(self, parent, *args, **kw) for func in notify_funcs: Implementation.registerNotify(self.setChains, 'ccp.molecule.MolSystem.Chain', func)
def __init__(self, parent, getColors, extra_label='', *args, **kw): self.getColors = getColors self.extra_label = extra_label PulldownList.__init__(self, parent, *args, **kw) for func in notify_funcs: Implementation.registerNotify(self.setColors, 'ccpnmr.Analysis.Color', func) self.setColors()
def registerNotify(notify, classname, funcname, application = None, keyword = None): if application is None or keyword is None: assert application is None and keyword is None, 'application = %s, keyword = %s, both must be None' % (application, keyword) return GenImp.registerNotify(notify, classname, funcname) if funcname not in allowedNotifyFuncs: raise GenImp.ApiError('illegal funcname "%s", must be in %s' % (funcname, allowedNotifyFuncs)) notifies = GenImp.getClassFromFullName(classname)._notifies notifies = notifies.setdefault((funcname, application, keyword), []) notifies.append(notify)
def __init__(self, parent, getSpectrumViews, extra_label='', *args, **kw): self.getSpectrumViews = getSpectrumViews self.extra_label = extra_label PulldownMenu.__init__(self, parent, *args, **kw) for func in notify_funcs: Implementation.registerNotify( self.setSpectrumViews, 'ccpnmr.Analysis.SpectrumWindowView', func) Implementation.registerNotify(self.setSpectrumViews, 'ccp.nmr.Nmr.Experiment', 'setName') Implementation.registerNotify(self.setSpectrumViews, 'ccp.nmr.Nmr.DataSource', 'setName')
def __init__(self, parent, analysis, callback=None, *args, **kw): self.analysis = analysis self.callback = callback apply(Frame.__init__, (self, parent) + args, kw) label = Label(self, text='Experiment:') label.grid(row=0, column=0, sticky='ne') self.expt_list = ExperimentList(self, self.analysis.getExperiments, callback=self.setSpectra) self.expt_list.grid(row=0, column=1, sticky='nw') label = Label(self, text='Spectrum:') label.grid(row=0, column=2, sticky='ne') self.spectrum_list = SpectrumList(self, self.getSpectra, callback=self.setPeakLists) self.spectrum_list.grid(row=0, column=3, sticky='nw') label = Label(self, text='PeakList:') label.grid(row=0, column=4, sticky='ne') self.peak_list_list = PeakListList(self, self.getPeakLists, callback=self.doCallback) self.peak_list_list.grid(row=0, column=5, sticky='nw') for func in notify_funcs: Implementation.registerNotify(self.setExperiments, 'ccp.nmr.Nmr.Experiment', func) Implementation.registerNotify(self.setSpectra, 'ccp.nmr.Nmr.DataSource', func) if func != 'setName': Implementation.registerNotify(self.setPeakLists, 'ccp.nmr.Nmr.PeakList', func)
def body(self, guiFrame): guiFrame.grid_columnconfigure(3, weight=1) row = 0 label = Label(guiFrame, text='Molecular system: ') label.grid(row=row, column=0, sticky=Tkinter.NW) self.molSysPulldown = PulldownMenu(guiFrame, self.changeMolSystem, selected_index=-1, do_initial_callback=0) self.molSysPulldown.grid(row=row, column=1, sticky=Tkinter.NW) label = Label(guiFrame, text='Clouds files: ') label.grid(row=row, column=2, sticky=Tkinter.NW) self.filenameEntry = Entry(guiFrame,text='perfect00.pdb') self.filenameEntry.grid(row=row, column=3, sticky=Tkinter.NW) row += 1 label = Label(guiFrame, text='Chain: ') label.grid(row=row, column=0, sticky=Tkinter.NW) self.chainPulldown = PulldownMenu(guiFrame, self.changeChain, selected_index=-1, do_initial_callback=0) self.chainPulldown.grid(row=row, column=1, sticky=Tkinter.NW) label = Label(guiFrame, text='Thread steps: ') label.grid(row=row, column=2, sticky=Tkinter.NW) self.numStepsEntry = IntEntry(guiFrame,text=3000) self.numStepsEntry.grid(row=row, column=3, sticky=Tkinter.NW) row += 1 label = Label(guiFrame, text='Homologue PDB file: ') label.grid(row=row, column=0, sticky=Tkinter.NW) self.pdbEntry = Entry(guiFrame,text='') self.pdbEntry.grid(row=row, column=1, sticky=Tkinter.NW) label = Label(guiFrame, text='Dist. Threshold: ') label.grid(row=row, column=2, sticky=Tkinter.NW) self.distEntry = FloatEntry(guiFrame,text=3.0) self.distEntry.grid(row=row, column=3, sticky=Tkinter.NW) row += 1 label = Label(guiFrame, text='Global score: ') label.grid(row=row, column=0, sticky=Tkinter.NW) self.globalScoreLabel = Label(guiFrame, text='') self.globalScoreLabel.grid(row=row, column=1, sticky=Tkinter.NW) label = Label(guiFrame, text='Assignment Threshold: ') label.grid(row=row, column=2, sticky=Tkinter.NW) self.thresholdEntry = FloatEntry(guiFrame,text=-4.5) self.thresholdEntry.grid(row=row, column=3, sticky=Tkinter.NW) row += 1 guiFrame.grid_rowconfigure(row, weight=1) self.graph = ScrolledGraph(guiFrame, width=300, height=200) self.graph.grid(row=row, column=0, columnspan=4, sticky = Tkinter.NSEW) row += 1 texts = ['Run','Assign!'] commands = [self.run, self.assignSpinSystems] bottomButtons = createDismissHelpButtonList(guiFrame,texts=texts,commands=commands,expands=0,help_url=None) bottomButtons.grid(row=row, column=0, columnspan=4, sticky=Tkinter.EW) self.assignButton = bottomButtons.buttons[1] for func in ('__init__','delete'): Implementation.registerNotify(self.updateMolSystems, 'ccp.molecule.MolSystem.MolSystem', func) Implementation.registerNotify(self.updateChains, 'ccp.molecule.MolSystem.Chain', func) self.updateMolSystems() self.updateChains()
def doRegisters(self): Implementation.registerNotify(self.updateAfter, self.refClassName, 'delete')
def body(self, guiFrame): self.mdInitTempEntry = FloatEntry(self, text='', returnCallback=self.setMdInitTemp) self.mdFinTempEntry = FloatEntry(self, text='', returnCallback=self.setMdFinTemp) self.mdCoolStepsEntry = IntEntry(self, text='', returnCallback=self.setMdCoolSteps) self.mdSimStepsEntry = IntEntry(self, text='', returnCallback=self.setMdSimSteps) self.mdTauEntry = FloatEntry(self, text='', returnCallback=self.setMdTau) self.mdRepScaleEntry = FloatEntry(self, text='', returnCallback=self.setMdRepScale) guiFrame.grid_columnconfigure(0, weight=1) row = 0 guiFrame.grid_rowconfigure(row, weight=1) frame = LabelFrame(guiFrame, text='Input constraints') frame.grid(row=row, column=0, sticky=Tkinter.NSEW) frame.grid_columnconfigure(2, weight=1) srow = 0 label = Label(frame, text='Constraint set:') label.grid(row=srow, column=0, sticky=Tkinter.W) self.constraintSetPulldown = PulldownMenu( frame, callback=self.changeConstraintSet, selected_index=0, do_initial_callback=0) self.constraintSetPulldown.grid(row=srow, column=1, sticky=Tkinter.W) srow += 1 label = Label(frame, text='Dist constraint list 1:') label.grid(row=srow, column=0, sticky=Tkinter.W) self.distance1Pulldown = PulldownMenu( frame, callback=self.changeDistance1ConstraintList, selected_index=0, do_initial_callback=0) self.distance1Pulldown.grid(row=srow, column=1, sticky=Tkinter.W) self.numConstr1Label = Label(frame, text='Constraints: 0') self.numConstr1Label.grid(row=srow, column=2, sticky=Tkinter.W) srow += 1 label = Label(frame, text='Dist constraint list 2:') label.grid(row=srow, column=0, sticky=Tkinter.W) self.distance2Pulldown = PulldownMenu( frame, callback=self.changeDistance2ConstraintList, selected_index=0, do_initial_callback=0) self.distance2Pulldown.grid(row=srow, column=1, sticky=Tkinter.W) self.numConstr2Label = Label(frame, text='Constraints: 0') self.numConstr2Label.grid(row=srow, column=2, sticky=Tkinter.W) srow += 1 label = Label(frame, text='Dist constraint list 3:') label.grid(row=srow, column=0, sticky=Tkinter.W) self.distance3Pulldown = PulldownMenu( frame, callback=self.changeDistance3ConstraintList, selected_index=0, do_initial_callback=0) self.distance3Pulldown.grid(row=srow, column=1, sticky=Tkinter.W) self.numConstr3Label = Label(frame, text='Constraints: 0') self.numConstr3Label.grid(row=srow, column=2, sticky=Tkinter.W) srow += 1 label = Label(frame, text='Dist constraint list 4:') label.grid(row=srow, column=0, sticky=Tkinter.W) self.distance4Pulldown = PulldownMenu( frame, callback=self.changeDistance4ConstraintList, selected_index=0, do_initial_callback=0) self.distance4Pulldown.grid(row=srow, column=1, sticky=Tkinter.W) self.numConstr4Label = Label(frame, text='Constraints: 0') self.numConstr4Label.grid(row=srow, column=2, sticky=Tkinter.W) row += 1 frame0 = LabelFrame(guiFrame, text='Cooling scheme') frame0.grid(row=row, column=0, sticky=Tkinter.NSEW) frame0.grid_columnconfigure(1, weight=1) f0row = 0 frame0.grid_rowconfigure(f0row, weight=1) colHeadings = [ 'Step', 'Initial\nTemp.', 'Final\nTemp.', 'Cooling\nSteps', 'MD Steps', 'MD Tau', 'Rep.\nScale' ] editWidgets = [ None, self.mdInitTempEntry, self.mdFinTempEntry, self.mdCoolStepsEntry, self.mdSimStepsEntry, self.mdTauEntry, self.mdRepScaleEntry ] editGetCallbacks = [ None, self.getMdInitTemp, self.getMdFinTemp, self.getMdCoolSteps, self.getMdSimSteps, self.getMdTau, self.getMdRepScale ] editSetCallbacks = [ None, self.setMdInitTemp, self.setMdFinTemp, self.setMdCoolSteps, self.setMdSimSteps, self.setMdTau, self.setMdRepScale ] self.coolingSchemeMatrix = ScrolledMatrix( frame0, editSetCallbacks=editSetCallbacks, editGetCallbacks=editGetCallbacks, editWidgets=editWidgets, maxRows=9, initialRows=12, headingList=colHeadings, callback=self.selectCoolingStep, objectList=self.coolingScheme, textMatrix=self.coolingScheme) self.coolingSchemeMatrix.grid(row=f0row, column=0, columnspan=4, sticky=Tkinter.NSEW) f0row += 1 texts = ['Move earlier', 'Move later', 'Add step', 'Remove step'] commands = [ self.moveStepEarlier, self.moveStepLater, self.addCoolingStep, self.removeCoolingStep ] self.coolingSchemeButtons = ButtonList(frame0, expands=1, commands=commands, texts=texts) self.coolingSchemeButtons.grid(row=f0row, column=0, columnspan=4, sticky=Tkinter.EW) row += 1 guiFrame.grid_rowconfigure(row, weight=1) frame1 = LabelFrame(guiFrame, text='Dynamics control') frame1.grid(row=row, column=0, sticky=Tkinter.NSEW) frame1.grid_columnconfigure(1, weight=1) f1row = 0 label20 = Label(frame1, text='Number of clouds:') label20.grid(row=f1row, column=0, sticky=Tkinter.NW) self.numCloudsEntry = IntEntry(frame1, text=1, returnCallback=self.setNumClouds, width=10) self.numCloudsEntry.grid(row=f1row, column=1, sticky=Tkinter.NW) label21 = Label(frame1, text='Cloud file prefix:') label21.grid(row=f1row, column=2, sticky=Tkinter.NW) self.filePrefixEntry = Entry(frame1, text='t_intra_', returnCallback=self.setFilePrefix, width=10) self.filePrefixEntry.grid(row=f1row, column=3, sticky=Tkinter.NW) f1row += 1 texts = ['Start molecular dynamics', 'Show dynamics progress'] commands = [self.startMd, self.showMdProgress] self.mdButtons = ButtonList(frame1, expands=1, commands=commands, texts=texts) self.mdButtons.grid(row=f1row, column=0, columnspan=4, sticky=Tkinter.NSEW) row += 1 self.bottomButtons = createDismissHelpButtonList(guiFrame, expands=0, help_url=None) self.bottomButtons.grid(row=row, column=0, sticky=Tkinter.EW) self.update() for func in ('__init__', 'delete', 'setName'): for clazz in ('ccp.nmr.NmrConstraint.DistanceConstraintList', ): Implementation.registerNotify(self.updateConstraintLists, clazz, func) for func in ('__init__', 'delete'): Implementation.registerNotify( self.updateConstraintSets, 'ccp.nmr.NmrConstraint.NmrConstraintStore', func)