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()
예제 #2
0
	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()
예제 #6
0
  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()
예제 #8
0
    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)