def build_gui(self, container): vbox, sw, self.orientation = Widgets.get_oriented_box(container) captions = (('Color:', 'label', 'mask color', 'combobox'), ('Alpha:', 'label', 'mask alpha', 'entry')) w, b = Widgets.build_info(captions) self.w.update(b) combobox = b.mask_color for name in self._color_options: combobox.append_text(name) b.mask_color.set_index(self._color_options.index(self.maskcolor)) b.mask_color.add_callback('activated', self.set_maskcolor_cb) b.mask_alpha.set_tooltip('Mask alpha (transparency)') b.mask_alpha.set_text(str(self.maskalpha)) b.mask_alpha.add_callback('activated', lambda w: self.set_maskalpha()) container.add_widget(w, stretch=0) treeview = Widgets.TreeView(auto_expand=True, sortable=True, selection='multiple', use_alt_row_color=True) self.treeview = treeview treeview.setup_table(self.columns, 2, 'ID') treeview.add_callback('selected', self.hl_table2canvas) container.add_widget(treeview, stretch=1) captions = (('Load Mask', 'button'), ('Show', 'button', 'Hide', 'button', 'Forget', 'button')) w, b = Widgets.build_info(captions) self.w.update(b) b.load_mask.set_tooltip('Load mask image') b.load_mask.add_callback('activated', lambda w: self.load_mask_cb()) b.show.set_tooltip('Show masks') b.show.add_callback('activated', lambda w: self.redo()) b.hide.set_tooltip('Hide masks') b.hide.add_callback('activated', lambda w: self.clear_mask()) b.forget.set_tooltip('Forget masks') b.forget.add_callback('activated', lambda w: self.forget_masks()) container.add_widget(w, stretch=0) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(3) btn = Widgets.Button('Close') btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) container.add_widget(btns, stretch=0) self.gui_up = True # Initialize mask file selection dialog self.mfilesel = FileSelection(self.fv.w.root.get_widget()) # Populate table self.redo()
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Ruler") captions = (('Units:', 'label', 'Units', 'combobox'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b combobox = b.units for name in self.unittypes: combobox.append_text(name) index = self.unittypes.index(self.units) combobox.set_index(index) combobox.add_callback('activated', lambda w, idx: self.set_units()) fr.set_widget(w) vbox.add_widget(fr, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw a ruler") self.w.btn_draw = btn1 hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit a ruler") self.w.btn_edit = btn2 hbox.add_widget(btn2) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Limits") captions = (('Opacity:', 'label', 'Opacity', 'spinfloat'), ('Hi color:', 'label', 'Hi color', 'combobox'), ('Hi limit:', 'label', 'Hi value', 'entry'), ('Lo color:', 'label', 'Lo color', 'combobox'), ('Lo limit:', 'label', 'Lo value', 'entry'), ('Redo', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.opacity.set_decimals(2) b.opacity.set_limits(0.0, 1.0, incr_value=0.1) b.opacity.set_value(self.opacity) b.opacity.add_callback('value-changed', lambda *args: self.redo()) combobox = b.hi_color for name in self.colornames: combobox.append_text(name) index = self.colornames.index(self.hi_color) combobox.set_index(index) combobox.add_callback('activated', lambda *args: self.redo()) b.hi_value.set_length(22) if self.hi_value is not None: b.hi_value.set_text(str(self.hi_value)) b.hi_value.add_callback('activated', lambda *args: self.redo()) combobox = b.lo_color for name in self.colornames: combobox.append_text(name) index = self.colornames.index(self.lo_color) combobox.set_index(index) combobox.add_callback('activated', lambda *args: self.redo()) b.lo_value.set_length(22) if self.lo_value is not None: b.lo_value.set_text(str(self.lo_value)) b.lo_value.add_callback('activated', lambda *args: self.redo()) b.redo.add_callback('activated', lambda *args: self.redo()) fr.set_widget(w) vbox.add_widget(fr, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container, fill=True) vbox.set_border_width(4) vbox.set_spacing(2) self.msg_font = self.fv.get_font("sansFont", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(self.msg_font) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("Pixel Values") # We just use a ginga widget to implement the pixtable pixview = Viewers.CanvasView(logger=self.logger) width, height = 300, 300 pixview.set_desired_size(width, height) bg = colors.lookup_color('#202030') pixview.set_bg(*bg) bd = pixview.get_bindings() self.pixview = pixview self.pix_w = Viewers.ScrolledView(pixview) self.pix_w.resize(width, height) fr.set_widget(self.pix_w) vbox.add_widget(fr, stretch=1) self._rebuild_table() btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) cbox1 = Widgets.ComboBox() index = 0 for i in self.sizes: j = 1 + i * 2 name = "%dx%d" % (j, j) cbox1.append_text(name) index += 1 index = self.sizes.index(self.pixtbl_radius) cbox1.set_index(index) cbox1.add_callback('activated', self.set_cutout_size_cb) cbox1.set_tooltip("Select size of pixel table") btns.add_widget(cbox1, stretch=0) # control for selecting a mark cbox2 = Widgets.ComboBox() for tag in self.marks: cbox2.append_text(tag) if self.mark_selected is None: cbox2.set_index(0) else: cbox2.show_text(self.mark_selected) cbox2.add_callback('activated', self.mark_select_cb) self.w.marks = cbox2 cbox2.set_tooltip("Select a mark") #cbox2.setMinimumContentsLength(8) btns.add_widget(cbox2, stretch=0) btn1 = Widgets.Button("Delete") btn1.add_callback('activated', lambda w: self.clear_mark_cb()) btn1.set_tooltip("Delete selected mark") btns.add_widget(btn1, stretch=0) btn2 = Widgets.Button("Delete All") btn2.add_callback('activated', lambda w: self.clear_all()) btn2.set_tooltip("Clear all marks") btns.add_widget(btn2, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) vbox2 = Widgets.VBox() vbox2.add_widget(btns, stretch=0) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) btn3 = Widgets.CheckBox("Pan to mark") btn3.set_state(self.pan2mark) btn3.add_callback('activated', self.pan2mark_cb) btn3.set_tooltip("Pan follows selected mark") btns.add_widget(btn3) btns.add_widget(Widgets.Label(''), stretch=1) vbox2.add_widget(btns, stretch=0) captions = [ ('Font size:', 'label', 'Font size', 'combobox'), ] w, b = Widgets.build_info(captions) self.w.update(b) vbox2.add_widget(w, stretch=0) b.font_size.set_tooltip("Set font size for pixel display") for size in (8, 9, 10, 11, 12, 14, 16): b.font_size.append_text(str(size)) b.font_size.show_text(str(self.fontsize)) b.font_size.add_callback('activated', self.set_font_size_cb) vbox2.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(vbox2, stretch=1) ## spacer = Widgets.Label('') ## vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(4) # create the Treeview always_expand = self.settings.get('always_expand', False) color_alternate = self.settings.get('color_alternate_rows', True) treeview = Widgets.TreeView(auto_expand=always_expand, sortable=True, selection='multiple', use_alt_row_color=color_alternate) self.treeview = treeview treeview.setup_table(self.columns, 2, 'NAME') treeview.add_callback('activated', self.dblclick_cb) treeview.add_callback('selected', self.select_cb) vbox.add_widget(treeview, stretch=1) btns = Widgets.HBox() btns.set_spacing(4) b1 = Widgets.Button('Display') b1.add_callback('activated', self.display_cb) b1.set_tooltip("Display the selected object in its channel viewer") b1.set_enabled(False) btns.add_widget(b1) b2 = Widgets.Button('Move') b2.add_callback('activated', lambda w: self.ask_action_images('move')) b2.set_tooltip("Move the selected objects to a channel") b2.set_enabled(False) btns.add_widget(b2) b3 = Widgets.Button('Copy') b3.add_callback('activated', lambda w: self.ask_action_images('copy')) b3.set_tooltip("Copy the selected objects to a channel") b3.set_enabled(False) btns.add_widget(b3) b4 = Widgets.Button('Remove') b4.add_callback('activated', lambda w: self.ask_action_images('remove')) b4.set_tooltip("Remove the selected objects from a channel") b4.set_enabled(False) btns.add_widget(b4) btns.add_widget(Widgets.Label(''), stretch=1) self.btn_list = [b1, b2, b3, b4] self._rebuild_channels() vbox.add_widget(btns, stretch=0) if self.settings.get('closeable', False): btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(btns, stretch=0) container.add_widget(vbox, stretch=1) self.gui_up = True
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container, fill=True) vbox.set_border_width(4) vbox.set_spacing(2) self.msgFont = self.fv.getFont("sansFont", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(self.msgFont) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("Pixel Values") # Make the values table as a text widget msgFont = self.fv.getFont('fixedFont', 10) tw = Widgets.TextArea(wrap=False, editable=False) #tw.cfg_expand(1, 1) tw.set_font(msgFont) self.tw = tw ## sw1 = Widgets.ScrollArea() ## sw1.set_widget(tw) vbox2 = Widgets.VBox() vbox2.add_widget(tw) ## vbox2.add_widget(sw1) ## vbox2.add_widget(Widgets.Label(''), stretch=1) fr.set_widget(vbox2) vbox.add_widget(fr, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) cbox1 = Widgets.ComboBox() index = 0 for i in self.sizes: j = 1 + i * 2 name = "%dx%d" % (j, j) cbox1.append_text(name) index += 1 index = self.sizes.index(self.pixtbl_radius) cbox1.set_index(index) cbox1.add_callback('activated', self.set_cutout_size) cbox1.set_tooltip("Select size of pixel table") btns.add_widget(cbox1, stretch=0) # control for selecting a mark cbox2 = Widgets.ComboBox() for tag in self.marks: cbox2.append_text(tag) if self.mark_selected is None: cbox2.set_index(0) else: cbox2.show_text(self.mark_selected) cbox2.add_callback('activated', self.mark_select_cb) self.w.marks = cbox2 cbox2.set_tooltip("Select a mark") #cbox2.setMinimumContentsLength(8) btns.add_widget(cbox2, stretch=0) btn1 = Widgets.Button("Delete") btn1.add_callback('activated', lambda w: self.clear_mark_cb()) btn1.set_tooltip("Delete selected mark") btns.add_widget(btn1, stretch=0) btn2 = Widgets.Button("Delete All") btn2.add_callback('activated', lambda w: self.clear_all()) btn2.set_tooltip("Clear all marks") btns.add_widget(btn2, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) vbox2 = Widgets.VBox() vbox2.add_widget(btns, stretch=0) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) btn3 = Widgets.CheckBox("Pan to mark") btn3.set_state(self.pan2mark) btn3.add_callback('activated', self.pan2mark_cb) btn3.set_tooltip("Pan follows selected mark") btns.add_widget(btn3) btns.add_widget(Widgets.Label(''), stretch=1) vbox2.add_widget(btns, stretch=0) vbox2.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(vbox2, stretch=1) ## spacer = Widgets.Label('') ## vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): """Build GUI such that image list area is maximized.""" vbox, sw, orientation = Widgets.get_oriented_box(container) captions = (('Channel:', 'label', 'Channel Name', 'combobox', 'Modified only', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.channel_name.set_tooltip('Channel for locating images to save') b.channel_name.add_callback('activated', self.select_channel_cb) mod_only = self.settings.get('modified_only', True) b.modified_only.set_state(mod_only) b.modified_only.add_callback('activated', lambda *args: self.redo()) b.modified_only.set_tooltip("Show only locally modified images") container.add_widget(w, stretch=0) captions = (('Path:', 'llabel', 'OutDir', 'entry', 'Browse', 'button'), ('Suffix:', 'llabel', 'Suffix', 'entry')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.outdir.set_text(self.outdir) b.outdir.set_tooltip('Output directory') b.outdir.add_callback('activated', lambda w: self.set_outdir()) b.browse.set_tooltip('Browse for output directory') b.browse.add_callback('activated', lambda w: self.browse_outdir()) b.suffix.set_text(self.suffix) b.suffix.set_tooltip('Suffix to append to filename') b.suffix.add_callback('activated', lambda w: self.set_suffix()) container.add_widget(w, stretch=0) self.treeview = Widgets.TreeView(auto_expand=True, sortable=True, selection='multiple', use_alt_row_color=True) self.treeview.setup_table(self.columns, 1, 'IMAGE') self.treeview.add_callback('selected', self.toggle_save_cb) container.add_widget(self.treeview, stretch=1) captions = (('Status', 'llabel'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.status.set_text('') b.status.set_tooltip('Status message') container.add_widget(w, stretch=0) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(3) btn = Widgets.Button('Save') btn.set_tooltip('Save selected image(s)') btn.add_callback('activated', lambda w: self.save_images()) btn.set_enabled(False) btns.add_widget(btn, stretch=0) self.w.save = btn btn = Widgets.Button('Close') btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) container.add_widget(btns, stretch=0) self.gui_up = True # Initialize directory selection dialog self.dirsel = DirectorySelection(self.fv.w.root.get_widget()) # Generate initial listing self.update_channels()
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Compositing") captions = ( ("Compose Type:", 'label', "Compose Type", 'combobox'), ("New Image", 'button', "Insert from Channel", 'button'), ) w, b = Widgets.build_info(captions) self.w.update(b) fr.set_widget(w) vbox.add_widget(fr, stretch=0) combobox = b.compose_type index = 0 for name in ('Alpha', 'RGB'): combobox.append_text(name) index += 1 combobox.set_index(1) b.new_image.add_callback('activated', lambda w: self.new_cb()) b.new_image.set_tooltip("Start a new composite image") b.insert_from_channel.add_callback('activated', lambda w: self.insert_cb()) b.insert_from_channel.set_tooltip("Insert channel image as layer") zi = Viewers.CanvasView(logger=None) zi.set_desired_size(self._wd, self._ht) zi.enable_autozoom('on') zi.enable_autocuts('off') zi.cut_levels(0, 255) zi.set_bg(0.4, 0.4, 0.4) zi.set_name('compose_image') self.preview_image = zi bd = zi.get_bindings() bd.enable_zoom(True) bd.enable_pan(True) bd.enable_flip(True) bd.enable_cuts(True) bd.enable_cmap(True) iw = Viewers.GingaViewerWidget(zi) iw.resize(self._wd, self._ht) zi.get_canvas().add(self.canvas) self.canvas.set_surface(zi) self.canvas.ui_set_active(True) fr = Widgets.Frame("Preview") fr.set_widget(iw) vpaned = Widgets.Splitter(orientation=orientation) vpaned.add_widget(fr) # spacer vpaned.add_widget(Widgets.Label('')) fr = Widgets.Frame("Layers") self.w.scales = fr #vpaned.add_widget(fr) vbox.add_widget(vpaned, stretch=1) vbox.add_widget(fr, stretch=0) captions = ( ("Save Image As", 'button', "Save Path", 'entry'), ("Save to Channel", 'button'), ) w, b = Widgets.build_info(captions) self.w.update(b) b.save_to_channel.add_callback('activated', lambda w: self.save_to_channel_cb()) b.save_to_channel.set_tooltip("Save composite image to channel") b.save_image_as.add_callback('activated', lambda w: self.save_as_cb()) self.entry2 = b.save_path self.entry2.add_callback('activated', lambda *args: self.save_as_cb()) vbox.add_widget(w, stretch=0) top.add_widget(vbox, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True
def build_gui(self, container): if not have_imexam: raise Exception("Please install 'imexam' to use this plugin") top = Widgets.VBox() top.set_border_width(4) fontsize = self.settings.get('fontsize', 12) msg_font = self.fv.get_font('sans', fontsize) tw = Widgets.TextArea(wrap=False, editable=False) tw.set_font(msg_font) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) top.add_widget(fr, stretch=0) fr = Widgets.Frame("Imexam output:") if not self._plots_in_ws: splitter = Widgets.Splitter(orientation='vertical') self.nb = Widgets.TabWidget() splitter.add_widget(self.nb) # this holds the messages returned from imexamine tw = Widgets.TextArea(wrap=False, editable=False) font = self.settings.get('font', 'Courier') fixed_font = self.fv.get_font(font, fontsize) tw.set_font(fixed_font) self.msg_res = tw if not self._plots_in_ws: splitter.add_widget(tw) fr.set_widget(splitter) else: fr.set_widget(tw) top.add_widget(fr, stretch=1) hbox = Widgets.HBox() btn = Widgets.Button('Detach Plot') btn.add_callback('activated', self.detach_plot_cb) btn.set_tooltip("Detach current plot and start a new one") hbox.add_widget(btn, stretch=0) btn = Widgets.Button('Clear Text') btn.add_callback('activated', self.clear_text_cb) btn.set_tooltip("Clear the imexam output") hbox.add_widget(btn, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) top.add_widget(hbox, stretch=0) top.add_widget(hbox, stretch=0) hbox = Widgets.HBox() lbl = Widgets.Label("Keys active:") hbox.add_widget(lbl) btn1 = Widgets.RadioButton("On") btn1.set_state(self.imexam_active) btn1.add_callback('activated', lambda w, val: self.set_active_cb(True, val)) btn1.set_tooltip("Enable imexam keys") self.w.btn_on = btn1 hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Off", group=btn1) btn2.set_state(not self.imexam_active) btn2.add_callback('activated', lambda w, val: self.set_active_cb(False, val)) btn2.set_tooltip("Disable imexam keys") self.w.btn_off = btn2 hbox.add_widget(btn2) hbox.add_widget(Widgets.Label(''), stretch=1) top.add_widget(hbox, stretch=0) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) self._plot = None self._plot_w = None self._plot_idx = 0 self.make_new_figure() container.add_widget(top, stretch=1)
def _create_info_window(self): sw = Widgets.ScrollArea() vbox = Widgets.VBox() sw.set_widget(vbox) captions = ( ('Name:', 'label', 'Name', 'llabel'), ('Object:', 'label', 'Object', 'llabel'), ('X:', 'label', 'X', 'llabel'), ('Y:', 'label', 'Y', 'llabel'), ('Value:', 'label', 'Value', 'llabel'), ('RA:', 'label', 'RA', 'llabel'), ('DEC:', 'label', 'DEC', 'llabel'), ('Equinox:', 'label', 'Equinox', 'llabel'), ('Dimensions:', 'label', 'Dimensions', 'llabel'), ('Min:', 'label', 'Min', 'llabel'), ('Max:', 'label', 'Max', 'llabel'), ) w, b = Widgets.build_info(captions) col = Widgets.VBox() row = Widgets.HBox() row.set_spacing(0) row.set_border_width(0) row.add_widget(w, stretch=0) row.add_widget(Widgets.Label(''), stretch=1) col.add_widget(row, stretch=0) #col.add_widget(Widgets.Label(''), stretch=1) sw2 = Widgets.ScrollArea() sw2.set_widget(col) vbox.add_widget(sw2, stretch=2) # stretcher vbox.add_widget(Widgets.Label(''), stretch=1) captions = ( ('Zoom:', 'label', 'Zoom', 'llabel'), ('Cut Low:', 'label', 'Cut Low Value', 'llabel', 'Cut Low', 'entry'), ('Cut High:', 'label', 'Cut High Value', 'llabel', 'Cut High', 'entry'), ('Auto Levels', 'button', 'spacer1', 'spacer', 'Cut Levels', 'button'), ('Cut New:', 'label', 'Cut New', 'llabel'), ('Zoom New:', 'label', 'Zoom New', 'llabel'), ('Center New:', 'label', 'Center New', 'llabel'), ) w, b2 = Widgets.build_info(captions) b.update(b2) # TODO: need a more general solution to gtk labels resizing their # parent window #b.object.set_length(12) b.cut_levels.set_tooltip("Set cut levels manually") b.auto_levels.set_tooltip("Set cut levels by algorithm") b.cut_low.set_tooltip("Set low cut level (press Enter)") b.cut_low_value.set_text('') b.cut_high.set_tooltip("Set high cut level (press Enter)") b.cut_high_value.set_text('') b.cut_new.set_text('') b.zoom_new.set_text('') b.center_new.set_text('') row = Widgets.HBox() row.set_spacing(0) row.set_border_width(0) row.add_widget(w, stretch=0) ## row.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(row, stretch=0) return sw, b
def build_gui(self, container): """Build the Dialog""" self.logger.debug('Called.') # Setup for options vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) # Instructions self.msgFont = self.fv.getFont("sansFont", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(self.msgFont) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) # Mode administration modes = Widgets.Frame('Region Editing') mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() hbox.set_border_width(4) btn1 = Widgets.RadioButton("Move") btn1.set_state(mode == 'move') btn1.add_callback( 'activated', lambda w, val: self.set_mode_cb('move', val) ) btn1.set_tooltip("Choose this to position region") self.w.btn_move = btn1 hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Draw", group=btn1) btn2.set_state(mode == 'draw') btn2.add_callback( 'activated', lambda w, val: self.set_mode_cb('draw', val) ) btn2.set_tooltip("Choose this to draw a replacement region") self.w.btn_draw = btn2 hbox.add_widget(btn2) btn3 = Widgets.RadioButton("Edit", group=btn1) btn3.set_state(mode == 'edit') btn3.add_callback( 'activated', lambda w, val: self.set_mode_cb('edit', val) ) btn3.set_tooltip("Choose this to edit a region") self.w.btn_edit = btn3 hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) modes.set_widget(hbox) # Coordinates coords = Widgets.Frame('WCS Reference') hbox = Widgets.HBox() hbox.set_border_width(4) hbox.set_spacing(4) for option, tooltip in _coords_options: btn = Widgets.RadioButton(option) btn.set_state(option == _def_coords) btn.add_callback( 'activated', lambda widget, state, option=option: self.set_coords( option, state) ) btn.set_tooltip(tooltip) hbox.add_widget(btn) hbox.add_widget(Widgets.Label(''), stretch=1) coords.set_widget(hbox) # Basic plugin admin buttons btns = Widgets.HBox() btns.set_spacing(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btns.add_widget(Widgets.Label(''), stretch=1) # Layout the options vbox.add_widget(fr, stretch=0) vbox.add_widget(coords, stretch=0) vbox.add_widget(modes, stretch=0) # Layout top level framing vtop = Widgets.VBox() vtop.set_border_width(4) vtop.add_widget(sw, stretch=1) # Magic: sw contains vbox vtop.add_widget(btns, stretch=0) # Options completed. container.add_widget(vtop, stretch=1) # Postage stamps if self.pstamps is not None: return pstamps_frame = self.fv.w['pstamps'] self.pstamps_show = False pstamps = Widgets.HBox() w = pstamps.get_widget() self.logger.debug('layout="{}"'.format( pstamps_frame.get_widget().layout())) self.logger.debug('pstamps.w="{}"'.format(w)) w.setMinimumHeight(100) pstamps_frame.add_widget(pstamps) self.pstamps = pstamps self.pstamps_frame = pstamps_frame
def build_gui(self, container): canvas = self.dc.DrawingCanvas() canvas.enable_draw(False) ## canvas.set_callback('none-move', self.cursormotion) canvas.add_callback('key-press', self.window_key_press) canvas.add_callback('key-release', self.window_key_release) self.canvas = canvas vbox = Widgets.VBox() fr = Widgets.Frame("IRAF") captions = [ ("Addr:", 'label', "Addr", 'llabel', 'Restart', 'button'), ("Set Addr:", 'label', "Set Addr", 'entry'), ("Control", 'hbox'), ("Channel:", 'label', 'Channel', 'llabel'), ] w, b = Widgets.build_info(captions) self.w.update(b) addr = str(self.addr.name) b.addr.set_text(addr) b.restart.set_tooltip("Restart the server") b.restart.add_callback('activated', self.restart_cb) b.set_addr.set_length(100) b.addr.set_text(addr) b.set_addr.set_tooltip("Set address to run remote control server") b.set_addr.add_callback('activated', self.set_addr_cb) self.w.mode_d = {} btn1 = Widgets.RadioButton("Ginga") btn1.set_state(True) btn1.add_callback('activated', lambda w, val: self.switch_mode('ginga')) self.w.mode_d['ginga'] = btn1 self.w.control.add_widget(btn1) btn2 = Widgets.RadioButton("IRAF", group=btn1) btn2.add_callback('activated', lambda w, val: self.switch_mode('iraf')) self.w.mode_d['iraf'] = btn2 self.w.control.add_widget(btn2) fr.set_widget(w) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("Frame/Channel") lbl = Widgets.Label("") self.w.frch = lbl fr.set_widget(lbl) vbox.add_widget(fr, stretch=0) # stretch vbox.add_widget(Widgets.Label(''), stretch=1) btns = Widgets.HBox() btns.set_spacing(4) btns.set_border_width(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(btns) container.add_widget(vbox, stretch=1) self.gui_up = True fmap = self.get_channel_frame_mapping() self.update_chinfo(fmap)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) self.msgFont = self.fv.getFont("sansFont", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(self.msgFont) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("Blink") vbox2 = Widgets.VBox() captions = (("Interval:", 'label', 'Interval', 'entry', "Start Blink", 'button', "Stop Blink", 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b b.interval.set_text(str(self.interval)) b.interval.add_callback('activated', lambda w: self._set_interval_cb()) b.interval.set_tooltip("Interval in seconds between changing images") b.start_blink.add_callback('activated', lambda w: self._start_blink_cb()) b.stop_blink.add_callback('activated', lambda w: self._stop_blink_cb()) vbox2.add_widget(w, stretch=0) hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Blink channels") btn1.add_callback('activated', lambda w, tf: self._set_blink_mode_cb(tf == True)) btn1.set_tooltip("Choose this to blink across channels") btn1.set_state(self.blink_channels) self.w.blink_channels = btn1 hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Blink images in channel", group=btn1) btn2.set_state(not self.blink_channels) btn2.add_callback('activated', lambda w, tf: self._set_blink_mode_cb(tf == False)) btn2.set_tooltip("Choose this to blink images within a channel") self.w.blink_within = btn2 hbox.add_widget(btn2) hbox.add_widget(Widgets.Label(''), stretch=1) vbox2.add_widget(hbox, stretch=0) fr.set_widget(vbox2) vbox.add_widget(fr, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) # Make the cuts plot vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_margins(4, 4, 4, 4) vbox.set_spacing(2) msgFont = self.fv.getFont("sansFont", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(msgFont) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) vbox.add_widget(fr, stretch=0) # Add Tab Widget nb = Widgets.TabWidget(tabpos='top') vbox.add_widget(nb, stretch=1) self.cuts_plot = plots.CutsPlot(logger=self.logger, width=400, height=400) self.plot = Plot.PlotWidget(self.cuts_plot) self.plot.resize(400, 400) ax = self.cuts_plot.add_axis() ax.grid(True) self.slit_plot = plots.Plot(logger=self.logger, width=400, height=400) self.slit_plot.add_axis(axisbg='black') self.plot2 = Plot.PlotWidget(self.slit_plot) self.plot2.resize(400, 400) captions = (('Cut:', 'label', 'Cut', 'combobox', 'New Cut Type:', 'label', 'Cut Type', 'combobox'), ('Delete Cut', 'button', 'Delete All', 'button'), ('Save', 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) # control for selecting a cut combobox = b.cut for tag in self.tags: combobox.append_text(tag) combobox.show_text(self.cutstag) combobox.add_callback('activated', self.cut_select_cb) self.w.cuts = combobox combobox.set_tooltip("Select a cut to redraw or delete") # control for selecting cut type combobox = b.cut_type for cuttype in self.cuttypes: combobox.append_text(cuttype) self.w.cuts_type = combobox index = self.cuttypes.index(self.cuttype) combobox.set_index(index) combobox.add_callback('activated', self.set_cutsdrawtype_cb) combobox.set_tooltip("Choose the cut type to draw") self.save_cuts = b.save self.save_cuts.set_tooltip("Save cuts plot and data") self.save_cuts.add_callback('activated', lambda w: self.save_cb(mode='cuts')) self.save_cuts.set_enabled(self.save_enabled) btn = b.delete_cut btn.add_callback('activated', self.delete_cut_cb) btn.set_tooltip("Delete selected cut") btn = b.delete_all btn.add_callback('activated', self.delete_all_cb) btn.set_tooltip("Clear all cuts") vbox2 = Widgets.VBox() vbox2.add_widget(w, stretch=0) exp = Widgets.Expander("Cut Width") captions = (('Width Type:', 'label', 'Width Type', 'combobox', 'Width radius:', 'label', 'Width radius', 'spinbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) # control for selecting width cut type combobox = b.width_type for atype in self.widthtypes: combobox.append_text(atype) index = self.widthtypes.index(self.widthtype) combobox.set_index(index) combobox.add_callback('activated', self.set_width_type_cb) combobox.set_tooltip("Direction of summation orthogonal to cut") sb = b.width_radius sb.add_callback('value-changed', self.width_radius_changed_cb) sb.set_tooltip("Radius of cut width") sb.set_limits(1, 100) sb.set_value(self.width_radius) fr = Widgets.Frame() fr.set_widget(w) exp.set_widget(fr) vbox2.add_widget(exp, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Move") btn1.set_state(mode == 'move') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('move', val)) btn1.set_tooltip("Choose this to position cuts") self.w.btn_move = btn1 hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Draw", group=btn1) btn2.set_state(mode == 'draw') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn2.set_tooltip("Choose this to draw a new or replacement cut") self.w.btn_draw = btn2 hbox.add_widget(btn2) btn3 = Widgets.RadioButton("Edit", group=btn1) btn3.set_state(mode == 'edit') btn3.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn3.set_tooltip("Choose this to edit a cut") self.w.btn_edit = btn3 hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox2.add_widget(hbox, stretch=0) vbox2.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(vbox2, stretch=0) # Add Cuts plot to its tab vbox_cuts = Widgets.VBox() vbox_cuts.add_widget(self.plot, stretch=1) nb.add_widget(vbox_cuts, title="Cuts") if self.use_slit: captions = (("Transpose Plot", 'checkbutton', "Save", 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) self.t_btn = b.transpose_plot self.t_btn.set_tooltip("Flip the plot") self.t_btn.set_state(self.transpose_enabled) self.t_btn.add_callback('activated', self.transpose_plot) self.save_slit = b.save self.save_slit.set_tooltip("Save slit plot and data") self.save_slit.add_callback('activated', lambda w: self.save_cb(mode='slit')) self.save_slit.set_enabled(self.save_enabled) # Add frame to hold the slit controls fr = Widgets.Frame("Axes controls") self.hbox_axes = Widgets.HBox() self.hbox_axes.set_border_width(4) self.hbox_axes.set_spacing(1) fr.set_widget(self.hbox_axes) # Add Slit plot and controls to its tab vbox_slit = Widgets.VBox() vbox_slit.add_widget(self.plot2, stretch=1) vbox_slit.add_widget(w) vbox_slit.add_widget(fr) nb.add_widget(vbox_slit, title="Slit") top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.select_cut(self.cutstag) self.gui_up = True if self.use_slit: self.build_axes()
def build_gui(self, container): """This method is called when the plugin is invoked. It builds the GUI used by the plugin into the widget layout passed as ``container``. This method could be called several times if the plugin is opened and closed. """ vbox, sw, self.orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) # create the Treeview always_expand = self.settings.get('always_expand', True) color_alternate = self.settings.get('color_alternate_rows', True) treeview = Widgets.TreeView(auto_expand=always_expand, sortable=True, use_alt_row_color=color_alternate) self.treeview = treeview treeview.setup_table(self.columns, 3, 'MODIFIED') treeview.set_column_width(0, self.settings.get('ts_colwidth', 250)) treeview.add_callback('selected', self.show_more) vbox.add_widget(treeview, stretch=1) fr = Widgets.Frame('Selected History') captions = (('Channel:', 'label', 'chname', 'llabel'), ('Image:', 'label', 'imname', 'llabel'), ('Timestamp:', 'label', 'modified', 'llabel')) w, b = Widgets.build_info(captions) self.w.update(b) b.chname.set_text('') b.chname.set_tooltip('Channel name') b.imname.set_text('') b.imname.set_tooltip('Image name') b.modified.set_text('') b.modified.set_tooltip('Timestamp (UTC)') captions = (('Description:-', 'llabel'), ('descrip', 'textarea')) w2, b = Widgets.build_info(captions) self.w.update(b) b.descrip.set_editable(False) b.descrip.set_wrap(True) b.descrip.set_text('') b.descrip.set_tooltip('Displays selected history entry') vbox2 = Widgets.VBox() vbox2.set_border_width(4) vbox2.add_widget(w) vbox2.add_widget(w2) fr.set_widget(vbox2, stretch=0) vbox.add_widget(fr, stretch=0) container.add_widget(vbox, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button('Close') btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) container.add_widget(btns, stretch=0) self.gui_up = True
def build_gui(self, container): vbox = Widgets.VBox() vbox.set_margins(2, 2, 2, 2) # create the table color_alternate = self.settings.get('color_alternate_rows', True) table = Widgets.TreeView(sortable=True, selection='multiple', use_alt_row_color=color_alternate, dragable=True) table.add_callback('activated', self.item_dblclicked_cb) table.add_callback('drag-start', self.item_drag_cb) # set header col = 0 self._name_idx = 0 for hdr, attrname in self.columns: if attrname == 'name': self._name_idx = col col += 1 table.setup_table(self.columns, 1, 'name') vbox.add_widget(table, stretch=1) self.treeview = table self.entry = Widgets.TextEntry() vbox.add_widget(self.entry, stretch=0) self.entry.add_callback('activated', self.browse_cb) hbox = Widgets.HBox() btn = Widgets.Button("Load") btn.add_callback('activated', lambda w: self.load_cb()) hbox.add_widget(btn, stretch=0) btn = Widgets.Button("Save Image As") hbox.add_widget(btn, stretch=0) self.entry2 = Widgets.TextEntry() hbox.add_widget(self.entry2, stretch=1) vbox.add_widget(hbox, stretch=0) self.entry2.add_callback('activated', self.save_as_cb) btn.add_callback('activated', lambda w: self.save_as_cb()) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Refresh") btn.add_callback('activated', lambda w: self.refresh()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Make Thumbs") btn.add_callback('activated', lambda w: self.make_thumbs()) btns.add_widget(btn, stretch=0) vbox.add_widget(btns, stretch=0) container.add_widget(vbox, stretch=1)
def build_gui(self, container): vbox, sw, orientation = Widgets.get_oriented_box(container, fill=True, scrolled=False) vbox.set_border_width(4) vbox.set_spacing(2) # Uncomment to debug; passing parent logger generates too # much noise in the main logger #zi = Viewers.CanvasView(logger=self.logger) zi = Viewers.CanvasView(logger=None) zi.set_desired_size(self._wd, self._ht) zi.enable_autozoom('off') zi.enable_autocuts('off') #zi.set_scale_limits(0.001, 1000.0) zi.zoom_to(self.default_zoom) settings = zi.get_settings() settings.getSetting('zoomlevel').add_callback('set', self.zoomset, zi) zi.set_bg(0.4, 0.4, 0.4) zi.show_pan_mark(True) # for debugging zi.set_name('zoomimage') self.zoomimage = zi bd = zi.get_bindings() bd.enable_zoom(False) bd.enable_pan(False) bd.enable_cmap(False) iw = Viewers.GingaViewerWidget(zi) iw.resize(self._wd, self._ht) vpaned = Widgets.Splitter(orientation=orientation) vpaned.add_widget(iw) vbox2 = Widgets.VBox() captions = ( ("Zoom Radius:", 'label', 'Zoom Radius', 'hscale'), ("Zoom Amount:", 'label', 'Zoom Amount', 'hscale'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) vbox2.add_widget(w, stretch=0) self.w.zoom_radius.set_limits(1, 300, incr_value=1) self.w.zoom_radius.set_value(self.zoom_radius) self.w.zoom_radius.add_callback('value-changed', self.set_radius_cb) self.w.zoom_radius.set_tracking(True) self.w.zoom_amount.set_limits(-20, 30, incr_value=1) self.w.zoom_amount.set_value(self.zoom_amount) self.w.zoom_amount.add_callback('value-changed', self.set_amount_cb) self.w.zoom_amount.set_tracking(True) captions = ( ("Zoom:", 'label', 'Zoom', 'label'), ("Relative Zoom", 'checkbutton'), ("Refresh Interval", 'label', 'Refresh Interval', 'spinbutton'), ("Defaults", 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.zoom.set_text(self.fv.scale2text(zi.get_scale())) b.relative_zoom.set_state(not self.t_abszoom) b.relative_zoom.add_callback("activated", self.set_absrel_cb) b.defaults.add_callback("activated", lambda w: self.set_defaults()) b.refresh_interval.set_limits(0, 200, incr_value=1) b.refresh_interval.set_value(int(self.refresh_interval * 1000)) b.refresh_interval.add_callback('value-changed', self.set_refresh_cb) row = Widgets.HBox() row.add_widget(w, stretch=0) row.add_widget(Widgets.Label(''), stretch=1) vbox2.add_widget(row, stretch=0) # stretch spacer = Widgets.Label('') vbox2.add_widget(spacer, stretch=1) vpaned.add_widget(vbox2) #vpaned.add_widget(Widgets.Label('')) vbox.add_widget(vpaned, stretch=1) #vbox.add_widget(Widgets.Label(''), stretch=1) container.add_widget(sw, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Mosaic") captions = [ ("FOV (deg):", 'label', 'Fov', 'llabel', 'set_fov', 'entry'), ("New Mosaic", 'button', "Allow expansion", 'checkbutton'), ("Label images", 'checkbutton', "Match bg", 'checkbutton'), ("Trim Pixels:", 'label', 'Trim Px', 'llabel', 'trim_pixels', 'entry'), ("Num Threads:", 'label', 'Num Threads', 'llabel', 'set_num_threads', 'entry'), ("Merge data", 'checkbutton', "Drop new", 'checkbutton'), ("Mosaic HDUs", 'checkbutton'), ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) fov_deg = self.settings.get('fov_deg', 1.0) if np.isscalar(fov_deg): fov_str = str(fov_deg) else: x_fov, y_fov = fov_deg fov_str = str(x_fov) + ', ' + str(y_fov) #b.set_fov.set_length(8) b.fov.set_text(fov_str) b.set_fov.set_text(fov_str) b.set_fov.add_callback('activated', self.set_fov_cb) b.set_fov.set_tooltip("Set size of mosaic FOV (deg)") b.allow_expansion.set_tooltip("Allow image to expand the FOV") allow_expand = self.settings.get('allow_expand', True) b.allow_expansion.set_state(allow_expand) b.allow_expansion.add_callback('activated', self.allow_expand_cb) b.new_mosaic.add_callback('activated', lambda w: self.new_mosaic_cb()) labelem = self.settings.get('annotate_images', False) b.label_images.set_state(labelem) b.label_images.set_tooltip( "Label tiles with their names (only if allow_expand=False)") b.label_images.add_callback('activated', self.annotate_cb) trim_px = self.settings.get('trim_px', 0) match_bg = self.settings.get('match_bg', False) b.match_bg.set_tooltip("Try to match background levels") b.match_bg.set_state(match_bg) b.match_bg.add_callback('activated', self.match_bg_cb) b.trim_pixels.set_tooltip("Set number of pixels to trim from each edge") b.trim_px.set_text(str(trim_px)) b.trim_pixels.add_callback('activated', self.trim_pixels_cb) #b.trim_pixels.set_length(8) b.trim_pixels.set_text(str(trim_px)) num_threads = self.settings.get('num_threads', 4) b.num_threads.set_text(str(num_threads)) #b.set_num_threads.set_length(8) b.set_num_threads.set_text(str(num_threads)) b.set_num_threads.set_tooltip("Number of threads to use for mosaicing") b.set_num_threads.add_callback('activated', self.set_num_threads_cb) merge = self.settings.get('merge', False) b.merge_data.set_tooltip("Merge data instead of overlay") b.merge_data.set_state(merge) b.merge_data.add_callback('activated', self.merge_cb) drop_new = self.settings.get('drop_creates_new_mosaic', False) b.drop_new.set_tooltip("Dropping files on image starts a new mosaic") b.drop_new.set_state(drop_new) b.drop_new.add_callback('activated', self.drop_new_cb) mosaic_hdus = self.settings.get('mosaic_hdus', False) b.mosaic_hdus.set_tooltip("Mosaic data HDUs in each file") b.mosaic_hdus.set_state(mosaic_hdus) b.mosaic_hdus.add_callback('activated', self.mosaic_hdus_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) vbox2 = Widgets.VBox() # Mosaic evaluation status hbox = Widgets.HBox() hbox.set_spacing(4) hbox.set_border_width(4) label = Widgets.Label() self.w.eval_status = label hbox.add_widget(self.w.eval_status, stretch=0) hbox.add_widget(Widgets.Label(''), stretch=1) vbox2.add_widget(hbox, stretch=0) # Mosaic evaluation progress bar and stop button hbox = Widgets.HBox() hbox.set_spacing(4) hbox.set_border_width(4) btn = Widgets.Button("Stop") btn.add_callback('activated', lambda w: self.eval_intr()) btn.set_enabled(False) self.w.btn_intr_eval = btn hbox.add_widget(btn, stretch=0) self.w.eval_pgs = Widgets.ProgressBar() hbox.add_widget(self.w.eval_pgs, stretch=1) vbox2.add_widget(hbox, stretch=0) vbox2.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(vbox2, stretch=1) self.w.vbox = Widgets.VBox() vbox.add_widget(self.w.vbox, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("WCS Match") captions = ( ('Reference Channel:', 'label', 'ref channel', 'combobox'), ('Match Pan', 'checkbutton', 'Match Scale', 'checkbutton'), ('Match Transforms', 'checkbutton', 'Match Rotation', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b b.ref_channel.add_callback('activated', self._set_reference_channel_cb) self.w.match_pan.set_state(self._match['pan']) self.w.match_pan.set_tooltip("Match pan position of reference image") self.w.match_pan.add_callback('activated', self.set_match_cb, 'pan') self.w.match_scale.set_state(self._match['scale']) self.w.match_scale.add_callback('activated', self.set_match_cb, 'scale') self.w.match_scale.set_tooltip("Match scale of reference image") self.w.match_transforms.set_state(self._match['transforms']) self.w.match_transforms.add_callback('activated', self.set_match_cb, 'transforms') self.w.match_transforms.set_tooltip( "Match transforms of reference image") self.w.match_rotation.set_state(self._match['rotation']) self.w.match_rotation.add_callback('activated', self.set_match_cb, 'rotation') self.w.match_rotation.set_tooltip("Match rotation of reference image") fr.set_widget(w) vbox.add_widget(fr, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True self._reset_channels_gui()
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Blink") vbox2 = Widgets.VBox() captions = (("Interval:", 'label', 'Interval', 'entry'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b b.interval.set_text(str(self.interval)) b.interval.add_callback('activated', lambda w: self._set_interval_cb()) b.interval.set_tooltip("Interval in seconds between changing images") vbox2.add_widget(w, stretch=0) captions = ( ("Start Blink", 'button', "Stop Blink", 'button'), ("Max:", 'label', 'max', 'llabel', "Min:", 'label', 'min', 'llabel'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.start_blink.add_callback('activated', lambda w: self._start_blink_cb()) b.stop_blink.add_callback('activated', lambda w: self._stop_blink_cb()) b.min.set_text(str(self.ival_min)) b.max.set_text(str(self.ival_max)) vbox2.add_widget(w, stretch=0) captions = (("Mode:", 'label', 'mode', 'llabel'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) mode = 'blink channels' if not self.blink_channels: mode = 'blink images in channel' b.mode.set_text(mode) vbox2.add_widget(w, stretch=0) fr.set_widget(vbox2) vbox.add_widget(fr, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(3) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame('Single Pixel') captions = [('Move', 'radiobutton', 'Draw', 'radiobutton'), ('X:', 'label', 'X', 'entry'), ('Y:', 'label', 'Y', 'entry'), ('DQ Flag:', 'label', 'DQ', 'llabel')] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) mode = self.canvas.get_draw_mode() b.move.set_state(mode == 'move') b.move.add_callback('activated', lambda w, val: self.set_mode_cb('move', val)) b.move.set_tooltip('Choose this to move marked pixel') b.draw.set_state(mode == 'draw') b.draw.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) b.draw.set_tooltip('Choose this to mark pixel') b.x.set_tooltip('X of pixel') b.x.set_text(str(self.xcen)) b.x.add_callback('activated', lambda w: self.set_xcen()) b.y.set_tooltip('Y of pixel') b.y.set_text(str(self.ycen)) b.y.add_callback('activated', lambda w: self.set_ycen()) b.dq.set_tooltip('DQ value of pixel') b.dq.set_text(self._no_keyword) # Create the Treeview self.pxdqlist = Widgets.TreeView(auto_expand=True, sortable=True, selection='multiple', use_alt_row_color=True) self.pxdqlist.setup_table(self.pxdqcolumns, 1, 'FLAG') splitter = Widgets.Splitter('vertical') splitter.add_widget(w) splitter.add_widget(self.pxdqlist) fr.set_widget(splitter) vbox.add_widget(fr, stretch=1) fr = Widgets.Frame('Whole Image') captions = [('Number of pixels:', 'llabel', 'npix', 'llabel', 'spacer1', 'spacer')] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.npix.set_tooltip('Number of affected pixels') b.npix.set_text(self._no_keyword) # Create the Treeview self.imdqlist = Widgets.TreeView(auto_expand=True, sortable=True, selection='multiple', use_alt_row_color=True) self.imdqlist.setup_table(self.imdqcolumns, 1, 'FLAG') self.imdqlist.add_callback('selected', self.mark_dqs_cb) splitter = Widgets.Splitter('vertical') splitter.add_widget(w) splitter.add_widget(self.imdqlist) fr.set_widget(splitter) vbox.add_widget(fr, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(3) btn = Widgets.Button('Close') btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button('Help') btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True # Populate fields based on active image self.redo()
def build_gui(self, container): """ This method is called when the plugin is invoked. It builds the GUI used by the plugin into the widget layout passed as ``container``. This method could be called several times if the plugin is opened and closed. The method may be omitted if there is no GUI for the plugin. This specific example uses the GUI widget set agnostic wrappers to build the GUI, but you can also just as easily use explicit toolkit calls here if you only want to support one widget set. """ top = Widgets.VBox() top.set_border_width(4) # this is a little trick for making plugins that work either in # a vertical or horizontal orientation. It returns a box container, # a scroll widget and an orientation ('vertical', 'horizontal') vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) # Take a text widget to show some instructions self.msg_font = self.fv.get_font("sans", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(self.msg_font) self.tw = tw # Frame for instructions and add the text widget with another # blank widget to stretch as needed to fill emp fr = Widgets.Frame("Status") fr.set_widget(tw) vbox.add_widget(fr, stretch=0) # Add a spacer to stretch the rest of the way to the end of the # plugin space spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) # scroll bars will allow lots of content to be accessed top.add_widget(sw, stretch=1) # A button box that is always visible at the bottom btns = Widgets.HBox() btns.set_spacing(3) # Add a close button for the convenience of the user btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) # Add our GUI to the container container.add_widget(top, stretch=1) # NOTE: if you are building a GUI using a specific widget toolkit # (e.g. Qt) GUI calls, you need to extract the widget or layout # from the non-toolkit specific container wrapper and call on that # to pack your widget, e.g.: #cw = container.get_widget() #cw.addWidget(widget, stretch=1) self.gui_up = True
def __init__(self, logger): self.logger = logger self.drawcolors = colors.get_colors() self.dc = get_canvas_types() from ginga.gw import Widgets, Viewers, GwHelp self.app = Widgets.Application(logger=logger) self.app.add_callback('shutdown', self.quit) self.top = self.app.make_window("Ginga example2") self.top.add_callback('close', self.closed) vbox = Widgets.VBox() vbox.set_border_width(2) vbox.set_spacing(1) fi = Viewers.CanvasView(logger=logger) fi.enable_autocuts('on') fi.set_autocut_params('zscale') fi.enable_autozoom('on') fi.set_zoom_algorithm('rate') fi.set_zoomrate(1.4) fi.show_pan_mark(True) fi.set_callback('drag-drop', self.drop_file) fi.set_callback('none-move', self.motion) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) self.fitsimage = fi bd = fi.get_bindings() bd.enable_all(True) # add a color bar fi.private_canvas.add(self.dc.ColorBar(side='bottom', offset=10)) # add little mode indicator that shows modal states in # lower left hand corner fi.private_canvas.add(self.dc.ModeIndicator(corner='ur', fontsize=14)) # little hack necessary to get correct operation of the mode indicator # in all circumstances bm = fi.get_bindmap() bm.add_callback('mode-set', lambda *args: fi.redraw(whence=3)) # canvas that we will draw on canvas = self.dc.DrawingCanvas() canvas.enable_draw(True) canvas.enable_edit(True) canvas.set_drawtype('rectangle', color='lightblue', coord='data') canvas.setSurface(fi) self.canvas = canvas # add canvas to view fi.get_canvas().add(canvas) canvas.ui_setActive(True) canvas.register_for_cursor_drawing(fi) canvas.add_callback('draw-event', self.draw_cb) self.drawtypes = canvas.get_drawtypes() self.drawtypes.sort() fi.set_desired_size(512, 512) iw = Viewers.GingaViewerWidget(viewer=fi) vbox.add_widget(iw, stretch=1) self.readout = Widgets.Label("") vbox.add_widget(self.readout, stretch=0) hbox = Widgets.HBox() hbox.set_border_width(2) wdrawtype = Widgets.ComboBox() for name in self.drawtypes: wdrawtype.append_text(name) index = self.drawtypes.index('rectangle') wdrawtype.set_index(index) wdrawtype.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawtype = wdrawtype wdrawcolor = Widgets.ComboBox() for name in self.drawcolors: wdrawcolor.append_text(name) index = self.drawcolors.index('lightblue') wdrawcolor.set_index(index) wdrawcolor.add_callback('activated', lambda w, idx: self.set_drawparams()) self.wdrawcolor = wdrawcolor wfill = Widgets.CheckBox("Fill") wfill.add_callback('activated', lambda w, tf: self.set_drawparams()) self.wfill = wfill walpha = Widgets.SpinBox(dtype=float) walpha.set_limits(0.0, 1.0, incr_value=0.1) walpha.set_value(1.0) walpha.set_decimals(2) walpha.add_callback('value-changed', lambda w, val: self.set_drawparams()) self.walpha = walpha wclear = Widgets.Button("Clear Canvas") wclear.add_callback('activated', lambda w: self.clear_canvas()) wopen = Widgets.Button("Open File") wopen.add_callback('activated', lambda w: self.open_file()) wquit = Widgets.Button("Quit") wquit.add_callback('activated', lambda w: self.quit()) hbox.add_widget(Widgets.Label(''), stretch=1) for w in (wopen, wdrawtype, wdrawcolor, wfill, Widgets.Label('Alpha:'), walpha, wclear, wquit): hbox.add_widget(w, stretch=0) vbox.add_widget(hbox, stretch=0) mode = self.canvas.get_draw_mode() hbox = Widgets.HBox() btn1 = Widgets.RadioButton("Draw") btn1.set_state(mode == 'draw') btn1.add_callback('activated', lambda w, val: self.set_mode_cb('draw', val)) btn1.set_tooltip("Choose this to draw on the canvas") hbox.add_widget(btn1) btn2 = Widgets.RadioButton("Edit", group=btn1) btn2.set_state(mode == 'edit') btn2.add_callback('activated', lambda w, val: self.set_mode_cb('edit', val)) btn2.set_tooltip("Choose this to edit things on the canvas") hbox.add_widget(btn2) btn3 = Widgets.RadioButton("Pick", group=btn1) btn3.set_state(mode == 'pick') btn3.add_callback('activated', lambda w, val: self.set_mode_cb('pick', val)) btn3.set_tooltip("Choose this to pick things on the canvas") hbox.add_widget(btn3) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) self.top.set_widget(vbox) self.fs = None if hasattr(GwHelp, 'FileSelection'): self.fs = GwHelp.FileSelection(self.top.get_widget())
def build_naxis(self, dims, image): self.naxispath = list(image.naxispath) ndims = len(dims) # build a vbox of NAXIS controls captions = [("NAXIS1:", 'label', 'NAXIS1', 'llabel'), ("NAXIS2:", 'label', 'NAXIS2', 'llabel')] for n in range(2, ndims): key = 'naxis%d' % (n + 1) title = key.upper() maxn = int(dims[n]) self.logger.debug("NAXIS%d=%d" % (n + 1, maxn)) if maxn <= 1: captions.append((title + ':', 'label', title, 'llabel')) else: captions.append((title + ':', 'label', title, 'llabel', "Choose %s" % (title), 'hscale')) # Remove old naxis widgets for key in self.w: if key.startswith('choose_'): self.w[key] = None hbox = Widgets.HBox() if ndims > 3: # only add radiobuttons if we have more than 3 dim group = None for i in range(2, ndims): title = 'AXIS%d' % (i + 1) btn = Widgets.RadioButton(title, group=group) if group is None: group = btn hbox.add_widget(btn) self.w[title.lower()] = btn w, b = Widgets.build_info(captions, orientation=self.orientation) self.w.update(b) vbox = Widgets.VBox() vbox.add_widget(w) vbox.add_widget(hbox) for n in range(0, ndims): key = 'naxis%d' % (n + 1) lbl = b[key] maxn = int(dims[n]) lbl.set_text("%d" % maxn) slkey = 'choose_' + key if slkey in b: slider = b[slkey] lower = 1 upper = maxn slider.set_limits(lower, upper, incr_value=1) text = self.naxispath[n - 2] + 1 if np.isscalar(text): slider.set_value(text) else: slider.set_value(text[n - 2]) slider.set_tracking(True) # slider.set_digits(0) # slider.set_wrap(True) slider.add_callback('value-changed', self.set_naxis_cb, n) # Disable playback if there is only 1 slice in the higher dimension if n > 2 and dims[n] == 1: radiobutton = self.w['axis%d' % (n + 1)] radiobutton.set_enabled(False) # Add vbox of naxis controls to gui self.naxisfr.set_widget(vbox) # for storing play_idx for each dim of image. used for going back to # the idx where you left off. self.play_indices = ([0 for i in range(ndims - 2)] if ndims > 3 else None) if ndims > 3: # dims only exists in here, hence this function exists here def play_axis_change_func_creator(n): # widget callable needs (widget, value) args def play_axis_change(): self.play_indices[ self.play_axis - 2] = self.play_idx % dims[self.play_axis] # noqa self.play_axis = n self.logger.debug("play_axis changed to %d" % n) if self.play_axis < ndims: self.play_max = dims[self.play_axis] - 1 self.play_idx = self.play_indices[n - 2] self.fv.gui_do(self.set_naxis, self.play_idx, self.play_axis) def check_if_we_need_change(w, v): if self.play_axis is not n: play_axis_change() return check_if_we_need_change for n in range(2, ndims): key = 'axis%d' % (n + 1) self.w[key].add_callback('activated', play_axis_change_func_creator(n)) if n == 2: self.w[key].set_state(True) is_dc = ndims > 2 self.play_axis = 2 if self.play_axis < ndims: self.play_max = dims[self.play_axis] - 1 if is_dc: self.play_idx = self.naxispath[self.play_axis - 2] else: self.play_idx = 0 if self.play_indices: text = [i + 1 for i in self.naxispath] else: text = self.play_idx + 1 self.w.slice.set_text(str(text)) # Enable or disable NAXIS animation controls self.w.next.set_enabled(is_dc) self.w.prev.set_enabled(is_dc) self.w.first.set_enabled(is_dc) self.w.last.set_enabled(is_dc) self.w.play.set_enabled(is_dc) self.w.stop.set_enabled(is_dc) self.w.interval.set_enabled(is_dc) self.w.save_slice.set_enabled(is_dc) if have_mencoder: self.w.save_movie.set_enabled(is_dc)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(0) vbox, sw, orientation = Widgets.get_oriented_box(container) self.orientation = orientation vbox.set_spacing(0) vbox.set_border_width(0) tb = Widgets.Toolbar(orientation=orientation) for tup in ( #("Load", 'button', 'fits_open_48', "Open an image file", #None), ("FlipX", 'toggle', 'flipx_48', "Flip image in X axis", self.flipx_cb), ("FlipY", 'toggle', 'flipy_48', "Flip image in Y axis", self.flipy_cb), ("SwapXY", 'toggle', 'swapxy_48', "Swap X and Y axes", self.swapxy_cb), ("---", ), ("Rot90", 'button', 'rot90ccw_48', "Rotate image 90 deg", self.rot90_cb), ("RotN90", 'button', 'rot90cw_48', "Rotate image -90 deg", self.rotn90_cb), ("OrientRH", 'button', 'orient_nw_48', "Orient image N=Up E=Right", self.orient_rh_cb), ("OrientLH", 'button', 'orient_ne_48', "Orient image N=Up E=Left", self.orient_lh_cb), ("---", ), ## ("Prev", 'button', 'prev_48', "Go to previous channel", ## lambda w: self.fv.prev_channel()), ## ("Next", 'button', 'next_48', "Go to next channel", ## lambda w: self.fv.next_channel()), ("Up", 'button', 'up_48', "Go to previous image in channel", lambda w: self.fv.prev_img()), ("Down", 'button', 'down_48', "Go to next image in channel", lambda w: self.fv.next_img()), ("---", ), ("Zoom In", 'button', 'zoom_in_48', "Zoom in", lambda w: self.fv.zoom_in()), ("Zoom Out", 'button', 'zoom_out_48', "Zoom out", lambda w: self.fv.zoom_out()), ("Zoom Fit", 'button', 'zoom_fit_48', "Zoom to fit window size", lambda w: self.fv.zoom_fit()), ("Zoom 1:1", 'button', 'zoom_100_48', "Zoom to 100% (1:1)", lambda w: self.fv.zoom_1_to_1()), ("---", ), ("Pan", 'toggle', 'pan_48', "Pan with left, zoom with right", lambda w, tf: self.mode_cb(tf, 'pan')), ("FreePan", 'toggle', 'hand_48', "Free Panning", lambda w, tf: self.mode_cb(tf, 'freepan')), ("Rotate", 'toggle', 'rotate_48', "Interactive rotation", lambda w, tf: self.mode_cb(tf, 'rotate')), ("Dist", 'toggle', 'distribute_48', "Scroll to set distribution", lambda w, tf: self.mode_cb(tf, 'dist')), ("Cuts", 'toggle', 'cuts_48', "Left/right sets hi cut, up/down sets lo cut", lambda w, tf: self.mode_cb(tf, 'cuts')), ("Contrast", 'toggle', 'contrast_48', "Contrast/bias with left/right/up/down", lambda w, tf: self.mode_cb(tf, 'contrast')), ("ModeLock", 'toggle', 'lock_48', "Modes are oneshot or locked", self.set_locked_cb), ("---", ), ("Center", 'button', 'center_image_48', "Center image", self.center_image_cb), ("Restore", 'button', 'reset_rotation_48', "Reset all transformations and rotations", self.reset_all_transforms_cb), ("AutoLevels", 'button', 'auto_cuts_48', "Auto cut levels", self.auto_levels_cb), ("ResetContrast", 'button', 'reset_contrast_48', "Reset contrast", self.reset_contrast_cb), ("---", ), ("Preferences", 'button', 'settings_48', "Set channel preferences", lambda w: self.start_plugin_cb('Preferences')), ("FBrowser", 'button', 'open_48', "Open file", lambda w: self.start_plugin_cb('FBrowser')), ## ("Histogram", 'button', 'open_48', "Histogram and cut levels", ## lambda w: self.start_plugin_cb('Histogram')), #("Quit", 'button', 'exit_48', "Quit the program"), ): # noqa name = tup[0] if name == '---': tb.add_separator() continue iconpath = os.path.join(self.fv.iconpath, "%s.png" % (tup[2])) btn = tb.add_action(None, toggle=(tup[1] == 'toggle'), iconpath=iconpath) if tup[3]: btn.set_tooltip(tup[3]) if tup[4]: btn.add_callback('activated', tup[4]) # add to our widget dict self.w[Widgets.name_mangle(name, pfx='btn_')] = btn # add widget to toolbar #tb.add_widget(btn) hbox = Widgets.HBox() hbox.add_widget(tb, stretch=0) # stretcher hbox.add_widget(Widgets.Label(''), stretch=1) #sw.set_widget(tb) #top.add_widget(sw, stretch=1) container.add_widget(hbox, stretch=0) self.gui_up = True
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container, scrolled=True) self.orientation = orientation vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("HDU") vb1 = Widgets.VBox() captions = [ ("Num HDUs:", 'label', "Num HDUs", 'llabel'), ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.numhdu = b.num_hdus self.w.update(b) vb1.add_widget(w) captions = [ ("Choose HDU", 'combobox'), ] w, b = Widgets.build_info(captions, orientation=orientation) vb1.add_widget(w) self.w.hdu = b.choose_hdu self.w.hdu.set_tooltip("Choose which HDU to view") self.w.hdu.add_callback('activated', self.set_hdu_cb) fr.set_widget(vb1) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("NAXIS (data cubes)") self.naxisfr = fr vbox.add_widget(fr, stretch=0) tbar = Widgets.Toolbar(orientation='horizontal') for name, actn, cb in ( ('first', 'first', lambda w: self.first_slice()), ('last', 'last', lambda w: self.last_slice()), ('reverse', 'prev', lambda w: self.prev_slice()), ('forward', 'next', lambda w: self.next_slice()), ('play', 'play', lambda w: self.play_start()), ('stop', 'stop', lambda w: self.play_stop()), ): iconpath = os.path.join(self.fv.iconpath, "%s_48.png" % name) btn = tbar.add_action(None, iconpath=iconpath) self.w[actn] = btn btn.set_enabled(False) btn.set_tooltip(actn) btn.add_callback('activated', cb) vbox.add_widget(tbar, stretch=0) captions = [ ("Interval:", 'label', "Interval", 'spinfloat', "fps", 'llabel'), ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) lower, upper = self.play_min_sec, 8.0 b.interval.set_limits(lower, upper, incr_value=0.01) b.interval.set_value(self.play_int_sec) b.interval.set_decimals(2) b.interval.add_callback('value-changed', self.play_int_cb) b.interval.set_enabled(False) vbox.add_widget(w, stretch=0) captions = [ ("Slice:", 'label', "Slice", 'llabel'), # ("Value:", 'label', "Value", 'llabel'), ("Save Slice", 'button'), ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.save_slice.add_callback('activated', lambda w: self.save_slice_cb()) b.save_slice.set_enabled(False) b.save_slice.set_tooltip("Save current slice as RGB image") vbox.add_widget(w, stretch=0) fr = Widgets.Frame("Movie") if have_mencoder: captions = [("Start:", 'label', "Start Slice", 'entry', "End:", 'label', "End Slice", 'entry', 'Save Movie', 'button') ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.start_slice.set_tooltip("Starting slice") b.end_slice.set_tooltip("Ending slice") b.start_slice.set_length(6) b.end_slice.set_length(6) b.save_movie.add_callback('activated', lambda w: self.save_movie_cb()) b.save_movie.set_enabled(False) fr.set_widget(w) else: infolbl = Widgets.Label() infolbl.set_text("Please install 'mencoder' to save as movie") fr.set_widget(infolbl) vbox.add_widget(fr, stretch=0) # spacer = Widgets.Label('') # vbox.add_widget(spacer, stretch=1) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btn = Widgets.Button("Help") btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True
w = Widgets.WebView() w.load_url("http://www.google.com/") vbox.add_widget(w) elif wname == 'frame': w = Widgets.Frame(title="Frame Title") w.set_widget(Widgets.Label("Framed content")) vbox.add_widget(w) elif wname == 'expander': w = Widgets.Expander(title="Expander Title") w.set_widget(Widgets.Label("Expander content")) vbox.add_widget(w) elif wname == 'hbox': w = Widgets.HBox() w.add_widget(Widgets.Label("Item 1"), stretch=0) w.add_widget(Widgets.Label("Item 2"), stretch=1) vbox.add_widget(w) elif wname == 'vbox': w = Widgets.VBox() w.add_widget(Widgets.Label("Item 1"), stretch=0) w.add_widget(Widgets.Label("Item 2"), stretch=1) vbox.add_widget(w) elif wname == 'splitter': w = Widgets.Splitter(orientation='horizontal') w.add_widget(Widgets.Label('Content of Pane 1')) w.add_widget(Widgets.Label('Content of Pane 2')) vbox.add_widget(w, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, orientation = Widgets.get_oriented_box(container) self.orientation = orientation #vbox.set_border_width(4) vbox.set_spacing(2) # COLOR DISTRIBUTION OPTIONS fr = Widgets.Frame("Color Distribution") captions = ( ('Algorithm:', 'label', 'Algorithm', 'combobox'), #('Table Size:', 'label', 'Table Size', 'entryset'), ('Dist Defaults', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) self.w.calg_choice = b.algorithm #self.w.table_size = b.table_size b.algorithm.set_tooltip("Choose a color distribution algorithm") #b.table_size.set_tooltip("Set size of the distribution hash table") b.dist_defaults.set_tooltip("Restore color distribution defaults") b.dist_defaults.add_callback('activated', lambda w: self.set_default_distmaps()) combobox = b.algorithm options = [] index = 0 for name in self.calg_names: options.append(name) combobox.append_text(name) index += 1 index = self.calg_names.index(self.t_.get('color_algorithm', "linear")) combobox.set_index(index) combobox.add_callback('activated', self.set_calg_cb) ## entry = b.table_size ## entry.set_text(str(self.t_.get('color_hashsize', 65535))) ## entry.add_callback('activated', self.set_tablesize_cb) fr.set_widget(w) vbox.add_widget(fr) # COLOR MAPPING OPTIONS fr = Widgets.Frame("Color Mapping") captions = (('Colormap:', 'label', 'Colormap', 'combobox'), ('Intensity:', 'label', 'Intensity', 'combobox'), ('Color Defaults', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) self.w.cmap_choice = b.colormap self.w.imap_choice = b.intensity b.color_defaults.add_callback('activated', lambda w: self.set_default_cmaps()) b.colormap.set_tooltip("Choose a color map for this image") b.intensity.set_tooltip("Choose an intensity map for this image") b.color_defaults.set_tooltip( "Restore default color and intensity maps") fr.set_widget(w) vbox.add_widget(fr) combobox = b.colormap options = [] index = 0 for name in self.cmap_names: options.append(name) combobox.append_text(name) index += 1 cmap_name = self.t_.get('color_map', "gray") try: index = self.cmap_names.index(cmap_name) except Exception: index = self.cmap_names.index('gray') combobox.set_index(index) combobox.add_callback('activated', self.set_cmap_cb) combobox = b.intensity options = [] index = 0 for name in self.imap_names: options.append(name) combobox.append_text(name) index += 1 imap_name = self.t_.get('intensity_map', "ramp") try: index = self.imap_names.index(imap_name) except Exception: index = self.imap_names.index('ramp') combobox.set_index(index) combobox.add_callback('activated', self.set_imap_cb) # AUTOCUTS OPTIONS fr = Widgets.Frame("Auto Cuts") vbox2 = Widgets.VBox() fr.set_widget(vbox2) captions = (('Auto Method:', 'label', 'Auto Method', 'combobox'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) # Setup auto cuts method choice combobox = b.auto_method index = 0 method = self.t_.get('autocut_method', "histogram") for name in self.autocut_methods: combobox.append_text(name) index += 1 index = self.autocut_methods.index(method) combobox.set_index(index) combobox.add_callback('activated', self.set_autocut_method_cb) b.auto_method.set_tooltip("Choose algorithm for auto levels") vbox2.add_widget(w, stretch=0) self.w.acvbox = Widgets.VBox() vbox2.add_widget(self.w.acvbox, stretch=1) vbox.add_widget(fr, stretch=0) # TRANSFORM OPTIONS fr = Widgets.Frame("Transform") captions = ( ('Flip X', 'checkbutton', 'Flip Y', 'checkbutton', 'Swap XY', 'checkbutton'), ('Rotate:', 'label', 'Rotate', 'spinfloat'), ('Restore', 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) for name in ('flip_x', 'flip_y', 'swap_xy'): btn = b[name] btn.set_state(self.t_.get(name, False)) btn.add_callback('activated', self.set_transforms_cb) b.flip_x.set_tooltip("Flip the image around the X axis") b.flip_y.set_tooltip("Flip the image around the Y axis") b.swap_xy.set_tooltip("Swap the X and Y axes in the image") b.rotate.set_tooltip("Rotate the image around the pan position") b.restore.set_tooltip("Clear any transforms and center image") b.restore.add_callback('activated', self.restore_cb) b.rotate.set_limits(0.00, 359.99999999, incr_value=10.0) b.rotate.set_value(0.00) b.rotate.set_decimals(8) b.rotate.add_callback('value-changed', self.rotate_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) # WCS OPTIONS fr = Widgets.Frame("WCS") captions = ( ('WCS Coords:', 'label', 'WCS Coords', 'combobox'), ('WCS Display:', 'label', 'WCS Display', 'combobox'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.wcs_coords.set_tooltip("Set WCS coordinate system") b.wcs_display.set_tooltip("Set WCS display format") # Setup WCS coords method choice combobox = b.wcs_coords index = 0 for name in wcsmod.coord_types: combobox.append_text(name) index += 1 method = self.t_.get('wcs_coords', "") try: index = wcsmod.coord_types.index(method) combobox.set_index(index) except ValueError: pass combobox.add_callback('activated', self.set_wcs_params_cb) # Setup WCS display format method choice combobox = b.wcs_display index = 0 for name in wcsmod.display_types: combobox.append_text(name) index += 1 method = self.t_.get('wcs_display', "sexagesimal") try: index = wcsmod.display_types.index(method) combobox.set_index(index) except ValueError: pass combobox.add_callback('activated', self.set_wcs_params_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) # ZOOM OPTIONS fr = Widgets.Frame("Zoom") captions = (('Zoom Alg:', 'label', 'Zoom Alg', 'combobox'), ('Zoom Rate:', 'label', 'Zoom Rate', 'spinfloat'), ('Stretch XY:', 'label', 'Stretch XY', 'combobox'), ('Stretch Factor:', 'label', 'Stretch Factor', 'spinfloat'), ('Scale X:', 'label', 'Scale X', 'entryset'), ('Scale Y:', 'label', 'Scale Y', 'entryset'), ('Scale Min:', 'label', 'Scale Min', 'spinfloat'), ('Scale Max:', 'label', 'Scale Max', 'spinfloat'), ('Interpolation:', 'label', 'Interpolation', 'combobox'), ('Zoom Defaults', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) index = 0 for name in self.zoomalg_names: b.zoom_alg.append_text(name.capitalize()) index += 1 zoomalg = self.t_.get('zoom_algorithm', "step") index = self.zoomalg_names.index(zoomalg) b.zoom_alg.set_index(index) b.zoom_alg.set_tooltip("Choose Zoom algorithm") b.zoom_alg.add_callback('activated', self.set_zoomalg_cb) index = 0 for name in ('X', 'Y'): b.stretch_xy.append_text(name) index += 1 b.stretch_xy.set_index(0) b.stretch_xy.set_tooltip("Stretch pixels in X or Y") b.stretch_xy.add_callback('activated', self.set_stretch_cb) b.stretch_factor.set_limits(1.0, 10.0, incr_value=0.10) b.stretch_factor.set_value(1.0) b.stretch_factor.set_decimals(8) b.stretch_factor.add_callback('value-changed', self.set_stretch_cb) b.stretch_factor.set_tooltip( "Length of pixel relative to 1 on other side") b.stretch_factor.set_enabled(zoomalg != 'step') zoomrate = self.t_.get('zoom_rate', math.sqrt(2.0)) b.zoom_rate.set_limits(1.1, 3.0, incr_value=0.1) b.zoom_rate.set_value(zoomrate) b.zoom_rate.set_decimals(8) b.zoom_rate.set_enabled(zoomalg != 'step') b.zoom_rate.set_tooltip( "Step rate of increase/decrease per zoom level") b.zoom_rate.add_callback('value-changed', self.set_zoomrate_cb) b.zoom_defaults.add_callback('activated', self.set_zoom_defaults_cb) scale_x, scale_y = self.fitsimage.get_scale_xy() b.scale_x.set_tooltip("Set the scale in X axis") b.scale_x.set_text(str(scale_x)) b.scale_x.add_callback('activated', self.set_scale_cb) b.scale_y.set_tooltip("Set the scale in Y axis") b.scale_y.set_text(str(scale_y)) b.scale_y.add_callback('activated', self.set_scale_cb) scale_min, scale_max = self.t_['scale_min'], self.t_['scale_max'] b.scale_min.set_limits(0.00001, 1.0, incr_value=1.0) b.scale_min.set_value(scale_min) b.scale_min.set_decimals(8) b.scale_min.add_callback('value-changed', self.set_scale_limit_cb) b.scale_min.set_tooltip("Set the minimum allowed scale in any axis") b.scale_max.set_limits(1.0, 10000.0, incr_value=1.0) b.scale_max.set_value(scale_max) b.scale_max.set_decimals(8) b.scale_max.add_callback('value-changed', self.set_scale_limit_cb) b.scale_min.set_tooltip("Set the maximum allowed scale in any axis") index = 0 for name in trcalc.interpolation_methods: b.interpolation.append_text(name) index += 1 interp = self.t_.get('interpolation', "basic") index = trcalc.interpolation_methods.index(interp) b.interpolation.set_index(index) b.interpolation.set_tooltip("Choose interpolation method") b.interpolation.add_callback('activated', self.set_interp_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) # PAN OPTIONS fr = Widgets.Frame("Panning") captions = ( ('Pan X:', 'label', 'Pan X', 'entry', 'WCS sexagesimal', 'checkbutton'), ('Pan Y:', 'label', 'Pan Y', 'entry', 'Apply Pan', 'button'), ('Pan Coord:', 'label', 'Pan Coord', 'combobox'), ('Center Image', 'button', 'Mark Center', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) pan_x, pan_y = self.fitsimage.get_pan() coord_offset = self.fv.settings.get('pixel_coords_offset', 0.0) b.pan_x.set_tooltip("Coordinate for the pan position in X axis") b.pan_x.set_text(str(pan_x + coord_offset)) #b.pan_x.add_callback('activated', self.set_pan_cb) b.pan_y.set_tooltip("Coordinate for the pan position in Y axis") b.pan_y.set_text(str(pan_y + coord_offset)) #b.pan_y.add_callback('activated', self.set_pan_cb) b.apply_pan.add_callback('activated', self.set_pan_cb) b.apply_pan.set_tooltip("Set the pan position") b.wcs_sexagesimal.set_tooltip("Display pan position in sexagesimal") index = 0 for name in self.pancoord_options: b.pan_coord.append_text(name) index += 1 pan_coord = self.t_.get('pan_coord', "data") index = self.pancoord_options.index(pan_coord) b.pan_coord.set_index(index) b.pan_coord.set_tooltip("Pan coordinates type") b.pan_coord.add_callback('activated', self.set_pan_coord_cb) b.center_image.set_tooltip( "Set the pan position to center of the image") b.center_image.add_callback('activated', self.center_image_cb) b.mark_center.set_tooltip("Mark the center (pan locator)") b.mark_center.add_callback('activated', self.set_misc_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("New Images") captions = ( ('Cut New:', 'label', 'Cut New', 'combobox'), ('Zoom New:', 'label', 'Zoom New', 'combobox'), ('Center New:', 'label', 'Center New', 'combobox'), ('Follow New', 'checkbutton', 'Raise New', 'checkbutton'), ('Create thumbnail', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) combobox = b.cut_new index = 0 for name in self.autocut_options: combobox.append_text(name) index += 1 option = self.t_.get('autocuts', "off") index = self.autocut_options.index(option) combobox.set_index(index) combobox.add_callback('activated', self.set_autocuts_cb) b.cut_new.set_tooltip("Automatically set cut levels for new images") combobox = b.zoom_new index = 0 for name in self.autozoom_options: combobox.append_text(name) index += 1 option = self.t_.get('autozoom', "off") index = self.autozoom_options.index(option) combobox.set_index(index) combobox.add_callback('activated', self.set_autozoom_cb) b.zoom_new.set_tooltip("Automatically fit new images to window") combobox = b.center_new index = 0 for name in self.autocenter_options: combobox.append_text(name) index += 1 option = self.t_.get('autocenter', "off") # Hack to convert old values that used to be T/F if isinstance(option, bool): choice = {True: 'on', False: 'off'} option = choice[option] index = self.autocenter_options.index(option) combobox.set_index(index) combobox.add_callback('activated', self.set_autocenter_cb) b.center_new.set_tooltip("Automatically center new images in window") b.follow_new.set_tooltip("View new images as they arrive") b.raise_new.set_tooltip("Raise and focus tab for new images") b.create_thumbnail.set_tooltip("Create thumbnail for new images") self.w.follow_new.set_state(True) self.w.follow_new.add_callback('activated', self.set_chprefs_cb) self.w.raise_new.set_state(True) self.w.raise_new.add_callback('activated', self.set_chprefs_cb) self.w.create_thumbnail.set_state(True) self.w.create_thumbnail.add_callback('activated', self.set_chprefs_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) exp = Widgets.Expander("General") captions = ( ('Num Images:', 'label', 'Num Images', 'entryset'), ('Sort Order:', 'label', 'Sort Order', 'combobox'), ('Preload Images', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.num_images.set_tooltip( "Maximum number of in memory images in channel (0==unlimited)") num_images = self.t_.get('numImages', 0) self.w.num_images.set_text(str(num_images)) self.w.num_images.add_callback('activated', self.set_buffer_cb) combobox = b.sort_order index = 0 for name in self.sort_options: combobox.append_text(name) index += 1 option = self.t_.get('sort_order', 'loadtime') index = self.sort_options.index(option) combobox.set_index(index) combobox.add_callback('activated', self.set_sort_cb) b.sort_order.set_tooltip("Sort order for images in channel") preload_images = self.t_.get('preload_images', False) self.w.preload_images.set_state(preload_images) self.w.preload_images.add_callback('activated', self.set_preload_cb) b.preload_images.set_tooltip( "Preload adjacent images to speed up access") fr = Widgets.Frame() fr.set_widget(w) exp.set_widget(fr) vbox.add_widget(exp, stretch=0) exp = Widgets.Expander("Remember") captions = ( ('Save Scale', 'checkbutton', 'Save Pan', 'checkbutton'), ('Save Transform', 'checkbutton', 'Save Rotation', 'checkbutton'), ('Save Cuts', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) self.w.save_scale.set_state(self.t_.get('profile_use_scale', False)) self.w.save_scale.add_callback('activated', self.set_profile_cb) self.w.save_scale.set_tooltip("Remember scale with image") self.w.save_pan.set_state(self.t_.get('profile_use_pan', False)) self.w.save_pan.add_callback('activated', self.set_profile_cb) self.w.save_pan.set_tooltip("Remember pan position with image") self.w.save_transform.set_state( self.t_.get('profile_use_transform', False)) self.w.save_transform.add_callback('activated', self.set_profile_cb) self.w.save_transform.set_tooltip("Remember transform with image") self.w.save_rotation.set_state( self.t_.get('profile_use_rotation', False)) self.w.save_rotation.add_callback('activated', self.set_profile_cb) self.w.save_rotation.set_tooltip("Remember rotation with image") self.w.save_cuts.set_state(self.t_.get('profile_use_cuts', False)) self.w.save_cuts.add_callback('activated', self.set_profile_cb) self.w.save_cuts.set_tooltip("Remember cut levels with image") fr = Widgets.Frame() fr.set_widget(w) exp.set_widget(fr) vbox.add_widget(exp, stretch=0) exp = Widgets.Expander("ICC Profiles") captions = ( ('Output ICC profile:', 'label', 'Output ICC profile', 'combobox'), ('Rendering intent:', 'label', 'Rendering intent', 'combobox'), ('Proof ICC profile:', 'label', 'Proof ICC profile', 'combobox'), ('Proof intent:', 'label', 'Proof intent', 'combobox'), ('__x', 'spacer', 'Black point compensation', 'checkbutton'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) value = self.t_.get('icc_output_profile', None) combobox = b.output_icc_profile index = 0 for name in self.icc_profiles: combobox.append_text(str(name)) index += 1 index = self.icc_profiles.index(value) combobox.set_index(index) combobox.add_callback('activated', self.set_icc_profile_cb) combobox.set_tooltip("ICC profile for the viewer display") value = self.t_.get('icc_output_intent', 'perceptual') combobox = b.rendering_intent index = 0 for name in self.icc_intents: combobox.append_text(name) index += 1 index = self.icc_intents.index(value) combobox.set_index(index) combobox.add_callback('activated', self.set_icc_profile_cb) combobox.set_tooltip("Rendering intent for the viewer display") value = self.t_.get('icc_proof_profile', None) combobox = b.proof_icc_profile index = 0 for name in self.icc_profiles: combobox.append_text(str(name)) index += 1 index = self.icc_profiles.index(value) combobox.set_index(index) combobox.add_callback('activated', self.set_icc_profile_cb) combobox.set_tooltip("ICC profile for soft proofing") value = self.t_.get('icc_proof_intent', None) combobox = b.proof_intent index = 0 for name in self.icc_intents: combobox.append_text(name) index += 1 index = self.icc_intents.index(value) combobox.set_index(index) combobox.add_callback('activated', self.set_icc_profile_cb) combobox.set_tooltip("Rendering intent for soft proofing") value = self.t_.get('icc_black_point_compensation', False) b.black_point_compensation.set_state(value) b.black_point_compensation.add_callback('activated', self.set_icc_profile_cb) b.black_point_compensation.set_tooltip("Use black point compensation") fr = Widgets.Frame() fr.set_widget(w) exp.set_widget(fr) vbox.add_widget(exp, stretch=0) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_spacing(4) btns.set_border_width(4) btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn) btn = Widgets.Button("Save Settings") btn.add_callback('activated', lambda w: self.save_preferences()) btns.add_widget(btn) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True
def build_gui(self, container): if not have_mpl: raise ImportError('Install matplotlib to use this plugin') top = Widgets.VBox() top.set_border_width(4) # Make the cuts plot vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_margins(4, 4, 4, 4) vbox.set_spacing(2) # Add Tab Widget nb = Widgets.TabWidget(tabpos='top') vbox.add_widget(nb, stretch=1) self.tab_plot = plots.Plot(logger=self.logger, width=400, height=400) self.plot = Plot.PlotWidget(self.tab_plot) self.plot.resize(400, 400) ax = self.tab_plot.add_axis() ax.grid(True) # Add plot to its tab vbox_plot = Widgets.VBox() vbox_plot.add_widget(self.plot, stretch=1) nb.add_widget(vbox_plot, title='Plot') captions = (('X:', 'label', 'x_combo', 'combobox'), ('Y:', 'label', 'y_combo', 'combobox'), ('Log X', 'checkbutton', 'Log Y', 'checkbutton', 'Show Marker', 'checkbutton'), ('X Low:', 'label', 'x_lo', 'entry'), ('X High:', 'label', 'x_hi', 'entry'), ('Y Low:', 'label', 'y_lo', 'entry'), ('Y High:', 'label', 'y_hi', 'entry'), ('Save', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) # Controls for X-axis column listing combobox = b.x_combo combobox.add_callback('activated', self.x_select_cb) self.w.xcombo = combobox combobox.set_tooltip('Select a column to plot on X-axis') # Controls for Y-axis column listing combobox = b.y_combo combobox.add_callback('activated', self.y_select_cb) self.w.ycombo = combobox combobox.set_tooltip('Select a column to plot on Y-axis') b.log_x.set_state(self.tab_plot.logx) b.log_x.add_callback('activated', self.log_x_cb) b.log_x.set_tooltip('Plot X-axis in log scale') b.log_y.set_state(self.tab_plot.logy) b.log_y.add_callback('activated', self.log_y_cb) b.log_y.set_tooltip('Plot Y-axis in log scale') b.x_lo.add_callback('activated', lambda w: self.set_xlim_cb()) b.x_lo.set_tooltip('Set X lower limit') b.x_hi.add_callback('activated', lambda w: self.set_xlim_cb()) b.x_hi.set_tooltip('Set X upper limit') b.y_lo.add_callback('activated', lambda w: self.set_ylim_cb()) b.y_lo.set_tooltip('Set Y lower limit') b.y_hi.add_callback('activated', lambda w: self.set_ylim_cb()) b.y_hi.set_tooltip('Set Y upper limit') b.show_marker.set_state(self.settings.get('show_marker', True)) b.show_marker.add_callback('activated', self.set_marker_cb) b.show_marker.set_tooltip('Mark data points') # Button to save plot self.save_plot = b.save self.save_plot.set_tooltip('Save table plot') self.save_plot.add_callback('activated', lambda w: self.save_cb()) self.save_plot.set_enabled(False) vbox2 = Widgets.VBox() vbox2.add_widget(w, stretch=0) vbox.add_widget(vbox2, stretch=0) top.add_widget(sw, stretch=1) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(3) btn = Widgets.Button('Close') btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btn = Widgets.Button('Help') btn.add_callback('activated', lambda w: self.help()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1) self.gui_up = True
def build_gui(self, container): vbox, sw, self.orientation = Widgets.get_oriented_box(container) msg_font = self.fv.get_font('sansFont', 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(msg_font) self.tw = tw fr = Widgets.Expander('Instructions') fr.set_widget(tw) container.add_widget(fr, stretch=0) captions = (('Mark:', 'label', 'mark type', 'combobox'), ('Color:', 'label', 'mark color', 'combobox'), ('Size:', 'label', 'mark size', 'entry'), ('Width:', 'label', 'mark width', 'entry')) w, b = Widgets.build_info(captions) self.w.update(b) combobox = b.mark_type for name in self._mark_options: combobox.append_text(name) b.mark_type.set_index(self._mark_options.index(self.marktype)) b.mark_type.add_callback('activated', self.set_marktype_cb) combobox = b.mark_color for name in self._color_options: combobox.append_text(name) b.mark_color.set_index(self._color_options.index(self.markcolor)) b.mark_color.add_callback('activated', self.set_markcolor_cb) b.mark_size.set_tooltip('Size/radius of the marking') b.mark_size.set_text(str(self.marksize)) b.mark_size.add_callback('activated', lambda w: self.set_marksize()) b.mark_width.set_tooltip('Line width of the marking') b.mark_width.set_text(str(self.markwidth)) b.mark_width.add_callback('activated', lambda w: self.set_markwidth()) container.add_widget(w, stretch=0) nb = Widgets.TabWidget() self.w.nb1 = nb container.add_widget(nb, stretch=1) treeview = Widgets.TreeView(auto_expand=True, sortable=True, selection='multiple', use_alt_row_color=True) self.treeview = treeview treeview.setup_table(self.columns, 2, 'MARKID') treeview.add_callback('selected', self.hl_table2canvas) nb.add_widget(treeview, title='Shown') treeview2 = Widgets.TreeView(auto_expand=True, sortable=True, use_alt_row_color=True) self.treeviewsel = treeview2 treeview2.setup_table(self.columns, 2, 'MARKID') nb.add_widget(treeview2, title='Selected') treeview3 = Widgets.TreeView(auto_expand=True, sortable=True, use_alt_row_color=True) self.treeviewbad = treeview3 treeview3.setup_table(self.columns, 2, 'MARKID') nb.add_widget(treeview3, title='Outliers') captions = (('Loaded:', 'llabel', 'ntotal', 'llabel', 'Shown:', 'llabel', 'nshown', 'llabel', 'Selected:', 'llabel', 'nselected', 'llabel'), ) w, b = Widgets.build_info(captions) self.w.update(b) b.ntotal.set_tooltip('Number of objects read from tables') b.ntotal.set_text('0') b.nshown.set_tooltip('Number of objects shown on image') b.nshown.set_text('0') b.nselected.set_tooltip('Number of objects selected') b.nselected.set_text('0') container.add_widget(w, stretch=0) captions = (('Load Coords', 'button', 'Use RADEC', 'checkbutton'), ('Show', 'button', 'Hide', 'button', 'Forget', 'button')) w, b = Widgets.build_info(captions) self.w.update(b) b.load_coords.set_tooltip('Load coordinates file') b.load_coords.add_callback('activated', lambda w: self.load_coords_cb()) b.use_radec.set_tooltip('Use RA/DEC as coordinates instead of X/Y') b.use_radec.set_state(self.use_radec) b.use_radec.add_callback('activated', self.set_coordtype_cb) b.show.set_tooltip('Show markings') b.show.add_callback('activated', lambda w: self.redo()) b.hide.set_tooltip('Hide markings') b.hide.add_callback('activated', lambda w: self.clear_marking()) b.forget.set_tooltip('Forget markings') b.forget.add_callback('activated', lambda w: self.forget_coords()) container.add_widget(w, stretch=0) btns = Widgets.HBox() btns.set_border_width(4) btns.set_spacing(3) btn = Widgets.Button('Close') btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) btns.add_widget(Widgets.Label(''), stretch=1) container.add_widget(btns, stretch=0) self.gui_up = True # Initialize coordinates file selection dialog self.cfilesel = FileSelection(self.fv.w.root.get_widget()) # Populate table self.redo()