def __init__(self, handler): """ constructor handler -- e3common.Handler.ActionsHandler """ gtk.Menu.__init__(self) self.handler = handler ContactsMenu = extension.get_default('menu contact') GroupsMenu = extension.get_default('menu group') AccountMenu = extension.get_default('menu account') self.contact = gtk.ImageMenuItem(_('_Contact')) self.contact.set_image(utils.safe_gtk_image_load(gui.theme.chat)) self.contact_menu = ContactsMenu(self.handler.contact_handler) self.contact.set_submenu(self.contact_menu) self.group = gtk.ImageMenuItem(_('_Group')) self.group.set_image(utils.safe_gtk_image_load(gui.theme.group_chat)) self.group_menu = GroupsMenu(self.handler.group_handler) self.group.set_submenu(self.group_menu) self.account = gtk.ImageMenuItem(_('_Account')) self.account.set_image(utils.safe_gtk_image_load(gui.theme.chat)) self.account_menu = AccountMenu(self.handler.my_account_handler) self.myaccount = gtk.ImageMenuItem(_('_Profile')) self.myaccount.set_image(utils.safe_gtk_image_load(gui.theme.chat)) self.myaccount.set_submenu(self.account_menu) self.append(self.contact) self.append(self.group) self.append(self.myaccount)
def __init__(self, handler, session): """ constructor handler -- e3common.Handler.ActionsHandler """ gtk.Menu.__init__(self) self.handler = handler ContactsMenu = extension.get_default("menu contact") AccountMenu = extension.get_default("menu account") self.contact = gtk.ImageMenuItem(_("_Contact")) self.contact.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) self.contact_menu = ContactsMenu(self.handler.contact_handler, session) self.contact.set_submenu(self.contact_menu) self.account = gtk.ImageMenuItem(_("_Account")) self.account.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) self.account_menu = AccountMenu(self.handler.my_account_handler) self.myaccount = gtk.ImageMenuItem(_("_Profile")) self.myaccount.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) self.myaccount.set_submenu(self.account_menu) self.append(self.contact) if session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING): GroupsMenu = extension.get_default("menu group") self.group = gtk.ImageMenuItem(_("_Group")) self.group.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.group_chat)) self.group_menu = GroupsMenu(self.handler.group_handler) self.group.set_submenu(self.group_menu) self.append(self.group) self.append(self.myaccount)
def __init__(self, handler, session): """ constructor handler -- e3common.Handler.ActionsHandler """ gtk.Menu.__init__(self) self.handler = handler ContactsMenu = extension.get_default('menu contact') GroupsMenu = extension.get_default('menu group') AccountMenu = extension.get_default('menu account') self.contact = gtk.ImageMenuItem(_('_Contact')) self.contact.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) self.contact_menu = ContactsMenu(self.handler.contact_handler, session) self.contact.set_submenu(self.contact_menu) self.group = gtk.ImageMenuItem(_('_Group')) self.group.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.group_chat)) self.group_menu = GroupsMenu(self.handler.group_handler, session) self.group.set_submenu(self.group_menu) self.account = gtk.ImageMenuItem(_('_Account')) self.account.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) self.account_menu = AccountMenu(self.handler.my_account_handler) self.myaccount = gtk.ImageMenuItem(_('_Profile')) self.myaccount.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) self.myaccount.set_submenu(self.account_menu) self.append(self.contact) self.append(self.group) self.append(self.myaccount)
def __init__(self, cb_on_close, height=410, width=250, posx=100, posy=100): gtk.Window.__init__(self) self.set_location(width, height, posx, posy) self.set_title("emesene") image_theme = gui.theme.image_theme try: gtk.window_set_default_icon_list( utils.safe_gtk_image_load(image_theme.logo16).get_pixbuf(), utils.safe_gtk_image_load(image_theme.logo32).get_pixbuf(), utils.safe_gtk_image_load(image_theme.logo48).get_pixbuf(), utils.safe_gtk_image_load(image_theme.logo96).get_pixbuf()) except: gtk.window_set_default_icon( utils.safe_gtk_image_load(image_theme.logo).get_pixbuf()) self.cb_on_close = cb_on_close self.cb_on_quit = cb_on_close self._state = 0 self.connect('delete-event', self._on_delete_event) self.connect('key-press-event', self._on_key_press) self.connect('window-state-event', self._on_window_state_event) self.content = None self.content_type = 'empty'
def __init__(self, session, members): """constructor""" gtk.HBox.__init__(self) self.set_border_width(2) SmileyLabel = extension.get_default("smiley label") self._information = SmileyLabel() eventBox = gtk.EventBox() eventBox.set_visible_window(False) eventBox.add(self._information) eventBox.connect("button-press-event", self.on_clicked) self.pack_start(eventBox, True, True) self.session = session self.members = members self.menu = gtk.Menu() copynick = gtk.ImageMenuItem(_("Copy nick")) copynick.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.user)) copypm = gtk.ImageMenuItem(_("Copy personal message")) copypm.set_image(gtk.image_new_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_MENU)) copymail = gtk.ImageMenuItem(_("Copy mail")) copymail.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.email)) self.menu.append(copynick) self.menu.append(copypm) self.menu.append(copymail) copynick.connect("activate", self.copy_nick) copypm.connect("activate", self.copy_pm) copymail.connect("activate", self.copy_mail) copynick.show() copypm.show() copymail.show()
def __init__(self, handler, session): """ constructor handler -- e3common.Handler.ActionsHandler """ gtk.Menu.__init__(self) ContactsMenu = extension.get_default('menu contact') AccountMenu = extension.get_default('menu account') contact = gtk.ImageMenuItem(_('_Contact')) contact.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) contact_menu = ContactsMenu(handler.contact_handler, session) contact.set_submenu(contact_menu) account = gtk.ImageMenuItem(_('_Account')) account.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) account_menu = AccountMenu(handler.my_account_handler) myaccount = gtk.ImageMenuItem(_('_Profile')) myaccount.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.chat)) myaccount.set_submenu(account_menu) self.append(contact) if session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING): GroupsMenu = extension.get_default('menu group') group = gtk.ImageMenuItem(_('_Group')) group.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.group_chat)) group_menu = GroupsMenu(handler.group_handler) group.set_submenu(group_menu) self.append(group) self.append(myaccount)
def __init__(self, handler): """ constructor handler -- an instance of e3common.Handler.ConversationToolbarHandler """ gtk.Toolbar.__init__(self) self.set_style(gtk.TOOLBAR_ICONS) self.handler = handler self.font = gtk.ToolButton(gtk.STOCK_SELECT_FONT) self.font.connect('clicked', lambda *args: self.handler.on_font_selected()) self.color = gtk.ToolButton(gtk.STOCK_SELECT_COLOR) self.color.connect('clicked', lambda *args: self.handler.on_color_selected()) self.emotes = gtk.ToolButton( utils.safe_gtk_image_load(gui.theme.emote_to_path(':D', True)), 'Emotes') self.emotes.connect('clicked', lambda *args: self.handler.on_emotes_selected()) self.nudge = gtk.ToolButton( utils.safe_gtk_image_load(gui.theme.emote_to_path(':S', True)), 'Nudge') self.nudge.connect( 'clicked', lambda *args: self.handler.on_notify_atention_selected()) self.invite = gtk.ToolButton(gtk.STOCK_ADD) self.invite.connect('clicked', lambda *args: self.handler.on_invite_selected()) self.clean = gtk.ToolButton(gtk.STOCK_CLEAR) self.clean.connect('clicked', lambda *args: self.handler.on_clean_selected()) self.invite_file_transfer = gtk.ToolButton(gtk.STOCK_GO_UP) self.invite_file_transfer.set_label(_('Send File')) self.invite_file_transfer.connect( 'clicked', lambda *args: self.handler.on_invite_file_trasnfer_selected()) self.add(self.font) self.add(self.color) self.add(gtk.SeparatorToolItem()) self.add(self.emotes) self.add(self.nudge) self.add(gtk.SeparatorToolItem()) self.add(self.invite) self.add(self.clean) self.add(self.invite_file_transfer)
def __init__(self, handler): """ constructor handler -- an instance of e3common.Handler.ConversationToolbarHandler """ gtk.Toolbar.__init__(self) self.set_style(gtk.TOOLBAR_ICONS) self.handler = handler self.font = gtk.ToolButton(gtk.STOCK_SELECT_FONT) self.font.connect('clicked', lambda *args: self.handler.on_font_selected()) self.color = gtk.ToolButton(gtk.STOCK_SELECT_COLOR) self.color.connect('clicked', lambda *args: self.handler.on_color_selected()) self.emotes = gtk.ToolButton( utils.safe_gtk_image_load(gui.theme.emote_to_path(':D', True)), 'Emotes') self.emotes.connect('clicked', lambda *args: self.handler.on_emotes_selected()) self.nudge = gtk.ToolButton( utils.safe_gtk_image_load(gui.theme.emote_to_path(':S', True)), 'Nudge') self.nudge.connect('clicked', lambda *args: self.handler.on_notify_attention_selected()) self.invite = gtk.ToolButton(gtk.STOCK_ADD) self.invite.connect('clicked', lambda *args: self.handler.on_invite_selected()) self.clean = gtk.ToolButton(gtk.STOCK_CLEAR) self.clean.connect('clicked', lambda *args: self.handler.on_clean_selected()) self.invite_file_transfer = gtk.ToolButton(gtk.STOCK_GO_UP) self.invite_file_transfer.set_label(_('Send File')) self.invite_file_transfer.connect('clicked', lambda *args: self.handler.on_invite_file_transfer_selected()) self.add(self.font) self.add(self.color) self.add(gtk.SeparatorToolItem()) self.add(self.emotes) self.add(self.nudge) self.add(gtk.SeparatorToolItem()) self.add(self.invite) self.add(self.clean) self.add(self.invite_file_transfer)
def new_window(cls, title, response_cb=None, *args): """build a window with the default values and connect the common signals, return the window""" window = gtk.Window() window.set_title(title) window.set_role("dialog") window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) window.set_default_size(150, 100) window.set_position(gtk.WIN_POS_CENTER) window.set_border_width(8) window.set_icon(utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) vbox = gtk.VBox(spacing=4) hbox = gtk.HBox(spacing=4) bbox = gtk.HButtonBox() bbox.set_spacing(4) bbox.set_layout(gtk.BUTTONBOX_END) vbox.pack_start(hbox, True, True) vbox.pack_start(bbox, False) window.add(vbox) setattr(window, "vbox", vbox) setattr(window, "hbox", hbox) setattr(window, "bbox", bbox) args = list(args) args.insert(0, stock.CLOSE) window.connect("delete-event", cls.close_cb, window, response_cb, *args) vbox.show_all() return window
def __init__(self, handler, main_window=None): """ constructor handler -- a e3common.Handler.TrayIconHandler object """ gtk.Menu.__init__(self) self.handler = handler StatusMenu = extension.get_default("menu status") self.status = gtk.ImageMenuItem(_("Status")) self.status.set_image(gtk.image_new_from_stock(gtk.STOCK_CONVERT, gtk.ICON_SIZE_MENU)) self.status_menu = StatusMenu(handler.on_status_selected) self.status.set_submenu(self.status_menu) self.list = gtk.ImageMenuItem(_("Contacts")) self.list.set_image(utils.safe_gtk_image_load(gui.theme.get_image_theme().chat)) self.list_contacts = ContactsMenu(handler, main_window) self.list.set_submenu(self.list_contacts) self.hide_show_mainwindow = gtk.MenuItem(_("Hide/Show emesene")) self.hide_show_mainwindow.connect("activate", lambda *args: self.handler.on_hide_show_mainwindow(main_window)) self.disconnect = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT) self.disconnect.connect("activate", lambda *args: self.handler.on_disconnect_selected()) self.quit = gtk.ImageMenuItem(gtk.STOCK_QUIT) self.quit.connect("activate", lambda *args: self.handler.on_quit_selected()) self.append(self.hide_show_mainwindow) self.append(self.status) self.append(self.list) self.append(self.disconnect) self.append(gtk.SeparatorMenuItem()) self.append(self.quit)
def __init__(self, session): '''constructor''' gtk.VBox.__init__(self) self.session = session self._enabled = True self.image = utils.safe_gtk_image_load(gui.theme.user) self.nick = TextField.TextField(session.contacts.me.display_name, '', False) self.status = StatusButton.StatusButton(session) self.status.set_status(session.contacts.me.status) self.search = gtk.ToggleButton() self.search.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_MENU)) self.search.set_relief(gtk.RELIEF_NONE) self.message = TextField.TextField(session.contacts.me.message, '<span style="italic"><Click here to set message></span>', True) self.toolbar = gtk.HBox() hbox = gtk.HBox() hbox.pack_start(self.image, False) vbox = gtk.VBox() nick_hbox = gtk.HBox() nick_hbox.pack_start(self.nick, True, True) nick_hbox.pack_start(self.search, False) vbox.pack_start(nick_hbox, False) message_hbox = gtk.HBox() message_hbox.pack_start(self.message, True, True) message_hbox.pack_start(self.status, False) vbox.pack_start(message_hbox, False) hbox.pack_start(vbox, True, True) self.pack_start(hbox, True, True) self.pack_start(self.toolbar, False) hbox.show() nick_hbox.show() message_hbox.show() vbox.show() session.signals.message_change_succeed.subscribe( self.on_message_change_succeed) session.signals.status_change_succeed.subscribe( self.on_status_change_succeed) session.signals.contact_list_ready.subscribe( self.on_contact_list_ready) session.signals.picture_change_succeed.subscribe( self.on_picture_change_succeed) session.signals.profile_get_succeed.subscribe( self.on_profile_update_succeed) session.signals.profile_set_succeed.subscribe( self.on_profile_update_succeed)
def on_picture_change_succeed(self, account, path): '''callback called when the picture of an account is changed''' avatar_size = self.session.config.get_or_set('i_conv_avatar_size', 64) image = utils.safe_gtk_image_load(path, (avatar_size, avatar_size)) # out account? if account == self.session.account.account: self.info.last = image elif account in self.members: self.info.first = image
def _fill_emote_table(self, columns): """fill the gtk.Table with the emoticons""" emotes = [] count = 0 column = 0 row = 0 for shortcut, name in gui.theme.EMOTES.iteritems(): if name in emotes: continue column = count % columns row = count / columns button = gtk.Button() path = gui.theme.emote_to_path(shortcut, True) if path is None: log.debug(shortcut + " has no path") continue button.set_image(utils.safe_gtk_image_load(path)) button.connect("clicked", self._on_emote_selected, shortcut) self.table.attach(button, column, column + 1, row, row + 1) count += 1 emcache = self.caches.get_emoticon_cache(self.session.account.account) for shortcut, hash_ in emcache.list(): column = count % columns row = count / columns button = gtk.Button() path = os.path.join(emcache.path, hash_) button.set_image(utils.safe_gtk_image_load(path)) button.connect("clicked", self._on_emote_selected, shortcut) self.table.attach(button, column, column + 1, row, row + 1) count += 1 button = gtk.Button("Add emoticon") button.connect("clicked", self._on_add_custom_emote_selected) self.table.attach(button, column, column + 1, row, row + 1)
def __init__(self, cb_on_close, height=410, width=250, posx=100, posy=100): gtk.Window.__init__(self) self.box = gtk.HPaned() self.box.set_can_focus(False) # HACK! a bunch of properties/methods accessed by the outside self.box.add_accel_group = self.add_accel_group self.box.set_title = self.set_title self.box.set_icon = self.set_icon self.box.set_urgency_hint = self.set_urgency_hint self.box.present = self.present self.box.is_active = self.is_active self.box.get_dimensions = self.get_dimensions self.box.is_maximized = self.is_maximized self._content_main = None self._content_conv = None self.set_location(width, height, posx, posy) self.set_title("emesene") image_theme = gui.theme.image_theme try: gtk.window_set_default_icon_list( utils.safe_gtk_image_load(image_theme.logo16).get_pixbuf(), utils.safe_gtk_image_load(image_theme.logo32).get_pixbuf(), utils.safe_gtk_image_load(image_theme.logo48).get_pixbuf(), utils.safe_gtk_image_load(image_theme.logo96).get_pixbuf()) except: gtk.window_set_default_icon( utils.safe_gtk_image_load(image_theme.logo).get_pixbuf()) self.cb_on_close = cb_on_close self.cb_on_close_conv = cb_on_close self.cb_on_quit = cb_on_close self._state = 0 self.accel_group = None self.add(self.box) self.connect('delete-event', self._on_delete_event) self.connect('window-state-event', self._on_window_state_event)
def __init__(self, session, callback): """ constructor """ gtk.Window.__init__(self) self.set_border_width(1) self.set_icon(utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) self.set_title(_('Invite friend')) self.set_default_size(300, 250) self.session = session self.callback = callback ContactList = extension.get_default('contact list') self.contact_list = ContactList(session) self.contact_list.nick_template = \ '%DISPLAY_NAME%\n<span foreground="#AAAAAA" size="small">' \ '%ACCOUNT%</span>' self.contact_list.order_by_group = False self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_position(gtk.WIN_POS_CENTER) vbox = gtk.VBox() vbox.set_spacing(1) bbox = gtk.HButtonBox() bbox.set_spacing(1) bbox.set_layout(gtk.BUTTONBOX_END) badd = gtk.Button(stock=gtk.STOCK_ADD) bclose = gtk.Button(stock=gtk.STOCK_CLOSE) search = gtk.Entry() scroll = gtk.ScrolledWindow() scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scroll.set_shadow_type(gtk.SHADOW_IN) scroll.set_border_width(1) scroll.add(self.contact_list) bbox.pack_start(bclose) bbox.pack_start(badd) vbox.pack_start(scroll, True, True) vbox.pack_start(search, False) vbox.pack_start(bbox, False) self.add(vbox) vbox.show_all() badd.connect('clicked', self._on_add_clicked) bclose.connect('clicked', lambda *args: self.hide()) search.connect('changed', self._on_search_changed) self.connect('delete-event', lambda *args: self.hide()) self.contact_list.contact_selected.subscribe(self._on_contact_selected) self.contact_list.fill()
def __init__(self, handler, session): """ constructor handler -- e3common.Handler.ActionsHandler """ gtk.Menu.__init__(self) ContactsMenu = extension.get_default('menu contact') AccountMenu = extension.get_default('menu account') contact = gtk.ImageMenuItem(_('_Contact')) contact.set_image(utils.safe_gtk_image_load( gui.theme.image_theme.chat)) contact_menu = ContactsMenu(handler.contact_handler, session) contact.set_submenu(contact_menu) account = gtk.ImageMenuItem(_('_Account')) account.set_image(utils.safe_gtk_image_load( gui.theme.image_theme.chat)) account_menu = AccountMenu(handler.my_account_handler) myaccount = gtk.ImageMenuItem(_('_Profile')) myaccount.set_image( utils.safe_gtk_image_load(gui.theme.image_theme.chat)) myaccount.set_submenu(account_menu) self.append(contact) if session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING): GroupsMenu = extension.get_default('menu group') group = gtk.ImageMenuItem(_('_Group')) group.set_image( utils.safe_gtk_image_load(gui.theme.image_theme.group_chat)) group_menu = GroupsMenu(handler.group_handler) group.set_submenu(group_menu) self.append(group) self.append(myaccount)
def __init__(self, session, members): '''constructor''' gtk.HBox.__init__(self) self.set_border_width(2) SmileyLabel = extension.get_default('smiley label') self._information = SmileyLabel() eventBox = gtk.EventBox() eventBox.set_visible_window(False) eventBox.add(self._information) eventBox.connect('button-press-event', self.on_clicked) self.pack_start(eventBox, True, True) self.session = session self.members = members self.menu = gtk.Menu() copynick = gtk.ImageMenuItem(_('Copy nick')) copynick.set_image( utils.safe_gtk_image_load(gui.theme.image_theme.user)) copypm = gtk.ImageMenuItem(_('Copy personal message')) copypm.set_image( gtk.image_new_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_MENU)) copymail = gtk.ImageMenuItem(_('Copy mail')) copymail.set_image( utils.safe_gtk_image_load(gui.theme.image_theme.email)) self.menu.append(copynick) self.menu.append(copypm) self.menu.append(copymail) copynick.connect('activate', self.copy_nick) copypm.connect('activate', self.copy_pm) copymail.connect('activate', self.copy_mail) copynick.show() copypm.show() copymail.show()
def __init__(self, session): gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) self.set_default_size(500, 300) self.set_title('Plugins') self.set_position(gtk.WIN_POS_CENTER_ALWAYS) self.session = session if utils.file_readable(gui.theme.logo): self.set_icon( utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) self.main_vbox = PluginMainVBox(session) self.add(self.main_vbox) self.show_all()
def __init__(self, session): gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) self.set_default_size(500, 300) self.set_title(_('Plugins')) self.set_position(gtk.WIN_POS_CENTER_ALWAYS) self.session = session if utils.file_readable(gui.theme.logo): self.set_icon( utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) self.main_vbox = PluginMainVBox(session) self.add(self.main_vbox) self.show_all()
def __init__(self, on_status_selected): """ constructor on_status_selected -- a callback that receives the status when changed """ gtk.Menu.__init__(self) self.on_status_selected = on_status_selected self.status = {} for stat in e3.status.ORDERED: temp_item = gtk.ImageMenuItem(e3.status.STATUS[stat]) temp_item.set_image(utils.safe_gtk_image_load(gui.theme.status_icons[stat])) temp_item.connect("activate", self._on_activate, stat) self.status[stat] = temp_item self.append(temp_item)
def __init__(self, session): gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) self.set_default_size(500, 300) self.set_title('Plugins') self.set_position(gtk.WIN_POS_CENTER_ALWAYS) self.session = session if utils.file_readable(gui.theme.logo): self.set_icon( utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) main_vbox = gtk.VBox() main_vbox.set_border_width(2) self.plugin_list_store = PluginListStore() self.plugin_list_store.update_list() self.plugin_list_view = PluginListView(self.plugin_list_store) scroll = gtk.ScrolledWindow() scroll.add(self.plugin_list_view) scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scroll.set_shadow_type(gtk.SHADOW_IN) scroll.set_border_width(1) button_hbox = gtk.HButtonBox() button_hbox.set_layout(gtk.BUTTONBOX_END) button_hbox.set_border_width(2) button_start = gtk.Button(stock=gtk.STOCK_EXECUTE) button_start.connect('clicked', self.on_start) button_stop = gtk.Button(stock=gtk.STOCK_STOP) button_stop.connect('clicked', self.on_stop) button_config = gtk.Button(stock=gtk.STOCK_PREFERENCES) button_config.connect('clicked', self.on_config) main_vbox.pack_start(scroll) button_hbox.pack_start(button_config, fill=False) button_hbox.pack_start(button_start, fill=False) button_hbox.pack_start(button_stop, fill=False) main_vbox.pack_start(button_hbox, False) self.add(main_vbox) self.show_all()
def __init__(self, on_status_selected): """ constructor on_status_selected -- a callback that receives the status when changed """ gtk.Menu.__init__(self) self.on_status_selected = on_status_selected self.status = {} for stat in e3.status.ORDERED: temp_item = gtk.ImageMenuItem(e3.status.STATUS[stat]) temp_item.set_image( utils.safe_gtk_image_load(gui.theme.status_icons[stat])) temp_item.connect('activate', self._on_activate, stat) self.status[stat] = temp_item self.append(temp_item)
def __init__(self, session, account): '''constructor''' gui.base.ContactInformation.__init__(self, session, account) gtk.Window.__init__(self) self.set_default_size(640, 350) self.set_title(_('Contact information (%s)') % (account,)) self.set_role("dialog") self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_icon(utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) self.tabs = gtk.Notebook() self._create_tabs() self.tabs.show_all() self.add(self.tabs) self.fill_all()
def __init__(self, session): """constructor """ gtk.Window.__init__(self) self.set_title("Preferences") self.session = session self.set_default_size(320, 260) self.set_role("preferences") self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) if utils.file_readable(gui.theme.logo): self.set_icon( utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) self.box = gtk.VBox() self.box.set_border_width(4) self.tabs = gtk.Notebook() self.interface = Interface(session) self.sound = Sound(session) self.notification = Notification(session) self.theme = Theme(session) self.extension = Extension(session) self.buttons = gtk.HButtonBox() self.buttons.set_border_width(2) self.buttons.set_layout(gtk.BUTTONBOX_END) self.close = gtk.Button(stock=gtk.STOCK_CLOSE) self.close.connect('clicked', lambda *args: self.hide()) self.buttons.pack_start(self.close) self.tabs.append_page(self.interface, gtk.Label('Interface')) self.tabs.append_page(self.sound, gtk.Label('Sounds')) self.tabs.append_page(self.notification, gtk.Label('Notifications')) self.tabs.append_page(self.theme, gtk.Label('Themes')) self.tabs.append_page(self.extension, gtk.Label('Extensions')) self.box.pack_start(self.tabs, True, True) self.box.pack_start(self.buttons, False) self.add(self.box) self.box.show_all()
def parse_emotes(self): """ parse the emoticons in the widget and replace them with images """ if not self.changed: return True self.changed = False emote_theme = gui.theme.get_emote_theme() for code in emote_theme.get_emotes(): start = self._buffer.get_start_iter() path = emote_theme.emote_to_path(code, True) result = start.forward_search(code, gtk.TEXT_SEARCH_VISIBLE_ONLY) if result is None: continue while result is not None: position, end = result mark_begin = self._buffer.create_mark(None, start, False) mark_end = self._buffer.create_mark(None, end, False) image = utils.safe_gtk_image_load(path) image.set_tooltip_text(code) image.show() self._buffer.delete(position, end) pos = self._buffer.get_iter_at_mark(mark_end) anchor = self._buffer.create_child_anchor(pos) self._textbox.add_child_at_anchor(image, anchor) self.widgets[anchor] = image start = self._buffer.get_iter_at_mark(mark_end) result = start.forward_search(code, gtk.TEXT_SEARCH_VISIBLE_ONLY) self._buffer.delete_mark(mark_begin) self._buffer.delete_mark(mark_end) return True
def parse_emotes(self): """ parse the emoticons in the widget and replace them with images """ if not self.changed: return True self.changed = False for code in gui.Theme.EMOTES: start = self._buffer.get_start_iter() path = gui.theme.emote_to_path(code, True) result = start.forward_search(code, gtk.TEXT_SEARCH_VISIBLE_ONLY) if result is None: continue while result is not None: position, end = result mark_begin = self._buffer.create_mark(None, start, False) mark_end = self._buffer.create_mark(None, end, False) image = utils.safe_gtk_image_load(path) image.set_tooltip_text(code) image.show() self._buffer.delete(position, end) pos = self._buffer.get_iter_at_mark(mark_end) anchor = self._buffer.create_child_anchor(pos) self._textbox.add_child_at_anchor(image, anchor) self.widgets[anchor] = image start = self._buffer.get_iter_at_mark(mark_end) result = start.forward_search(code, gtk.TEXT_SEARCH_VISIBLE_ONLY) self._buffer.delete_mark(mark_begin) self._buffer.delete_mark(mark_end) return True
def parse_emotes(self): """ parse the emoticons in the widget and replace them with images """ if not self.changed: return True self.changed = False emos = [] for code in gui.Theme.EMOTES: start = self._buffer.get_start_iter() path = gui.theme.emote_to_path(code, True) result = start.forward_search(code, gtk.TEXT_SEARCH_VISIBLE_ONLY) if result is None: continue while result: position, end = result image = utils.safe_gtk_image_load(path) image.show() self._buffer.apply_tag(self.invisible_tag, position, end) mark_position = self._buffer.create_mark(None, position) mark_end = self._buffer.create_mark(None, end) emos.append((image, position)) start = end result = start.forward_search(code, gtk.TEXT_SEARCH_VISIBLE_ONLY) for image, position in emos: anchor = self._buffer.create_child_anchor(position) self._textbox.add_child_at_anchor(image, anchor) return True
def _fill_emote_table(self, columns): """fill the gtk.Table with the emoticons""" emotes = [] count = 0 for shortcut, name in gui.theme.EMOTES.iteritems(): if name in emotes: continue column = count % columns row = count / columns button = gtk.Button() path = gui.theme.emote_to_path(shortcut, True) if path is None: log.debug(shortcut + " has no path") continue button.set_image(utils.safe_gtk_image_load(path)) button.connect("clicked", self._on_emote_selected, shortcut) self.table.attach(button, column, column + 1, row, row + 1) count += 1
def _fill_emote_table(self, columns): '''fill the gtk.Table with the emoticons''' emotes = [] count = 0 for shortcut, name in gui.theme.EMOTES.iteritems(): if name in emotes: continue column = count % columns row = count / columns button = gtk.Button() path = gui.theme.emote_to_path(shortcut, True) if path is None: log.debug(shortcut + ' has no path') continue button.set_image(utils.safe_gtk_image_load(path)) button.connect('clicked', self._on_emote_selected, shortcut) self.table.attach(button, column, column + 1, row, row + 1) count += 1
def set_status(self, stat): '''load an image representing a status and store it on cache''' current_status = -1 if self.session: current_status = self.session.account.status if stat not in self.cache_imgs: gtk_img = utils.safe_gtk_image_load(\ gui.theme.get_image_theme().status_icons[stat]) self.cache_imgs[stat] = gtk_img else: gtk_img = self.cache_imgs[stat] self.set_image(gtk_img) self.show_all() if stat not in e3.status.ALL or stat == current_status: return self.status = stat if self.session: self.session.set_status(stat)
def set_status(self, stat): '''load an image representing a status and store it on cache''' current_status = -1 if self.session: current_status = self.session.account.status if stat not in self.cache_imgs: gtk_img = utils.safe_gtk_image_load(\ gui.theme.status_icons[stat]) self.cache_imgs[stat] = gtk_img else: gtk_img = self.cache_imgs[stat] self.set_image(gtk_img) self.show_all() if stat not in e3.status.ALL or stat == current_status: return self.status = stat if self.session: self.session.set_status(stat)
def __init__(self, session, account): '''constructor''' gtk.Window.__init__(self) self.set_default_size(640, 350) self.set_title('Contact information (%s)' % (account, )) self.set_role("dialog") self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_icon(utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) self.session = session self.account = account self.tabs = gtk.Notebook() self._create_tabs() self.tabs.show_all() self.add(self.tabs) if self.session: self.fill_nicks() self.fill_status() self.fill_messages()
def new_window(cls, title, response_cb=None, *args): '''build a window with the default values and connect the common signals, return the window''' window = gtk.Window() window.set_title(title) window.set_role("dialog") window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) window.set_default_size(150, 100) window.set_position(gtk.WIN_POS_CENTER) window.set_border_width(8) window.set_icon(utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) vbox = gtk.VBox(spacing=4) hbox = gtk.HBox(spacing=4) bbox = gtk.HButtonBox() bbox.set_spacing(4) bbox.set_layout(gtk.BUTTONBOX_END) vbox.pack_start(hbox, True, True) vbox.pack_start(bbox, False) window.add(vbox) setattr(window, 'vbox', vbox) setattr(window, 'hbox', hbox) setattr(window, 'bbox', bbox) args = list(args) args.insert(0, stock.CLOSE) window.connect('delete-event', cls.close_cb, window, response_cb, *args) vbox.show_all() return window
def __init__(self, handler, session): """ constructor handler -- a e3common.Handler.ContactHandler """ gtk.Menu.__init__(self) self.handler = handler self.session = session add = gtk.ImageMenuItem(gtk.STOCK_ADD) add.connect('activate', lambda *args: handler.on_add_contact_selected()) remove = gtk.ImageMenuItem(gtk.STOCK_REMOVE) remove.connect('activate', lambda *args: handler.on_remove_contact_selected()) self.block = gtk.ImageMenuItem(_('Block')) self.block.set_image( gtk.image_new_from_stock(gtk.STOCK_CANCEL, gtk.ICON_SIZE_MENU)) self.block.connect('activate', lambda *args: handler.on_block_contact_selected()) self.unblock = gtk.ImageMenuItem(_('Unblock')) self.unblock.set_image( gtk.image_new_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_MENU)) self.unblock.connect( 'activate', lambda *args: handler.on_unblock_contact_selected()) set_alias = gtk.ImageMenuItem(_('Set alias')) set_alias.set_image( gtk.image_new_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_MENU)) set_alias.connect( 'activate', lambda *args: handler.on_set_alias_contact_selected()) self.move_groups_submenu = gtk.Menu() self.copy_groups_submenu = gtk.Menu() self.remove_group_submenu = gtk.Menu() move_to_group = gtk.ImageMenuItem(_('Move to group')) move_to_group.set_image( gtk.image_new_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU)) move_to_group.connect('activate', lambda *args: self.update_submenus()) move_to_group.set_submenu(self.move_groups_submenu) self.copy_to_group = gtk.ImageMenuItem(_('Copy to group')) self.copy_to_group.set_image( gtk.image_new_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_MENU)) self.copy_to_group.connect('activate', lambda *args: self.update_submenus()) self.copy_to_group.set_submenu(self.copy_groups_submenu) self.remove_from_group = gtk.ImageMenuItem(_('Remove from group')) self.remove_from_group.set_image( gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)) self.remove_from_group.connect('activate', lambda *args: self.update_submenus()) self.remove_from_group.set_submenu(self.remove_group_submenu) self.groups_to_remove = 0 view_info = gtk.ImageMenuItem(_('View information')) view_info.set_image( gtk.image_new_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_MENU)) view_info.connect('activate', lambda *args: handler.on_view_information_selected()) copy = gtk.ImageMenuItem(_('Copy contact information')) copy.set_image( gtk.image_new_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_MENU)) copy_menu = gtk.Menu() copy.set_submenu(copy_menu) account_to_clipboard = gtk.ImageMenuItem(_('Email address')) account_to_clipboard.set_image( utils.safe_gtk_image_load(gui.theme.image_theme.email)) account_to_clipboard.connect( 'activate', lambda *args: self.on_copy_account_to_clipboard()) nick_to_clipboard = gtk.ImageMenuItem(_('Nickname')) nick_to_clipboard.set_image( utils.safe_gtk_image_load(gui.theme.image_theme.user)) nick_to_clipboard.connect( 'activate', lambda *args: self.on_copy_nick_to_clipboard()) message_to_clipboard = gtk.ImageMenuItem(_('Personal message')) message_to_clipboard.set_image( gtk.image_new_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_MENU)) message_to_clipboard.connect( 'activate', lambda *args: self.on_copy_message_to_clipboard()) self.set_unblocked() if self.session.session_has_service( e3.Session.SERVICE_CONTACT_MANAGING): self.append(add) if self.session.session_has_service(e3.Session.SERVICE_CONTACT_BLOCK): self.append(self.block) self.append(self.unblock) if self.session.session_has_service( e3.Session.SERVICE_CONTACT_MANAGING): self.append(remove) self.append(gtk.SeparatorMenuItem()) if self.session.session_has_service(e3.Session.SERVICE_CONTACT_ALIAS): self.append(set_alias) self.append(view_info) self.append(gtk.SeparatorMenuItem()) if self.session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING): self.append(move_to_group) self.append(self.copy_to_group) self.append(self.remove_from_group) self.append(gtk.SeparatorMenuItem()) self.append(copy) copy_menu.append(nick_to_clipboard) copy_menu.append(message_to_clipboard) copy_menu.append(account_to_clipboard)
def set_icon(self, icon): '''set the icon of the window''' if utils.file_readable(icon): gtk.Window.set_icon(self, utils.safe_gtk_image_load(icon).get_pixbuf())
def __init__(self, session, cid, tab_label, members=None): '''constructor''' gtk.VBox.__init__(self) gui.Conversation.__init__(self, session, cid, members) self.set_border_width(2) self.tab_label = tab_label self._header_visible = session.config.b_show_header self._image_visible = session.config.b_show_info self._toolbar_visible = session.config.b_show_toolbar self.panel = gtk.VPaned() Header = extension.get_default('conversation header') OutputText = extension.get_default('conversation output') InputText = extension.get_default('conversation input') ContactInfo = extension.get_default('conversation info') ConversationToolbar = extension.get_default( 'conversation toolbar') dialog = extension.get_default('dialog') self.header = Header() toolbar_handler = gui.base.ConversationToolbarHandler(self.session, dialog, gui.theme, self) self.toolbar = ConversationToolbar(toolbar_handler) self.output = OutputText(self.session.config) self.input = InputText(self.session.config, self._on_send_message) self.info = ContactInfo() frame_input = gtk.Frame() frame_input.set_shadow_type(gtk.SHADOW_IN) input_box = gtk.VBox() input_box.pack_start(self.toolbar, False) input_box.pack_start(self.input, True, True) frame_input.add(input_box) self.panel.pack1(self.output, True, True) self.panel.pack2(frame_input, True, True) self.panel_signal_id = self.panel.connect_after('expose-event', self.update_panel_position) self.hbox = gtk.HBox() if self.session.config.get_or_set('b_avatar_on_left', False): self.hbox.pack_start(self.info, False) self.hbox.pack_start(self.panel, True, True) else: self.hbox.pack_start(self.panel, True, True) self.hbox.pack_start(self.info, False) self.pack_start(self.header, False) self.pack_start(self.hbox, True, True) if len(self.members) == 0: self.header.information = ('connecting', 'creating conversation') if self.session.contacts.me.picture: my_picture = self.session.contacts.me.picture else: my_picture = gui.theme.logo his_picture = gui.theme.logo if members: account = members[0] contact = self.session.contacts.get(account) if contact and contact.picture: his_picture = contact.picture avatar_size = self.session.config.get_or_set('i_conv_avatar_size', 64) self.info.first = utils.safe_gtk_image_load(his_picture, (avatar_size, avatar_size)) self.info.last = utils.safe_gtk_image_load(my_picture, (avatar_size, avatar_size)) self._load_style() self.session.config.subscribe(self._on_show_toolbar_changed, 'b_show_toolbar') self.session.config.subscribe(self._on_show_header_changed, 'b_show_header') self.session.config.subscribe(self._on_show_info_changed, 'b_show_info') self.session.signals.picture_change_succeed.subscribe( self.on_picture_change_succeed) self.tab_index = -1 # used to select an existing conversation
def __init__(self, handler): """ constructor handler -- an instance of e3common.Handler.ConversationToolbarHandler """ gtk.Toolbar.__init__(self) self.set_style(gtk.TOOLBAR_ICONS) toolbar_small = handler.session.config.get_or_set('b_toolbar_small', False) if toolbar_small: size = gtk.ICON_SIZE_MENU else: size = gtk.ICON_SIZE_LARGE_TOOLBAR whsize = gtk.icon_size_lookup(size) settings = self.get_settings() settings.set_long_property('gtk-toolbar-icon-size', size, \ 'ConversationToolbar.py:37') self.handler = handler self.font = gtk.ToolButton(gtk.STOCK_SELECT_FONT) self.font.connect('clicked', lambda *args: self.handler.on_font_selected()) self.color = gtk.ToolButton(gtk.STOCK_SELECT_COLOR) self.color.connect('clicked', lambda *args: self.handler.on_color_selected()) emotes_img = utils.safe_gtk_image_load( gui.theme.emote_to_path(':D', True), whsize) self.emotes = gtk.ToolButton(emotes_img, 'Emotes') self.emotes.connect('clicked', lambda *args: self.handler.on_emotes_selected()) nudge_img = utils.safe_gtk_image_load( gui.theme.emote_to_path(':S', True), whsize) self.nudge = gtk.ToolButton(nudge_img, 'Nudge') self.nudge.connect('clicked', lambda *args: self.handler.on_notify_attention_selected()) self.invite = gtk.ToolButton(gtk.STOCK_ADD) self.invite.connect('clicked', lambda *args: self.handler.on_invite_selected()) self.clean = gtk.ToolButton(gtk.STOCK_CLEAR) self.clean.connect('clicked', lambda *args: self.handler.on_clean_selected()) self.invite_file_transfer = gtk.ToolButton(gtk.STOCK_GO_UP) self.invite_file_transfer.set_label(_('Send File')) self.invite_file_transfer.connect('clicked', lambda *args: self.handler.on_invite_file_transfer_selected()) self.add(self.font) self.add(self.color) self.add(gtk.SeparatorToolItem()) self.add(self.emotes) self.add(self.nudge) self.add(gtk.SeparatorToolItem()) self.add(self.invite) self.add(self.clean) self.add(self.invite_file_transfer)
def __init__(self, handler, session): """ constructor handler -- a e3common.Handler.ContactHandler """ gtk.Menu.__init__(self) self.handler = handler self.session = session add = gtk.ImageMenuItem(gtk.STOCK_ADD) add.connect('activate', lambda *args: handler.on_add_contact_selected()) remove = gtk.ImageMenuItem(gtk.STOCK_REMOVE) remove.connect('activate', lambda *args: handler.on_remove_contact_selected()) self.block = gtk.ImageMenuItem(_('Block')) self.block.set_image(gtk.image_new_from_stock(gtk.STOCK_CANCEL, gtk.ICON_SIZE_MENU)) self.block.connect('activate', lambda *args: handler.on_block_contact_selected()) self.unblock = gtk.ImageMenuItem(_('Unblock')) self.unblock.set_image(gtk.image_new_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_MENU)) self.unblock.connect('activate', lambda *args: handler.on_unblock_contact_selected()) set_alias = gtk.ImageMenuItem(_('Set alias')) set_alias.set_image(gtk.image_new_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_MENU)) set_alias.connect('activate', lambda *args: handler.on_set_alias_contact_selected()) self.move_groups_submenu = gtk.Menu() self.copy_groups_submenu = gtk.Menu() self.remove_group_submenu = gtk.Menu() move_to_group = gtk.ImageMenuItem(_('Move to group')) move_to_group.set_image(gtk.image_new_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU)) move_to_group.connect('activate', lambda *args: self.update_submenus()) move_to_group.set_submenu(self.move_groups_submenu) self.copy_to_group = gtk.ImageMenuItem(_('Copy to group')) self.copy_to_group.set_image(gtk.image_new_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_MENU)) self.copy_to_group.connect('activate', lambda *args: self.update_submenus()) self.copy_to_group.set_submenu(self.copy_groups_submenu) self.remove_from_group = gtk.ImageMenuItem(_('Remove from group')) self.remove_from_group.set_image(gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)) self.remove_from_group.connect('activate', lambda *args: self.update_submenus()) self.remove_from_group.set_submenu(self.remove_group_submenu) self.groups_to_remove = 0 view_info = gtk.ImageMenuItem(_('View information')) view_info.set_image(gtk.image_new_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_MENU)) view_info.connect('activate', lambda *args: handler.on_view_information_selected()) copy = gtk.ImageMenuItem(_('Copy contact information')) copy.set_image(gtk.image_new_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_MENU)) copy_menu = gtk.Menu() copy.set_submenu(copy_menu) account_to_clipboard = gtk.ImageMenuItem(_('Email address')) account_to_clipboard.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.email)) account_to_clipboard.connect('activate', lambda *args: self.on_copy_account_to_clipboard()) nick_to_clipboard = gtk.ImageMenuItem(_('Nickname')) nick_to_clipboard.set_image(utils.safe_gtk_image_load(gui.theme.image_theme.user)) nick_to_clipboard.connect('activate', lambda *args: self.on_copy_nick_to_clipboard()) message_to_clipboard = gtk.ImageMenuItem(_('Personal message')) message_to_clipboard.set_image(gtk.image_new_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_MENU)) message_to_clipboard.connect('activate', lambda *args: self.on_copy_message_to_clipboard()) self.set_unblocked() if self.session.session_has_service(e3.Session.SERVICE_CONTACT_MANAGING): self.append(add) if self.session.session_has_service(e3.Session.SERVICE_CONTACT_BLOCK): self.append(self.block) self.append(self.unblock) if self.session.session_has_service(e3.Session.SERVICE_CONTACT_MANAGING): self.append(remove) self.append(gtk.SeparatorMenuItem()) if self.session.session_has_service(e3.Session.SERVICE_CONTACT_ALIAS): self.append(set_alias) self.append(view_info) self.append(gtk.SeparatorMenuItem()) if self.session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING): self.append(move_to_group) self.append(self.copy_to_group) self.append(self.remove_from_group) self.append(gtk.SeparatorMenuItem()) self.append(copy) copy_menu.append(nick_to_clipboard) copy_menu.append(message_to_clipboard) copy_menu.append(account_to_clipboard)
def set_image(self, path): '''set the image from path''' self.remove(self.image) self.image = utils.safe_gtk_image_load(path) self.pack_start(self.image, False) self.image.show()
def __init__(self, session): """constructor """ gtk.Window.__init__(self) self.set_border_width(2) self.set_title("Preferences") self.session = session self.set_default_size(600, 400) self.set_role("New preferences Window") self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) if utils.file_readable(gui.theme.logo): self.set_icon( utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) ''' TREE VIEW STUFF ''' # Create the list store model for the treeview. listStore = gtk.ListStore(gtk.gdk.Pixbuf, str) for i in LIST: # we should use always the same icon size, # we can remove that field in LIST listStore.append([self.render_icon(i['stock_id'], gtk.ICON_SIZE_LARGE_TOOLBAR), i['text']]) # Create the TreeView treeView = gtk.TreeView(listStore) # Create the renders cellText = gtk.CellRendererText() cellPix = gtk.CellRendererPixbuf() # Create the single Tree Column treeViewColumn = gtk.TreeViewColumn('Categories') treeViewColumn.pack_start(cellPix, expand=False) treeViewColumn.add_attribute(cellPix, 'pixbuf',0) treeViewColumn.pack_start(cellText, expand=True) treeViewColumn.set_attributes(cellText, text=1) treeView.append_column(treeViewColumn) treeView.set_headers_visible(False) treeView.connect('cursor-changed', self._on_row_activated) self.treeview = treeView self.notebook = gtk.Notebook() self.notebook.set_show_tabs(False) self.notebook.set_resize_mode(gtk.RESIZE_QUEUE) self.notebook.set_scrollable(True) ''' PACK TREEVIEW, FRAME AND HBOX ''' vbox = gtk.VBox() vbox.set_spacing(4) hbox = gtk.HBox(homogeneous=False, spacing=5) hbox.pack_start(treeView, True,True) # False, True hbox.pack_start(self.notebook, True, True) vbox.pack_start(hbox, True,True) # hbox, True, True self.interface = Interface(session) self.sound = Sound(session) self.notification = Notification(session) self.theme = Theme(session) self.extension = Extension(session) self.plugins = PluginWindow.PluginMainVBox(session) self.buttons = gtk.HButtonBox() self.buttons.set_border_width(2) self.buttons.set_layout(gtk.BUTTONBOX_END) self.close = gtk.Button(stock=gtk.STOCK_CLOSE) self.close.connect('clicked', lambda *args: self.hide()) self.buttons.pack_start(self.close) # Create a dict that stores each page self.page_dict = [] # Keep local copies of the objects self.interface_page = self.interface self.sound_page = self.sound self.notifications_page = self.notification self.theme_page = self.theme self.extensions_page = self.extension self.plugins_page = self.plugins # Whack the pages into a dict for future reference self.page_dict.append(self.interface_page) self.page_dict.append(self.sound_page) self.page_dict.append(self.notifications_page) self.page_dict.append(self.theme_page) self.page_dict.append(self.extensions_page) self.page_dict.append(self.plugins_page) for i in range(len(self.page_dict)): self.notebook.append_page(self.page_dict[i]) self.add(vbox) vbox.show_all()
def __init__(self, session): """constructor """ gtk.Window.__init__(self) self.set_border_width(2) self.set_title("Preferences") self.session = session self.set_default_size(600, 400) self.set_role("New preferences Window") self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) if utils.file_readable(gui.theme.logo): self.set_icon( utils.safe_gtk_image_load(gui.theme.logo).get_pixbuf()) ''' TREE VIEW STUFF ''' # Create the list store model for the treeview. listStore = gtk.ListStore(gtk.gdk.Pixbuf, str) for i in LIST: # we should use always the same icon size, # we can remove that field in LIST listStore.append([ self.render_icon(i['stock_id'], gtk.ICON_SIZE_LARGE_TOOLBAR), i['text'] ]) # Create the TreeView treeView = gtk.TreeView(listStore) # Create the renders cellText = gtk.CellRendererText() cellPix = gtk.CellRendererPixbuf() # Create the single Tree Column treeViewColumn = gtk.TreeViewColumn('Categories') treeViewColumn.pack_start(cellPix, expand=False) treeViewColumn.add_attribute(cellPix, 'pixbuf', 0) treeViewColumn.pack_start(cellText, expand=True) treeViewColumn.set_attributes(cellText, text=1) treeView.append_column(treeViewColumn) treeView.set_headers_visible(False) treeView.connect('cursor-changed', self._on_row_activated) self.treeview = treeView self.notebook = gtk.Notebook() self.notebook.set_show_tabs(False) self.notebook.set_resize_mode(gtk.RESIZE_QUEUE) self.notebook.set_scrollable(True) ''' PACK TREEVIEW, FRAME AND HBOX ''' vbox = gtk.VBox() vbox.set_spacing(4) hbox = gtk.HBox(homogeneous=False, spacing=5) hbox.pack_start(treeView, True, True) # False, True hbox.pack_start(self.notebook, True, True) vbox.pack_start(hbox, True, True) # hbox, True, True self.interface = Interface(session) self.sound = Sound(session) self.notification = Notification(session) self.theme = Theme(session) self.extension = Extension(session) self.plugins = PluginWindow.PluginMainVBox(session) self.buttons = gtk.HButtonBox() self.buttons.set_border_width(2) self.buttons.set_layout(gtk.BUTTONBOX_END) self.close = gtk.Button(stock=gtk.STOCK_CLOSE) self.close.connect('clicked', lambda *args: self.hide()) self.buttons.pack_start(self.close) # Create a dict that stores each page self.page_dict = [] # Keep local copies of the objects self.interface_page = self.interface self.sound_page = self.sound self.notifications_page = self.notification self.theme_page = self.theme self.extensions_page = self.extension self.plugins_page = self.plugins # Whack the pages into a dict for future reference self.page_dict.append(self.interface_page) self.page_dict.append(self.sound_page) self.page_dict.append(self.notifications_page) self.page_dict.append(self.theme_page) self.page_dict.append(self.extensions_page) self.page_dict.append(self.plugins_page) for i in range(len(self.page_dict)): self.notebook.append_page(self.page_dict[i]) self.add(vbox) vbox.show_all()
def __init__(self, handler): """ constructor handler -- an instance of e3common.Handler.ConversationToolbarHandler """ gtk.Toolbar.__init__(self) self.set_style(gtk.TOOLBAR_ICONS) toolbar_small = handler.session.config.get_or_set('b_toolbar_small', False) if toolbar_small: size = gtk.ICON_SIZE_MENU else: size = gtk.ICON_SIZE_LARGE_TOOLBAR whsize = gtk.icon_size_lookup(size) settings = self.get_settings() settings.set_long_property('gtk-toolbar-icon-size', size, \ 'ConversationToolbar.py:37') self.handler = handler # check if we have theme-specific toolbar-icons if gui.theme.toolbar_path: theme_tool_font = utils.safe_gtk_image_load(gui.theme.tool_font, whsize) theme_tool_font_color = utils.safe_gtk_image_load(gui.theme.tool_font_color, whsize) theme_tool_emotes = utils.safe_gtk_image_load(gui.theme.tool_emotes, whsize) theme_tool_nudge = utils.safe_gtk_image_load(gui.theme.tool_nudge, whsize) theme_tool_invite = utils.safe_gtk_image_load(gui.theme.tool_invite, whsize) theme_tool_clean = utils.safe_gtk_image_load(gui.theme.tool_clean, whsize) theme_tool_file_transfer = utils.safe_gtk_image_load(gui.theme.tool_file_transfer, whsize) else: theme_tool_font = gtk.STOCK_SELECT_FONT theme_tool_font_color = gtk.STOCK_SELECT_COLOR theme_tool_emotes = utils.safe_gtk_image_load(gui.theme.emote_to_path(':D', True), whsize) theme_tool_nudge = utils.safe_gtk_image_load(gui.theme.emote_to_path(':S', True), whsize) theme_tool_invite = gtk.STOCK_ADD theme_tool_clean = gtk.STOCK_CLEAR theme_tool_file_transfer = gtk.STOCK_GO_UP self.font = gtk.ToolButton(theme_tool_font) self.font.set_label(_('Select font')) self.font.connect('clicked', lambda *args: self.handler.on_font_selected()) self.color = gtk.ToolButton(theme_tool_font_color) self.color.set_label(_('Select font color')) self.color.connect('clicked', lambda *args: self.handler.on_color_selected()) self.emotes = gtk.ToolButton(theme_tool_emotes) self.emotes.set_label(_('Send an emoticon')) self.emotes.connect('clicked', lambda *args: self.handler.on_emotes_selected()) self.nudge = gtk.ToolButton(theme_tool_nudge) self.nudge.set_label(_('Request attention')) self.nudge.connect('clicked', lambda *args: self.handler.on_notify_attention_selected()) self.invite = gtk.ToolButton(theme_tool_invite) self.invite.set_label(_('Invite a buddy')) self.invite.connect('clicked', lambda *args: self.handler.on_invite_selected()) self.clean = gtk.ToolButton(theme_tool_clean) self.clean.set_label(_('Clean the conversation')) self.clean.connect('clicked', lambda *args: self.handler.on_clean_selected()) self.invite_file_transfer = gtk.ToolButton(theme_tool_file_transfer) self.invite_file_transfer.set_label(_('Send a file')) self.invite_file_transfer.connect('clicked', lambda *args: self.handler.on_invite_file_transfer_selected()) self.add(self.font) self.add(self.color) self.add(gtk.SeparatorToolItem()) self.add(self.emotes) self.add(self.nudge) self.add(gtk.SeparatorToolItem()) self.add(self.invite) self.add(self.clean) self.add(self.invite_file_transfer)
def __init__(self, callback, on_preferences_changed, account, accounts=None, remember_account=None, remember_password=None, statuses=None, proxy=None, use_http=False, session_id=None): gtk.Alignment.__init__(self, xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) account = account or e3.Account("", "", e3.status.ONLINE) self.callback = callback self.on_preferences_changed = on_preferences_changed self.accounts = accounts or {} self.l_remember_account = remember_account or [] self.l_remember_password = remember_password or [] self.statuses = statuses or {} # the id of the default extension that handles the session # used to select the default session on the preference dialog self.use_http = use_http self.session_id = session_id if proxy is None: self.proxy = e3.Proxy() else: self.proxy = proxy liststore = gtk.ListStore(gobject.TYPE_STRING, gtk.gdk.Pixbuf) completion = gtk.EntryCompletion() completion.set_model(liststore) pixbufcell = gtk.CellRendererPixbuf() completion.pack_start(pixbufcell) completion.add_attribute(pixbufcell, 'pixbuf', 1) completion.set_text_column(0) completion.set_inline_selection(True) pixbuf = utils.safe_gtk_pixbuf_load(gui.theme.user) for mail in sorted(self.accounts): liststore.append([mail, utils.scale_nicely(pixbuf)]) self.cmb_account = gtk.ComboBoxEntry(liststore, 0) self.cmb_account.get_children()[0].set_completion(completion) self.cmb_account.get_children()[0].connect('key-press-event', self._on_account_key_press) self.cmb_account.connect('changed', self._on_account_changed) if account: self.cmb_account.prepend_text(account.account) self.btn_status = StatusButton.StatusButton() status_padding = gtk.Label() status_padding.set_size_request(*self.btn_status.size_request()) self.txt_password = gtk.Entry() self.txt_password.set_visibility(False) if account: self.txt_password.set_text(account.password) self.txt_password.connect('key-press-event', self._on_password_key_press) pix_account = utils.safe_gtk_pixbuf_load(gui.theme.user) pix_password = utils.safe_gtk_pixbuf_load(gui.theme.password) img_logo = utils.safe_gtk_image_load(gui.theme.logo) th_pix = utils.safe_gtk_pixbuf_load(gui.theme.throbber, None, animated=True) self.throbber = gtk.image_new_from_animation(th_pix) self.remember_account = gtk.CheckButton(_('Remember account')) self.remember_password = gtk.CheckButton(_('Remember password')) self.remember_account.connect('toggled', self._on_remember_account_toggled) self.remember_password.connect('toggled', self._on_remember_password_toggled) vbox_remember = gtk.VBox(spacing=4) vbox_remember.set_border_width(8) vbox_remember.pack_start(self.throbber) vbox_remember.pack_start(self.remember_account) vbox_remember.pack_start(self.remember_password) self.b_connect = gtk.Button(stock=gtk.STOCK_CONNECT) self.b_connect.connect('clicked', self._on_connect_clicked) self.b_connect.set_border_width(8) vbox = gtk.VBox() vbox.set_border_width(2) hbox_account = gtk.HBox(spacing=6) img_account = gtk.Image() img_account.set_from_pixbuf(utils.scale_nicely(pix_account)) hbox_account.pack_start(img_account, False) hbox_account.pack_start(self.cmb_account, True, True) hbox_account.pack_start(status_padding, False) hbox_password = gtk.HBox(spacing=6) img_password = gtk.Image() img_password.set_from_pixbuf(utils.scale_nicely(pix_password)) hbox_password.pack_start(img_password, False) hbox_password.pack_start(self.txt_password, True, True) hbox_password.pack_start(self.btn_status, False) vbox_entries = gtk.VBox(spacing=12) vbox_entries.set_border_width(8) vbox_entries.pack_start(hbox_account) vbox_entries.pack_start(hbox_password) self.b_preferences = gtk.Button() self.img_preferences = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU) self.img_preferences.set_sensitive(False) self.b_preferences.set_image(self.img_preferences) self.b_preferences.set_relief(gtk.RELIEF_NONE) self.b_preferences.connect('enter-notify-event', self._on_preferences_enter) self.b_preferences.connect('leave-notify-event', self._on_preferences_leave) self.b_preferences.connect('clicked', self._on_preferences_selected) al_vbox_entries = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.2, yscale=0.0) al_vbox_remember = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.2, yscale=0.2) al_button = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.2, yscale=0.0) al_logo = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.0, yscale=0.0) al_preferences = gtk.Alignment(xalign=1.0, yalign=0.5) al_vbox_entries.add(vbox_entries) al_vbox_remember.add(vbox_remember) al_button.add(self.b_connect) al_logo.add(img_logo) al_preferences.add(self.b_preferences) vbox.pack_start(al_logo, True, True, 10) vbox.pack_start(al_vbox_entries, True, True) vbox.pack_start(al_vbox_remember, True, True) vbox.pack_start(al_button, True, True) vbox.pack_start(al_preferences, False) self.add(vbox) vbox.show_all() self.throbber.hide()