def __init__( self, parent_window, theme_map ): super(ThemeLegendWindow, self).__init__() self.set_border_width(5) self.set_title( "" ) if parent_window is None: self.set_icon(get_icon()) else: self.set_transient_for( parent_window ) self.set_type_hint( gtk.gdk.WINDOW_TYPE_HINT_DIALOG ) vbox = gtk.VBox() self._theme = theme_map self._key_liststore = gtk.ListStore( str, gtk.gdk.Pixbuf ) treeview = gtk.TreeView( self._key_liststore ) treeview.set_headers_visible(False) treeview.get_selection().set_mode( gtk.SELECTION_NONE ) tvc = gtk.TreeViewColumn( None ) self.update() cellpb = gtk.CellRendererPixbuf() cell = gtk.CellRendererText() tvc.pack_start( cellpb, False ) tvc.pack_start( cell, True ) tvc.set_attributes( cellpb, pixbuf=1 ) tvc.set_attributes( cell, text=0 ) treeview.append_column( tvc ) self.add( treeview ) self.show_all()
def __init__(self, suite, suiterc, template_vars, orientation="TB", should_hide=False, start_point_string=None, stop_point_string=None, interactive=True): self.suite = suite self.suiterc = None self.template_vars = template_vars self.orientation = orientation self.should_hide = should_hide self.start_point_string = start_point_string self.stop_point_string = stop_point_string self.interactive = interactive self.outfile = None self.disable_output_image = False self.file = suiterc self.filter_recs = [] util.setup_icons() gtk.Window.__init__(self) self.graph = xdot.Graph() self.set_icon(util.get_icon()) self.set_default_size(512, 512) self.vbox = gtk.VBox() self.add(self.vbox) self.widget = xdot.DotWidget()
def __init__(self, parent_window, theme_map, dot_size='medium'): super(ThemeLegendWindow, self).__init__() self.set_border_width(5) self.set_title("") if parent_window is None: self.set_icon(get_icon()) else: self.set_transient_for(parent_window) self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self._theme = theme_map self._dot_size = dot_size self._key_liststore = gtk.ListStore(str, gtk.gdk.Pixbuf) treeview = gtk.TreeView(self._key_liststore) treeview.set_headers_visible(False) treeview.get_selection().set_mode(gtk.SELECTION_NONE) tvc = gtk.TreeViewColumn(None) self.update() cellpb = gtk.CellRendererPixbuf() cell = gtk.CellRendererText() tvc.pack_start(cellpb, False) tvc.pack_start(cell, True) tvc.set_attributes(cellpb, pixbuf=1) tvc.set_attributes(cell, text=0) treeview.append_column(tvc) self.add(treeview) self.show_all()
def launch_hosts_dialog(existing_hosts, change_hosts_func): """Launch a dialog for configuring the suite hosts to scan. Arguments: existing_hosts should be a list of currently scanned host names. change_hosts_func should be a function accepting a new list of host names to scan. """ dialog = gtk.Dialog() dialog.set_icon(get_icon()) dialog.vbox.set_border_width(5) dialog.set_title("Configure suite hosts") cancel_button = dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) label = gtk.Label("Enter a comma-delimited list of suite hosts to scan") label.show() label_hbox = gtk.HBox() label_hbox.pack_start(label, expand=False, fill=False) label_hbox.show() entry = gtk.Entry() entry.set_text(", ".join(existing_hosts)) entry.connect("activate", lambda e: dialog.response(gtk.RESPONSE_OK)) entry.show() dialog.vbox.pack_start(label_hbox, expand=False, fill=False, padding=5) dialog.vbox.pack_start(entry, expand=False, fill=False, padding=5) response = dialog.run() if response == gtk.RESPONSE_OK: new_hosts = [h.strip() for h in entry.get_text().split(",")] change_hosts_func(new_hosts) dialog.destroy()
def launch_hosts_dialog(existing_hosts, change_hosts_func): """Launch a dialog for configuring the suite hosts to scan. Arguments: existing_hosts should be a list of currently scanned host names. change_hosts_func should be a function accepting a new list of host names to scan. """ dialog = gtk.Dialog() dialog.set_icon(get_icon()) dialog.vbox.set_border_width(5) dialog.set_title("Scan ports of hosts for suites?") dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) label = gtk.Label( "Hosts (comma-delimited list) to perform port scan?\n" "Look for suites on the file system if list is empty (default).") label.show() label_hbox = gtk.HBox() label_hbox.pack_start(label, expand=False, fill=False) label_hbox.show() entry = gtk.Entry() entry.set_text(", ".join(existing_hosts)) entry.connect("activate", lambda e: dialog.response(gtk.RESPONSE_OK)) entry.show() dialog.vbox.pack_start(label_hbox, expand=False, fill=False, padding=5) dialog.vbox.pack_start(entry, expand=False, fill=False, padding=5) response = dialog.run() if response == gtk.RESPONSE_OK: change_hosts_func([h.strip() for h in entry.get_text().split(",")]) dialog.destroy()
def run_in_window(is_compact=False): """Run the panel applet in stand-alone mode.""" my_panel_app = ScanPanelApplet(is_compact=is_compact) window = gtk.Window() window.set_title("cylc panel applet test") window.add(my_panel_app.top_hbox) window.set_default_size(300, 50) window.set_icon(get_icon()) window.show() window.connect("destroy", lambda w: gtk.main_quit()) gtk.main()
def launch_about_dialog(program_name, hosts): """Launch a modified version of the app_main.py About dialog.""" about = gtk.AboutDialog() if gtk.gtk_version[0] == 2 and gtk.gtk_version[1] >= 12: # set_program_name() was added in PyGTK 2.12 about.set_program_name(program_name) about.set_version(CYLC_VERSION) about.set_copyright("Copyright (C) 2008-2018 NIWA & British Crown" "(Met Office) & contributors") about.set_comments(program_name) about.set_icon(get_icon()) about.run() about.destroy()
def launch_about_dialog(program_name, hosts): """Launch a modified version of the SuiteControl.py about dialog.""" hosts_text = "Hosts monitored: " + ", ".join(hosts) comments_text = hosts_text about = gtk.AboutDialog() if gtk.gtk_version[0] == 2 and gtk.gtk_version[1] >= 12: # set_program_name() was added in PyGTK 2.12 about.set_program_name(program_name) else: comments_text = program_name + "\n" + hosts_text about.set_version(cylc_version) about.set_copyright("Copyright (C) 2008-2014 Hilary Oliver, NIWA") about.set_comments(comments_text) about.set_icon(get_icon()) about.run() about.destroy()
def launch_about_dialog(program_name, hosts): """Launch a modified version of the app_main.py About dialog.""" hosts_text = "Hosts monitored: " + ", ".join(hosts) comments_text = hosts_text about = gtk.AboutDialog() if gtk.gtk_version[0] == 2 and gtk.gtk_version[1] >= 12: # set_program_name() was added in PyGTK 2.12 about.set_program_name(program_name) else: comments_text = program_name + "\n" + hosts_text about.set_version(CYLC_VERSION) about.set_copyright("Copyright (C) 2008-2015 NIWA") about.set_comments(comments_text) about.set_icon(get_icon()) about.run() about.destroy()
def create_gui_panel(self): """Create the GUI panel.""" logviewer.create_gui_panel(self) self.window = gtk.Window() # self.window.set_border_width(5) self.window.set_title("log viewer") self.window.set_size_request(800, 400) self.window.set_icon(get_icon()) combobox = gtk.combo_box_new_text() combobox.append_text(self.LABEL_ALL_LINES) combobox.append_text(self.LABEL_ALL_TASKS) for task in self.task_list: combobox.append_text(task) combobox.connect("changed", self.filter_log) combobox.set_active(0) newer = gtk.Button("_newer") newer.connect("clicked", self.rotate_log, False) self.hbox.pack_end(newer, False) older = gtk.Button("_older") older.connect("clicked", self.rotate_log, True) self.hbox.pack_end(older, False) self.hbox.pack_end(combobox, False) filterbox = gtk.HBox() entry = gtk.Entry() entry.connect("activate", self.custom_filter_log) label = gtk.Label('Filter') filterbox.pack_start(label, True) filterbox.pack_start(entry, True) self.hbox.pack_end(filterbox, False) close = gtk.Button("_Close") close.connect("clicked", self.shutdown, None, self.window) self.hbox.pack_start(close, False) self.window.add(self.vbox) self.window.connect("delete_event", self.shutdown, self.window) self.window.show_all()
def __init__( self, hosts=None, patterns_name=None, patterns_owner=None, comms_timeout=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gscan") setup_icons() if not hosts: hosts = GLOBAL_CFG.get(["suite host scanning", "hosts"]) self.hosts = hosts self.window = gtk.Window() title = "cylc gscan" for opt, items, skip in [ ("-n", patterns_name, None), ("-o", patterns_owner, USER)]: if items: for pattern in items: if pattern != skip: title += " %s %s" % (opt, pattern) self.window.set_title(title) self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.warnings = {} self.theme_name = gcfg.get(['use theme']) self.theme = gcfg.get(['themes', self.theme_name]) self.dots = DotMaker(self.theme) suite_treemodel = gtk.TreeStore( str, # group str, # host str, # owner str, # suite bool, # is_stopped str, # title int, # update_time str, # states str, # states_text str) # warning_text self._prev_tooltip_location_id = None self.suite_treeview = gtk.TreeView(suite_treemodel) # Visibility of columns vis_cols = gsfg.get(["columns"]) # Doesn't make any sense without suite name column if gsfg.COL_SUITE not in vis_cols: vis_cols.append(gsfg.COL_SUITE.lower()) # In multiple host environment, add host column by default if hosts: vis_cols.append(gsfg.COL_HOST.lower()) # In multiple owner environment, add owner column by default if patterns_owner != [USER]: vis_cols.append(gsfg.COL_OWNER.lower()) # Construct the group, host, owner, suite, title, update time column. for col_title, col_id, col_cell_text_setter in [ (gsfg.COL_GROUP, self.GROUP_COLUMN, self._set_cell_text_group), (gsfg.COL_HOST, self.HOST_COLUMN, self._set_cell_text_host), (gsfg.COL_OWNER, self.OWNER_COLUMN, self._set_cell_text_owner), (gsfg.COL_SUITE, self.SUITE_COLUMN, self._set_cell_text_name), (gsfg.COL_TITLE, self.TITLE_COLUMN, self._set_cell_text_title), (gsfg.COL_UPDATED, self.UPDATE_TIME_COLUMN, self._set_cell_text_time), ]: column = gtk.TreeViewColumn(col_title) cell_text = gtk.CellRendererText() column.pack_start(cell_text, expand=False) column.set_cell_data_func(cell_text, col_cell_text_setter) column.set_sort_column_id(col_id) column.set_visible(col_title.lower() in vis_cols) column.set_resizable(True) self.suite_treeview.append_column(column) # Construct the status column. status_column = gtk.TreeViewColumn(gsfg.COL_STATUS) status_column.set_sort_column_id(self.STATUS_COLUMN) status_column.set_visible(gsfg.COL_STATUS.lower() in vis_cols) status_column.set_resizable(True) cell_text_cycle = gtk.CellRendererText() status_column.pack_start(cell_text_cycle, expand=False) status_column.set_cell_data_func( cell_text_cycle, self._set_cell_text_cycle, self.CYCLE_COLUMN) self.suite_treeview.append_column(status_column) # Warning icon. warn_icon = gtk.CellRendererPixbuf() image = gtk.Image() pixbuf = image.render_icon( gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_LARGE_TOOLBAR) self.warn_icon_colour = pixbuf.scale_simple( # colour warn icon pixbuf self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_grey = pixbuf.scale_simple( self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_colour.saturate_and_pixelate( self.warn_icon_grey, 0, False) # b&w warn icon pixbuf status_column.pack_start(warn_icon, expand=False) status_column.set_cell_data_func(warn_icon, self._set_error_icon_state) self.warn_icon_blank = gtk.gdk.Pixbuf( # Transparent pixbuff. gtk.gdk.COLORSPACE_RGB, True, 8, self.ICON_SIZE, self.ICON_SIZE ).fill(0x00000000) # Task status icons. for i in range(len(TASK_STATUSES_ORDERED)): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func( cell_pixbuf_state, self._set_cell_pixbuf_state, i) self.suite_treeview.show() if hasattr(self.suite_treeview, "set_has_tooltip"): self.suite_treeview.set_has_tooltip(True) try: self.suite_treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.suite_treeview.connect("button-press-event", self._on_button_press_event) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.suite_treeview) scrolled_window.show() self.vbox.pack_start(scrolled_window, expand=True, fill=True) patterns = {"name": None, "owner": None} for label, items in [ ("owner", patterns_owner), ("name", patterns_name)]: if items: patterns[label] = r"\A(?:" + r")|(?:".join(items) + r")\Z" try: patterns[label] = re.compile(patterns[label]) except re.error: raise ValueError("Invalid %s pattern: %s" % (label, items)) self.updater = ScanAppUpdater( self.window, self.hosts, suite_treemodel, self.suite_treeview, comms_timeout=comms_timeout, poll_interval=poll_interval, group_column_id=self.GROUP_COLUMN, name_pattern=patterns["name"], owner_pattern=patterns["owner"]) self.updater.start() self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) self.window.set_default_size(300, 150) self.suite_treeview.grab_focus() self.window.show() self.warning_icon_shown = []
def __init__( self, hosts=None, patterns_name=None, patterns_owner=None, comms_timeout=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gscan") setup_icons() if not hosts: hosts = GLOBAL_CFG.get(["suite host scanning", "hosts"]) self.hosts = hosts self.window = gtk.Window() title = "cylc gscan" for opt, items, skip in [ ("-n", patterns_name, None), ("-o", patterns_owner, USER)]: if items: for pattern in items: if pattern != skip: title += " %s %s" % (opt, pattern) self.window.set_title(title) self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.warnings = {} self.theme_name = gcfg.get(['use theme']) self.theme = gcfg.get(['themes', self.theme_name]) suite_treemodel = gtk.TreeStore( str, # group str, # host str, # owner str, # suite bool, # is_stopped str, # title int, # update_time str, # states str, # states_text str) # warning_text self._prev_tooltip_location_id = None self.treeview = gtk.TreeView(suite_treemodel) # Visibility of columns vis_cols = gsfg.get(["columns"]) # Doesn't make any sense without suite name column if gsfg.COL_SUITE not in vis_cols: vis_cols.append(gsfg.COL_SUITE.lower()) # In multiple host environment, add host column by default if hosts: vis_cols.append(gsfg.COL_HOST.lower()) # In multiple owner environment, add owner column by default if patterns_owner != [USER]: vis_cols.append(gsfg.COL_OWNER.lower()) # Construct the group, host, owner, suite, title, update time column. for col_title, col_id, col_cell_text_setter in [ (gsfg.COL_GROUP, self.GROUP_COLUMN, self._set_cell_text_group), (gsfg.COL_HOST, self.HOST_COLUMN, self._set_cell_text_host), (gsfg.COL_OWNER, self.OWNER_COLUMN, self._set_cell_text_owner), (gsfg.COL_SUITE, self.SUITE_COLUMN, self._set_cell_text_name), (gsfg.COL_TITLE, self.TITLE_COLUMN, self._set_cell_text_title), (gsfg.COL_UPDATED, self.UPDATE_TIME_COLUMN, self._set_cell_text_time), ]: column = gtk.TreeViewColumn(col_title) cell_text = gtk.CellRendererText() column.pack_start(cell_text, expand=False) column.set_cell_data_func(cell_text, col_cell_text_setter) column.set_sort_column_id(col_id) column.set_visible(col_title.lower() in vis_cols) column.set_resizable(True) self.treeview.append_column(column) # Construct the status column. status_column = gtk.TreeViewColumn(gsfg.COL_STATUS) status_column.set_sort_column_id(self.STATUS_COLUMN) status_column.set_visible(gsfg.COL_STATUS.lower() in vis_cols) status_column.set_resizable(True) cell_text_cycle = gtk.CellRendererText() status_column.pack_start(cell_text_cycle, expand=False) status_column.set_cell_data_func( cell_text_cycle, self._set_cell_text_cycle, self.CYCLE_COLUMN) self.treeview.append_column(status_column) # Warning icon. warn_icon = gtk.CellRendererPixbuf() image = gtk.Image() pixbuf = image.render_icon( gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_LARGE_TOOLBAR) self.warn_icon_colour = pixbuf.scale_simple( # colour warn icon pixbuf self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_grey = pixbuf.scale_simple( self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_colour.saturate_and_pixelate( self.warn_icon_grey, 0, False) # b&w warn icon pixbuf status_column.pack_start(warn_icon, expand=False) status_column.set_cell_data_func(warn_icon, self._set_error_icon_state) self.warn_icon_blank = gtk.gdk.Pixbuf( # Transparent pixbuff. gtk.gdk.COLORSPACE_RGB, True, 8, self.ICON_SIZE, self.ICON_SIZE ).fill(0x00000000) # Task status icons. for i in range(len(TASK_STATUSES_ORDERED)): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func( cell_pixbuf_state, self._set_cell_pixbuf_state, i) self.treeview.show() if hasattr(self.treeview, "set_has_tooltip"): self.treeview.set_has_tooltip(True) try: self.treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.treeview.connect("button-press-event", self._on_button_press_event) patterns = {"name": None, "owner": None} for label, items in [ ("owner", patterns_owner), ("name", patterns_name)]: if items: patterns[label] = r"\A(?:" + r")|(?:".join(items) + r")\Z" try: patterns[label] = re.compile(patterns[label]) except re.error: raise ValueError("Invalid %s pattern: %s" % (label, items)) self.updater = ScanAppUpdater( self.window, self.hosts, suite_treemodel, self.treeview, comms_timeout=comms_timeout, poll_interval=poll_interval, group_column_id=self.GROUP_COLUMN, name_pattern=patterns["name"], owner_pattern=patterns["owner"]) self.updater.start() self.dot_size = gcfg.get(['dot icon size']) self._set_dots() self.create_menubar() accelgroup = gtk.AccelGroup() self.window.add_accel_group(accelgroup) key, modifier = gtk.accelerator_parse('<Alt>m') accelgroup.connect_group( key, modifier, gtk.ACCEL_VISIBLE, self._toggle_hide_menu_bar) self.create_tool_bar() self.menu_hbox = gtk.HBox() self.menu_hbox.pack_start(self.menu_bar, expand=True, fill=True) self.menu_hbox.pack_start(self.tool_bar, expand=True, fill=True) self.menu_hbox.show_all() self.menu_hbox.hide_all() scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.treeview) scrolled_window.show() self.vbox.pack_start(self.menu_hbox, expand=False) self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) wsize = gsfg.get(['window size']) self.window.set_default_size(*wsize) self.treeview.grab_focus() self.window.show() self.theme_legend_window = None self.warning_icon_shown = []
def __init__(self, title, parent, tmpdir, timeout): if timeout: self.timeout = float(timeout) else: self.timeout = None self.chosen = None self.updater = None self.tmpdir = tmpdir self.gcapture_windows = [] gobject.threads_init() # self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window = gtk.Dialog( "Choose a suite", parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) # self.window.set_modal(True) self.window.set_title(title) self.window.set_size_request(750, 400) # TODO: not needed for a dialog window? self.window.set_icon(get_icon()) # self.window.set_border_width(5) self.window.connect("delete_event", self.delete_all_event) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.regd_treeview = gtk.TreeView() self.regd_treestore = gtk.TreeStore(str, str, str, str, str, str, str) self.regd_treeview.set_model(self.regd_treestore) self.regd_treeview.set_rules_hint(True) # search column zero (Ctrl-F) self.regd_treeview.connect('key_press_event', self.on_suite_select) self.regd_treeview.connect('button_press_event', self.on_suite_select) self.regd_treeview.set_search_column(0) regd_ts = self.regd_treeview.get_selection() regd_ts.set_mode(gtk.SELECTION_SINGLE) cr = gtk.CellRendererText() # cr.set_property('cell-background', '#def') tvc = gtk.TreeViewColumn('Suite', cr, text=0, foreground=4, background=5) tvc.set_resizable(True) tvc.set_sort_column_id(0) self.regd_treeview.append_column(tvc) cr = gtk.CellRendererText() tvc = gtk.TreeViewColumn('Host:Port', cr, text=1, foreground=4, background=5) tvc.set_resizable(True) # not sure how this sorting works # tvc.set_sort_column_id(1) self.regd_treeview.append_column(tvc) cr = gtk.CellRendererText() # cr.set_property('cell-background', '#def') tvc = gtk.TreeViewColumn('Title', cr, markup=2, foreground=4, background=6) tvc.set_resizable(True) # vc.set_sort_column_id(2) self.regd_treeview.append_column(tvc) cr = gtk.CellRendererText() tvc = gtk.TreeViewColumn('Location', cr, text=3, foreground=4, background=5) tvc.set_resizable(True) # vc.set_sort_column_id(3) self.regd_treeview.append_column(tvc) vbox = self.window.vbox sw.add(self.regd_treeview) vbox.pack_start(sw, True) self.selected_label_text = ( '(double-click or OK to select; right-click for db options)') self.selected_label = gtk.Label(self.selected_label_text) filter_entry = EntryTempText() filter_entry.set_width_chars(7) # Reduce width in toolbar filter_entry.connect("activate", self.filter) filter_entry.set_temp_text("filter") filter_toolitem = gtk.ToolItem() filter_toolitem.add(filter_entry) tooltip = gtk.Tooltips() tooltip.enable() tooltip.set_tip(filter_toolitem, "Filter suites \n(enter a sub-string or regex)") expand_button = gtk.ToolButton() image = gtk.image_new_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_SMALL_TOOLBAR) expand_button.set_icon_widget(image) expand_button.connect('clicked', lambda x: self.regd_treeview.expand_all()) collapse_button = gtk.ToolButton() image = gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_SMALL_TOOLBAR) collapse_button.set_icon_widget(image) collapse_button.connect('clicked', lambda x: self.regd_treeview.collapse_all()) hbox = gtk.HBox() eb = gtk.EventBox() eb.add(self.selected_label) eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#bbc')) hbox.pack_start(eb, True) hbox.pack_start(expand_button, False) hbox.pack_start(collapse_button, False) hbox.pack_start(filter_toolitem, False) vbox.pack_start(hbox, False) self.window.show_all() self.start_updater()
def __init__(self, suite, suiterc, start_point_string, stop_point_string, template_vars, orientation="TB", subgraphs_on=False, ignore_suicide=True, should_hide=False): self.outfile = None self.disable_output_image = False self.suite = suite self.file = suiterc self.suiterc = None self.orientation = orientation self.subgraphs_on = subgraphs_on self.template_vars = template_vars self.ignore_suicide = ignore_suicide self.start_point_string = start_point_string self.stop_point_string = stop_point_string self.filter_recs = [] util.setup_icons() gtk.Window.__init__(self) self.graph = xdot.Graph() window = self window.set_title('Cylc Suite Dependency Graph Viewer') window.set_default_size(512, 512) window.set_icon(util.get_icon()) vbox = gtk.VBox() window.add(vbox) self.widget = xdot.DotWidget() # Create a UIManager instance uimanager = self.uimanager = gtk.UIManager() # Add the accelerator group to the toplevel window accelgroup = uimanager.get_accel_group() window.add_accel_group(accelgroup) # Create an ActionGroup actiongroup = gtk.ActionGroup('Actions') self.actiongroup = actiongroup # create new stock icons for group and ungroup actions imagedir = os.environ['CYLC_DIR'] + '/images/icons' factory = gtk.IconFactory() for i in ['group', 'ungroup']: pixbuf = gtk.gdk.pixbuf_new_from_file(imagedir + '/' + i + '.png') iconset = gtk.IconSet(pixbuf) factory.add(i, iconset) factory.add_default() actiongroup.add_actions(( ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, 'Zoom In', self.widget.on_zoom_in), ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, 'Zoom Out', self.widget.on_zoom_out), ('ZoomFit', gtk.STOCK_ZOOM_FIT, None, None, 'Zoom Fit', self.widget.on_zoom_fit), ('Zoom100', gtk.STOCK_ZOOM_100, None, None, 'Zoom 100', self.widget.on_zoom_100), ('Group', 'group', 'Group', None, 'Group All Families', self.group_all), ('UnGroup', 'ungroup', 'Ungroup', None, 'Ungroup All Families', self.ungroup_all), ('Refresh', gtk.STOCK_REFRESH, None, None, 'Refresh', self.on_refresh), ('Save', gtk.STOCK_SAVE_AS, None, None, 'Save', self.save_action), )) actiongroup.add_toggle_actions( (('LeftToRight', 'transpose', 'Transpose', None, 'Transpose the graph', self.on_left_to_right), )) actiongroup.add_toggle_actions( (('Subgraphs', gtk.STOCK_LEAVE_FULLSCREEN, 'Cycle Point Subgraphs', None, 'Organise by cycle point', self.on_subgraphs), )) actiongroup.add_toggle_actions( (('IgnoreSuicide', gtk.STOCK_CANCEL, 'Ignore Suicide Triggers', None, 'Ignore Suicide Triggers', self.on_igsui), )) # Add the actiongroup to the uimanager uimanager.insert_action_group(actiongroup, 0) # Add a UI descrption uimanager.add_ui_from_string(self.ui) left_to_right_toolitem = uimanager.get_widget('/ToolBar/LeftToRight') left_to_right_toolitem.set_active(self.orientation == "LR") subgraphs_toolitem = uimanager.get_widget('/ToolBar/Subgraphs') subgraphs_toolitem.set_active(self.subgraphs_on) igsui_toolitem = uimanager.get_widget('/ToolBar/IgnoreSuicide') igsui_toolitem.set_active(self.ignore_suicide) # Create a Toolbar toolbar = uimanager.get_widget('/ToolBar') vbox.pack_start(toolbar, False) vbox.pack_start(self.widget) eb = gtk.EventBox() eb.add(gtk.Label("right-click on nodes to control family grouping")) eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#8be')) vbox.pack_start(eb, False) self.set_focus(self.widget) if not should_hide: self.show_all() self.load_config()
def __init__(self, command, tmpdir, width=400, height=400, standalone=False, title=None): self.standalone = standalone self.command = command self.stdoutfile = tempfile.NamedTemporaryFile(dir=tmpdir) self.stdout_updater = None self.proc = None self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_border_width(5) if title is None: self.window.set_title('Command Output') else: self.window.set_title(title) self.window.connect("delete_event", self.quit) self.window.set_default_size(width, height) self.window.set_icon(get_icon()) self.quit_already = False self.find_current = None self.find_current_iter = None self.search_warning_done = False sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) sw.show() self.textview = gtk.TextView() self.textview.set_editable(False) self.textview.set_wrap_mode(gtk.WRAP_WORD) # Use a monospace font. This is safe - by testing - setting an # illegal font description has no effect. self.textview.modify_font(pango.FontDescription("monospace")) tb = self.textview.get_buffer() self.textview.show() self.ftag = tb.create_tag(None, background="#70FFA9") vbox = gtk.VBox() vbox.show() self.progress_bar = gtk.ProgressBar() self.progress_bar.set_text(command) self.progress_bar.set_pulse_step(0.04) self.progress_bar.show() vbox.pack_start(self.progress_bar, expand=False) self.command_label = gtk.Label(self.command) vbox.pack_start(self.command_label, expand=False) sw.add(self.textview) frame = gtk.Frame() frame.add(sw) frame.show() vbox.add(frame) save_button = gtk.Button("Save As") save_button.connect("clicked", self.save, self.textview) save_button.show() hbox = gtk.HBox() hbox.pack_start(save_button, False) hbox.show() output_label = gtk.Label('output : ' + self.stdoutfile.name) output_label.show() hbox.pack_start(output_label, expand=True) self.freeze_button = gtk.ToggleButton("_Disconnect") self.freeze_button.set_active(False) self.freeze_button.connect("toggled", self.freeze) self.freeze_button.show() searchbox = gtk.HBox() searchbox.show() entry = gtk.Entry() entry.show() entry.connect("activate", self.enter_clicked) searchbox.pack_start(entry, True) b = gtk.Button("Find Next") b.connect_object('clicked', self.on_find_clicked, entry) b.show() searchbox.pack_start(b, False) searchbox.pack_start(self.freeze_button, False) close_button = gtk.Button("_Close") close_button.connect("clicked", self.quit, None, None) close_button.show() hbox.pack_end(close_button, False) vbox.pack_start(searchbox, False) vbox.pack_start(hbox, False) self.window.add(vbox) close_button.grab_focus() self.window.show()
def __init__(self, msg, parent=None): self.dialog = gtk.MessageDialog(parent, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, msg) self.dialog.set_icon(get_icon())
def __init__(self, command, stdoutfile, width=400, height=400, standalone=False, ignore_command=False, title=None): self.standalone = standalone self.command = command self.ignore_command = ignore_command self.stdout = stdoutfile self.stdout_updater = None self.proc = None self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_border_width(5) if title is None: self.window.set_title('Command Output') else: self.window.set_title(title) self.window.connect("delete_event", self.quit) self.window.set_default_size(width, height) self.window.set_icon(get_icon()) self.quit_already = False self.find_current = None self.find_current_iter = None self.search_warning_done = False sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) sw.show() self.textview = gtk.TextView() self.textview.set_editable(False) self.textview.set_wrap_mode(gtk.WRAP_WORD) # Use a monospace font. This is safe - by testing - setting an # illegal font description has no effect. self.textview.modify_font(pango.FontDescription("monospace")) tb = self.textview.get_buffer() self.textview.show() self.ftag = tb.create_tag(None, background="#70FFA9") vbox = gtk.VBox() vbox.show() if not self.ignore_command: self.progress_bar = gtk.ProgressBar() self.progress_bar.set_text(command) self.progress_bar.set_pulse_step(0.04) self.progress_bar.show() vbox.pack_start(self.progress_bar, expand=False) self.command_label = gtk.Label(self.command) if self.ignore_command: self.command_label.show() vbox.pack_start(self.command_label, expand=False) sw.add(self.textview) frame = gtk.Frame() frame.add(sw) frame.show() vbox.add(frame) save_button = gtk.Button("Save As") save_button.connect("clicked", self.save, self.textview) save_button.show() hbox = gtk.HBox() hbox.pack_start(save_button, False) hbox.show() output_label = gtk.Label('output : ' + stdoutfile.name) output_label.show() hbox.pack_start(output_label, expand=True) self.freeze_button = gtk.ToggleButton("_Disconnect") self.freeze_button.set_active(False) self.freeze_button.connect("toggled", self.freeze) self.freeze_button.show() searchbox = gtk.HBox() searchbox.show() entry = gtk.Entry() entry.show() entry.connect("activate", self.enter_clicked) searchbox.pack_start(entry, True) b = gtk.Button("Find Next") b.connect_object('clicked', self.on_find_clicked, entry) b.show() searchbox.pack_start(b, False) searchbox.pack_start(self.freeze_button, False) close_button = gtk.Button("_Close") close_button.connect("clicked", self.quit, None, None) close_button.show() hbox.pack_end(close_button, False) vbox.pack_start(searchbox, False) vbox.pack_start(hbox, False) self.window.add(vbox) close_button.grab_focus() self.window.show()
def __init__(self, hosts=None, owner=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gsummary") setup_icons() if not hosts: gcfg = get_global_cfg() try: hosts = gcfg.cfg["suite host scanning"]["hosts"] except KeyError: hosts = ["localhost"] self.hosts = hosts if owner is None: owner = user self.owner = owner self.window = gtk.Window() self.window.set_title("cylc gsummary") self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.usercfg = config().cfg self.theme_name = self.usercfg['use theme'] self.theme = self.usercfg['themes'][self.theme_name] self.dots = DotMaker(self.theme) suite_treemodel = gtk.TreeStore(*([str, str, bool, str, int] + [str] * 20)) self._prev_tooltip_location_id = None self.suite_treeview = gtk.TreeView(suite_treemodel) # Construct the host column. host_name_column = gtk.TreeViewColumn("Host") cell_text_host = gtk.CellRendererText() host_name_column.pack_start(cell_text_host, expand=False) host_name_column.set_cell_data_func(cell_text_host, self._set_cell_text_host) host_name_column.set_sort_column_id(0) host_name_column.set_visible(False) # Construct the suite name column. suite_name_column = gtk.TreeViewColumn("Suite") cell_text_name = gtk.CellRendererText() suite_name_column.pack_start(cell_text_name, expand=False) suite_name_column.set_cell_data_func(cell_text_name, self._set_cell_text_name) suite_name_column.set_sort_column_id(1) # Construct the suite title column. suite_title_column = gtk.TreeViewColumn("Title") cell_text_title = gtk.CellRendererText() suite_title_column.pack_start(cell_text_title, expand=False) suite_title_column.set_cell_data_func(cell_text_title, self._set_cell_text_title) suite_title_column.set_sort_column_id(3) suite_title_column.set_visible(False) # Construct the update time column. time_column = gtk.TreeViewColumn("Updated") cell_text_time = gtk.CellRendererText() time_column.pack_start(cell_text_time, expand=False) time_column.set_cell_data_func(cell_text_time, self._set_cell_text_time) time_column.set_sort_column_id(4) time_column.set_visible(False) # Construct the status column. status_column = gtk.TreeViewColumn("Status") status_column.set_sort_column_id(5) for i in range(5, 25): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func(cell_pixbuf_state, self._set_cell_pixbuf_state, i) self.suite_treeview.append_column(host_name_column) self.suite_treeview.append_column(suite_name_column) self.suite_treeview.append_column(suite_title_column) self.suite_treeview.append_column(time_column) self.suite_treeview.append_column(status_column) self.suite_treeview.show() if hasattr(self.suite_treeview, "set_has_tooltip"): self.suite_treeview.set_has_tooltip(True) try: self.suite_treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.suite_treeview.connect("button-press-event", self._on_button_press_event) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.suite_treeview) scrolled_window.show() self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.updater = SummaryAppUpdater(self.hosts, suite_treemodel, owner=self.owner, poll_interval=poll_interval) self.updater.start() self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) self.window.set_default_size(200, 100) self.suite_treeview.grab_focus() self.window.show()
def __init__(self, suite, suiterc, start_point_string, stop_point_string, template_vars, orientation="TB", subgraphs_on=False, ignore_suicide=True, should_hide=False): self.outfile = None self.disable_output_image = False self.suite = suite self.file = suiterc self.suiterc = None self.orientation = orientation self.subgraphs_on = subgraphs_on self.template_vars = template_vars self.ignore_suicide = ignore_suicide self.start_point_string = start_point_string self.stop_point_string = stop_point_string self.filter_recs = [] util.setup_icons() gtk.Window.__init__(self) self.graph = xdot.Graph() window = self window.set_title('Cylc Suite Dependency Graph Viewer') window.set_default_size(512, 512) window.set_icon(util.get_icon()) vbox = gtk.VBox() window.add(vbox) self.widget = xdot.DotWidget() # Create a UIManager instance uimanager = self.uimanager = gtk.UIManager() # Add the accelerator group to the toplevel window accelgroup = uimanager.get_accel_group() window.add_accel_group(accelgroup) # Create an ActionGroup actiongroup = gtk.ActionGroup('Actions') self.actiongroup = actiongroup # create new stock icons for group and ungroup actions imagedir = os.environ['CYLC_DIR'] + '/images/icons' factory = gtk.IconFactory() for i in ['group', 'ungroup']: pixbuf = gtk.gdk.pixbuf_new_from_file(imagedir + '/' + i + '.png') iconset = gtk.IconSet(pixbuf) factory.add(i, iconset) factory.add_default() actiongroup.add_actions(( ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, 'Zoom In', self.widget.on_zoom_in), ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, 'Zoom Out', self.widget.on_zoom_out), ('ZoomFit', gtk.STOCK_ZOOM_FIT, None, None, 'Zoom Fit', self.widget.on_zoom_fit), ('Zoom100', gtk.STOCK_ZOOM_100, None, None, 'Zoom 100', self.widget.on_zoom_100), ('Group', 'group', 'Group', None, 'Group All Families', self.group_all), ('UnGroup', 'ungroup', 'Ungroup', None, 'Ungroup All Families', self.ungroup_all), ('Refresh', gtk.STOCK_REFRESH, None, None, 'Refresh', self.on_refresh), ('Save', gtk.STOCK_SAVE_AS, None, None, 'Save', self.save_action), )) actiongroup.add_toggle_actions(( ('LeftToRight', 'transpose', 'Transpose', None, 'Transpose the graph', self.on_left_to_right), )) actiongroup.add_toggle_actions(( ('Subgraphs', gtk.STOCK_LEAVE_FULLSCREEN, 'Cycle Point Subgraphs', None, 'Organise by cycle point', self.on_subgraphs), )) actiongroup.add_toggle_actions(( ('IgnoreSuicide', gtk.STOCK_CANCEL, 'Ignore Suicide Triggers', None, 'Ignore Suicide Triggers', self.on_igsui), )) # Add the actiongroup to the uimanager uimanager.insert_action_group(actiongroup, 0) # Add a UI descrption uimanager.add_ui_from_string(self.ui) left_to_right_toolitem = uimanager.get_widget('/ToolBar/LeftToRight') left_to_right_toolitem.set_active(self.orientation == "LR") subgraphs_toolitem = uimanager.get_widget( '/ToolBar/Subgraphs') subgraphs_toolitem.set_active(self.subgraphs_on) igsui_toolitem = uimanager.get_widget( '/ToolBar/IgnoreSuicide') igsui_toolitem.set_active(self.ignore_suicide) # Create a Toolbar toolbar = uimanager.get_widget('/ToolBar') vbox.pack_start(toolbar, False) vbox.pack_start(self.widget) eb = gtk.EventBox() eb.add(gtk.Label("right-click on nodes to control family grouping")) eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#8be')) vbox.pack_start(eb, False) self.set_focus(self.widget) if not should_hide: self.show_all() self.load_config()
def __init__(self, hosts=None, owner=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gsummary") setup_icons() if not hosts: try: hosts = sitecfg.get( ["suite host scanning","hosts"] ) except KeyError: hosts = ["localhost"] self.hosts = hosts if owner is None: owner = user self.owner = owner self.window = gtk.Window() self.window.set_title("cylc gsummary") self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.theme_name = gcfg.get( ['use theme'] ) self.theme = gcfg.get( ['themes', self.theme_name] ) self.dots = DotMaker(self.theme) suite_treemodel = gtk.TreeStore(*([str, str, bool, str, int] + [str] * 20)) self._prev_tooltip_location_id = None self.suite_treeview = gtk.TreeView(suite_treemodel) # Construct the host column. host_name_column = gtk.TreeViewColumn("Host") cell_text_host = gtk.CellRendererText() host_name_column.pack_start(cell_text_host, expand=False) host_name_column.set_cell_data_func( cell_text_host, self._set_cell_text_host) host_name_column.set_sort_column_id(0) host_name_column.set_visible(False) # Construct the suite name column. suite_name_column = gtk.TreeViewColumn("Suite") cell_text_name = gtk.CellRendererText() suite_name_column.pack_start(cell_text_name, expand=False) suite_name_column.set_cell_data_func( cell_text_name, self._set_cell_text_name) suite_name_column.set_sort_column_id(1) # Construct the suite title column. suite_title_column = gtk.TreeViewColumn("Title") cell_text_title = gtk.CellRendererText() suite_title_column.pack_start(cell_text_title, expand=False) suite_title_column.set_cell_data_func( cell_text_title, self._set_cell_text_title) suite_title_column.set_sort_column_id(3) suite_title_column.set_visible(False) # Construct the update time column. time_column = gtk.TreeViewColumn("Updated") cell_text_time = gtk.CellRendererText() time_column.pack_start(cell_text_time, expand=False) time_column.set_cell_data_func( cell_text_time, self._set_cell_text_time) time_column.set_sort_column_id(4) time_column.set_visible(False) # Construct the status column. status_column = gtk.TreeViewColumn("Status") status_column.set_sort_column_id(5) for i in range(5, 25): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func( cell_pixbuf_state, self._set_cell_pixbuf_state, i) self.suite_treeview.append_column(host_name_column) self.suite_treeview.append_column(suite_name_column) self.suite_treeview.append_column(suite_title_column) self.suite_treeview.append_column(time_column) self.suite_treeview.append_column(status_column) self.suite_treeview.show() if hasattr(self.suite_treeview, "set_has_tooltip"): self.suite_treeview.set_has_tooltip(True) try: self.suite_treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.suite_treeview.connect("button-press-event", self._on_button_press_event) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.suite_treeview) scrolled_window.show() self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.updater = SummaryAppUpdater(self.hosts, suite_treemodel, owner=self.owner, poll_interval=poll_interval) self.updater.start() self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) self.window.set_default_size(200, 100) self.suite_treeview.grab_focus() self.window.show()
def __init__(self, suite, suiterc, template_vars, orientation="TB", should_hide=False): self.outfile = None self.disable_output_image = False self.suite = suite self.file = suiterc self.suiterc = None self.orientation = orientation self.template_vars = template_vars self.start_point_string = None self.stop_point_string = None self.filter_recs = [] util.setup_icons() gtk.Window.__init__(self) self.graph = xdot.Graph() window = self window.set_title('Cylc Suite Runtime Inheritance Graph Viewer') window.set_default_size(512, 512) window.set_icon(util.get_icon()) vbox = gtk.VBox() window.add(vbox) self.widget = xdot.DotWidget() # Create a UIManager instance uimanager = self.uimanager = gtk.UIManager() # Add the accelerator group to the toplevel window accelgroup = uimanager.get_accel_group() window.add_accel_group(accelgroup) # Create an ActionGroup actiongroup = gtk.ActionGroup('Actions') self.actiongroup = actiongroup actiongroup.add_actions(( ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, 'Zoom In', self.widget.on_zoom_in), ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, 'Zoom Out', self.widget.on_zoom_out), ('ZoomFit', gtk.STOCK_ZOOM_FIT, None, None, 'Zoom Fit', self.widget.on_zoom_fit), ('Zoom100', gtk.STOCK_ZOOM_100, None, None, 'Zoom 100', self.widget.on_zoom_100), ('Refresh', gtk.STOCK_REFRESH, None, None, 'Refresh', self.on_refresh), ('Save', gtk.STOCK_SAVE_AS, None, None, 'Save', self.save_action), )) actiongroup.add_toggle_actions( (('LeftToRight', 'transpose', 'Transpose', None, 'Transpose the graph', self.on_left_to_right), )) # Add the actiongroup to the uimanager uimanager.insert_action_group(actiongroup, 0) # Add a UI descrption uimanager.add_ui_from_string(self.ui) left_to_right_toolitem = uimanager.get_widget('/ToolBar/LeftToRight') left_to_right_toolitem.set_active(self.orientation == "LR") # Create a Toolbar toolbar = uimanager.get_widget('/ToolBar') vbox.pack_start(toolbar, False) vbox.pack_start(self.widget) self.set_focus(self.widget) if not should_hide: self.show_all() self.load_config()
def __init__(self, hosts=None, patterns_name=None, patterns_owner=None, comms_timeout=None, interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gscan") setup_icons() self.window = gtk.Window() title = "cylc gscan" for opt, items in [("-n", patterns_name), ("-o", patterns_owner)]: if items: for pattern in items: if pattern is not None: title += " %s %s" % (opt, pattern) self.window.set_title(title) self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.warnings = {} self.theme_name = GcylcConfig.get_inst().get(['use theme']) self.theme = GcylcConfig.get_inst().get(['themes', self.theme_name]) suite_treemodel = gtk.TreeStore( str, # group str, # host str, # owner str, # suite str, # version bool, # is_stopped str, # title int, # update_time str, # states str, # states_text str) # warning_text self._prev_tooltip_location_id = None self.treeview = gtk.TreeView(suite_treemodel) # Visibility of columns gsfg = GScanConfig.get_inst() vis_cols = gsfg.get(["columns"]) hide_main_menu_bar = gsfg.get(["hide main menubar"]) # Doesn't make any sense without suite name column if gsfg.COL_SUITE not in vis_cols: vis_cols.append(gsfg.COL_SUITE.lower()) # Construct the group, host, owner, suite, title, update time column. for col_title, col_id, col_cell_text_setter in [ (gsfg.COL_GROUP, self.GROUP_COLUMN, self._set_cell_text_group), (gsfg.COL_HOST, self.HOST_COLUMN, self._set_cell_text_host), (gsfg.COL_OWNER, self.OWNER_COLUMN, self._set_cell_text_owner), (gsfg.COL_SUITE, self.SUITE_COLUMN, self._set_cell_text_name), (gsfg.COL_VERSION, self.VERSION_COLUMN, self._set_cell_text_version), (gsfg.COL_TITLE, self.TITLE_COLUMN, self._set_cell_text_title), (gsfg.COL_UPDATED, self.UPDATE_TIME_COLUMN, self._set_cell_text_time), ]: column = gtk.TreeViewColumn(col_title) cell_text = gtk.CellRendererText() column.pack_start(cell_text, expand=False) column.set_cell_data_func(cell_text, col_cell_text_setter) column.set_sort_column_id(col_id) column.set_visible(col_title.lower() in vis_cols) column.set_resizable(True) self.treeview.append_column(column) # Construct the status column. status_column = gtk.TreeViewColumn(gsfg.COL_STATUS) status_column.set_sort_column_id(self.STATUS_COLUMN) status_column.set_visible(gsfg.COL_STATUS.lower() in vis_cols) status_column.set_resizable(True) cell_text_cycle = gtk.CellRendererText() status_column.pack_start(cell_text_cycle, expand=False) status_column.set_cell_data_func(cell_text_cycle, self._set_cell_text_cycle, self.CYCLE_COLUMN) self.treeview.append_column(status_column) # Warning icon. warn_icon = gtk.CellRendererPixbuf() image = gtk.Image() pixbuf = image.render_icon(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_LARGE_TOOLBAR) self.warn_icon_colour = pixbuf.scale_simple( # colour warn icon pixbuf self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_grey = pixbuf.scale_simple(self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_colour.saturate_and_pixelate( self.warn_icon_grey, 0, False) # b&w warn icon pixbuf status_column.pack_start(warn_icon, expand=False) status_column.set_cell_data_func(warn_icon, self._set_error_icon_state) self.warn_icon_blank = gtk.gdk.Pixbuf( # Transparent pixbuff. gtk.gdk.COLORSPACE_RGB, True, 8, self.ICON_SIZE, self.ICON_SIZE).fill(0x00000000) # Task status icons. for i in range(len(TASK_STATUSES_ORDERED)): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func(cell_pixbuf_state, self._set_cell_pixbuf_state, i) self.treeview.show() if hasattr(self.treeview, "set_has_tooltip"): self.treeview.set_has_tooltip(True) try: self.treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.treeview.connect("button-press-event", self._on_button_press_event) cre_owner, cre_name = re_compile_filters(patterns_owner, patterns_name) self.updater = ScanAppUpdater(self.window, hosts, suite_treemodel, self.treeview, comms_timeout, interval, self.GROUP_COLUMN, cre_owner, cre_name) self.updater.start() self.dot_size = GcylcConfig.get_inst().get(['dot icon size']) self.dots = None self._set_dots() self.menu_bar = None self.create_menubar() accelgroup = gtk.AccelGroup() self.window.add_accel_group(accelgroup) key, modifier = gtk.accelerator_parse('<Alt>m') accelgroup.connect_group(key, modifier, gtk.ACCEL_VISIBLE, self._toggle_hide_menu_bar) self.tool_bar = None self.create_tool_bar() self.menu_hbox = gtk.HBox() self.menu_hbox.pack_start(self.menu_bar, expand=True, fill=True) self.menu_hbox.pack_start(self.tool_bar, expand=True, fill=True) self.menu_hbox.show_all() if hide_main_menu_bar: self.menu_hbox.hide_all() scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.treeview) scrolled_window.show() self.vbox.pack_start(self.menu_hbox, expand=False) self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) wsize = gsfg.get(['window size']) self.window.set_default_size(*wsize) self.treeview.grab_focus() self.window.show() self.theme_legend_window = None self.warning_icon_shown = []
def __init__(self, parent, db, db_owner, tmpdir, timeout): self.db = db self.db_owner = db_owner if timeout: self.timeout = float(timeout) else: self.timeout = None self.chosen = None self.updater = None self.tmpdir = tmpdir self.gcapture_windows = [] gobject.threads_init() # self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window = gtk.Dialog( "Choose a suite", parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) # self.window.set_modal(True) self.window.set_title("Suite Chooser") self.window.set_size_request(750, 400) # TODO: not needed for a dialog window? self.window.set_icon(get_icon()) # self.window.set_border_width(5) self.window.connect("delete_event", self.delete_all_event) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.regd_treeview = gtk.TreeView() self.regd_treestore = gtk.TreeStore(str, str, str, str, str, str, str) self.regd_treeview.set_model(self.regd_treestore) self.regd_treeview.set_rules_hint(True) # search column zero (Ctrl-F) self.regd_treeview.connect('key_press_event', self.on_suite_select) self.regd_treeview.connect('button_press_event', self.on_suite_select) self.regd_treeview.set_search_column(0) # Start updating the liststore now, as we need values in it # immediately below (it may be possible to delay this till the # end of __init___() but it doesn't really matter. if self.db: self.dbopt = '--db=' + self.db else: self.dbopt = '' regd_ts = self.regd_treeview.get_selection() regd_ts.set_mode(gtk.SELECTION_SINGLE) cr = gtk.CellRendererText() # cr.set_property('cell-background', '#def') tvc = gtk.TreeViewColumn( 'Suite', cr, text=0, foreground=4, background=5) tvc.set_resizable(True) tvc.set_sort_column_id(0) self.regd_treeview.append_column(tvc) cr = gtk.CellRendererText() tvc = gtk.TreeViewColumn( 'Host:Port', cr, text=1, foreground=4, background=5) tvc.set_resizable(True) # not sure how this sorting works # tvc.set_sort_column_id(1) self.regd_treeview.append_column(tvc) cr = gtk.CellRendererText() # cr.set_property('cell-background', '#def') tvc = gtk.TreeViewColumn( 'Title', cr, markup=2, foreground=4, background=6) tvc.set_resizable(True) # vc.set_sort_column_id(2) self.regd_treeview.append_column(tvc) cr = gtk.CellRendererText() tvc = gtk.TreeViewColumn( 'Location', cr, text=3, foreground=4, background=5) tvc.set_resizable(True) # vc.set_sort_column_id(3) self.regd_treeview.append_column(tvc) vbox = self.window.vbox sw.add(self.regd_treeview) vbox.pack_start(sw, True) self.selected_label_text = ( '(double-click or OK to select; right-click for db options)') self.selected_label = gtk.Label(self.selected_label_text) filter_entry = EntryTempText() filter_entry.set_width_chars(7) # Reduce width in toolbar filter_entry.connect("activate", self.filter) filter_entry.set_temp_text("filter") filter_toolitem = gtk.ToolItem() filter_toolitem.add(filter_entry) tooltip = gtk.Tooltips() tooltip.enable() tooltip.set_tip( filter_toolitem, "Filter suites \n(enter a sub-string or regex)") expand_button = gtk.ToolButton() image = gtk.image_new_from_stock( gtk.STOCK_ADD, gtk.ICON_SIZE_SMALL_TOOLBAR) expand_button.set_icon_widget(image) expand_button.connect( 'clicked', lambda x: self.regd_treeview.expand_all()) collapse_button = gtk.ToolButton() image = gtk.image_new_from_stock( gtk.STOCK_REMOVE, gtk.ICON_SIZE_SMALL_TOOLBAR) collapse_button.set_icon_widget(image) collapse_button.connect( 'clicked', lambda x: self.regd_treeview.collapse_all()) hbox = gtk.HBox() eb = gtk.EventBox() eb.add(self.selected_label) eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#bbc')) hbox.pack_start(eb, True) hbox.pack_start(expand_button, False) hbox.pack_start(collapse_button, False) hbox.pack_start(filter_toolitem, False) vbox.pack_start(hbox, False) self.window.show_all() self.start_updater()
def __init__(self, suite, suiterc, template_vars, orientation="TB", should_hide=False): self.outfile = None self.disable_output_image = False self.suite = suite self.file = suiterc self.suiterc = None self.orientation = orientation self.template_vars = template_vars self.start_point_string = None self.stop_point_string = None self.filter_recs = [] util.setup_icons() gtk.Window.__init__(self) self.graph = xdot.Graph() window = self window.set_title('Cylc Suite Runtime Inheritance Graph Viewer') window.set_default_size(512, 512) window.set_icon(util.get_icon()) vbox = gtk.VBox() window.add(vbox) self.widget = xdot.DotWidget() # Create a UIManager instance uimanager = self.uimanager = gtk.UIManager() # Add the accelerator group to the toplevel window accelgroup = uimanager.get_accel_group() window.add_accel_group(accelgroup) # Create an ActionGroup actiongroup = gtk.ActionGroup('Actions') self.actiongroup = actiongroup actiongroup.add_actions(( ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, 'Zoom In', self.widget.on_zoom_in), ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, 'Zoom Out', self.widget.on_zoom_out), ('ZoomFit', gtk.STOCK_ZOOM_FIT, None, None, 'Zoom Fit', self.widget.on_zoom_fit), ('Zoom100', gtk.STOCK_ZOOM_100, None, None, 'Zoom 100', self.widget.on_zoom_100), ('Refresh', gtk.STOCK_REFRESH, None, None, 'Refresh', self.on_refresh), ('Save', gtk.STOCK_SAVE_AS, None, None, 'Save', self.save_action), )) actiongroup.add_toggle_actions(( ('LeftToRight', 'transpose', 'Transpose', None, 'Transpose the graph', self.on_left_to_right), )) # Add the actiongroup to the uimanager uimanager.insert_action_group(actiongroup, 0) # Add a UI descrption uimanager.add_ui_from_string(self.ui) left_to_right_toolitem = uimanager.get_widget( '/ToolBar/LeftToRight') left_to_right_toolitem.set_active(self.orientation == "LR") # Create a Toolbar toolbar = uimanager.get_widget('/ToolBar') vbox.pack_start(toolbar, False) vbox.pack_start(self.widget) self.set_focus(self.widget) if not should_hide: self.show_all() self.load_config()
def __init__(self, hosts=None, owner=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gscan") setup_icons() if not hosts: hosts = GLOBAL_CFG.get(["suite host scanning", "hosts"]) self.hosts = hosts if owner is None: owner = user self.owner = owner self.window = gtk.Window() self.window.set_title("cylc gscan") self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.theme_name = gcfg.get(['use theme']) self.theme = gcfg.get(['themes', self.theme_name]) self.dots = DotMaker(self.theme) suite_treemodel = gtk.TreeStore(str, str, bool, str, int, str, str) self._prev_tooltip_location_id = None self.suite_treeview = gtk.TreeView(suite_treemodel) # Construct the host column. host_name_column = gtk.TreeViewColumn("Host") cell_text_host = gtk.CellRendererText() host_name_column.pack_start(cell_text_host, expand=False) host_name_column.set_cell_data_func(cell_text_host, self._set_cell_text_host) host_name_column.set_sort_column_id(0) host_name_column.set_visible(False) host_name_column.set_resizable(True) # Construct the suite name column. suite_name_column = gtk.TreeViewColumn("Suite") cell_text_name = gtk.CellRendererText() suite_name_column.pack_start(cell_text_name, expand=False) suite_name_column.set_cell_data_func(cell_text_name, self._set_cell_text_name) suite_name_column.set_sort_column_id(1) suite_name_column.set_resizable(True) # Construct the suite title column. suite_title_column = gtk.TreeViewColumn("Title") cell_text_title = gtk.CellRendererText() suite_title_column.pack_start(cell_text_title, expand=False) suite_title_column.set_cell_data_func(cell_text_title, self._set_cell_text_title) suite_title_column.set_sort_column_id(3) suite_title_column.set_visible(False) suite_title_column.set_resizable(True) # Construct the update time column. time_column = gtk.TreeViewColumn("Updated") cell_text_time = gtk.CellRendererText() time_column.pack_start(cell_text_time, expand=False) time_column.set_cell_data_func(cell_text_time, self._set_cell_text_time) time_column.set_sort_column_id(4) time_column.set_visible(False) time_column.set_resizable(True) self.suite_treeview.append_column(host_name_column) self.suite_treeview.append_column(suite_name_column) self.suite_treeview.append_column(suite_title_column) self.suite_treeview.append_column(time_column) # Construct the status column. status_column = gtk.TreeViewColumn("Status") status_column.set_sort_column_id(5) status_column.set_resizable(True) status_column_info = 6 cycle_column_info = 5 cell_text_cycle = gtk.CellRendererText() status_column.pack_start(cell_text_cycle, expand=False) status_column.set_cell_data_func(cell_text_cycle, self._set_cell_text_cycle, cycle_column_info) self.suite_treeview.append_column(status_column) distinct_states = len(task_state.legal) for i in range(distinct_states): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func(cell_pixbuf_state, self._set_cell_pixbuf_state, (status_column_info, i)) self.suite_treeview.show() if hasattr(self.suite_treeview, "set_has_tooltip"): self.suite_treeview.set_has_tooltip(True) try: self.suite_treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.suite_treeview.connect("button-press-event", self._on_button_press_event) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.suite_treeview) scrolled_window.show() self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.updater = ScanAppUpdater(self.hosts, suite_treemodel, self.suite_treeview, owner=self.owner, poll_interval=poll_interval) self.updater.start() self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) self.window.set_default_size(300, 150) self.suite_treeview.grab_focus() self.window.show()
def __init__(self, hosts=None, owner=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gscan") setup_icons() if not hosts: hosts = GLOBAL_CFG.get(["suite host scanning", "hosts"]) self.hosts = hosts if owner is None: owner = USER self.owner = owner self.window = gtk.Window() self.window.set_title("cylc gscan") self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.theme_name = gcfg.get(["use theme"]) self.theme = gcfg.get(["themes", self.theme_name]) self.dots = DotMaker(self.theme) suite_treemodel = gtk.TreeStore(str, str, bool, str, int, str, str) self._prev_tooltip_location_id = None self.suite_treeview = gtk.TreeView(suite_treemodel) # Construct the host column. host_name_column = gtk.TreeViewColumn("Host") cell_text_host = gtk.CellRendererText() host_name_column.pack_start(cell_text_host, expand=False) host_name_column.set_cell_data_func(cell_text_host, self._set_cell_text_host) host_name_column.set_sort_column_id(0) host_name_column.set_visible("host" in gsfg.get(["columns"])) host_name_column.set_resizable(True) # Construct the suite name column. suite_name_column = gtk.TreeViewColumn("Suite") cell_text_name = gtk.CellRendererText() suite_name_column.pack_start(cell_text_name, expand=False) suite_name_column.set_cell_data_func(cell_text_name, self._set_cell_text_name) suite_name_column.set_sort_column_id(1) suite_name_column.set_visible("suite" in gsfg.get(["columns"])) suite_name_column.set_resizable(True) # Construct the suite title column. suite_title_column = gtk.TreeViewColumn("Title") cell_text_title = gtk.CellRendererText() suite_title_column.pack_start(cell_text_title, expand=False) suite_title_column.set_cell_data_func(cell_text_title, self._set_cell_text_title) suite_title_column.set_sort_column_id(3) suite_title_column.set_visible("title" in gsfg.get(["columns"])) suite_title_column.set_resizable(True) # Construct the update time column. time_column = gtk.TreeViewColumn("Updated") cell_text_time = gtk.CellRendererText() time_column.pack_start(cell_text_time, expand=False) time_column.set_cell_data_func(cell_text_time, self._set_cell_text_time) time_column.set_sort_column_id(4) time_column.set_visible("updated" in gsfg.get(["columns"])) time_column.set_resizable(True) self.suite_treeview.append_column(host_name_column) self.suite_treeview.append_column(suite_name_column) self.suite_treeview.append_column(suite_title_column) self.suite_treeview.append_column(time_column) # Construct the status column. status_column = gtk.TreeViewColumn("Status") status_column.set_sort_column_id(5) status_column.set_visible("status" in gsfg.get(["columns"])) status_column.set_resizable(True) status_column_info = 6 cycle_column_info = 5 cell_text_cycle = gtk.CellRendererText() status_column.pack_start(cell_text_cycle, expand=False) status_column.set_cell_data_func(cell_text_cycle, self._set_cell_text_cycle, cycle_column_info) self.suite_treeview.append_column(status_column) for i in range(len(TASK_STATUSES_ORDERED)): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func(cell_pixbuf_state, self._set_cell_pixbuf_state, (status_column_info, i)) self.suite_treeview.show() if hasattr(self.suite_treeview, "set_has_tooltip"): self.suite_treeview.set_has_tooltip(True) try: self.suite_treeview.connect("query-tooltip", self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.suite_treeview.connect("button-press-event", self._on_button_press_event) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.suite_treeview) scrolled_window.show() self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.updater = ScanAppUpdater( self.hosts, suite_treemodel, self.suite_treeview, owner=self.owner, poll_interval=poll_interval ) self.updater.start() self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) self.window.set_default_size(300, 150) self.suite_treeview.grab_focus() self.window.show()
def __init__(self, msg, parent=None): self.dialog = gtk.MessageDialog(parent, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, msg) self.dialog.set_icon(get_icon())
def __init__(self, hosts=None, owner=None, poll_interval=None): gobject.threads_init() set_exception_hook_dialog("cylc gscan") setup_icons() if not hosts: hosts = GLOBAL_CFG.get(["suite host scanning", "hosts"]) self.hosts = hosts if owner is None: owner = USER self.owner = owner self.window = gtk.Window() self.window.set_title("cylc gscan") self.window.set_icon(get_icon()) self.vbox = gtk.VBox() self.vbox.show() self.warnings = {} self.theme_name = gcfg.get(['use theme']) self.theme = gcfg.get(['themes', self.theme_name]) self.dots = DotMaker(self.theme) suite_treemodel = gtk.TreeStore( str, str, bool, str, int, str, str, str) self._prev_tooltip_location_id = None self.suite_treeview = gtk.TreeView(suite_treemodel) # Construct the host column. host_name_column = gtk.TreeViewColumn("Host") cell_text_host = gtk.CellRendererText() host_name_column.pack_start(cell_text_host, expand=False) host_name_column.set_cell_data_func( cell_text_host, self._set_cell_text_host) host_name_column.set_sort_column_id(0) host_name_column.set_visible("host" in gsfg.get(["columns"])) host_name_column.set_resizable(True) # Construct the suite name column. suite_name_column = gtk.TreeViewColumn("Suite") cell_text_name = gtk.CellRendererText() suite_name_column.pack_start(cell_text_name, expand=False) suite_name_column.set_cell_data_func( cell_text_name, self._set_cell_text_name) suite_name_column.set_sort_column_id(1) suite_name_column.set_visible("suite" in gsfg.get(["columns"])) suite_name_column.set_resizable(True) # Construct the suite title column. suite_title_column = gtk.TreeViewColumn("Title") cell_text_title = gtk.CellRendererText() suite_title_column.pack_start(cell_text_title, expand=False) suite_title_column.set_cell_data_func( cell_text_title, self._set_cell_text_title) suite_title_column.set_sort_column_id(3) suite_title_column.set_visible("title" in gsfg.get( ["columns"])) suite_title_column.set_resizable(True) # Construct the update time column. time_column = gtk.TreeViewColumn("Updated") cell_text_time = gtk.CellRendererText() time_column.pack_start(cell_text_time, expand=False) time_column.set_cell_data_func( cell_text_time, self._set_cell_text_time) time_column.set_sort_column_id(4) time_column.set_visible("updated" in gsfg.get(["columns"])) time_column.set_resizable(True) self.suite_treeview.append_column(host_name_column) self.suite_treeview.append_column(suite_name_column) self.suite_treeview.append_column(suite_title_column) self.suite_treeview.append_column(time_column) # Construct the status column. status_column = gtk.TreeViewColumn("Status") status_column.set_sort_column_id(5) status_column.set_visible("status" in gsfg.get(["columns"])) status_column.set_resizable(True) cell_text_cycle = gtk.CellRendererText() status_column.pack_start(cell_text_cycle, expand=False) status_column.set_cell_data_func( cell_text_cycle, self._set_cell_text_cycle, self.CYCLE_COLUMN) self.suite_treeview.append_column(status_column) # Warning icon. warn_icon = gtk.CellRendererPixbuf() image = gtk.Image() pixbuf = image.render_icon( gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_LARGE_TOOLBAR) self.warn_icon_colour = pixbuf.scale_simple( # colour warn icon pixbuf self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_grey = pixbuf.scale_simple( self.ICON_SIZE, self.ICON_SIZE, gtk.gdk.INTERP_HYPER) self.warn_icon_colour.saturate_and_pixelate( self.warn_icon_grey, 0, False) # b&w warn icon pixbuf status_column.pack_start(warn_icon, expand=False) status_column.set_cell_data_func(warn_icon, self._set_error_icon_state) self.warn_icon_blank = gtk.gdk.Pixbuf( # Transparent pixbuff. gtk.gdk.COLORSPACE_RGB, True, 8, self.ICON_SIZE, self.ICON_SIZE ).fill(0x00000000) # Task status icons. for i in range(len(TASK_STATUSES_ORDERED)): cell_pixbuf_state = gtk.CellRendererPixbuf() status_column.pack_start(cell_pixbuf_state, expand=False) status_column.set_cell_data_func( cell_pixbuf_state, self._set_cell_pixbuf_state, i) self.suite_treeview.show() if hasattr(self.suite_treeview, "set_has_tooltip"): self.suite_treeview.set_has_tooltip(True) try: self.suite_treeview.connect('query-tooltip', self._on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.suite_treeview.connect("button-press-event", self._on_button_press_event) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.suite_treeview) scrolled_window.show() self.vbox.pack_start(scrolled_window, expand=True, fill=True) self.updater = ScanAppUpdater( self.hosts, suite_treemodel, self.suite_treeview, owner=self.owner, poll_interval=poll_interval ) self.updater.start() self.window.add(self.vbox) self.window.connect("destroy", self._on_destroy_event) self.window.set_default_size(300, 150) self.suite_treeview.grab_focus() self.window.show() self.warning_icon_shown = []