def __init__(self): ''' Constructor ''' cellRendererText = CellRendererText() treeViewColumn = TreeViewColumn() treeViewColumn.pack_start(cellRendererText) treeView = TreeView() treeView.append_column(treeViewColumn) scrolledWindow = ScrolledWindow() scrolledWindow.add(treeView) btnAdd_Alternative = Button() btnDel_Alternative = Button() hButtonBox = HButtonBox() hButtonBox.pack_start(btnAdd_Alternative) hButtonBox.pack_start(btnDel_Alternative) vBox = VBox() vBox.pack_start(scrolledWindow) vBox.pack_start(hButtonBox) self.add(vBox)
def __init__(self, bus): VBox.__init__(self) self.bus = bus logger.debug('Running...') self.label = Label('Looking for Presence Service...') self.errors = ListStore(str) errors_tree = TreeView(model=self.errors) errors_tree.insert_column_with_attributes(0, 'Log', CellRendererText(), text=0) scroller = ScrolledWindow() scroller.add(errors_tree) self.paned = VPaned() self.paned.pack1(scroller) self.pack_start(self.label, False, False) self.pack_end(self.paned) bus.watch_name_owner(PS_NAME, self.on_name_owner_change) self.ps_watcher = Label('-') self.paned.pack2(self.ps_watcher) self.show_all()
class warning_dialog(Dialog): def __init__(self, parent, pacs, icon): Dialog.__init__(self, _("Warning!"), parent, DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT, (STOCK_YES, RESPONSE_YES, STOCK_NO, RESPONSE_REJECT)) self.set_icon(pixbuf_new_from_file(icon)) self._setup_tree(pacs) self._setup_layout() def _setup_layout(self): self.set_default_size(-1,250) label = Label(_("This packages requires one of the packages you've selected for removal.\nDo you want to remove them all?")) label.show() scr = ScrolledWindow() scr.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) scr.add(self.tree) self.vbox.pack_start(label, False, False, 0) self.vbox.pack_start(scr, True, True, 0) self.vbox.show_all() return def _setup_tree(self, pacs): self.tree = TreeView() self.model = ListStore(str, str, str) self.tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id=0) self.tree.insert_column_with_attributes(-1, "", CellRendererText(), text=1) self.tree.insert_column_with_attributes(-1, "", CellRendererText(), text=2) for pac in pacs: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.model.append([image, pac.name, pac.inst_ver]) continue self.tree.set_model(self.model) self.tree.show_all() return
class upgrade_confirm_dialog(Dialog): def __init__(self, parent, to_upgrade, icon): Dialog.__init__(self, _("Confirm Upgrade"), parent, DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT, (STOCK_OK, RESPONSE_ACCEPT, STOCK_CANCEL, RESPONSE_REJECT)) self.set_icon(pixbuf_new_from_file(icon)) self._setup_tree(to_upgrade) self._setup_layout() def _setup_tree(self, pacs): self.model = ListStore(str, str, str) for pac in pacs: self.model.append(["yellow", pac.name, pac.version]) continue self.tree = TreeView() self.tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id = 0) self.tree.insert_column_with_attributes(-1, "Package", CellRendererText(), text = 1) self.tree.insert_column_with_attributes(-1, "Version", CellRendererText(), text = 2) self.tree.set_model(self.model) self.tree.show() def _setup_layout(self): self.label = Label(_("Are you sure yo want to upgrade those packages?\n")) self.label.show() self.set_default_size (300, 300) scr = ScrolledWindow() scr.set_policy("automatic", "automatic") scr.add(self.tree) scr.show() self.vbox.pack_start(self.label, False, False, 0) self.vbox.pack_start(scr, True, True, 0) def run(self): retcode = Dialog.run(self) self.destroy() if retcode == RESPONSE_ACCEPT: return True else: return False
def __init__(self, db_path, db_access_method, config_path, config, error_msg=None): self.config_path = config_path self.config = config load_glade_file_get_widgets_and_connect_signals( get_main_window_glade_file(), "bokeep_config_dialog", self, self) self.selection_change_lock = True self.state = BoKeepConfigGuiState( error_msg, self.__force_config_on_newly_created_plugin) self.books_tv = TreeView(self.state.book_liststore) self.books_tv.append_column( TreeViewColumn("Book", CellRendererText(), text=0 ) ) self.books_tv.get_selection().connect( "changed", self.on_book_selection_change) self.books_window.add(self.books_tv) self.books_tv.show() self.plugins_tv = TreeView(self.state.frontend_plugin_liststore) self.plugins_tv.append_column( TreeViewColumn("Plugin", CellRendererText(), text=0) ) crt = CellRendererToggle() crt.set_radio(False) self.plugins_tv.append_column( TreeViewColumn("Enabled", crt, active=1) ) self.plugins_window.add(self.plugins_tv) self.plugins_tv.show() self.plugin_directories_button.connect('clicked', self.__on_plugin_directories_button_click) self.__populate_possible_plugins() self.db_path_label.set_text(db_path) if db_path != None: self.do_action(DB_ENTRY_CHANGE, (db_path, db_access_method)) self.do_action(DB_PATH_CHANGE) if db_access_method == ZODB_CONFIG_FILESTORAGE: self.filestorage_radio.set_active(True) elif db_access_method == ZODB_CONFIG_ZCONFIG: self.zconfig_radio.set_active(True) if error_msg == None: error_msg = "" self.message_label.set_label(error_msg) self.set_sensitivities() self.selection_change_lock = False self.backend_entry_lock = False
def _setup_install_tree(self, queue): self.install_tree = TreeView() self.install_model = ListStore(str, str, str) self.install_tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id=0) self.install_tree.insert_column_with_attributes(-1, _("Package"), CellRendererText(), text=1) self.install_tree.insert_column_with_attributes(-1, _("Version"), CellRendererText(), text=2) for pac in queue: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.install_model.append([image, pac.name, pac.version]) continue self.install_tree.set_model(self.install_model) return
def _setup_tree(self, pacs): self.tree = TreeView() self.model = ListStore(str, str, str) self.tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id=0) self.tree.insert_column_with_attributes(-1, "", CellRendererText(), text=1) self.tree.insert_column_with_attributes(-1, "", CellRendererText(), text=2) for pac in pacs: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.model.append([image, pac.name, pac.inst_ver]) continue self.tree.set_model(self.model) self.tree.show_all() return
def __init__(self, queue): TreeView.__init__( self, PacViewModel(queue)) self.set_property( "enable-search", False) self.set_headers_clickable(True) pix = CellRendererPixbuf() column = TreeViewColumn( '', pix, stock_id=0) self.append_column( column) cell = CellRendererText() column = TreeViewColumn( 'Package', cell, text=1) self.append_column( column) cell = CellRendererText() column = TreeViewColumn( 'Version', cell, text=2) self.append_column( column)
def _setup_tree(self, pacs): self.model = ListStore(str, str, str) for pac in pacs: self.model.append(["yellow", pac.name, pac.version]) continue self.tree = TreeView() self.tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id=0) self.tree.insert_column_with_attributes(-1, "Package", CellRendererText(), text=1) self.tree.insert_column_with_attributes(-1, "Version", CellRendererText(), text=2) self.tree.set_model(self.model) self.tree.show()
def probar(): """ Test """ from gtk import TreeView from utils.ui import preparar_listview from random import randint, randrange from string import letters import datetime tv = TreeView() preparar_listview(tv, (("Cadena", "gobject.TYPE_STRING", False, True, True, None), ("Entero", "gobject.TYPE_INT", False, True, False, None), ("PUID", "gobject.TYPE_STRING", False, False, False, None))) for i in range(randint(10, 100)): tv.get_model().append(("".join([letters[randrange(len(letters))] for i in range(randint(5,11))]), randint(0, 1000), "")) titulo = "Test" fecha = datetime.date.today() nomarchivo = treeview2pdf(tv, titulo, fecha) if nomarchivo: abrir_pdf(nomarchivo)
def __init__(self): Window.__init__(self) self.model = ListStore(str, str) self.aboutWindow = None self.helper = Helper(None) self.set_title('Gnome Custom Shortcuts') self.set_icon_from_file(join(data_path, 'icon.svg')) self.set_border_width(5) self.set_size_request(400, 400) list = TreeView() list.append_column(TreeViewColumn('')) list.append_column(TreeViewColumn('Command')) list.append_column(TreeViewColumn('Shortcut')) closeButton = Button(None, STOCK_CLOSE) aboutButton = Button(None, STOCK_ABOUT) buttonsBox = HButtonBox() buttonsBox.pack_start(aboutButton, False, False, 0) buttonsBox.pack_start(Label(''), True, True, 0) buttonsBox.pack_start(closeButton, False, False, 0) box = VBox(False, 5) box.pack_start(list, True, True, 0) box.pack_start(buttonsBox, False, False, 0) self.connect('destroy', main_quit, None) closeButton.connect('clicked', main_quit, None) aboutButton.connect('clicked', self.show_about, None) self.add(box) self.show_all()
def __init__(self, bus, unique_name, log): VBox.__init__(self) self.bus = bus self.unique_name = unique_name self.proxy = bus.get_object(unique_name, PS_PATH) self.iface = dbus.Interface(self.proxy, PS_IFACE) self.log = log self.activities = None self.iface.connect_to_signal('ActivityAppeared', self._on_activity_appeared) self.iface.connect_to_signal('ActivityDisappeared', self._on_activity_disappeared) self.iface.GetActivities(reply_handler=self._on_get_activities_success, error_handler=self._on_get_activities_failure) self.buddies = None self.iface.connect_to_signal('BuddyAppeared', self._on_buddy_appeared) self.iface.connect_to_signal('BuddyDisappeared', self._on_buddy_disappeared) self.iface.GetBuddies(reply_handler=self._on_get_buddies_success, error_handler=self._on_get_buddies_failure) # keep this in sync with the ACT_COL_ constants self.activities_list_store = ListStore( str, # object path int, # weight (bold if new) bool, # strikethrough (dead) str, # ID str, # color str, # type str, # name str, # conn str, # channels str, # buddies ) self.pack_start(Label('Activities:'), False, False) self.activities_list = TreeView(self.activities_list_store) c = self.activities_list.insert_column_with_attributes( 0, 'Object path', CellRendererText(), text=ACT_COL_PATH, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_PATH) c = self.activities_list.insert_column_with_attributes( 1, 'ID', CellRendererText(), text=ACT_COL_ID, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_ID) c = self.activities_list.insert_column_with_attributes( 2, 'Color', CellRendererText(), text=ACT_COL_COLOR, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_COLOR) c = self.activities_list.insert_column_with_attributes( 3, 'Type', CellRendererText(), text=ACT_COL_TYPE, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_TYPE) c = self.activities_list.insert_column_with_attributes( 4, 'Name', CellRendererText(), text=ACT_COL_NAME, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_NAME) c = self.activities_list.insert_column_with_attributes( 5, 'Connection', CellRendererText(), text=ACT_COL_CONN, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_CONN) c = self.activities_list.insert_column_with_attributes( 6, 'Channels', CellRendererText(), text=ACT_COL_CHANNELS, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c = self.activities_list.insert_column_with_attributes( 7, 'Buddies', CellRendererText(), text=ACT_COL_BUDDIES, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) scroller = ScrolledWindow() scroller.add(self.activities_list) self.pack_start(scroller) # keep this in sync with the BUDDY_COL_ constants self.buddies_list_store = ListStore(str, int, bool, str, bool, str, str, str, str, str, str) self.pack_start(Label('Buddies:'), False, False) self.buddies_list = TreeView(self.buddies_list_store) c = self.buddies_list.insert_column_with_attributes( 0, 'Object path', CellRendererText(), text=BUDDY_COL_PATH, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_PATH) c = self.buddies_list.insert_column_with_attributes( 1, 'Pubkey', CellRendererText(), text=BUDDY_COL_KEY_ID, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_KEY_ID) c = self.buddies_list.insert_column_with_attributes( 2, 'Nick', CellRendererText(), text=BUDDY_COL_NICK, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_NICK) c = self.buddies_list.insert_column_with_attributes( 3, 'Owner', CellRendererToggle(), active=BUDDY_COL_OWNER) c = self.buddies_list.insert_column_with_attributes( 4, 'Color', CellRendererText(), text=BUDDY_COL_COLOR, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_OWNER) c = self.buddies_list.insert_column_with_attributes( 5, 'IPv4', CellRendererText(), text=BUDDY_COL_IP4, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_IP4) c = self.buddies_list.insert_column_with_attributes( 6, 'CurAct', CellRendererText(), text=BUDDY_COL_CUR_ACT, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_CUR_ACT) c = self.buddies_list.insert_column_with_attributes( 7, 'Activities', CellRendererText(), text=BUDDY_COL_ACTIVITIES, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_ACTIVITIES) c = self.buddies_list.insert_column_with_attributes( 8, 'Handles', CellRendererText(), text=BUDDY_COL_HANDLES, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_HANDLES) scroller = ScrolledWindow() scroller.add(self.buddies_list) self.pack_start(scroller) self.iface.connect_to_signal('ActivityInvitation', self._on_activity_invitation) self.iface.connect_to_signal('PrivateInvitation', self._on_private_invitation)
class PresenceServiceWatcher(VBox): def __init__(self, bus, unique_name, log): VBox.__init__(self) self.bus = bus self.unique_name = unique_name self.proxy = bus.get_object(unique_name, PS_PATH) self.iface = dbus.Interface(self.proxy, PS_IFACE) self.log = log self.activities = None self.iface.connect_to_signal('ActivityAppeared', self._on_activity_appeared) self.iface.connect_to_signal('ActivityDisappeared', self._on_activity_disappeared) self.iface.GetActivities(reply_handler=self._on_get_activities_success, error_handler=self._on_get_activities_failure) self.buddies = None self.iface.connect_to_signal('BuddyAppeared', self._on_buddy_appeared) self.iface.connect_to_signal('BuddyDisappeared', self._on_buddy_disappeared) self.iface.GetBuddies(reply_handler=self._on_get_buddies_success, error_handler=self._on_get_buddies_failure) # keep this in sync with the ACT_COL_ constants self.activities_list_store = ListStore( str, # object path int, # weight (bold if new) bool, # strikethrough (dead) str, # ID str, # color str, # type str, # name str, # conn str, # channels str, # buddies ) self.pack_start(Label('Activities:'), False, False) self.activities_list = TreeView(self.activities_list_store) c = self.activities_list.insert_column_with_attributes( 0, 'Object path', CellRendererText(), text=ACT_COL_PATH, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_PATH) c = self.activities_list.insert_column_with_attributes( 1, 'ID', CellRendererText(), text=ACT_COL_ID, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_ID) c = self.activities_list.insert_column_with_attributes( 2, 'Color', CellRendererText(), text=ACT_COL_COLOR, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_COLOR) c = self.activities_list.insert_column_with_attributes( 3, 'Type', CellRendererText(), text=ACT_COL_TYPE, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_TYPE) c = self.activities_list.insert_column_with_attributes( 4, 'Name', CellRendererText(), text=ACT_COL_NAME, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_NAME) c = self.activities_list.insert_column_with_attributes( 5, 'Connection', CellRendererText(), text=ACT_COL_CONN, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(ACT_COL_CONN) c = self.activities_list.insert_column_with_attributes( 6, 'Channels', CellRendererText(), text=ACT_COL_CHANNELS, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) c = self.activities_list.insert_column_with_attributes( 7, 'Buddies', CellRendererText(), text=ACT_COL_BUDDIES, weight=ACT_COL_WEIGHT, strikethrough=ACT_COL_STRIKE) c.set_resizable(True) scroller = ScrolledWindow() scroller.add(self.activities_list) self.pack_start(scroller) # keep this in sync with the BUDDY_COL_ constants self.buddies_list_store = ListStore(str, int, bool, str, bool, str, str, str, str, str, str) self.pack_start(Label('Buddies:'), False, False) self.buddies_list = TreeView(self.buddies_list_store) c = self.buddies_list.insert_column_with_attributes( 0, 'Object path', CellRendererText(), text=BUDDY_COL_PATH, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_PATH) c = self.buddies_list.insert_column_with_attributes( 1, 'Pubkey', CellRendererText(), text=BUDDY_COL_KEY_ID, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_KEY_ID) c = self.buddies_list.insert_column_with_attributes( 2, 'Nick', CellRendererText(), text=BUDDY_COL_NICK, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_NICK) c = self.buddies_list.insert_column_with_attributes( 3, 'Owner', CellRendererToggle(), active=BUDDY_COL_OWNER) c = self.buddies_list.insert_column_with_attributes( 4, 'Color', CellRendererText(), text=BUDDY_COL_COLOR, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_OWNER) c = self.buddies_list.insert_column_with_attributes( 5, 'IPv4', CellRendererText(), text=BUDDY_COL_IP4, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_IP4) c = self.buddies_list.insert_column_with_attributes( 6, 'CurAct', CellRendererText(), text=BUDDY_COL_CUR_ACT, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_CUR_ACT) c = self.buddies_list.insert_column_with_attributes( 7, 'Activities', CellRendererText(), text=BUDDY_COL_ACTIVITIES, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_ACTIVITIES) c = self.buddies_list.insert_column_with_attributes( 8, 'Handles', CellRendererText(), text=BUDDY_COL_HANDLES, weight=BUDDY_COL_WEIGHT, strikethrough=BUDDY_COL_STRIKE) c.set_resizable(True) c.set_sort_column_id(BUDDY_COL_HANDLES) scroller = ScrolledWindow() scroller.add(self.buddies_list) self.pack_start(scroller) self.iface.connect_to_signal('ActivityInvitation', self._on_activity_invitation) self.iface.connect_to_signal('PrivateInvitation', self._on_private_invitation) def _on_get_activities_success(self, paths): self.log('INFO: PS GetActivities() returned %r', paths) self.activities = {} for path in paths: self.activities[path] = ActivityWatcher(self, path) def _on_get_activities_failure(self, e): self.log('ERROR: PS GetActivities() failed with %s', e) def add_activity(self, act): path = act.object_path if path.startswith('/org/laptop/Sugar/Presence/Activities/'): path = '.../' + path[38:] return self.activities_list_store.append( (path, 700, False, act.id, act.color, act.type, act.name, act.conn, '?', '?')) def remove_activity(self, act): self.activities.pop(act.object_path, None) self.activities_list_store.remove(act.iter) def _on_activity_appeared(self, path): if self.activities is None: return self.log('INFO: PS emitted ActivityAppeared("%s")', path) self.activities[path] = ActivityWatcher(self, path) def _on_activity_disappeared(self, path): if self.activities is None: return self.log('INFO: PS emitted ActivityDisappeared("%s")', path) act = self.activities.get(path) if act is None: self.log( 'WARNING: Trying to remove activity "%s" which is ' 'already absent', path) else: # we don't remove the activity straight away, just cross it out act.disappear() def _on_activity_invitation(self, path): self.log('INFO: PS emitted ActivityInvitation("%s")', path) def _on_private_invitation(self, bus_name, conn, channel): self.log('INFO: PS emitted PrivateInvitation("%s", "%s", "%s")', bus_name, conn, channel) def _on_get_buddies_success(self, paths): self.log('INFO: PS GetBuddies() returned %r', paths) self.buddies = {} for path in paths: self.buddies[path] = BuddyWatcher(self, path) def _on_get_buddies_failure(self, e): self.log('ERROR: PS GetBuddies() failed with %s', e) def add_buddy(self, b): path = b.object_path if path.startswith('/org/laptop/Sugar/Presence/Buddies/'): path = '.../' + path[35:] return self.buddies_list_store.append( (path, 700, False, b.nick, b.owner, b.color, b.ipv4, b.cur_act, b.keyid, '?', '?')) def remove_buddy(self, b): self.buddies.pop(b.object_path, None) self.buddies_list_store.remove(b.iter) def _on_buddy_appeared(self, path): if self.buddies is None: return self.log('INFO: PS emitted BuddyAppeared("%s")', path) self.buddies[path] = BuddyWatcher(self, path) def _on_buddy_disappeared(self, path): if self.buddies is None: return self.log('INFO: PS emitted BuddyDisappeared("%s")', path) b = self.buddies.get(path) if b is None: self.log( 'ERROR: Trying to remove buddy "%s" which is already ' 'absent', path) else: # we don't remove the activity straight away, just cross it out b.disappear()
class confirm_dialog(Dialog): def __init__(self, parent, queues, icon): Dialog.__init__(self, _("Confirm"), parent, DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT, (STOCK_OK, RESPONSE_ACCEPT, STOCK_CANCEL, RESPONSE_REJECT)) self.set_icon(pixbuf_new_from_file(icon)) self._setup_trees(queues) self._setup_layout() def _setup_trees(self, queues): self._setup_install_tree(queues["add"]) self._setup_remove_tree (queues["remove"]) def _setup_install_tree(self, queue): self.install_tree = TreeView() self.install_model = ListStore(str, str, str) self.install_tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id=0) self.install_tree.insert_column_with_attributes(-1, _("Package"), CellRendererText(), text=1) self.install_tree.insert_column_with_attributes(-1, _("Version"), CellRendererText(), text=2) for pac in queue: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.install_model.append([image, pac.name, pac.version]) continue self.install_tree.set_model(self.install_model) return def _setup_remove_tree(self, queue): self.remove_tree = TreeView() self.remove_model = ListStore(str, str, str) self.remove_tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id=0) self.remove_tree.insert_column_with_attributes(-1, _("Package"), CellRendererText(), text=1) self.remove_tree.insert_column_with_attributes(-1, _("Version"), CellRendererText(), text=2) for pac in queue: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.remove_model.append([image, pac.name, pac.version]) continue self.remove_tree.set_model(self.remove_model) return def _setup_layout(self): hpaned = HPaned() label = Label(_("Are you sure you want to install/remove those packages?")) label.show() inst_frame = Frame(_("Packages to install")) rem_frame = Frame(_("Packages to remove")) inst_frame.add(self.install_tree) rem_frame.add(self.remove_tree) hpaned.add1(inst_frame) hpaned.add2(rem_frame) hpaned.show_all() self.vbox.pack_start(label, False, False, 0) self.vbox.pack_start(hpaned, True, True, 0) return def run(self): response = Dialog.run(self) self.destroy() if response == RESPONSE_ACCEPT: return True else: return False
def create_editable_type_defined_listview_and_model( field_list, new_row_func, parralell_list, change_register, readonly=False, insert_pre_hook=null_function, insert_post_hook=null_function, change_pre_hook=null_function, change_post_hook=null_function, del_pre_hook=null_function, del_post_hook=null_function): vbox = VBox() tv = TreeView() model = ListStore( * chain((display_fieldtype_transform(fieldtype) for fieldname, fieldtype in field_list), (store_fieldtype_transform(fieldtype) for fieldname, fieldtype in field_list) ) # chain ) # ListStore # it is important to do this fill of the liststore # with the existing items first prior to adding event handlers # (row-changed, row-inserted, row-deleted) that # look for changes and keep the two lists in sync for list_row in parralell_list: model.append( tuple(transform_list_row_into_twice_repeated_row_for_model( list_row, field_list) ) ) # append if not readonly: model.connect("row-changed", row_changed_handler, parralell_list, change_register, field_list, change_pre_hook, change_post_hook, ) model.connect("row-inserted", row_inserted_handler, parralell_list, change_register, insert_pre_hook, insert_post_hook ) model.connect("row-deleted", row_deleted_handler, parralell_list, change_register, del_pre_hook, del_post_hook) for i, (fieldname, fieldtype) in enumerate(field_list): def setup_edited_handler_for_renderer_to_original_model(cell_renderer): cell_renderer.connect( 'edited', cell_edited_update_original_modelhandler, model, i, field_list[i][FIELD_TYPE]) return cell_renderer if fieldtype == date: cell_renderer = \ setup_edited_handler_for_renderer_to_original_model( CellRendererDate() ) elif type(fieldtype) == tuple: cell_renderer = CellRendererCombo() cell_renderer.set_property("has-entry", fieldtype[COMBO_TYPE_HAS_ENTRY_FIELD]) combo_liststore = ListStore( str, store_fieldtype_transform(fieldtype) ) for combo_string, combo_value in \ combobox_list_strings_and_values_iteration(fieldtype): combo_liststore.append( (combo_string, combo_value) ) cell_renderer.set_property("model", combo_liststore) cell_renderer.set_property("text-column", 0) if fieldtype[COMBO_TYPE_HAS_ENTRY_FIELD]: setup_edited_handler_for_renderer_to_original_model( cell_renderer) else: lookup_dict = dict( combobox_list_strings_and_values_iteration(fieldtype) ) cell_renderer.connect( 'edited', combo_cell_edited_update_original_modelhandler, model, i, lookup_dict) elif type(fieldtype) == dict and fieldtype['type'] == file: cell_renderer = CellRendererFile( fieldtype['file_type'] if 'file_type' in fieldtype else FILE_CHOOSER_ACTION_OPEN ) setup_edited_handler_for_renderer_to_original_model(cell_renderer) else: cell_renderer = \ setup_edited_handler_for_renderer_to_original_model( CellRendererText() ) if not readonly: cell_renderer.set_property("editable", True) cell_renderer.set_property("editable-set", True) tvc = TreeViewColumn(fieldname, cell_renderer, text=i) tv.append_column(tvc) vbox.pack_start(tv) tv.set_model(model) hbox = HBox() buttons = [ pack_in_stock_but_and_ret(start_stock_button(code), hbox) for code in (STOCK_ADD, STOCK_DELETE) ] if readonly: for button in buttons: button.set_property("sensitive", False) else: buttons[0].connect( "clicked", editable_listview_add_button_clicked_handler, model, new_row_func, field_list ) buttons[1].connect( "clicked", editable_listview_del_button_clicked_handler, tv ) vbox.pack_start(hbox, expand=False) return model, tv, vbox
class upgrade_dialog(Window): def __init__(self, to_upgrade, icon): Window.__init__(self, WINDOW_TOPLEVEL) self.set_property("skip-taskbar-hint", True) self.set_property("modal", True) self.set_property("destroy-with-parent", True) self.set_position(WIN_POS_CENTER) self.set_default_size (300, 300) self.set_icon(pixbuf_new_from_file(icon)) self._setup_tree(to_upgrade) self._setup_layout() def _setup_layout(self): self.vbox = VBox(False, 0) self.vbox.show() self.terminal = terminal() self.terminal.connect("child-exited", lambda _: self.close_button.show()) self.expander = expander_new_with_mnemonic(_("_Terminal")) self.expander.set_expanded(False) self.expander.add(self.terminal) self.expander.show_all() self.close_button = Button(stock=STOCK_CLOSE) self.close_button.connect("clicked", lambda _: self.destroy()) scr = ScrolledWindow() scr.set_policy ("automatic", "automatic") scr.add (self.tree) scr.show() vpaned = VPaned() vpaned.add1(scr) vpaned.add2(self.expander) vpaned.set_position (260) vpaned.show() self.vbox.pack_start(vpaned, True, True, 0) self.vbox.pack_start(self.close_button, False, False, 0) self.add(self.vbox) return def _setup_tree(self, pacs): self.model = ListStore(str, str, str) for pac in pacs: self.model.append(["yellow", pac.name, pac.version]) continue self.tree = TreeView() self.tree.show() self.tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id = 0) self.tree.insert_column_with_attributes(-1, "Package", CellRendererText(), text = 1) self.tree.insert_column_with_attributes(-1, "Version", CellRendererText(), text = 2) self.tree.set_model(self.model) return def run(self): self.show() self.terminal.do_upgrade()
class BoKeepConfigDialog(object): """GUI for configuring BoKeep.""" config_path = None config = None def __init__(self, db_path, db_access_method, config_path, config, error_msg=None): self.config_path = config_path self.config = config load_glade_file_get_widgets_and_connect_signals( get_main_window_glade_file(), "bokeep_config_dialog", self, self) self.selection_change_lock = True self.state = BoKeepConfigGuiState( error_msg, self.__force_config_on_newly_created_plugin) self.books_tv = TreeView(self.state.book_liststore) self.books_tv.append_column( TreeViewColumn("Book", CellRendererText(), text=0 ) ) self.books_tv.get_selection().connect( "changed", self.on_book_selection_change) self.books_window.add(self.books_tv) self.books_tv.show() self.plugins_tv = TreeView(self.state.frontend_plugin_liststore) self.plugins_tv.append_column( TreeViewColumn("Plugin", CellRendererText(), text=0) ) crt = CellRendererToggle() crt.set_radio(False) self.plugins_tv.append_column( TreeViewColumn("Enabled", crt, active=1) ) self.plugins_window.add(self.plugins_tv) self.plugins_tv.show() self.plugin_directories_button.connect('clicked', self.__on_plugin_directories_button_click) self.__populate_possible_plugins() self.db_path_label.set_text(db_path) if db_path != None: self.do_action(DB_ENTRY_CHANGE, (db_path, db_access_method)) self.do_action(DB_PATH_CHANGE) if db_access_method == ZODB_CONFIG_FILESTORAGE: self.filestorage_radio.set_active(True) elif db_access_method == ZODB_CONFIG_ZCONFIG: self.zconfig_radio.set_active(True) if error_msg == None: error_msg = "" self.message_label.set_label(error_msg) self.set_sensitivities() self.selection_change_lock = False self.backend_entry_lock = False def __populate_possible_plugins(self): """Populates the GUI with the possible front and backend plugins.""" available_plugin_liststore = ListStore(str) for plugin_name in get_available_frontend_plugins(): available_plugin_liststore.append([plugin_name]) self.plugin_add_entry_combo.set_model(available_plugin_liststore) self.plugin_add_entry_combo.set_text_column(0) available_backend_plugin_liststore = ListStore(str) for backend_plugin_name in get_available_backend_plugins(): available_backend_plugin_liststore.append([backend_plugin_name]) self.backend_plugin_entry_combo.set_model(available_backend_plugin_liststore) self.backend_plugin_entry_combo.set_text_column(0) def do_action(self, action, arg=None): """Passes on an action to BoKeepConfigGuiState and gui is then updated after to reflect the effects of that action by examining where that state machine is at after the action. """ try: self.state.do_action(action, arg) except FrontendPluginImportError, err: backend_plugin_entry = self.backend_plugin_entry_combo.child backend_plugin_name = backend_plugin_entry.get_text() if backend_plugin_name in err.plugin_names: self.backend_plugin_entry_combo.child.set_text( self.state.data[BOOK].get_backend_plugin_name() ) err.plugin_names.remove(backend_plugin_name) frontend_plugins = {} for name, enabled in self.state.frontend_plugin_liststore: frontend_plugins[name] = (name, enabled) for err_plugin_name in err.plugin_names: del frontend_plugins[err_plugin_name] self.state.frontend_plugin_liststore.clear() for valid_plugin_name, enabled in frontend_plugins.values(): self.state.frontend_plugin_liststore.append((valid_plugin_name, enabled)) error_dialog = MessageDialog(self.bokeep_config_dialog, DIALOG_MODAL, MESSAGE_ERROR, BUTTONS_OK, str(err)) error_dialog.run() error_dialog.destroy() # raises last exception that had been caught, in above # except clause, err raise
def __on_plugin_directories_button_click(self, button): """Present a dialog to the user for selecting extra plugin directories and process the request.""" dia = Dialog('Plugin Directories', None, DIALOG_MODAL, (STOCK_OK, RESPONSE_OK, STOCK_CANCEL, RESPONSE_CANCEL ) ) dia.resize(500, 300) dia.vbox.set_spacing(8) # Setup the tree view of plugin directories. model = ListStore(str) # each row contains a single string tv = TreeView(model) cell = CellRendererText() column = TreeViewColumn('Directory', cell, text = 0) tv.append_column(column) dia.vbox.pack_start(tv) # Populate the tree view. plugin_directories = \ get_plugins_directories_from_config(self.config, self.config_path) for plugin_directory in plugin_directories: row = (plugin_directory,) model.append(row) modify_box = HBox(spacing = 8) # Setup the remove directory button. remove_button = Button('Remove') remove_button.set_sensitive(False) # no directory selected initially remove_button.connect('clicked', self.__on_remove, tv) modify_box.pack_end(remove_button, expand = False) tv.connect('cursor-changed', self.__on_select, remove_button) # Setup the add directory button. add_button = Button('Add') add_button.connect('clicked', self.__on_add, tv) modify_box.pack_end(add_button, expand = False) dia.vbox.pack_start(modify_box, expand = False) # Setup the "already included directories" label. included_label = Label('Plugins in the PYTHONPATH are already ' + 'available to BoKeep.') # Use a horizontal box to left-justify the label. For some reason, # the label's set_justification property doesn't work for me. label_box = HBox() label_box.pack_start(included_label, expand = False) dia.vbox.pack_start(label_box, expand = False) dia.show_all() dia_result = dia.run() if dia_result == RESPONSE_OK: # Remove the old plugin directories from the program's path. plugin_directories = \ get_plugins_directories_from_config(self.config, self.config_path) for plugin_directory in plugin_directories: path.remove(plugin_directory) # Get the new plugin directories from the dialog. plugin_directories = [] for row in model: plugin_directory = row[0] plugin_directories.append(plugin_directory) # Update the BoKeep PYTHONPATH so that new plugins can be loaded and # populate the list of possible new plugins. for plugin_directory in plugin_directories: path.append(plugin_directory) self.__populate_possible_plugins() # Save the new plugin directories in the configuration file. set_plugin_directories_in_config(self.config, self.config_path, plugin_directories) dia.destroy()
def __init__(self, objectives, new): Expander.__init__(self) self.connect("enter-notify-event", self.onEnterNotifyEvent) self.connect("leave-notify-event", self.onLeaveNotifyEvent) vBox = VBox() self.add(vBox) # Data model self.model = ListStore(str, float) # Title bar hBox = HBox() self.set_property("label-widget", hBox) self.title = Label() hBox.pack_start(self.title) # Alternatives treeView = TreeView(self.model) # treeView.set_headers_visible(False) vBox.pack_start(treeView) listStore_objectives = ListStore(str) for name in objectives: listStore_objectives.append((name, )) def combo_changed(_, path, text, model): model[path][0] = text cellRenderer = CellRendererCombo() cellRenderer.connect("edited", combo_changed, self.model) cellRenderer.set_property("text-column", 0) cellRenderer.set_property("editable", True) cellRenderer.set_property("has-entry", True) cellRenderer.set_property("model", listStore_objectives) treeViewColumn = TreeViewColumn("Alternative", cellRenderer, text=0) # treeViewColumn = TreeViewColumn(None,cellRenderer,text=0) treeView.append_column(treeViewColumn) def spin_changed(_, path, value, model): model[path][1] = float(value.replace(",", ".")) cellRenderer = CellRendererSpin() cellRenderer.connect("edited", spin_changed, self.model) cellRenderer.set_property("adjustment", Adjustment(1, 0, 100, 1, 10, 0)) cellRenderer.set_property("editable", True) cellRenderer.set_property("digits", 2) treeViewColumn = TreeViewColumn(None, cellRenderer, text=1) treeView.append_column(treeViewColumn) # Add/remove alternative button box # hButtonBox = HButtonBox() # vBox.pack_start(hButtonBox, False) # Add alternative button = Button("gtk-add") button.connect("clicked", self.on_btnAdd_Alternative_clicked) button.set_use_stock(True) # hButtonBox.pack_start(button) vBox.pack_start(button, False) # # Remove alternative # button = Button("gtk-remove") # button.connect("clicked",self.on_btnDel_Alternative_clicked) # button.set_use_stock(True) # hButtonBox.pack_start(button) # Expand the requeriment and add an alternative if it's new if new: self.set_expanded(True) self.model.append((None, 1.0)) # Show requeriment self.show_all() # Delete requeriment button (default is hidden) self.imgRemove = Image() self.imgRemove.connect("button-press-event", self.onDelRequeriment) self.imgRemove.set_from_stock("gtk-cancel", ICON_SIZE_MENU) hBox.pack_start(self.imgRemove)
class do_dialog(Window): def __init__(self, queues, icon): Window.__init__(self, WINDOW_TOPLEVEL) self.set_property("skip-taskbar-hint", True) self.set_property("destroy-with-parent", True) self.set_modal(True) self.connect("delete-event", self._stop_closing) self.set_position(WIN_POS_CENTER) self.set_icon(pixbuf_new_from_file(icon)) self._setup_trees(queues) self._setup_layout() self.queues = queues def _setup_trees(self, queues): self._setup_install_tree(queues["add"]) self._setup_remove_tree(queues["remove"]) def _setup_install_tree(self, add_queue): self.inst_model = ListStore(str, str, str) for pac in add_queue: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.inst_model.append([image, pac.name, pac.version]) continue self.inst_tree = TreeView() self.inst_tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id = 0) self.inst_tree.insert_column_with_attributes(-1, _("Package"), CellRendererText(), text = 1) self.inst_tree.insert_column_with_attributes(-1, _("Version"), CellRendererText(), text = 2) self.inst_tree.set_model(self.inst_model) def _setup_remove_tree(self, remove_queue): self.rem_model = ListStore(str, str, str) for pac in remove_queue: if pac.isold: image = "yellow" elif pac.installed: image = "green" else: image = "red" self.rem_model.append([image, pac.name, pac.inst_ver]) continue self.rem_tree = TreeView() self.rem_tree.insert_column_with_attributes(-1, "", CellRendererPixbuf(), stock_id = 0) self.rem_tree.insert_column_with_attributes(-1, _("Package"), CellRendererText(), text = 1) self.rem_tree.insert_column_with_attributes(-1, _("Installed Version"), CellRendererText(), text = 2) self.rem_tree.set_model(self.rem_model) def _set_size (self, widget, event, data=None): if self.expander.get_expanded(): self.size = self.get_size() self.expander.add(self.terminal) self.terminal.show() else: self.expander.remove(self.terminal) self.resize(self.size[0], self.size[1]) self.show_all() def _setup_layout(self): self.hpaned = HPaned() self.hpaned.add1(self.inst_tree) self.hpaned.add2(self.rem_tree) self.hpaned.show_all() self.close_button = Button(stock=STOCK_CLOSE) self.close_button.connect("clicked", lambda _: self.destroy()) self.terminal = terminal() self.terminal.connect("child-exited", lambda _: self.close_button.show()) self.expander = Expander(_("Terminal")) self.expander.connect("notify::expanded", self._set_size) self.expander.show() self.vbox = VBox(False, 0) self.vbox.show() self.vbox.pack_start(self.hpaned, False, False, 0) self.vbox.pack_start(self.expander, False, False, 0) self.vbox.pack_start(self.close_button, False, False, 0) self.add(self.vbox) def run(self): self.show() self.terminal.do(self.queues) return def _stop_closing(self, widget, event): self.stop_emission("delete-event") return True