def launch_context_menu(self, event, suite_keys=None, extra_items=None): if suite_keys is None: suite_keys = [] if extra_items is None: extra_items = [] gscan_item = gtk.ImageMenuItem("Launch cylc gscan") img = gtk.image_new_from_stock("gcylc", gtk.ICON_SIZE_MENU) gscan_item.set_image(img) gscan_item.show() gscan_item.connect("button-press-event", self._on_button_press_event_gscan) extra_items.append(gscan_item) menu = get_scan_menu(suite_keys, self.theme_name, self._set_theme, self.has_stopped_suites(), self.clear_stopped_suites, self.hosts, self.set_hosts, self.update_now, self.start, program_name="cylc gpanel", extra_items=extra_items, is_stopped=self.quit) menu.popup(None, None, None, event.button, event.time) return False
def _on_button_press_event(self, treeview, event): """Tree view button press callback.""" x = int(event.x) y = int(event.y) pth = treeview.get_path_at_pos(x, y) treemodel = treeview.get_model() # Dismiss warnings by clicking on a warning icon. if event.button == 1: if not pth: return False path, column, cell_x = pth[:3] if column.get_title() == GScanConfig.get_inst().COL_STATUS: dot_offset, dot_width = tuple( column.cell_get_position(column.get_cell_renderers()[1])) if not dot_width: return False try: cell_index = (cell_x - dot_offset) // dot_width except ZeroDivisionError: return False if cell_index == 0: iter_ = treemodel.get_iter(path) host, owner, suite = treemodel.get(iter_, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) self.updater.clear_warnings(host, owner, suite) treemodel.set(iter_, self.WARNINGS_COLUMN, '') return True # Display menu on right click. if event.type != gtk.gdk._2BUTTON_PRESS and event.button != 3: return False suite_keys = [] if pth is not None: # Add a gcylc launcher item. path = pth[0] iter_ = treemodel.get_iter(path) host, owner, suite = treemodel.get(iter_, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) if suite is not None: suite_keys.append((host, owner, suite)) elif suite is None: # On an expanded cycle point row, so get from parent. try: host, owner, suite = treemodel.get( treemodel.iter_parent(iter_), self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) suite_keys.append((host, owner, suite)) except TypeError: # Now iterate over the children instead. # We need to iterate over the children as there can be more # than one suite in a group of suites. # Get a TreeIter pointing to the first child of parent iter suite_iter = treemodel.iter_children(iter_) # Iterate over the children until you get to end while suite_iter is not None: host, owner, suite = treemodel.get( suite_iter, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) suite_keys.append((host, owner, suite)) # Advance to the next pointer in the treemodel suite_iter = treemodel.iter_next(suite_iter) if event.type == gtk.gdk._2BUTTON_PRESS: if suite_keys: launch_gcylc(suite_keys[0]) return False menu = get_scan_menu(suite_keys, self._toggle_hide_menu_bar) menu.popup(None, None, None, event.button, event.time) return False
def _on_button_press_event(self, treeview, event): """Tree view button press callback.""" x = int(event.x) y = int(event.y) pth = treeview.get_path_at_pos(x, y) treemodel = treeview.get_model() # Dismiss warnings by clicking on a warning icon. if event.button == 1: if not pth: return False path, column, cell_x, _ = pth if column.get_title() == gsfg.COL_STATUS: dot_offset, dot_width = tuple(column.cell_get_position( column.get_cell_renderers()[1])) if not dot_width: return False try: cell_index = (cell_x - dot_offset) // dot_width except ZeroDivisionError: return False if cell_index == 0: iter_ = treemodel.get_iter(path) host, owner, suite = treemodel.get( iter_, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) self.updater.clear_warnings(host, owner, suite) treemodel.set(iter_, self.WARNINGS_COLUMN, '') return True # Display menu on right click. if event.type != gtk.gdk._2BUTTON_PRESS and event.button != 3: return False suite_keys = [] if pth is not None: # Add a gcylc launcher item. path = pth[0] iter_ = treemodel.get_iter(path) host, owner, suite = treemodel.get( iter_, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) if suite is not None: suite_keys.append((host, owner, suite)) elif suite is None: # On an expanded cycle point row, so get from parent. try: host, owner, suite = treemodel.get( treemodel.iter_parent(iter_), self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) suite_keys.append((host, owner, suite)) except: # Now iterate over the children instead. # We need to iterate over the children as there can be more # than one suite in a group of suites. # Get a TreeIter pointing to the first child of parent iter suite_iter = treemodel.iter_children(iter_) # Iterate over the children until you get to end while suite_iter is not None: host, owner, suite = treemodel.get(suite_iter, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) suite_keys.append((host, owner, suite)) # Advance to the next pointer in the treemodel suite_iter = treemodel.iter_next(suite_iter) if event.type == gtk.gdk._2BUTTON_PRESS: if suite_keys: launch_gcylc(suite_keys[0]) return False menu = get_scan_menu(suite_keys, self._toggle_hide_menu_bar) menu.popup(None, None, None, event.button, event.time) return False
def _on_button_press_event(self, treeview, event): """Tree view button press callback.""" x = int(event.x) y = int(event.y) pth = treeview.get_path_at_pos(x, y) treemodel = treeview.get_model() # Dismiss warnings by clicking on a warning icon. if event.button == 1: if not pth: return False path, column, cell_x, _ = pth if column.get_title() == gsfg.COL_STATUS: dot_offset, dot_width = tuple(column.cell_get_position( column.get_cell_renderers()[1])) if not dot_width: return False try: cell_index = (cell_x - dot_offset) // dot_width except ZeroDivisionError: return False if cell_index == 0: iter_ = treemodel.get_iter(path) host, owner, suite = treemodel.get( iter_, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) self.updater.clear_warnings(host, owner, suite) treemodel.set(iter_, self.WARNINGS_COLUMN, '') return True # Display menu on right click. if event.type != gtk.gdk._2BUTTON_PRESS and event.button != 3: return False suite_keys = [] if pth is not None: # Add a gcylc launcher item. path = pth[0] iter_ = treemodel.get_iter(path) host, owner, suite = treemodel.get( iter_, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) if suite is not None: suite_keys.append((host, owner, suite)) elif suite is None: # On an expanded cycle point row, so get from parent. try: host, owner, suite = treemodel.get( treemodel.iter_parent(iter_), self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) suite_keys.append((host, owner, suite)) except: # Now iterate over the children instead. # We need to iterate over the children as there can be more # than one suite in a group of suites. # Get a TreeIter pointing to the first child of parent iter suite_iter = treemodel.iter_children(iter_) # Iterate over the children until you get to end while suite_iter is not None: host, owner, suite = treemodel.get(suite_iter, self.HOST_COLUMN, self.OWNER_COLUMN, self.SUITE_COLUMN) suite_keys.append((host, owner, suite)) # Advance to the next pointer in the treemodel suite_iter = treemodel.iter_next(suite_iter) if event.type == gtk.gdk._2BUTTON_PRESS: if suite_keys: launch_gcylc(suite_keys[0]) return False view_item = gtk.ImageMenuItem("View Column...") img = gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_MENU) view_item.set_image(img) view_item.show() view_menu = gtk.Menu() view_item.set_submenu(view_menu) for column_index, column in enumerate(treeview.get_columns()): name = column.get_title() is_visible = column.get_visible() column_item = gtk.CheckMenuItem(name.replace("_", "__")) column_item._connect_args = (column_index, is_visible) column_item.set_active(is_visible) column_item.connect("toggled", self._on_toggle_column_visible) column_item.show() view_menu.append(column_item) menu = get_scan_menu( suite_keys, self.theme_name, self._set_theme, self.updater.has_stopped_suites(), self.updater.clear_stopped_suites, self.hosts, self.updater.set_hosts, self.updater.update_now, self.updater.start, program_name="cylc gscan", extra_items=[view_item], ) menu.popup(None, None, None, event.button, event.time) return False