def _set_key_liststore(self): dotm = DotMaker(self._theme, self._dot_size) self._key_liststore.clear() for state in task_state.legal: dot = dotm.get_icon(state) self._key_liststore.append([state, dot]) self._key_liststore.append(['(unknown)', dotm.get_icon('unknown')])
def __init__(self, cfg, updater, ttreeview, ttree_paths, info_bar, theme): super(TreeUpdater, self).__init__() self.quit = False self.autoexpand = True self.cfg = cfg self.updater = updater self.theme = theme self.info_bar = info_bar self.last_update_time = None self.ancestors = {} self.descendants = [] self.autoexpand_states = [ 'queued', 'submitting', 'submitted', 'running', 'failed' ] self._last_autoexpand_me = [] self.ttree_paths = ttree_paths # Dict of paths vs all descendant node states self.should_group_families = ("text" not in self.cfg.ungrouped_views) self.ttreeview = ttreeview # Hierarchy of models: view <- sorted <- filtered <- base model self.ttreestore = ttreeview.get_model().get_model().get_model() dotm = DotMaker(theme) self.dots = {} for state in task_state.legal: self.dots[state] = dotm.get_icon(state) self.dots['empty'] = dotm.get_icon()
def __init__(self, cfg, updater, treeview, info_bar, theme): super(DotUpdater, self).__init__() self.quit = False self.action_required = False self.autoexpand = True self.should_hide_headings = False self.should_group_families = ("dot" not in cfg.ungrouped_views) self.should_transpose_view = False self.is_transposed = False self.cfg = cfg self.updater = updater self.theme = theme self.info_bar = info_bar imagedir = self.cfg.imagedir self.last_update_time = None self.state_summary = {} self.fam_state_summary = {} self.ancestors_pruned = {} self.descendants = [] self.filter = "" self.led_headings = [] self.led_treeview = treeview self.led_liststore = treeview.get_model() self._prev_tooltip_task_id = None if hasattr(self.led_treeview, "set_has_tooltip"): self.led_treeview.set_has_tooltip(True) try: self.led_treeview.connect('query-tooltip', self.on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.task_list = [] # generate task state icons dotm = DotMaker(theme) self.dots = {} for state in task_state.legal: self.dots[state] = dotm.get_icon(state) self.dots['empty'] = dotm.get_icon() self.led_digits_one = [] self.led_digits_two = [] self.led_digits_blank = gtk.gdk.pixbuf_new_from_file( imagedir + "/digits/one/digit-blank.xpm") for i in range(10): self.led_digits_one.append( gtk.gdk.pixbuf_new_from_file(imagedir + "/digits/one/digit-" + str(i) + ".xpm")) self.led_digits_two.append( gtk.gdk.pixbuf_new_from_file(imagedir + "/digits/two/digit-" + str(i) + ".xpm"))
def __init__(self, cfg, updater, treeview, info_bar, theme, dot_size): super(DotUpdater, self).__init__() self.quit = False self.cleared = True self.action_required = False self.autoexpand = True self.should_hide_headings = False self.should_group_families = ("dot" not in cfg.ungrouped_views) self.should_transpose_view = False self.is_transposed = False self.defn_order_on = True self.cfg = cfg self.updater = updater self.theme = theme self.info_bar = info_bar imagedir = self.cfg.imagedir self.last_update_time = None self.state_summary = {} self.fam_state_summary = {} self.ancestors_pruned = {} self.descendants = [] self.filter = "" self.point_strings = [] self.led_headings = [] self.led_treeview = treeview self.led_liststore = treeview.get_model() self._prev_tooltip_task_id = None if hasattr(self.led_treeview, "set_has_tooltip"): self.led_treeview.set_has_tooltip(True) try: self.led_treeview.connect('query-tooltip', self.on_query_tooltip) except TypeError: # Lower PyGTK version. pass self.task_list = [] # generate task state icons dotm = DotMaker(theme, size=dot_size) self.dots = dotm.get_dots()
def __init__(self, cfg, updater, ttreeview, ttree_paths, info_bar, theme, dot_size): super(TreeUpdater, self).__init__() self.action_required = False self.quit = False self.cleared = True self.autoexpand = True self.count = 0 self.cfg = cfg self.updater = updater self.info_bar = info_bar self.last_update_time = None self.ancestors = {} self.descendants = [] self.autoexpand_states = [ 'queued', 'ready', 'submitted', 'running', 'failed' ] self._last_autoexpand_me = [] self.ttree_paths = ttree_paths # Dict of paths vs all descendant node states self.should_group_families = ("text" not in self.cfg.ungrouped_views) self.ttreeview = ttreeview # Hierarchy of models: view <- sorted <- filtered <- base model self.ttreestore = ttreeview.get_model().get_model().get_model() self._prev_tooltip_task_id = None if hasattr(self.ttreeview, "set_has_tooltip"): self.ttreeview.set_has_tooltip(True) try: self.ttreeview.connect('query-tooltip', self.on_query_tooltip) except TypeError: # Lower PyGTK version. pass # Cache the latest ETC calculation for active ids. self._id_tetc_cache = {} # Generate task state icons. dotm = DotMaker(theme, size=dot_size) self.dots = dotm.get_dots()
def __init__(self, hosts, dot_hbox, gcylc_image, is_compact, owner=None, poll_interval=None): self.quit = True self.dot_hbox = dot_hbox self.gcylc_image = gcylc_image self.is_compact = is_compact self._set_gcylc_image_tooltip() self.gcylc_image.set_sensitive(False) self.theme_name = gcfg.get(['use theme']) self.theme = gcfg.get(['themes', self.theme_name]) self.dots = DotMaker(self.theme) self.statuses = {} self.stop_summaries = {} self._set_exception_hook() super(SummaryPanelAppletUpdater, self).__init__(hosts, owner=owner, poll_interval=poll_interval)
def _set_theme(self, new_theme_name): self.theme_name = new_theme_name self.theme = gcfg.get(['themes', self.theme_name]) self.dots = DotMaker(self.theme)
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 = GLOBAL_CFG.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 _set_theme(self, new_theme_name): self.theme_name = new_theme_name self.theme = self.usercfg['themes'][self.theme_name] self.dots = DotMaker(self.theme)
def treeview_widgets(self): # Treeview of current suite state, with filtering and sorting. # sorting is handled somewhat manually because the simple method # of interposing a TreeModelSort at the top: # treestore = gtk.TreeStore(str, ...) # tms = gtk.TreeModelSort( treestore ) #\ # tmf = tms.filter_new() #-- or other way round? # tv = gtk.TreeView() # tv.set_model(tms) # failed to produce correct results (the data displayed was not # consistently what should have been displayed given the # filtering in use) although the exact same code worked for a # liststore. self.sort_col_num = 0 self.ttreestore = gtk.TreeStore(str, str, str, str, str, str, str, str, str, str, gtk.gdk.Pixbuf) self.tmodelfilter = self.ttreestore.filter_new() self.tmodelfilter.set_visible_func(self.visible_cb) self.tmodelsort = gtk.TreeModelSort(self.tmodelfilter) self.ttreeview = gtk.TreeView() self.ttreeview.set_rules_hint(True) self.ttreeview.set_model(self.tmodelsort) ts = self.ttreeview.get_selection() ts.set_mode(gtk.SELECTION_SINGLE) self.ttreeview.connect('button_press_event', self.on_treeview_button_pressed) headings = [ None, 'task', 'state', 'host', 'Job ID', 'T-submit', 'T-start', 'T-finish', 'dT-mean', 'latest message' ] for n in range(1, len(headings)): # Skip first column (cycle point) tvc = gtk.TreeViewColumn(headings[n]) if n == 1: crp = gtk.CellRendererPixbuf() tvc.pack_start(crp, False) tvc.set_attributes(crp, pixbuf=10) cr = gtk.CellRendererText() tvc.pack_start(cr, True) if n == 7: tvc.set_attributes(cr, markup=n) else: tvc.set_attributes(cr, text=n) tvc.set_resizable(True) tvc.set_clickable(True) self.ttreeview.append_column(tvc) tvc.set_sort_column_id(n - 1) self.tmodelsort.set_sort_func(n - 1, self.sort_column, n - 1) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.add(self.ttreeview) self.tfilterbox = gtk.VBox() subbox1 = gtk.HBox(homogeneous=True) subbox2 = gtk.HBox(homogeneous=True) self.tfilterbox.pack_start(subbox1) self.tfilterbox.pack_start(subbox2) self.tfilter_states = [] dotm = DotMaker(self.theme, size='small') cnt = 0 for st in task_state.legal: box = gtk.HBox() icon = dotm.get_image(st) cb = gtk.CheckButton(task_state.labels[st]) tooltip = gtk.Tooltips() tooltip.enable() tooltip.set_tip(cb, "Filter by task state = %s" % st) box.pack_start(icon, expand=False) box.pack_start(cb, expand=False) cnt += 1 if cnt > (len(task_state.legal) + 1) // 2: subbox2.pack_start(box, expand=False, fill=True) else: subbox1.pack_start(box, expand=False, fill=True) if st in self.tfilter_states: cb.set_active(False) else: cb.set_active(True) cb.connect('toggled', self.check_tfilter_buttons) self.filter_entry = EntryTempText() self.filter_entry.set_width_chars(7) self.filter_entry.connect("activate", self.check_filter_entry) self.filter_entry.set_temp_text("filter") tooltip = gtk.Tooltips() tooltip.enable() tooltip.set_tip( self.filter_entry, "Filter by task name.\n" "Enter a sub-string or regex and hit Enter\n" "(to reset, clear the entry and hit Enter)") subbox2.pack_start(self.filter_entry) cnt += 1 if cnt % 2 != 0: # subbox2 needs another entry to line things up. subbox2.pack_start(gtk.HBox(), expand=False, fill=True) filter_hbox = gtk.HBox() filter_hbox.pack_start(self.tfilterbox, True, True, 10) vbox = gtk.VBox() vbox.pack_start(sw, True) vbox.pack_end(filter_hbox, False) return vbox