def build_gui(self, container): if not have_samp: raise GingaPlugin.PluginError( "To run this plugin you need to install the astropy.vo.samp module" ) vbox = Widgets.VBox() vbox.set_border_width(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.Frame("Instructions") fr.set_widget(tw) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame("SAMP") captions = [ ('Start hub', 'checkbutton'), ('Connect client', 'checkbutton'), ] w, b = Widgets.build_info(captions) self.w.update(b) b.start_hub.set_tooltip("Start a SAMP hub") b.start_hub.set_state(self.settings.get('start_hub', True)) b.start_hub.add_callback('activated', self.start_hub_cb) b.connect_client.set_tooltip("Register with a SAMP hub") b.connect_client.set_state(self.settings.get('default_connect', True)) b.connect_client.add_callback('activated', self.connect_client_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) # stretch vbox.add_widget(Widgets.Label(''), 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) vbox.add_widget(btns, stretch=0) container.add_widget(vbox, stretch=1)
def build_gui(self, container, future=None): vbox1 = Widgets.VBox() vbox = Widgets.VBox() fr = Widgets.Frame() fr.set_widget(vbox) self.lbl = Widgets.Label() vbox.add_widget(self.lbl, stretch=0) vbox2 = Widgets.VBox() self.entries = vbox2 vbox.add_widget(vbox2, stretch=1) vbox1.add_widget(fr, stretch=0) btns = Widgets.HBox() btns.set_spacing(4) btns.set_border_width(4) btn = Widgets.Button("Ok") btn.add_callback('activated', lambda w: self.ok()) btns.add_widget(btn) btn = Widgets.Button("Cancel") btn.add_callback('activated', lambda w: self.cancel()) btns.add_widget(btn) vbox1.add_widget(btns, stretch=0) # stretch/spacer vbox1.add_widget(Widgets.Label(""), stretch=1) container.add_widget(vbox1, stretch=0)
def build_gui(self, container): self.w = Bunch.Bunch() self.w_track = dict() vbox = Widgets.VBox() sc = Widgets.ScrollArea() vbox2 = Widgets.VBox() fr = Widgets.Frame("Downloads") self.dlbox = Widgets.VBox() fr.set_widget(self.dlbox) vbox2.add_widget(fr, stretch=0) vbox2.add_widget(Widgets.Label(''), stretch=1) sc.set_widget(vbox2) vbox.add_widget(sc, stretch=1) self.w_scroll = sc 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("Clear All") btn.add_callback('activated', lambda w: self.gui_clear_all()) 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 make_widget(kind, paramdict, args, pack): kind = kind.lower() # Process workspace parameters params = Bunch.Bunch(name=None, title=None, height=-1, width=-1, group=1, show_tabs=True, show_border=False, scrollable=True, detachable=False, wstype='tabs', tabpos='top', use_toolbar=False) params.update(paramdict) if kind == 'widget': widget = args[0] elif kind == 'ws': group = int(params.group) ws = self.make_ws(params.name, group=group, show_tabs=params.show_tabs, show_border=params.show_border, detachable=params.detachable, tabpos=params.tabpos, wstype=params.wstype, scrollable=params.scrollable, use_toolbar=params.use_toolbar) widget = ws.widget #debug(widget) # If a title was passed as a parameter, then make a frame to # wrap the widget using the title. if params.title: fr = Widgets.Frame(title=params.title) fr.set_widget(widget) pack(fr) else: pack(widget) #process_common_params(widget, params) if (kind in ('ws', 'mdi', 'grid', 'stack')) and (len(args) > 0): # <-- Workspace specified a sub-layout. We expect a list # of tabname, layout pairs--iterate over these and add them # to the workspace as tabs. for tabname, layout in args[0]: def pack(w): # ?why should group be the same as parent group? self.add_tab(params.name, w, group, tabname, tabname.lower()) make(layout, pack) process_common_params(widget, params)
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.msgFont = self.fv.getFont("sansFont", 12) tw = Widgets.TextArea(wrap=True, editable=False) tw.set_font(self.msgFont) 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") vbox2 = Widgets.VBox() vbox2.add_widget(tw) vbox2.add_widget(Widgets.Label(''), stretch=1) fr.set_widget(vbox2) 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)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) self.msg_font = self.fv.get_font("Courier", 12) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) #Gui fr = Widgets.Frame("Add or Subtract Two Images") vbox2 = Widgets.VBox() captions = (("Path to file 1:", 'label', 'First', 'entry'), ("Path to file 2:", 'label', 'Second', 'entry'), ("Add", 'button', "Subtract", 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b #Function callbacks b.first.set_text(str(self.first)) b.first.add_callback('activated', lambda w: self.addimg()) b.second.set_text(str(self.second)) b.second.add_callback('activated', lambda w: self.addimg()) b.add.add_callback('activated', lambda w: self.addimg()) b.first.add_callback('activated', lambda w: self.subimg()) b.second.add_callback('activated', lambda w: self.subimg()) b.subtract.add_callback('activated', lambda w: self.subimg()) 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) 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) 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") 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()) 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) btns.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns, stretch=0) container.add_widget(top, stretch=1)
def build_gui(self, container): cbar = ColorBar.ColorBar(self.logger) cbar.set_cmap(self.fv.cm) cbar.set_imap(self.fv.im) cbar_w = Widgets.wrap(cbar) self.colorbar = cbar self.fv.add_callback('channel-change', self.change_cbar, cbar) cbar.add_callback('motion', self.cbar_value_cb) fr = Widgets.Frame() fr.set_border_width(0) fr.set_widget(cbar_w) container.add_widget(fr, stretch=0)
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.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("Crosshair") captions = (('Format:', 'label', 'Format', 'combobox'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b combobox = b.format for name in self.formats: combobox.append_text(name) index = self.formats.index(self.format) combobox.set_index(index) combobox.add_callback('activated', lambda w, idx: self.set_format()) 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) 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) 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("WCS Match") captions = ((' Reference Channel:', 'label', 'ref channel', 'combobox'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b b.ref_channel.add_callback('activated', self.set_reference_channel_cb) 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) 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): if not have_samp: raise GingaPlugin.PluginError( "To run this plugin you need to install the " "astropy package") vbox = Widgets.VBox() vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("SAMP") captions = [ ('Start hub', 'checkbutton'), ('Connect client', 'checkbutton'), ] w, b = Widgets.build_info(captions) self.w.update(b) b.start_hub.set_tooltip("Start a SAMP hub") b.start_hub.set_state(self.settings.get('start_hub', True)) b.start_hub.add_callback('activated', self.start_hub_cb) b.connect_client.set_tooltip("Register with a SAMP hub") b.connect_client.set_state(self.settings.get('default_connect', True)) b.connect_client.add_callback('activated', self.connect_client_cb) fr.set_widget(w) vbox.add_widget(fr, stretch=0) # stretch vbox.add_widget(Widgets.Label(''), 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) 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) self.msg_font = self.fv.get_font("Courier", 12) vbox, sw, orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Load an image") vbox2 = Widgets.VBox() captions = ( ("Path to file:", 'label', 'Image', 'entry'), ("Load", 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b #setup for entry callback b.image.set_text(str(self.image)) b.image.add_callback('activated', lambda w: self.loadimg()) b.image.set_tooltip("Path to image") #load button callback b.load.add_callback('activated', lambda w: self.loadimg()) 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) 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("Bar Input") captions = (('Overlay', 'button'), ('Clear', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.overlay.add_callback('activated', lambda w: self.load_cb()) b.clear.add_callback('activated', lambda w: self.clear_canvas()) 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.mfilesel = FileSelection(self.fv.w.root.get_widget())
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("Keck Mosaic") captions = (('Click Run to start the program', 'label'), ('Run', 'button', 'Stop Scan', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.run.add_callback('activated', lambda w: self.run_cb()) b.stop_scan.add_callback('activated', lambda w: self.stop_scan_cb()) 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) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame("Crosshair") captions = (('Format:', 'label', 'Format', 'combobox'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b combobox = b.format for name in self.formats: combobox.append_text(name) index = self.formats.index(self.format) combobox.set_index(index) combobox.add_callback('activated', lambda w, idx: self.set_format()) 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): vbox = Widgets.VBox() fr = Widgets.Frame("Remote Control") captions = [ ("Addr:", 'label', "Addr", 'llabel', 'Restart', 'button'), ("Set Addr:", 'label', "Set Addr", 'entry'), ] w, b = Widgets.build_info(captions) self.w.update(b) addr = self.host + ':' + str(self.port) 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.set_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) fr.set_widget(w) 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)
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'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w = b b.ref_channel.add_callback('activated', self.set_reference_channel_cb) 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("Keck Mosaic") captions = (('Load a multi-extension FITS file, create a mosaic', 'label'), ('Load', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.load.add_callback('activated', lambda w: self.load_cb()) 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.mfilesel = FileSelection(self.fv.w.root.get_widget())
def build_gui(self, container): cbar = ColorBar.ColorBar(self.logger) cbar.set_cmap(self.fv.cm) cbar.set_imap(self.fv.im) if hasattr(cbar, 'get_widget'): # generic version based on a ginga widget cbar_w = cbar.get_widget() # TEMP #cbar_w.resize(600, 16) fr = cbar_w else: # dedicated widget version cbar_w = Widgets.wrap(cbar) fr = Widgets.Frame() fr.set_border_width(0) fr.set_widget(cbar_w) self.colorbar = cbar self.fv.add_callback('channel-change', self.change_cbar, cbar) cbar.add_callback('motion', self.cbar_value_cb) container.add_widget(fr, stretch=0)
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): vbox = Widgets.VBox() vbox.set_border_width(4) vbox.set_spacing(2) #vbox.cfg_expand(8, 8) sw = Widgets.ScrollArea() sw.set_widget(vbox) fr = Widgets.Frame("Files") captions = (('Inputs:', 'label', 'Input dir', 'entry'), ('Load Info', 'button'), ('Update Database from Files', 'button'), ('Build Schedule', 'button', 'Use QDB', 'checkbutton'), ("Remove scheduled OBs", 'checkbutton')) w, b = Widgets.build_info(captions, orientation='vertical') self.w = b sdlr = self.model.get_scheduler() b.input_dir.set_length(128) b.input_dir.set_text(self.controller.input_dir) b.load_info.set_tooltip("Load data from phase 2 files") b.load_info.add_callback('activated', self.initialize_model_cb) b.update_database_from_files.set_tooltip( "Update Gen2 database from changes to phase 2 files") b.remove_scheduled_obs.set_state(sdlr.remove_scheduled_obs) def toggle_sdled_obs(w, tf): print(('setting sdled obs', tf)) sdlr.remove_scheduled_obs = tf b.remove_scheduled_obs.add_callback('activated', toggle_sdled_obs) if have_gen2: b.update_database_from_files.add_callback('activated', self.update_db_cb) else: b.update_database_from_files.set_enabled(False) b.build_schedule.set_tooltip( "Schedule all periods defined in schedule tab") b.build_schedule.add_callback('activated', self.build_schedule_cb) b.use_qdb.set_tooltip("Use Gen2 queue database when scheduling") if not have_qdb: b.use_qdb.set_enabled(False) else: qdb_port = self.settings.get('qdb_port') if qdb_port is not None: b.use_qdb.set_state(True) fr.set_widget(w) vbox.add_widget(fr, stretch=0) spacer = Widgets.Label('') vbox.add_widget(spacer, stretch=1) hbox = Widgets.HBox() adj = Widgets.Slider(orientation='horizontal', track=False) adj.set_limits(0, 100, incr_value=1) idx = self.controller.idx_tgt_plots adj.set_value(idx) #adj.resize(200, -1) adj.set_tooltip("Choose subset of targets plotted") #self.w.plotgrp = adj adj.add_callback('value-changed', self.set_plot_pct_cb) hbox.add_widget(adj, stretch=1) sb = Widgets.TextEntrySet() num = self.controller.num_tgt_plots sb.set_text(str(num)) sb.set_tooltip("Adjust size of subset of targets plotted") sb.add_callback('activated', self.set_plot_limit_cb) hbox.add_widget(sb, stretch=0) vbox.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) ## vbox.add_widget(btns, stretch=0) self.sw = sw container.add_widget(sw, stretch=1)
def build_gui(self, container): top = Widgets.VBox() top.set_border_width(4) vbox, sw, self.orientation = Widgets.get_oriented_box(container) vbox.set_border_width(4) vbox.set_spacing(2) fr = Widgets.Frame('Correction Type') captions = (('Bad Pix Region:', 'label', 'corr type', 'combobox'), ('Fill From:', 'label', 'fill type', 'combobox'), ('Move', 'radiobutton', 'Draw', 'radiobutton')) w, b = Widgets.build_info(captions) self.w.update(b) for name in self._corrtype_options: b.corr_type.append_text(name) b.corr_type.set_index(self._corrtype_options.index(self.corrtype)) b.corr_type.add_callback('activated', self.set_corrtype_cb) for name in self._filltype_options: b.fill_type.append_text(name) b.fill_type.set_index(self._filltype_options.index(self.filltype)) b.fill_type.add_callback('activated', self.set_filltype_cb) 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 position region') 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 draw a new region') fr.set_widget(w) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame('Bad Pix Attributes') vbox2 = Widgets.VBox() self.w.corrtype_attr_vbox = Widgets.VBox() vbox2.add_widget(self.w.corrtype_attr_vbox, stretch=1) fr.set_widget(vbox2) vbox.add_widget(fr, stretch=0) fr = Widgets.Frame('Fill From Attributes') vbox2 = Widgets.VBox() self.w.filltype_attr_vbox = Widgets.VBox() vbox2.add_widget(self.w.filltype_attr_vbox, stretch=1) fr.set_widget(vbox2) vbox.add_widget(fr, stretch=0) self.build_param_gui(vbox) captions = (('Fix Bad Pixels', 'button', 'spacer1', 'spacer'), ) w, b = Widgets.build_info(captions, orientation=self.orientation) self.w.update(b) b.fix_bad_pixels.set_tooltip('Replace bad pixels with fill value') b.fix_bad_pixels.add_callback('activated', lambda w: self.fix_bpix()) b.fix_bad_pixels.set_enabled(False) vbox.add_widget(w, 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) # Populate default attributes frame self.set_corrtype(self.corrtype) self.set_filltype(self.filltype) 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
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 box, sw, orientation = Widgets.get_oriented_box(container) box.set_border_width(4) box.set_spacing(2) paned = Widgets.Splitter(orientation=orientation) self.w.splitter = paned self.plot = plots.Plot(logger=self.logger, width=400, height=400) ax = self.plot.add_axis() ax.grid(True) w = Plot.PlotWidget(self.plot) w.resize(400, 400) paned.add_widget(Widgets.hadjust(w, orientation)) captions = (('Cut Low:', 'label', 'Cut Low', 'entry'), ('Cut High:', 'label', 'Cut High', 'entry', 'Cut Levels', 'button'), ('Auto Levels', 'button'), ('Log Histogram', 'checkbutton', 'Plot By Cuts', 'checkbutton'), ('NumBins:', 'label', 'NumBins', 'entry'), ('Full Image', 'button'), ) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) 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_high.set_tooltip("Set high cut level (press Enter)") b.log_histogram.set_tooltip("Use the log of the pixel values for the " "histogram (empty bins map to 10^-1)") b.plot_by_cuts.set_tooltip("Only show the part of the histogram " "between the cuts") b.numbins.set_tooltip("Number of bins for the histogram") b.full_image.set_tooltip("Use the full image for calculating the " "histogram") b.numbins.set_text(str(self.numbins)) b.cut_low.add_callback('activated', lambda w: self.cut_levels()) b.cut_high.add_callback('activated', lambda w: self.cut_levels()) b.cut_levels.add_callback('activated', lambda w: self.cut_levels()) b.auto_levels.add_callback('activated', lambda w: self.auto_levels()) b.log_histogram.set_state(self.plot.logy) b.log_histogram.add_callback('activated', self.log_histogram_cb) b.plot_by_cuts.set_state(self.xlimbycuts) b.plot_by_cuts.add_callback('activated', self.plot_by_cuts_cb) b.numbins.add_callback('activated', lambda w: self.set_numbins_cb()) b.full_image.add_callback('activated', lambda w: self.full_image_cb()) fr = Widgets.Frame("Histogram") fr.set_widget(w) box.add_widget(fr, stretch=0) paned.add_widget(sw) paned.set_sizes(self._split_sizes) 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 box") 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 box") 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 box") self.w.btn_edit = btn3 hbox.add_widget(btn3) if self.histtag is None: self.w.btn_move.set_enabled(False) self.w.btn_edit.set_enabled(False) hbox.add_widget(Widgets.Label(''), stretch=1) top.add_widget(paned, stretch=5) top.add_widget(hbox, 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) 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) # 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): 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) fr = Widgets.Frame("Drawing") captions = (("Draw type:", 'label', "Draw type", 'combobox'), ) w, b = Widgets.build_info(captions) self.w.update(b) combobox = b.draw_type for name in self.drawtypes: combobox.append_text(name) index = self.drawtypes.index(default_drawtype) combobox.set_index(index) combobox.add_callback('activated', lambda w, idx: self.set_drawtype_cb()) 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") 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") self.w.btn_edit = btn2 hbox.add_widget(btn2) hbox.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(hbox, stretch=0) fr = Widgets.Frame("Attributes") vbox2 = Widgets.VBox() self.w.attrlbl = Widgets.Label() vbox2.add_widget(self.w.attrlbl, stretch=0) self.w.drawvbox = Widgets.VBox() vbox2.add_widget(self.w.drawvbox, stretch=1) fr.set_widget(vbox2) vbox.add_widget(fr, stretch=0) captions = ( ("Rotate By:", 'label', 'Rotate By', 'entry', "Scale By:", 'label', 'Scale By', 'entry'), ("Delete Obj", 'button', "sp1", 'spacer', "Create mask", 'button', "Clear canvas", 'button'), ) w, b = Widgets.build_info(captions) self.w.update(b) b.delete_obj.add_callback('activated', lambda w: self.delete_object()) b.delete_obj.set_tooltip("Delete selected object in edit mode") b.delete_obj.set_enabled(False) b.scale_by.add_callback('activated', self.scale_object) b.scale_by.set_text('0.9') b.scale_by.set_tooltip("Scale selected object in edit mode") b.scale_by.set_enabled(False) b.rotate_by.add_callback('activated', self.rotate_object) b.rotate_by.set_text('90.0') b.rotate_by.set_tooltip("Rotate selected object in edit mode") b.rotate_by.set_enabled(False) b.create_mask.add_callback('activated', lambda w: self.create_mask()) b.create_mask.set_tooltip("Create boolean mask from drawing") b.clear_canvas.add_callback('activated', lambda w: self.clear_canvas()) b.clear_canvas.set_tooltip("Delete all drawing objects") vbox.add_widget(w, 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, 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.toggle_create_button()
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 may be called many times as the plugin is opened and closed for modal operations. 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) self.msg_font = self.fv.get_font("sansFont", 12) ## ----------------------------------------------------- ## Acquire or Load Image ## ----------------------------------------------------- fr1 = Widgets.Frame("Image the CSU Mask") vbox.add_widget(fr1, stretch=0) # A button box that is always visible at the top btns1 = Widgets.HBox() btns1.set_spacing(3) # Add mask image buttons btn_acq_im = Widgets.Button("Acquire Mask Image") btn_acq_im.add_callback('activated', lambda w: self.acq_mask_image()) btns1.add_widget(btn_acq_im, stretch=0) btns1.add_widget(Widgets.Label(''), stretch=1) btn_load_im = Widgets.Button("Load Mask Image") btn_load_im.add_callback('activated', lambda w: self.load_mask_image()) btns1.add_widget(btn_load_im, stretch=0) btns1.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(btns1, stretch=0) ## ----------------------------------------------------- ## Analyze Image ## ----------------------------------------------------- # tw_analyze = Widgets.TextArea(wrap=True, editable=False) # tw_analyze.set_font(self.msg_font) # self.tw_analyze = tw_analyze fr2 = Widgets.Frame("Analyze CSU Mask Image") # fr2.set_widget(tw_analyze) vbox.add_widget(fr2, stretch=0) btns2 = Widgets.HBox() btns2.set_spacing(3) btn_analyze = Widgets.Button("Analyze Mask Image") btn_analyze.add_callback('activated', lambda w: self.analyze_mask_image()) btns2.add_widget(btn_analyze, stretch=0) btns2.add_widget(Widgets.Label(''), stretch=1) vbox.add_widget(btns2, stretch=0) ## ----------------------------------------------------- ## Full Mask Initialization ## ----------------------------------------------------- # fr3 = Widgets.Frame("Full Mask Initialization") # # captions = [ # ("Fast Init from Keywords", 'button'), # ("Fast Init from Header", 'button'), # ("Fast Init from Image Analysis", 'button'), # ("Full Init", 'button'), # ] # # w, b = Widgets.build_info(captions, orientation=orientation) # self.w.update(b) # # b.fast_init_from_keywords.add_callback('activated', lambda w: self.fast_init_from_keywords_cb()) # b.fast_init_from_header.add_callback('activated', lambda w: self.fast_init_from_header_cb()) # b.fast_init_from_image_analysis.add_callback('activated', lambda w: self.fast_init_from_image_analysis_cb()) # b.full_init.add_callback('activated', lambda w: self.full_init_cb()) # # # fr3.set_widget(w) # vbox.add_widget(fr3, stretch=0) ## ----------------------------------------------------- ## Bar Control ## ----------------------------------------------------- # tw_bar_control = Widgets.TextArea(wrap=True, editable=False) # tw_bar_control.set_font(self.msg_font) # self.tw_bar_control = tw_bar_control # Frame for instructions and add the text widget with another # blank widget to stretch as needed to fill emp fr4 = Widgets.Frame("CSU Bar Control") # fr1.set_widget(tw_bar_control) captions = [ ("CSU Bar: ", 'label', 'bar_num', 'llabel', 'set_bar_num', 'entry'), ("Distance: ", 'label', 'bar_dist', 'llabel', 'set_bar_dist', 'entry'), ("Initialize Bar", 'button', "Move to open", 'checkbutton'), ("Move Bar", 'button'), ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) bar_num = self.settings.get('bar_num', 1) b.bar_num.set_text('{:2d}'.format(bar_num)) b.set_bar_num.set_text(str(bar_num)) b.set_bar_num.add_callback('activated', self.set_bar_num_cb) b.set_bar_num.set_tooltip("Set bar number") bar_dist = self.settings.get('bar_dist', 0.0) b.bar_dist.set_text('{:+.1f}'.format(bar_dist)) b.set_bar_dist.set_text(str(bar_dist)) b.set_bar_dist.add_callback('activated', self.set_bar_dist_cb) b.set_bar_dist.set_tooltip("Set distance to move bar") b.move_to_open.set_tooltip( "Move bar to open position before initialization") move_to_open = self.settings.get('move_to_open', False) b.move_to_open.set_state(move_to_open) b.move_to_open.add_callback('activated', self.move_to_open_cb) b.initialize_bar.add_callback('activated', lambda w: self.initialize_bar_cb()) b.move_bar.add_callback('activated', lambda w: self.move_bar_cb()) fr4.set_widget(w) vbox.add_widget(fr4, stretch=0) ## ----------------------------------------------------- ## Bar Overlay ## ----------------------------------------------------- fr5 = Widgets.Frame("Bar Overlay") #captions = (('Overlay bar positions from csu_bar_state file', 'button'), # ('Overlay bar positions from FITS header', 'button'), # ('Clear', 'button')) captions = (('Overlay bar positions from csu_bar_state file', 'checkbutton'), ('Overlay bar positions from FITS header', 'checkbutton'), ('Overlay bar positions from analyzed image', 'checkbutton'), ('Clear', 'button')) w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) overlay_bar_positions_from_csu_bar_state_file = self.settings.get( 'overlay_bar_positions_from_csu_bar_state_file', False) b.overlay_bar_positions_from_csu_bar_state_file.set_state( overlay_bar_positions_from_csu_bar_state_file) b.overlay_bar_positions_from_csu_bar_state_file.add_callback( 'activated', self.overlaybars_from_file_cb) overlay_bar_positions_from_fits_header = self.settings.get( 'overlay_bar_positions_from_fits_header', False) b.overlay_bar_positions_from_fits_header.set_state( overlay_bar_positions_from_fits_header) b.overlay_bar_positions_from_fits_header.add_callback( 'activated', self.overlaybars_from_header_cb) overlay_bar_positions_from_analyzed_image = self.settings.get( 'overlay_bar_positions_from_analyzed_image', False) b.overlay_bar_positions_from_analyzed_image.set_state( overlay_bar_positions_from_analyzed_image) b.overlay_bar_positions_from_fits_header.add_callback( 'activated', self.overlaybars_from_image_cb) b.clear.add_callback('activated', lambda w: self.clear_canvas()) fr5.set_widget(w) vbox.add_widget(fr5, stretch=0) ## ----------------------------------------------------- ## Spacer ## ----------------------------------------------------- # 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) ## ----------------------------------------------------- ## Bottom ## ----------------------------------------------------- # A button box that is always visible at the bottom btns_close = Widgets.HBox() btns_close.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_close.add_widget(btn, stretch=0) btns_close.add_widget(Widgets.Label(''), stretch=1) top.add_widget(btns_close, stretch=0) # Add our GUI to the container container.add_widget(top, stretch=1)
def build_gui(self, container): assert have_pyfits == True, \ Exception("Please install astropy/pyfits to use this plugin") 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) 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("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) captions = [ ("First", 'button', "Prev", 'button', "Stop", 'button'), ("Last", 'button', "Next", 'button', "Play", 'button'), ("Interval:", 'label', "Interval", 'spinfloat'), ] w, b = Widgets.build_info(captions, orientation=orientation) self.w.update(b) b.next.add_callback('activated', lambda w: self.next_slice()) b.prev.add_callback('activated', lambda w: self.prev_slice()) b.first.add_callback('activated', lambda w: self.first_slice()) b.last.add_callback('activated', lambda w: self.last_slice()) b.play.add_callback('activated', lambda w: self.play_start()) b.stop.add_callback('activated', lambda w: self.play_stop()) lower, upper = 0.1, 8.0 b.interval.set_limits(lower, upper, incr_value=0.1) b.interval.set_value(lower) b.interval.set_decimals(2) b.interval.add_callback('value-changed', self.play_int_cb) b.next.set_enabled(False) b.prev.set_enabled(False) b.first.set_enabled(False) b.last.set_enabled(False) b.play.set_enabled(False) b.stop.set_enabled(False) 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) 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, future=None): vbox1 = Widgets.VBox() msg_font = self.fv.get_font("sansFont", 14) tw = Widgets.TextArea() tw.set_font(msg_font) tw.set_wrap(True) self.tw = tw fr = Widgets.Expander("Instructions") fr.set_widget(tw) vbox1.add_widget(fr, stretch=0) nb = Widgets.TabWidget(tabpos='bottom') self.w.nb = nb vbox1.add_widget(nb, stretch=1) vbox0 = Widgets.VBox() hbox = Widgets.HBox() hbox.set_spacing(4) vbox0.add_widget(hbox, stretch=1) vbox = Widgets.VBox() fr = Widgets.Frame(" Image Server ") fr.set_widget(vbox) hbox.add_widget(fr, stretch=0) captions = (('Server:', 'llabel'), ('Server', 'combobox'), ('Use DSS channel', 'checkbutton'), ('Get Image', 'button')) w, b = Widgets.build_info(captions) self.w.update(b) self.w.get_image.add_callback('activated', lambda w: self.getimage_cb()) self.w.use_dss_channel.set_state(self.use_dss_channel) self.w.use_dss_channel.add_callback('activated', self.use_dss_channel_cb) vbox.add_widget(w, stretch=0) self.w.img_params = Widgets.StackWidget() vbox.add_widget(self.w.img_params, stretch=1) combobox = self.w.server index = 0 self.image_server_options = self.fv.imgsrv.getServerNames(kind='image') for name in self.image_server_options: combobox.append_text(name) index += 1 index = 0 combobox.set_index(index) combobox.add_callback('activated', lambda w, idx: self.setup_params_image(idx)) if len(self.image_server_options) > 0: self.setup_params_image(index, redo=False) vbox = Widgets.VBox() fr = Widgets.Frame(" Catalog Server ") fr.set_widget(vbox) hbox.add_widget(fr, stretch=0) captions = (('Server:', 'llabel'), ('Server', 'combobox'), ('Limit stars to area', 'checkbutton'), ('Search', 'button')) w, self.w2 = Widgets.build_info(captions) self.w2.search.add_callback('activated', lambda w: self.getcatalog_cb()) self.w2.limit_stars_to_area.set_state(self.limit_stars_to_area) self.w2.limit_stars_to_area.add_callback('activated', self.limit_area_cb) vbox.add_widget(w, stretch=0) self.w2.cat_params = Widgets.StackWidget() vbox.add_widget(self.w2.cat_params, stretch=1) combobox = self.w2.server index = 0 self.catalog_server_options = self.fv.imgsrv.getServerNames( kind='catalog') for name in self.catalog_server_options: combobox.append_text(name) index += 1 index = 0 combobox.set_index(index) combobox.add_callback('activated', lambda w, idx: self.setup_params_catalog(idx)) if len(self.catalog_server_options) > 0: self.setup_params_catalog(index, redo=False) # stretch vbox0.add_widget(Widgets.Label(''), stretch=1) btns = Widgets.HBox() btns.set_spacing(5) btn1 = Widgets.RadioButton("Rectangle") btn1.set_state(self.drawtype == 'rectangle') btn1.add_callback('activated', lambda w, tf: self.set_drawtype_cb(tf, 'rectangle')) btns.add_widget(btn1, stretch=0) btn2 = Widgets.RadioButton("Circle", group=btn1) btn2.set_state(self.drawtype == 'circle') btn2.add_callback('activated', lambda w, tf: self.set_drawtype_cb(tf, 'circle')) btns.add_widget(btn2, stretch=0) btn = Widgets.Button("Entire image") btn.add_callback('activated', lambda w: self.setfromimage()) btns.add_widget(btn, stretch=0) vbox0.add_widget(btns, stretch=0) self.w.params = vbox0 sw = Widgets.ScrollArea() sw.set_widget(vbox0) nb.add_widget(sw, title="Params") vbox = Widgets.VBox() self.table = CatalogListing(self.logger, vbox) hbox = Widgets.HBox() adj = Widgets.Slider(orientation='horizontal') adj.set_limits(0, 1000, incr_value=1) adj.set_value(0) #adj.resize(200, -1) adj.set_tracking(True) adj.set_tooltip("Choose subset of stars plotted") self.w.plotgrp = adj adj.add_callback('value-changed', self.plot_pct_cb) hbox.add_widget(adj, stretch=1) sb = Widgets.SpinBox(dtype=int) sb.set_limits(10, self.plot_max, incr_value=10) sb.set_value(self.plot_limit) #sb.set_wrapping(False) self.w.plotnum = sb sb.set_tooltip("Adjust size of subset of stars plotted") sb.add_callback('value-changed', self.plot_limit_cb) hbox.add_widget(sb, stretch=0) vbox.add_widget(hbox, stretch=0) self.w.listing = vbox nb.add_widget(vbox, title="Listing") btns = Widgets.HBox() btns.set_spacing(3) self.w.buttons = btns btn = Widgets.Button("Close") btn.add_callback('activated', lambda w: self.close()) btns.add_widget(btn, stretch=0) if future: btn = Widgets.Button('Ok') btn.add_callback('activated', lambda w: self.ok()) btns.add_widget(btn, stretch=0) btn = Widgets.Button('Cancel') btn.add_callback('activated', lambda w: self.cancel()) btns.add_widget(btn, stretch=0) vbox1.add_widget(btns, stretch=0) container.add_widget(vbox1, 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("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) b.fov.set_text(str(fov_deg)) #b.set_fov.set_length(8) b.set_fov.set_text(str(fov_deg)) 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