Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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'
Ejemplo n.º 5
0
    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'
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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">&lt;Click here to set message&gt;</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)
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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()
Ejemplo n.º 17
0
    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()
Ejemplo n.º 18
0
    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)
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
    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()
Ejemplo n.º 21
0
    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()
Ejemplo n.º 22
0
    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()
Ejemplo n.º 23
0
    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)
Ejemplo n.º 24
0
    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()
Ejemplo n.º 25
0
    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)
Ejemplo n.º 26
0
    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()
Ejemplo n.º 27
0
    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()
Ejemplo n.º 28
0
    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
Ejemplo n.º 29
0
    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
Ejemplo n.º 30
0
    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
Ejemplo n.º 31
0
    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
Ejemplo n.º 32
0
    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
Ejemplo n.º 33
0
    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)
Ejemplo n.º 34
0
    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)
Ejemplo n.º 35
0
    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()
Ejemplo n.º 36
0
    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
Ejemplo n.º 37
0
    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)
Ejemplo n.º 38
0
 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())
Ejemplo n.º 39
0
 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())
Ejemplo n.º 40
0
    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
Ejemplo n.º 41
0
    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)
Ejemplo n.º 42
0
    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)
Ejemplo n.º 43
0
 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()
Ejemplo n.º 44
0
    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()
Ejemplo n.º 45
0
    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()
Ejemplo n.º 46
0
    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)
Ejemplo n.º 47
0
    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()