예제 #1
0
    def fillInUI(self, parent):

        self.default_color = (0, 0, 0.8, 1)

        t = parent.winfo_toplevel()
        self.toplevel_widget = t
        t.withdraw()

        parent.columnconfigure(0, weight=1)
        row = 0

        import Tkinter
        from CGLtk import Hybrid

        mmf = Tkinter.Frame(parent)
        mmf.grid(row=row, column=0, sticky='w')
        row = row + 1

        mb = Hybrid.Option_Menu(mmf, 'Use mouse ', 'button 1', 'button 2',
                                'button 3', 'ctrl button 1', 'ctrl button 2',
                                'ctrl button 3')
        mb.variable.set('ctrl button 3')
        mb.frame.grid(row=0, column=0, sticky='w')
        mb.add_callback(self.bind_mouse_button_cb)
        self.mouse_button = mb

        mbl = Tkinter.Label(mmf, text=' to choose blobs')
        mbl.grid(row=0, column=1, sticky='w')

        crf = Tkinter.Frame(parent)
        crf.grid(row=row, column=0, sticky='ew')
        crf.columnconfigure(1, weight=1)
        row = row + 1

        cl = Tkinter.Label(crf, text='Color blob ')
        cl.grid(row=0, column=0, sticky='w')

        from CGLtk.color import ColorWell
        sc = ColorWell.ColorWell(crf, color=self.default_color)
        sc.grid(row=0, column=1, sticky='w')
        self.blob_color = sc

        msg = Tkinter.Label(parent, anchor='w', justify='left')
        msg.grid(row=row, column=0, sticky='ew')
        row = row + 1
        self.message_label = msg

        callbacks = (self.mouse_down_cb, self.mouse_drag_cb, self.mouse_up_cb)
        icon = self.mouse_mode_icon('pickblob.gif')
        from chimera import mousemodes
        mousemodes.addFunction('pick blobs', callbacks, icon)

        self.bind_mouse_button_cb()
예제 #2
0
    def fillInUI(self, parent):

        self.toplevel_widget = parent.winfo_toplevel()
        self.toplevel_widget.withdraw()

        parent.columnconfigure(0, weight=1)

        row = 0

        from CGLtk import Hybrid

        self.NORMAL_MOVEMENT = 'Normal'
        self.MOVE_SELECTION = 'Move selection'
        self.MOVE_MOLECULE = 'Move molecule'
        self.MOVE_CHAIN = 'Move chain'
        self.MOVE_SECONDARY_STRUCTURE = 'Move helix, strand, or turn'
        modes = (self.NORMAL_MOVEMENT, self.MOVE_SELECTION, self.MOVE_MOLECULE,
                 self.MOVE_CHAIN, self.MOVE_SECONDARY_STRUCTURE)

        mm = Hybrid.Option_Menu(parent, 'Movement mouse mode ', *modes)
        mm.frame.grid(row=row, column=0, sticky='w')
        self.mode = mm.variable
        mm.add_callback(self.mode_changed_cb)
    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()
예제 #4
0
    def fillInUI(self, parent):

        self.phantom_device = None
        self.cursor_model = None
        self.phantom_handler = None
        self.gradient_force = None
        self.phantom_button_down = 0
        self.last_phantom_transform = None
        self.last_roll = None
        self.key_callback_registered = None
        self.mode = 'cursor'  # 'cursor', 'move models', 'zoom',
        # 'contour level', 'move marker'
        self.command_list_shown = False

        import Tkinter
        from CGLtk import Hybrid

        row = 0

        po = Hybrid.Checkbutton_Row(parent, 'Enable',
                                    ('cursor', 'forces', 'key commands'))
        po.frame.grid(row=row, column=0, sticky='w')
        row = row + 1
        self.phantom_on, self.force_field, self.commands = \
            [c.variable for c in po.checkbuttons]
        self.phantom_on.add_callback(self.settings_changed_cb)
        self.force_field.add_callback(self.settings_changed_cb)
        self.commands.add_callback(self.toggle_commands_cb)

        cf = Tkinter.Frame(parent)
        cf.grid(row=row, column=0, sticky='w')
        row = row + 1

        cs = Hybrid.Option_Menu(cf, 'Cursor shape ', 'cross', 'jack', 'sphere',
                                'volume crosshair')
        cs.frame.grid(row=0, column=0, sticky='nw')
        row = row + 1
        cs.variable.set('jack')
        cs.add_callback(self.settings_changed_cb)
        self.cursor_shape = cs.variable

        from VolumeViewer import active_volume
        v = active_volume()
        if v:
            csize = '%.3g' % (10 * max(v.data.step))
        else:
            csize = '1'
        cs = Hybrid.Entry(cf, ' size ', 5, csize)
        cs.frame.grid(row=0, column=1, sticky='w')
        cs.entry.bind('<KeyPress-Return>', self.settings_changed_cb)
        self.cursor_size = cs.variable

        cl = Tkinter.Label(cf, text=' color ')
        cl.grid(row=0, column=2, sticky='w')

        from CGLtk.color import ColorWell
        cc = ColorWell.ColorWell(cf, callback=self.settings_changed_cb)
        self.cursor_color = cc
        cc.showColor((0, 0.5, 1), doCallback=0)
        cc.grid(row=0, column=3, sticky='w')

        sp = Hybrid.Popup_Panel(parent)
        spf = sp.frame
        spf.grid(row=row, column=0, sticky='news')
        spf.grid_remove()
        spf.columnconfigure(0, weight=1)
        self.settings_panel = sp.panel_shown_variable
        row += 1
        srow = 0

        cb = sp.make_close_button(spf)
        cb.grid(row=srow, column=1, sticky='e')

        pr = Hybrid.Entry(spf, 'Phantom physical range (mm) ', 5, '200')
        pr.frame.grid(row=srow, column=0, sticky='w')
        srow += 1
        pr.entry.bind('<KeyPress-Return>', self.settings_changed_cb)
        self.phantom_range = pr.variable

        mf = Hybrid.Entry(spf, 'Maximum force (lbs) ', 5, '.4')
        mf.frame.grid(row=srow, column=0, sticky='w')
        srow += 1
        mf.entry.bind('<KeyPress-Return>', self.settings_changed_cb)
        self.maximum_force = mf.variable

        af = Hybrid.Checkbutton(spf, 'Auto-adjust force constant', 1)
        af.button.grid(row=srow, column=0, sticky='w')
        srow += 1
        self.auto_adjust_force_constant = af.variable
        self.force_field.add_callback(self.settings_changed_cb)

        fc = Hybrid.Logarithmic_Scale(spf, 'Force constant ', .0001, 100, 1,
                                      '%.2g')
        fc.frame.grid(row=srow, column=0, sticky='ew')
        srow += 1
        fc.set_value(1)
        fc.callback(self.force_constant_changed_cb)
        fc.entry.bind('<KeyPress-Return>', self.force_constant_changed_cb)
        self.force_constant = fc

        vf = Tkinter.Frame(spf)
        vf.grid(row=srow, column=0, sticky='ew')
        srow += 1

        self.label_row(vf, 0, ('', 'x', 'y', 'z'))
        pl = self.label_row(vf, 1, ('Phantom position', '', '', ''))
        self.phantom_position_labels = pl[1:]
        cpl = self.label_row(vf, 2, ('Chimera position', '', '', ''))
        self.chimera_position_labels = cpl[1:]
        vpl = self.label_row(vf, 3, ('Volume position', '', '', ''))
        self.volume_position_labels = vpl[1:]
        vil = self.label_row(vf, 4, ('Volume index', '', '', ''))
        self.volume_index_labels = vil[1:]
        gl = self.label_row(vf, 5, ('Gradient', '', '', ''))
        self.gradient_labels = gl[1:]
        fl = self.label_row(vf, 6, ('Force', '', '', ''))
        self.force_labels = fl[1:]
        dvl = self.label_row(vf, 7, ('Data value', ''))
        self.data_value_label = dvl[1]
예제 #5
0
  def fillInUI(self, parent):

    self.default_radius = 1
    self.default_color = (1,0.6,0.8,.5)      # Pink eraser
    
    t = parent.winfo_toplevel()
    self.toplevel_widget = t
    t.withdraw()

    parent.columnconfigure(0, weight = 1)
    row = 0

    import Tkinter
    from CGLtk import Hybrid

    sh = Hybrid.Checkbutton(parent, 'Show volume-erasing sphere ', True)
    sh.button.grid(row = row, column = 0, sticky = 'w')
    row = row + 1
    self.show_sphere_var = sh.variable
    sh.callback(self.show_sphere_cb)

    crf = Tkinter.Frame(parent)
    crf.grid(row = row, column = 0, sticky = 'ew')
    crf.columnconfigure(2, weight = 1)
    row = row + 1

    cl = Tkinter.Label(crf, text = 'Color')
    cl.grid(row = 0, column = 0, sticky = 'w')
    
    from CGLtk.color import ColorWell
    sc = ColorWell.ColorWell(crf, color = self.default_color,
                             callback = self.change_sphere_color_cb)
    sc.grid(row = 0, column = 1, sticky = 'w')
    self.sphere_color = sc

    rs = Hybrid.Scale(crf, ' Radius ', 0, 30, .1, 2)
    rs.frame.grid(row = 0, column = 2, sticky = 'ew')
    row = row + 1
    rs.callback(self.change_radius_cb)
    rs.entry.bind('<KeyPress-Return>', self.change_radius_cb)
    self.sphere_radius_scale = rs
    
    mmf = Tkinter.Frame(parent)
    mmf.grid(row = row, column = 0, sticky = 'w')
    row = row + 1

    mb = Hybrid.Option_Menu(mmf, 'Use mouse ',
                            'button 1', 'button 2', 'button 3',
                            'ctrl button 1', 'ctrl button 2', 'ctrl button 3')
    mb.variable.set('button 2')
    mb.frame.grid(row = 0, column = 0, sticky = 'w')
    mb.add_callback(self.bind_mouse_button_cb)
    self.mouse_button = mb

    mbl = Tkinter.Label(mmf, text = ' to move sphere')
    mbl.grid(row = 0, column = 1, sticky = 'w')

    ka = Tkinter.Label(parent, text = 'Erase using keyboard accelerator "es".')
    ka.grid(row = row, column = 0, sticky = 'w')
    row = row + 1

    from Accelerators import add_accelerator
    add_accelerator('es', 'Erase volume data inside sphere', self.Erase)
    add_accelerator('eo', 'Erase volume data outside sphere',
                    self.erase_outside_sphere)
예제 #6
0
    def fillInUI(self, parent):

        self.toplevel_widget = parent.winfo_toplevel()
        self.toplevel_widget.withdraw()

        parent.columnconfigure(0, weight=1)

        row = 0

        import Tkinter
        from CGLtk import Hybrid
        from chimera import widgets

        from Surface import surface_models
        sm = widgets.ModelOptionMenu(parent,
                                     labelpos='w',
                                     label_text='Surface ',
                                     listFunc=surface_models,
                                     command=self.surface_menu_cb)
        sm.grid(row=row, column=0, sticky='w')
        self.surface_menu = sm
        row += 1

        ls = Hybrid.Logarithmic_Scale(parent,
                                      'Size ',
                                      1,
                                      1000,
                                      100,
                                      entry_width=8)
        ls.frame.grid(row=row, column=0, sticky='ew')
        row += 1
        ls.callback(self.limit_changed_cb)
        ls.entry.bind('<KeyPress-Return>', self.limit_changed_cb)
        self.limit = ls

        op = Hybrid.Popup_Panel(parent)
        opf = op.frame
        opf.grid(row=row, column=0, sticky='news')
        opf.grid_remove()
        opf.columnconfigure(0, weight=1)
        self.options_panel = op.panel_shown_variable
        row += 1
        orow = 0

        cb = op.make_close_button(opf)
        cb.grid(row=orow, column=1, sticky='e')

        mo = Hybrid.Option_Menu(opf, 'Hide small blobs based on ', 'size',
                                'rank', 'volume')
        mo.frame.grid(row=orow, column=0, sticky='w')
        row += 1
        mo.add_callback(self.method_changed_cb)
        self.method = mo.variable

        # Specify a label width so dialog is not resized for long messages.
        msg = Tkinter.Label(parent, width=40, anchor='w', justify='left')
        msg.grid(row=row, column=0, sticky='ew')
        row = row + 1
        self.message_label = msg

        self.surface_menu_cb()  # Set slider for current surface
    def fillInUI(self, parent):

        self.molecules = []
        self.add_model_handler = None
        self.remove_model_handler = None

        import Tkinter
        from CGLtk import Hybrid

        row = 0

        mm = Hybrid.Option_Menu(parent, 'Molecule: ')
        mm.frame.grid(row=row, column=0, sticky='w')
        row = row + 1
        mm.add_callback(self.molecule_menu_cb)
        self.molecule_menu = mm

        labels = []
        for text in (
                'Space group: ',
                'Cell size: ',
                'Cell angles: ',
                'Number of SMTRY matrices: ',
                'Number of space group symmetries: ',
                'Number of MTRIX matrices: ',
        ):
            lbl = Tkinter.Label(parent, text=text)
            lbl.grid(row=row, column=0, sticky='w')
            row = row + 1
            labels.append(lbl)
        (
            self.space_group,
            self.cell_size,
            self.cell_angles,
            self.smtry_count,
            self.sg_smtry_count,
            self.mtrix_count,
        ) = labels

        op = Hybrid.Popup_Panel(parent)
        opf = op.frame
        opf.grid(row=row, column=0, sticky='news')
        opf.grid_remove()
        opf.columnconfigure(0, weight=1)
        self.options_panel = op.panel_shown_variable
        row += 1
        orow = 0

        cb = op.make_close_button(opf)
        cb.grid(row=orow, column=1, sticky='e')

        usr = Hybrid.Checkbutton(opf, 'Use SMTRY records in PDB header', True)
        usr.button.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.use_smtry_records = usr.variable

        ucr = Hybrid.Checkbutton(
            opf, 'Use CRYST1 record if SMTRY records are missing', True)
        ucr.button.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.use_cryst1_smtry = ucr.variable

        umr = Hybrid.Checkbutton(
            opf, 'Use MTRIX records for non-crystallographic symmetry', True)
        umr.button.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.use_mtrix_records = umr.variable

        co = Hybrid.Entry(opf, 'Cell origin ', 12, '0 0 0')
        co.frame.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.grid_orig = co.variable
        co.entry.bind('<KeyPress-Return>', self.origin_change_cb)

        nc = Hybrid.Entry(opf, 'Number of cells ', 12, '1 1 1')
        nc.frame.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.ncells = nc.variable
        nc.entry.bind('<KeyPress-Return>', self.make_unit_cell_cb)

        br = Hybrid.Button_Row(parent, '', (
            ('Make copies', self.make_unit_cell_cb),
            ('Outline', self.show_outline_cb),
            ('Delete copies', self.close_unit_cell_cb),
        ))
        br.frame.grid(row=row, column=0, sticky='e')
        row = row + 1
예제 #8
0
    def fillInUI(self, parent):

        self.default_radius = 100
        self.surface_model = None
        self.surface_piece = None

        self.toplevel_widget = parent.winfo_toplevel()
        self.toplevel_widget.withdraw()
        parent.columnconfigure(0, weight=1)

        row = 0

        import Tkinter
        from CGLtk import Hybrid

        # Radius
        rs = Hybrid.Scale(parent, 'Radius ', 1, 1000, 0.01,
                          self.default_radius)
        rs.frame.grid(row=row, column=0, sticky='ew')
        row = row + 1
        rs.callback(self.radius_changed_cb)
        rs.entry.bind('<KeyPress-Return>', self.radius_changed_cb)
        self.radius = rs

        # Interpolation factor between icosahedron and sphere
        sf = Hybrid.Scale(parent, 'Sphere factor ', 0, 1, .01, 0)
        sf.frame.grid(row=row, column=0, sticky='ew')
        row = row + 1
        sf.callback(self.sphere_factor_changed_cb)
        sf.entry.bind('<KeyPress-Return>', self.sphere_factor_changed_cb)
        self.sphere_factor = sf

        # Orientation menu
        self.orient_222 = 'xyz 2-fold axes'
        self.orient_222r = 'xyz 2-fold axes, alt'
        self.orient_2n3 = 'x 2-fold, z 3-fold'
        self.orient_2n3r = 'x 2-fold, z 3-fold, alt'
        self.orient_2n5 = 'x 2-fold, z 5-fold'
        self.orient_2n5r = 'x 2-fold, z 5-fold, alt'
        self.orient_n25 = 'y 2-fold, z 5-fold'
        self.orient_n25r = 'y 2-fold, z 5-fold, alt'
        io = Hybrid.Option_Menu(parent, 'Orientation ', self.orient_222,
                                self.orient_222r, self.orient_2n3,
                                self.orient_2n3r, self.orient_2n5,
                                self.orient_2n5r, self.orient_n25,
                                self.orient_n25r)
        io.frame.grid(row=row, column=0, sticky='w')
        io.add_callback(self.show_cb)
        row = row + 1
        self.orientation = io.variable

        # Subdivision factor
        sf = Tkinter.Frame(parent)
        sf.grid(row=row, column=0, sticky='w')
        row = row + 1

        sb = Hybrid.Entry(sf, 'Subdivision factor ', 5, '1')
        sb.frame.grid(row=0, column=0, sticky='w')
        self.subdivision_factor = sb.variable
        sb.entry.bind('<KeyPress-Return>', self.show_cb)

        sp = Tkinter.Label(sf, text='')
        sp.grid(row=0, column=1, sticky='w')
        self.subdivision_spacing = sp

        # Surface style: filled, mesh
        st = Hybrid.Radiobutton_Row(parent, 'Surface style: ',
                                    ('solid', 'mesh'), self.style_changed_cb)
        st.frame.grid(row=row, column=0, sticky='w')
        st.variable.set('mesh', invoke_callbacks=False)
        row = row + 1
        self.surface_style = st.variable

        # Color
        cf = Tkinter.Frame(parent)
        cf.grid(row=row, column=0, sticky='w')
        row = row + 1

        cl = Tkinter.Label(cf, text='Color')
        cl.grid(row=0, column=0, sticky='w')

        initial_color = (.7, .7, .7, 1)
        from CGLtk.color import ColorWell
        cw = ColorWell.ColorWell(cf, callback=self.color_changed_cb)
        cw.showColor(initial_color)
        cw.grid(row=0, column=1, sticky='w')
        self.color = cw

        #
        # Specify a label width so dialog is not resized for long messages.
        #
        msg = Tkinter.Label(parent, width=40, anchor='w', justify='left')
        msg.grid(row=row, column=0, sticky='ew')
        row = row + 1
        self.message_label = msg

        import SimpleSession
        chimera.triggers.addHandler(SimpleSession.SAVE_SESSION,
                                    self.save_session_cb, None)
예제 #9
0
  def fillInUI(self, parent):

    self.filter_widgets = fw = []

    self.toplevel_widget = parent.winfo_toplevel()
    self.toplevel_widget.withdraw()

    parent.columnconfigure(0, weight=1)         # Allow scalebar to expand.
    
    row = 0

    import Tkinter
    from CGLtk import Hybrid

    self.gaussian = 'Gaussian'
    self.median = 'Median 3x3x3'
    self.bin = 'Bin'
    self.laplacian = 'Laplacian'
    self.fourier = 'Fourier Transform'
    self.scale = 'Scale'
    ft = Hybrid.Option_Menu(parent, 'Filter type:',
                            self.gaussian, self.median, self.bin,
                            self.laplacian, self.fourier, self.scale)
    ft.button.configure(indicatoron = False)
    ft.frame.grid(row = row, column = 0, sticky = 'w')
    row += 1
    self.filter_type = ft.variable
    ft.add_callback(self.filter_type_changed_cb)
    
    ws = Hybrid.Scale(parent, 'Width ', 1.0, 10.0, 0.0, 1.0)
    ws.frame.grid(row = row, column = 0, sticky = 'ew')
    row += 1
    ws.callback(self.filter_parameter_changed_cb)
    ws.entry.bind('<KeyPress-Return>', self.filter_cb)
    self.sdev = ws
    Hybrid.Balloon_Help(ws.label, 'Width is one standard deviation.',
                        delay = 0.5)
    fw.append((self.gaussian, ws.frame))
    
    mi = Hybrid.Scale(parent, 'Iterations ', 0, 5, 1, 1, 2)
    mi.frame.grid(row = row, column = 0, sticky = 'ew')
    row += 1
    mi.callback(self.filter_parameter_changed_cb)
    mi.entry.bind('<KeyPress-Return>', self.filter_cb)
    self.median_iterations = mi
    fw.append((self.median, mi.frame))

    bs = Hybrid.Entry(parent, 'Bin size', 5, '2')
    bs.frame.grid(row = row, column = 0, sticky = 'w')
    row += 1
    self.binsize = bs.variable
    bs.entry.bind('<KeyPress-Return>', self.filter_cb)
    fw.append((self.bin, bs.frame))

    sf = Tkinter.Frame(parent)
    sf.grid(row = row, column = 0, sticky = 'w')
    row += 1
    fw.append((self.scale, sf))

    sh = Hybrid.Entry(sf, 'Shift', 5, '0')
    sh.frame.grid(row = 0, column = 0, sticky = 'w')
    self.shift = sh.variable
    sh.entry.bind('<KeyPress-Return>', self.filter_cb)

    sc = Hybrid.Entry(sf, 'Scale', 5, '1')
    sc.frame.grid(row = 0, column = 1, sticky = 'w')
    self.scale_factor = sc.variable
    sc.entry.bind('<KeyPress-Return>', self.filter_cb)

    vt = Hybrid.Option_Menu(sf, 'Value type', 'same', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'float32', 'float64')
    vt.frame.grid(row = 0, column = 2, sticky = 'w')
    self.value_type = vt.variable

    op = Hybrid.Popup_Panel(parent)
    opf = op.frame
    opf.grid(row = row, column = 0, sticky = 'news')
    opf.grid_remove()
    opf.columnconfigure(0, weight=1)
    self.options_panel = op.panel_shown_variable
    row += 1
    orow = 0

    cb = op.make_close_button(opf)
    cb.grid(row = orow, column = 1, sticky = 'e')
 
    sr = Hybrid.Checkbutton(opf, 'Displayed subregion only', True)
    sr.button.grid(row = orow, column = 0, sticky = 'w')
    orow += 1
    self.use_subregion = sr.variable

    ss = Hybrid.Checkbutton(opf, 'Displayed subsampling only', False)
    ss.button.grid(row = orow, column = 0, sticky = 'w')
    orow += 1
    self.use_step = ss.variable

    ta = Hybrid.Checkbutton(opf, 'Adjust threshold for constant volume', True)
    ta.button.grid(row = orow, column = 0, sticky = 'w')
    orow += 1
    self.adjust_thresholds = ta.variable

    iu = Hybrid.Checkbutton(opf, 'Immediate update', False)
    iu.button.grid(row = orow, column = 0, sticky = 'w')
    orow += 1
    self.immediate_update = iu.variable

    self.filter_type_changed_cb()
    self.set_scale_range(initial = True)
예제 #10
0
    def fillInUI(self, parent):

        self.toplevel_widget = parent.winfo_toplevel()
        self.toplevel_widget.withdraw()

        parent.columnconfigure(0, weight=1)
        row = 0

        import Tkinter
        from CGLtk import Hybrid
        from chimera import widgets

        from SurfaceColor import colorable_surface_models
        sm = widgets.ModelOptionMenu(parent,
                                     labelpos='w',
                                     label_text='Color surface ',
                                     listFunc=colorable_surface_models,
                                     command=self.surface_menu_cb)
        sm.grid(row=row, column=0, sticky='w')
        self.surface_menu = sm
        row = row + 1

        from SurfaceColor import coloring_methods
        methods = [cm.menu_name for cm in coloring_methods]
        csm = Hybrid.Option_Menu(parent, 'by ', *methods)
        csm.frame.grid(row=row, column=0, sticky='w')
        self.color_source_menu = csm.variable
        csm.add_callback(self.color_source_changed_cb)
        row = row + 1

        from VolumeViewer import Volume_Menu
        vm = Volume_Menu(parent, 'file', open_button='browse...')
        vm.frame.grid(row=row, column=0, sticky='w')
        self.volume_menu = vm
        row += 1

        oaf = Tkinter.Frame(parent)
        oaf.grid(row=row, column=0, sticky='w')
        row = row + 1
        self.origin_axis_frame = oaf

        oe = Hybrid.Entry(oaf, 'origin ', 8, '0 0 0')
        oe.frame.grid(row=0, column=0, sticky='w')
        self.origin_variable = oe.variable
        oe.entry.bind('<KeyPress-Return>', self.settings_changed_cb)

        cb = Tkinter.Button(oaf, text='center', command=self.set_center_cb)
        cb.grid(row=0, column=1, sticky='w')

        ae = Hybrid.Entry(oaf, 'axis ', 8, '0 0 1')
        ae.frame.grid(row=0, column=2, sticky='w')
        self.axis_frame = ae.frame
        self.axis_variable = ae.variable
        ae.entry.bind('<KeyPress-Return>', self.settings_changed_cb)

        cg = Colorwell_GUI(parent, 5, self.settings_changed_cb)
        cg.set_color_palette('rainbow')
        self.colormap_gui = cg
        self.colormap_gui.frame.grid(row=row, column=0, sticky='w')
        row = row + 1

        op = Hybrid.Popup_Panel(parent)
        opf = op.frame
        opf.grid(row=row, column=0, sticky='news')
        opf.grid_remove()
        opf.columnconfigure(0, weight=1)
        self.options_panel = op.panel_shown_variable
        row += 1
        orow = 0

        cb = op.make_close_button(opf)
        cb.grid(row=orow, column=1, sticky='ne')

        cf = Tkinter.Frame(opf)
        cf.grid(row=orow, column=0, sticky='w')
        orow += 1

        color_counts = ('2', '3', '5', '10', '15', '20')
        cc = Hybrid.Option_Menu(cf, 'Colors ', *color_counts)
        cc.frame.grid(row=0, column=0, sticky='w')
        self.color_count = cc.variable
        self.color_count.set('5')
        cc.add_callback(self.change_color_count_cb)

        cpat = ('Rainbow', 'Gray', 'Red-Blue', 'Cyan-Maroon')
        cp = Hybrid.Option_Menu(cf, 'Palette', *cpat)
        cp.frame.grid(row=0, column=1, sticky='w')
        self.palette = cp.variable
        cp.add_callback(self.change_color_palette_cb)

        rc = Tkinter.Button(cf, text='Reverse', command=self.reverse_colors_cb)
        rc.grid(row=0, column=2, sticky='w')

        ckb = Tkinter.Button(opf,
                             text="Create color key",
                             command=self.colormap_gui.color_key_cb)
        ckb.grid(row=orow, column=0, sticky='w')
        orow += 1

        dcf = Tkinter.Frame(opf)
        dcf.grid(row=orow, column=0, sticky='w')
        orow += 1

        db = Tkinter.Button(dcf,
                            text='Set',
                            command=self.show_default_colormap_values)
        db.grid(row=0, column=0, sticky='w')

        dt = Tkinter.Label(dcf, text=' full range of surface values')
        dt.grid(row=0, column=1, sticky='w')

        so = Hybrid.Entry(opf, 'Surface offset ', 5, '1.4')
        so.frame.grid(row=orow, column=0, sticky='w')
        self.surface_offset = so.variable
        self.surface_offset_frame = so.frame
        orow += 1
        so.entry.bind('<KeyPress-Return>', self.settings_changed_cb)

        ocf = Tkinter.Frame(opf)
        ocf.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.outside_color_frame = ocf

        ocl = Tkinter.Label(ocf, text='Color outside volume')
        ocl.grid(row=0, column=0, sticky='w')

        outside_color = (.5, .5, .5, 1)
        from CGLtk.color import ColorWell
        cw = ColorWell.ColorWell(ocf)
        cw.showColor(outside_color)
        cw.grid(row=0, column=1, sticky='w')
        self.outside_color = cw

        co = Hybrid.Checkbutton(opf, 'Only color sliced surface face', 0)
        co.button.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.color_caps_only = co.variable

        ppc = Hybrid.Checkbutton(opf, 'Per-pixel coloring', False)
        ppc.button.grid(row=orow, column=0, sticky='w')
        orow += 1
        self.per_pixel_color = ppc.variable

        #
        # Specify a label width so dialog is not resized for long messages.
        #
        msg = Tkinter.Label(parent, width=40, anchor='w', justify='left')
        msg.grid(row=row, column=0, sticky='ew')
        row = row + 1
        self.message_label = msg

        # Show current coloring if one already exists from session restore.
        self.surface_menu_cb()

        # Show axix, origin, volume widgets if appropriate.
        self.color_source_changed_cb()