def __init__(self, table_widget, product_dir, yes_id=ga_Gtk.STOCK_APPLY, no_id=ga_Gtk.STOCK_REMOVE): """ Create a new products table, populating the Gtk.TreeView. yes_id and no_id are GTK constants that specify the icon to use for representing if a product is installed. """ table_widget.get_selection().set_mode(ga_Gtk.SelectionMode.NONE) self.table_widget = table_widget self.product_store = ga_Gtk.ListStore(str, ga_GdkPixbuf.Pixbuf) table_widget.set_model(self.product_store) self.yes_icon = self._render_icon(yes_id) self.no_icon = self._render_icon(no_id) self.product_dir = product_dir name_column = ga_Gtk.TreeViewColumn(_("Product"), ga_Gtk.CellRendererText(), markup=0) name_column.set_expand(True) installed_column = ga_Gtk.TreeViewColumn(_("Installed"), ga_Gtk.CellRendererPixbuf(), pixbuf=1) table_widget.append_column(name_column) table_widget.append_column(installed_column)
def __init__(self, backend, tab_icon, parent, ent_dir, prod_dir): # The row striping in this TreeView is handled automatically # because we have the rules_hint set to True in the Glade file. super(InstalledProductsTab, self).__init__() self.tab_icon = tab_icon self.identity = inj.require(inj.IDENTITY) self.entitlement_dir = ent_dir self.backend = backend # Product column text_renderer = ga_Gtk.CellRendererText() image_renderer = ga_Gtk.CellRendererPixbuf() column = ga_Gtk.TreeViewColumn(_('Product')) column.set_expand(True) column.pack_start(image_renderer, False) column.pack_start(text_renderer, False) column.add_attribute(image_renderer, 'pixbuf', self.store['image']) column.add_attribute(text_renderer, 'text', self.store['product']) self.top_view.append_column(column) cols = [] cols.append((column, 'text', 'product')) column = self.add_text_column(_('Version'), 'version') cols.append((column, 'text', 'version')) column = self.add_text_column(_('Status'), 'status') cols.append((column, 'text', 'status')) column = self.add_date_column(_('Start Date'), 'start_date') cols.append((column, 'date', 'start_date')) column = self.add_date_column(_('End Date'), 'expiration_date') cols.append((column, 'date', 'expiration_date')) self.set_sorts(self.store, cols) if is_owner_using_golden_ticket(): self.update_certificates_button.set_property("visible", False) self.connect_signals({ "on_update_certificates_button_clicked": parent._update_certificates_button_clicked, "on_register_button_clicked": parent._register_item_clicked, }) self._entries = []
def __init__(self, backend, parent): super(RepositoriesDialog, self).__init__() # Label wrapping on resize does not work very well on GTK2+ # so we resize on the fly. if gtk_compat.GTK_COMPAT_VERSION == "2": # Set the title to wrap and connect to size-allocate to # properly resize the label so that it takes up the most # space it can. self.description_text.set_line_wrap(True) self.description_text.connect( 'size-allocate', lambda label, size: label.set_size_request(size.width - 1, -1)) self.name_text.set_line_wrap(True) self.name_text.connect( 'size-allocate', lambda label, size: label.set_size_request(size.width - 1, -1)) self.baseurl_text.set_line_wrap(True) self.baseurl_text.connect( 'size-allocate', lambda label, size: label.set_size_request(size.width - 1, -1)) # Set up dynamic elements self.overrides_treeview = ga_Gtk.TreeView() # Add at-spi because we no longer create this widget from glade self.overrides_treeview.get_accessible().set_name("Repository View") self.no_repos_label, self.no_repos_label_viewport = widgets.get_scrollable_label( ) self.widget_switcher = widgets.WidgetSwitcher( self.scrolledwindow, self.no_repos_label_viewport, self.overrides_treeview) # We require the backend here so that we can always use its version # of Overrides which will guarantee that the CP UEPConnection is up # to date. # FIXME: We really shouldn't have to worry about our connection info # changing out from under us. self.backend = backend self.async_update = AsyncRepoOverridesUpdate(self.backend.overrides) self.identity = require(IDENTITY) self.ent_dir = require(ENT_DIR) self.connect_signals({ "on_dialog_delete_event": self._on_close, "on_close_button_clicked": self._on_close, "on_apply_button_clicked": self._on_apply_request, "on_reset_button_clicked": self._on_reset_repo }) self.overrides_store = MappedListStore({ "repo_id": str, "enabled": bool, "modified": bool, "modified-icon": ga_GdkPixbuf.Pixbuf, "name": str, "baseurl": str, "gpgcheck": bool, "gpgcheck_modified": bool, "repo_data": object, "override_data": object }) self.other_overrides = OverridesTable(self.other_overrides_view) # FIXME: think this needs get_style_context() and possible a # Gtk.StyleProvider for gtk3 # Change the background color of the no_repos_label_container to the same color # as the label's base color. The event container allows us to change the color. #label_base_color = self.no_repos_label.get_style_context().base[Gtk.StateType.NORMAL] #self.no_repos_label_viewport.modify_bg(Gtk.StateType.NORMAL, label_base_color) self.overrides_treeview.set_model(self.overrides_store) self.modified_icon = self.overrides_treeview.render_icon( ga_Gtk.STOCK_APPLY, ga_Gtk.IconSize.MENU) sortable_cols = [] enabled_col = CheckBoxColumn(_("Enabled"), self.overrides_store, 'enabled', self._on_enable_repo_toggle) self.overrides_treeview.append_column(enabled_col) gpgcheck_col = CheckBoxColumn(_("Gpgcheck"), self.overrides_store, 'gpgcheck', self._on_gpgcheck_toggle_changed) self.overrides_treeview.append_column(gpgcheck_col) repo_id_col = TextTreeViewColumn(self.overrides_store, _("Repository ID"), 'repo_id', expand=True) self.overrides_treeview.append_column(repo_id_col) sortable_cols.append((repo_id_col, 'text', 'repo_id')) modified_col = ga_Gtk.TreeViewColumn( _("Modified"), ga_Gtk.CellRendererPixbuf(), pixbuf=self.overrides_store['modified-icon']) self.overrides_treeview.append_column(modified_col) sortable_cols.append((modified_col, 'text', 'modified')) self.set_sorts(self.overrides_store, sortable_cols) self.overrides_treeview.get_selection().connect( 'changed', self._on_selection) self.overrides_treeview.set_rules_hint(True) # Progress bar self.pb = None self.timer = 0 self.parent = parent self.main_window.set_transient_for(parent)
def __init__(self, backend, parent_win, ent_dir, prod_dir): """ Create a new 'My Subscriptions' tab. """ super(MySubscriptionsTab, self).__init__() self.backend = backend self.identity = inj.require(inj.IDENTITY) self.parent_win = parent_win self.entitlement_dir = ent_dir self.product_dir = prod_dir self.sub_details = widgets.ContractSubDetailsWidget(prod_dir) self.async_bind = AsyncBind(self.backend.certlib) self.pooltype_cache = inj.require(inj.POOLTYPE_CACHE) # Progress bar self.pb = None self.timer = 0 # Put the details widget in the middle details = self.sub_details.get_widget() self.details_box.pack_start(details, True, True, 0) # Set up columns on the view text_renderer = ga_Gtk.CellRendererText() image_renderer = ga_Gtk.CellRendererPixbuf() column = ga_Gtk.TreeViewColumn(_('Subscription')) column.set_expand(True) column.pack_start(image_renderer, False) column.pack_start(text_renderer, False) column.add_attribute(image_renderer, 'pixbuf', self.store['image']) column.add_attribute(text_renderer, 'text', self.store['subscription']) column.add_attribute(text_renderer, 'cell-background', self.store['background']) column.add_attribute(image_renderer, 'cell-background', self.store['background']) column.set_sizing(ga_Gtk.TreeViewColumnSizing.AUTOSIZE) self.top_view.append_column(column) cols = [] cols.append((column, 'text', 'subscription')) progress_renderer = ga_Gtk.CellRendererProgress() products_column = ga_Gtk.TreeViewColumn( _("Installed Products"), progress_renderer, value=self.store['installed_value'], text=self.store['installed_text']) products_column.add_attribute(progress_renderer, 'cell-background', self.store['background']) self.empty_progress_renderer = ga_Gtk.CellRendererText() products_column.pack_end(self.empty_progress_renderer, True) products_column.set_cell_data_func(progress_renderer, self._update_progress_renderer) self.top_view.append_column(products_column) column = self.add_date_column(_("End Date"), 'expiration_date') cols.append((column, 'date', 'expiration_date')) column = self.add_text_column(_("Quantity"), 'quantity') cols.append((column, 'text', 'quantity')) self.set_sorts(self.store, cols) self.top_view.connect( "row_activated", widgets.expand_collapse_on_row_activated_callback) # Don't update the icon in the first run, we don't have real compliance data yet self.update_subscriptions(update_dbus=False) self.connect_signals( {'on_unsubscribe_button_clicked': self.unsubscribe_button_clicked})