def __init__(self, backend, parent): super(RepositoriesDialog, self).__init__('repositories.glade') # Set up dynamic elements self.overrides_treeview = 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.identity = require(IDENTITY) self.ent_dir = require(ENT_DIR) self.glade.signal_autoconnect({ "on_dialog_delete_event": self._on_close, "on_close_button_clicked": self._on_close, "on_reset_button_clicked": self._on_reset_repo, }) self.overrides_store = MappedListStore({ "repo_id": str, "enabled": bool, "modified": bool, "modified-icon": gtk.gdk.Pixbuf, "name": str, "baseurl": str, "gpgcheck": bool, "gpgcheck_modified": bool, "repo_data": object, "override_data": object }) self.other_overrides = OverridesTable(self.other_overrides_view) # 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.style.base[gtk.STATE_NORMAL] self.no_repos_label_viewport.modify_bg(gtk.STATE_NORMAL, label_base_color) self.overrides_treeview.set_model(self.overrides_store) self.modified_icon = self.overrides_treeview.render_icon(gtk.STOCK_APPLY, gtk.ICON_SIZE_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 = gtk.TreeViewColumn(_("Modified"), 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) self.main_window.set_transient_for(parent)
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): 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): super(RepositoriesDialog, self).__init__('repositories.glade') # Set up dynamic elements self.overrides_treeview = gtk.TreeView() 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.identity = require(IDENTITY) self.ent_dir = require(ENT_DIR) self.glade.signal_autoconnect({ "on_dialog_delete_event": self._on_close, "on_close_button_clicked": self._on_close, "on_reset_button_clicked": self._on_reset_repo, "on_gpgcheck_edit_button_clicked": self._on_gpgcheck_edit_button_clicked, "on_gpgcheck_remove_button_clicked": self._on_gpgcheck_remove_button_clicked, "on_gpgcheck_combo_box_changed": self._on_gpgcheck_combo_box_changed, }) self.overrides_store = MappedListStore({ "repo_id": str, "enabled": bool, "modified": bool, "modified-icon": gtk.gdk.Pixbuf, "name": str, "baseurl": str, "gpgcheck": bool, "gpgcheck_modified": bool, "repo_data": object, "override_data": object }) # 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.style.base[gtk.STATE_NORMAL] self.no_repos_label_viewport.modify_bg(gtk.STATE_NORMAL, label_base_color) # Gnome will hide all button icons by default (gnome setting), # so force the icons to show in this case as there is no button # text, just the icon. gpgcheck_edit_image = gtk.Image() gpgcheck_edit_image.set_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_BUTTON) self.gpgcheck_edit_button.set_image(gpgcheck_edit_image) self.gpgcheck_edit_button.get_image().show() gpgcheck_reset_image = gtk.Image() gpgcheck_reset_image.set_from_stock(gtk.STOCK_DELETE, gtk.ICON_SIZE_BUTTON) self.gpgcheck_remove_button.set_image(gpgcheck_reset_image) self.gpgcheck_remove_button.get_image().show() self.overrides_treeview.set_model(self.overrides_store) self.modified_icon = self.overrides_treeview.render_icon(gtk.STOCK_APPLY, gtk.ICON_SIZE_MENU) sortable_cols = [] enabled_col = CheckBoxColumn(_("Enabled"), self.overrides_store, 'enabled', self._on_enable_repo_toggle) self.overrides_treeview.append_column(enabled_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 = gtk.TreeViewColumn(_("Modified"), 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) self.gpgcheck_cb_model = gtk.ListStore(str, bool) self.gpgcheck_cb_model.append((_("Enabled"), True)) self.gpgcheck_cb_model.append((_("Disabled"), False)) gpgcheck_cell_renderer = gtk.CellRendererText() self.gpgcheck_combo_box.pack_start(gpgcheck_cell_renderer, True) self.gpgcheck_combo_box.add_attribute(gpgcheck_cell_renderer, "text", 0) self.gpgcheck_combo_box.set_model(self.gpgcheck_cb_model) self.gpgcheck_combo_box.set_active(0) self.main_window.set_transient_for(parent)
def __init__(self, backend, parent_win): super(AllSubscriptionsTab, self).__init__() # Set up dynamic elements self.no_subs_label, self.no_subs_label_viewport = widgets.get_scrollable_label() # Add at-spi because we no longer create this widget from glade self.top_view.get_accessible().set_name(_("All Subscriptions View")) self.widget_switcher = widgets.WidgetSwitcher(self.scrolledwindow, self.no_subs_label_viewport, self.top_view) self.widget_switcher.set_active(0) self.parent_win = parent_win self.backend = backend self.identity = require(IDENTITY) # Progress bar self.pb = None self.timer = 0 self.pool_stash = managerlib.PoolStash() self.async_bind = async_utils.AsyncBind(self.backend.certlib) today = datetime.date.today() self.date_picker = widgets.DatePicker(today) self.date_picker_hbox.add(self.date_picker) # Custom build of the subscription column. title_text_renderer = ga_Gtk.CellRendererText() title_text_renderer.set_property('xalign', 0.0) subscription_column = ga_Gtk.TreeViewColumn(_('Subscription'), title_text_renderer, markup=self.store['product_name_formatted']) subscription_column.set_expand(True) self.top_view.append_column(subscription_column) cols = [] cols.append((subscription_column, 'text', 'product_name_formatted')) machine_type_col = widgets.MachineTypeColumn(self.store['virt_only']) self.top_view.append_column(machine_type_col) cols.append((machine_type_col, 'text', 'virt_only')) column = self.add_text_column(_('Available'), 'available') cols.append((column, 'text', 'available')) # Set up the quantity column. quantity_column = widgets.QuantitySelectionColumn(_("Quantity"), self.store, self.store['quantity_to_consume'], self.store['multi-entitlement'], self.store['quantity_available'], self.store['quantity_increment']) self.top_view.append_column(quantity_column) self.set_sorts(self.store, cols) self.edit_quantity_label.set_label(quantity_column.get_column_legend_text()) # FIXME: Likely a correct way to do this now, so stub this out now # Ensure all cells are colored according the the store. #set_background_model_index(self.top_view, self.store['background']) # FIXME self.top_view.connect("row_activated", widgets.expand_collapse_on_row_activated_callback) # This option should be selected by default: self.sub_details = widgets.SubDetailsWidget(backend.product_dir) self.details_box.add(self.sub_details.get_widget()) self.contract_selection = None self.filters = Filters(show_compatible=True, show_no_overlapping=True) self.filter_dialog = FilterOptionsWindow(self.filters, self) self.update_applied_filters_label() self.connect_signals({ "on_search_button_clicked": self.search_button_clicked, "on_subscribe_button_clicked": self.subscribe_button_clicked, "on_filter_options_button_clicked": self.filter_options_button_clicked, }) # Nothing displayed initially: self.clear_pools()
def __init__(self, backend, parent_win): super(AllSubscriptionsTab, self).__init__() # Set up dynamic elements self.no_subs_label, self.no_subs_label_viewport = widgets.get_scrollable_label( ) # Add at-spi because we no longer create this widget from glade self.top_view.get_accessible().set_name(_("All Subscriptions View")) self.widget_switcher = widgets.WidgetSwitcher( self.scrolledwindow, self.no_subs_label_viewport, self.top_view) self.widget_switcher.set_active(0) self.parent_win = parent_win self.backend = backend self.identity = require(IDENTITY) # Progress bar self.pb = None self.timer = 0 self.pool_stash = managerlib.PoolStash() self.async_bind = async .AsyncBind(self.backend.certlib) today = datetime.date.today() self.date_picker = widgets.DatePicker(today) self.date_picker_hbox.add(self.date_picker) # Custom build of the subscription column. title_text_renderer = ga_Gtk.CellRendererText() title_text_renderer.set_property('xalign', 0.0) subscription_column = ga_Gtk.TreeViewColumn( _('Subscription'), title_text_renderer, markup=self.store['product_name_formatted']) subscription_column.set_expand(True) self.top_view.append_column(subscription_column) cols = [] cols.append((subscription_column, 'text', 'product_name_formatted')) machine_type_col = widgets.MachineTypeColumn(self.store['virt_only']) self.top_view.append_column(machine_type_col) cols.append((machine_type_col, 'text', 'virt_only')) column = self.add_text_column(_('Available'), 'available') cols.append((column, 'text', 'available')) # Set up the quantity column. quantity_column = widgets.QuantitySelectionColumn( _("Quantity"), self.store, self.store['quantity_to_consume'], self.store['multi-entitlement'], self.store['quantity_available'], self.store['quantity_increment']) self.top_view.append_column(quantity_column) self.set_sorts(self.store, cols) self.edit_quantity_label.set_label( quantity_column.get_column_legend_text()) # FIXME: Likely a correct way to do this now, so stub this out now # Ensure all cells are colored according the the store. #set_background_model_index(self.top_view, self.store['background']) # FIXME self.top_view.connect( "row_activated", widgets.expand_collapse_on_row_activated_callback) # This option should be selected by default: self.sub_details = widgets.SubDetailsWidget(backend.product_dir) self.details_box.add(self.sub_details.get_widget()) self.contract_selection = None self.filters = Filters(show_compatible=True, show_no_overlapping=True) self.filter_dialog = FilterOptionsWindow(self.filters, self) self.update_applied_filters_label() self.connect_signals({ "on_search_button_clicked": self.search_button_clicked, "on_subscribe_button_clicked": self.subscribe_button_clicked, "on_filter_options_button_clicked": self.filter_options_button_clicked, }) # Nothing displayed initially: self.clear_pools()