def __init__(self): self.prefs = preferences.addCategory("write PDB dialog", preferences.HiddenCategory, optDict={"multiSavePDB": "multiple"}) self.haveTraj = False SaveModeless.__init__(self, clientPos='s', clientSticky='ewns', filters=[("PDB", "*.pdb", ".pdb")]) openModels.addAddHandler(self._modelsChange, None), openModels.addRemoveHandler(self._modelsChange, None) self._modelsChange()
def __init__(self): self.prefs = preferences.addCategory("write Mol2 dialog", preferences.HiddenCategory, optDict={"multiSaveMol2": "multiple", "hydrogen naming": "sybyl", "residue numbers": True}) SaveModeless.__init__(self, clientPos='s', clientSticky='ewns', filters=[("Mol2", "*.mol2", ".mol2")]) openModels.addAddHandler(self._modelsChange, None) openModels.addRemoveHandler(self._modelsChange, None) self._modelsChange()
def listen(mode, what, prefix=None): from chimera import replyobj mode = findBestMatch(mode, ["start", "stop"]) what = findBestMatch(what, ["models", "selection"]) if what == "models": from chimera import openModels global modelHandler if mode == "start": if modelHandler is not None: msg = "already listening for models\n" else: if prefix is None: prefix = "ModelChanged" modelHandler = openModels.addAddHandler( _alertModel, prefix) msg = "listening for models\n" else: if modelHandler is None: msg = "not listening for models\n" else: openModels.deleteAddHandler(modelHandler) modelHandler = None msg = "stopped listening for models\n" replyobj.info(msg) elif what == "selection": import chimera global selectionHandler if mode == "start": if selectionHandler is not None: msg = "already listening for selection\n" else: if prefix is None: prefix = "SelectionChanged" selectionHandler = chimera.triggers.addHandler( "selection changed", _alertSelection, prefix) msg = "listening for selection\n" else: if selectionHandler is None: msg = "not listening for selection\n" else: chimera.triggers.deleteHandler( "selection changed", selectionHandler) selectionHandler = None msg = "stopped listening for selection\n" replyobj.info(msg)
def register_cap_handlers(self): t = self.trigger_handlers for (name, callback), handler in t.items(): if handler == None: import chimera h = chimera.triggers.addHandler(name, callback, None) t[(name, callback)] = h # # Using SurfacePiece trigger instead of geometry change callback # can lead to continuous updating when surface color auto-update is # also used. Happens because trigger reasons are not associated # with specific objects. # for s in self.surface_models(): s.addGeometryChangedCallback(self.geometry_changed_cb) from chimera import openModels as om self.new_model_handler = om.addAddHandler(self.new_model_cb, None)
def update_model(self, open=True): create_volume = self.volume is None if create_volume: self.volume = self.make_model() v = self.volume v.set_array_coordinates(self.transform) v.color_mode = self.c_mode v.set_modulation_rgba(self.luminance_color()) v.projection_mode = self.p_mode if self.dim_transparent_voxels: bmode = v.SRC_ALPHA_DST_1_MINUS_ALPHA else: bmode = v.SRC_1_DST_1_MINUS_ALPHA v.transparency_blend_mode = bmode v.brightness_and_transparency_correction = self.bt_correction v.minimal_texture_memory = self.minimal_texture_memory v.maximum_intensity_projection = self.maximum_intensity_projection v.linear_interpolation = self.linear_interpolation v.show_outline_box = self.show_outline_box v.outline_box_rgb = self.outline_box_rgb v.outline_box_linewidth = self.outline_box_linewidth if create_volume or self.update_colors: self.update_colors = False self.update_coloring() self.volume.display = True if create_volume and open: am = self.attached_model from chimera import openModels if am and not am in openModels.list(): # Defer adding model to model list until attached model is added so # that the solid model with have the same id number as attached model. self.add_handler = openModels.addAddHandler( self.open_model_cb, None) else: self.open_model()
def update_model(self, open = True): create_volume = self.volume is None if create_volume: self.volume = self.make_model() v = self.volume v.set_array_coordinates(self.transform) v.color_mode = self.c_mode v.set_modulation_rgba(self.luminance_color()) v.projection_mode = self.p_mode if self.dim_transparent_voxels: bmode = v.SRC_ALPHA_DST_1_MINUS_ALPHA else: bmode = v.SRC_1_DST_1_MINUS_ALPHA v.transparency_blend_mode = bmode v.brightness_and_transparency_correction = self.bt_correction v.minimal_texture_memory = self.minimal_texture_memory v.maximum_intensity_projection = self.maximum_intensity_projection v.linear_interpolation = self.linear_interpolation v.show_outline_box = self.show_outline_box v.outline_box_rgb = self.outline_box_rgb v.outline_box_linewidth = self.outline_box_linewidth if create_volume or self.update_colors: self.update_colors = False self.update_coloring() self.volume.display = True if create_volume and open: am = self.attached_model from chimera import openModels if am and not am in openModels.list(): # Defer adding model to model list until attached model is added so # that the solid model with have the same id number as attached model. self.add_handler = openModels.addAddHandler(self.open_model_cb, None) else: self.open_model()
def fillInUI(self, parent): self.last_xy = None import Tkinter from CGLtk import Hybrid parent.columnconfigure(0, weight = 1) row = 0 cr = Hybrid.Checkbutton(parent, 'Constrain mouse rotations', 0) cr.button.grid(row = row, column = 0, sticky = 'w') row = row + 1 self.constrain_rotations = cr.variable cr.callback(self.constrain_rotation_cb) raf = Tkinter.Frame(parent) raf.grid(row = row, column = 0, sticky = 'w') row = row + 1 ra = Hybrid.Entry(raf, 'Axis ', 8, '0 0 1') ra.frame.grid(row = 0, column = 0, sticky = 'w') self.rot_axis = ra.variable rotx_cb = lambda v=self.rot_axis: v.set('1 0 0') roty_cb = lambda v=self.rot_axis: v.set('0 1 0') rotz_cb = lambda v=self.rot_axis: v.set('0 0 1') rab = Hybrid.Button_Row(raf, ' ', (('x', rotx_cb), ('y', roty_cb), ('z', rotz_cb))) rab.frame.grid(row = 0, column = 1, sticky = 'w') rof = Tkinter.Frame(parent) rof.grid(row = row, column = 0, sticky = 'w') row = row + 1 ro = Hybrid.Entry(rof, 'Origin ', 8, '0 0 0') ro.frame.grid(row = 0, column = 0, sticky = 'w') self.rot_origin = ro.variable zorigin_cb = lambda v=self.rot_origin: v.set('0 0 0') rob = Hybrid.Button_Row(rof, ' ', (('zero', zorigin_cb), ('center', self.set_rotation_origin_at_center),)) rob.frame.grid(row = 0, column = 1, sticky = 'w') sep = Tkinter.Frame(parent, relief = Tkinter.GROOVE, borderwidth=1, height=2) sep.grid(row = row, column = 0, sticky = 'ew', pady = 10) row = row + 1 tr = Hybrid.Checkbutton(parent, 'Constrain mouse translations', 0) tr.button.grid(row = row, column = 0, sticky = 'w') row = row + 1 self.constrain_translations = tr.variable tr.callback(self.constrain_translation_cb) taf = Tkinter.Frame(parent) taf.grid(row = row, column = 0, sticky = 'w') row = row + 1 ta = Hybrid.Entry(taf, 'Axis ', 8, '0 0 1') ta.frame.grid(row = 0, column = 0, sticky = 'w') self.trans_axis = ta.variable tx_cb = lambda v=self.trans_axis: v.set('1 0 0') ty_cb = lambda v=self.trans_axis: v.set('0 1 0') tz_cb = lambda v=self.trans_axis: v.set('0 0 1') tab = Hybrid.Button_Row(taf, ' ', (('x', tx_cb), ('y', ty_cb), ('z', tz_cb))) tab.frame.grid(row = 0, column = 1, sticky = 'w') ttf = Tkinter.Frame(parent) ttf.grid(row = row, column = 0, sticky = 'w') row = row + 1 tt = Hybrid.Option_Menu(ttf, 'Allow only ', 'parallel', 'perpendicular') tt.variable.set('parallel') tt.frame.grid(row = 0, column = 0, sticky = 'w') self.translation_type = tt.variable tl = Tkinter.Label(ttf, text = ' motion') tl.grid(row = 0, column = 1, sticky = 'w') sep = Tkinter.Frame(parent, relief = Tkinter.GROOVE, borderwidth=1, height=2) sep.grid(row = row, column = 0, sticky = 'ew', pady = 10) row = row + 1 rl = Tkinter.Label(parent, text = 'Axis and origin relative to') rl.grid(row = row, column = 0, sticky = 'w') row = row + 1 mmf = Tkinter.Frame(parent) mmf.grid(row = row, column = 0, sticky = 'w') row = row + 1 mm = Hybrid.Option_Menu(mmf, 'model ') mm.frame.grid(row = 0, column = 0, sticky = 'w') self.model_menu = mm self.model_name = mm.variable from chimera import openModels openModels.addAddHandler(self.model_list_changed_cb, None) openModels.addRemoveHandler(self.model_list_changed_cb, None) ml = Tkinter.Label(mmf, text = ' coordinates.') ml.grid(row = 0, column = 1, sticky = 'w') self.update_model_menu() self.register_mouse_modes()
def add_marker_set_opened_callback(self, cb): if self.open_handler is None: from chimera import openModels as om self.open_handler = om.addAddHandler(self.open_models_cb, None) self.open_callbacks.append(cb)