コード例 #1
0
    def __init__(self, session):
        """
        Class Constructor
        """
        self.session = session

        self.notifier = extension.get_default('notificationGUI')
        self.picture_factory = extension.get_default('notificationImage')
        self.sound_player = extension.get_and_instantiate('sound', session)

        if self.session:
            self.session.signals.conv_message.subscribe(self._on_message)
            self.session.signals.user_typing.subscribe(self._on_user_typing)
            self.session.signals.contact_attr_changed.subscribe(
                self._on_contact_attr_changed)
            self.session.signals.mail_received.subscribe(
                self._on_mail_received)
            self.session.signals.filetransfer_completed.subscribe(
                self._on_filetransfer_completed)
            self.session.signals.filetransfer_canceled.subscribe(
                self._on_filetransfer_canceled)
            self.session.signals.filetransfer_invitation.subscribe(
                self._on_filetransfer_invitation)
            self.session.signals.endpoint_added.subscribe(
                self._on_endpoint_added)
            self.session.signals.endpoint_updated.subscribe(
                self._on_endpoint_updated)

        extension.subscribe(self._on_notification_gui_changed,
                            'notificationGUI')
        extension.subscribe(self._on_notification_image_changed,
                            'notificationImage')

        self.notify_online = False
        self.last_online = None
コード例 #2
0
ファイル: Conversation.py プロジェクト: AmiZya/emesene
    def subscribe_signals(self):
        """ subscribes current session's signals """
        self.session.config.subscribe(self._on_avatarsize_changed, "i_conv_avatar_size")
        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.config.subscribe(self._on_show_avatar_onleft, "b_avatar_on_left")
        self.session.config.subscribe(self._on_icon_size_change, "b_toolbar_small")
        self.session.signals.picture_change_succeed.subscribe(self.on_picture_change_succeed)
        self.session.signals.contact_attr_changed.subscribe(self.on_contact_attr_changed_succeed)

        self.session.signals.filetransfer_invitation.subscribe(self.on_filetransfer_invitation)
        self.session.signals.filetransfer_accepted.subscribe(self.on_filetransfer_accepted)
        self.session.signals.filetransfer_progress.subscribe(self.on_filetransfer_progress)
        self.session.signals.filetransfer_completed.subscribe(self.on_filetransfer_completed)
        self.session.signals.filetransfer_rejected.subscribe(self.on_filetransfer_rejected)
        self.session.signals.filetransfer_canceled.subscribe(self.on_filetransfer_canceled)

        self.session.signals.call_invitation.subscribe(self.on_call_invitation)

        self.session.signals.contact_block_succeed.subscribe(self.on_contact_block_succeed)
        self.session.signals.contact_unblock_succeed.subscribe(self.on_contact_unblock_succeed)

        extension.subscribe(self.on_conversation_info_extension_changed, "conversation info")
        extension.subscribe(self.on_below_conversation_changed, "below conversation")
コード例 #3
0
ファイル: RenderersNew.py プロジェクト: stlcours/emesene
 def __init__(self):
     Gtk.CellView.__init__(self)
     self._model = Gtk.ListStore(str)
     self.set_model(self._model)
     self.crt = extension.get_and_instantiate('nick renderer')
     self.prepare_column()
     self._text = ""
     extension.subscribe(self._on_nick_renderer_changed, 'nick renderer')
コード例 #4
0
 def __init__(self):
     Gtk.CellView.__init__(self)
     self._model = Gtk.ListStore(str)
     self.set_model(self._model)
     self.crt = extension.get_and_instantiate('nick renderer')
     self.prepare_column()
     self._text = ""
     extension.subscribe(self._on_nick_renderer_changed, 'nick renderer')
コード例 #5
0
 def __init__(self):
     gtk.Widget.__init__(self)
     self.angle = 0
     self._text = ['']
     self.markup = ''
     self._ellipsize = True
     self._wrap = True
     self._smiley_layout = None
     self.set_flags(self.flags() | gtk.NO_WINDOW)
     self._smiley_layout = SmileyLayout(self.create_pango_context())
     extension.subscribe(self._on_nick_renderer_changed, 'nick renderer')
コード例 #6
0
 def __init__(self):
     gtk.Widget.__init__(self)
     self.angle = 0
     self._text = ['']
     self.markup = ''
     self._ellipsize = True
     self._wrap = True
     self._smiley_layout = None
     self.set_flags(self.flags() | gtk.NO_WINDOW)
     self._smiley_layout = SmileyLayout(self.create_pango_context())
     extension.subscribe(self._on_nick_renderer_changed, 'nick renderer')
コード例 #7
0
ファイル: emesene.py プロジェクト: project-hephaestus/emesene
    def _draw_tray_icon(self):
        '''draws the tray icon'''
        trayiconcls = extension.get_default('tray icon')

        if self.tray_icon is not None:
            if trayiconcls == self.tray_icon.__class__:
                return
            self.tray_icon.unsubscribe()

        handler = gui.base.TrayIconHandler(self.session, gui.theme, self.close_session)
        self.tray_icon = trayiconcls(handler, self.window)
        extension.subscribe(self._on_tray_icon_changed, 'tray icon')
コード例 #8
0
    def _draw_tray_icon(self):
        '''draws the tray icon'''
        trayiconcls = extension.get_default('tray icon')

        if self.tray_icon is not None:
            if trayiconcls == self.tray_icon.__class__:
                return
            self.tray_icon.set_visible(False)

        handler = gui.base.TrayIconHandler(self.session, gui.theme, self.close_session)
        self.tray_icon = trayiconcls(handler, self.window)
        extension.subscribe(self._on_tray_icon_changed, 'tray icon')
コード例 #9
0
ファイル: emesene.py プロジェクト: tiancj/emesene
    def _draw_tray_icon(self):
        """draws the tray icon"""
        trayiconcls = extension.get_default("tray icon")

        if self.tray_icon is not None:
            if trayiconcls == self.tray_icon.__class__:
                return
            self.tray_icon.hide()
        else:
            extension.subscribe(self._on_tray_icon_changed, "tray icon")

        handler = gui.base.TrayIconHandler(self.session, gui.theme, self.close_session)
        self.tray_icon = trayiconcls(handler, self.window)
コード例 #10
0
 def __init__(self, userpanel, arg):
     """constructor"""
     gtk.ToggleButton.__init__(self)
     self.session = userpanel.session
     music_image = utils.gtk_ico_image_load(gui.theme.emote_theme.emote_to_path('(8)', True),
         gtk.ICON_SIZE_MENU)
     self.set_image(music_image)
     self.set_relief(gtk.RELIEF_NONE)
     self.connect('toggled', self._on_button_toggled)
     self.music = extension.get_instance('listening to')
     enabled = self.session.config.get_or_set('music_enabled', False)
     self.set_active(enabled)
     if hasattr(extension, "subscribe"):
         extension.subscribe(self._on_extension_changed, 'listening to')
コード例 #11
0
    def subscribe_signals(self):
        ''' subscribes current session's signals '''
        self.session.config.subscribe(self._on_avatarsize_changed,
                                     'i_conv_avatar_size')
        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.config.subscribe(self._on_show_avatar_onleft,
                                      'b_avatar_on_left')
        self.session.config.subscribe(self._on_icon_size_change,
                                      'b_toolbar_small')
        self.session.signals.picture_change_succeed.subscribe(
            self.on_picture_change_succeed)
        self.session.signals.contact_attr_changed.subscribe(
            self.on_contact_attr_changed_succeed)

        self.session.signals.filetransfer_invitation.subscribe(
                self.on_filetransfer_invitation)
        self.session.signals.filetransfer_accepted.subscribe(
                self.on_filetransfer_accepted)
        self.session.signals.filetransfer_progress.subscribe(
                self.on_filetransfer_progress)
        self.session.signals.filetransfer_completed.subscribe(
                self.on_filetransfer_completed)
        self.session.signals.filetransfer_rejected.subscribe(
                self.on_filetransfer_rejected)
        self.session.signals.filetransfer_canceled.subscribe(
                self.on_filetransfer_canceled)

        self.session.signals.call_invitation.subscribe(
                self.on_call_invitation)

        self.session.signals.contact_block_succeed.subscribe(
                self.on_contact_block_succeed)
        self.session.signals.contact_unblock_succeed.subscribe(
                self.on_contact_unblock_succeed)

        extension.subscribe(self.on_conversation_info_extension_changed,
            'conversation info')
        extension.subscribe(self.on_below_conversation_changed,
            'below conversation')
コード例 #12
0
ファイル: notification.py プロジェクト: bubuntux/emesene
    def __init__(self, session):
        """
        Class Constructor
        """
        self.session = session
        self.session.config.get_or_set('b_mute_notification', False)
        self.session.config.get_or_set('b_notify_endpoint_added', True)
        self.session.config.get_or_set('b_notify_endpoint_updated', False)
        self.session.config.get_or_set('b_notify_contact_online', True)
        self.session.config.get_or_set('b_notify_contact_offline', True)
        self.session.config.get_or_set('b_notify_receive_message', True)
        self.session.config.get_or_set('b_notify_typing', False)
        self.session.config.get_or_set('b_notify_when_focussed', False)
        self.session.config.get_or_set('b_notify_only_when_available', True)

        self.notifier = extension.get_default('notificationGUI')
        self.picture_factory = extension.get_default('notificationImage')
        self.sound_player = extension.get_and_instantiate('sound', session)

        if self.session:
            self.session.signals.conv_message.subscribe(
                self._on_message)
            self.session.signals.user_typing.subscribe(
                self._on_user_typing)
            self.session.signals.contact_attr_changed.subscribe(
                self._on_contact_attr_changed)
            self.session.signals.mail_received.subscribe(
                self._on_mail_received)
            self.session.signals.filetransfer_completed.subscribe(
                self._on_filetransfer_completed)
            self.session.signals.filetransfer_canceled.subscribe(
                self._on_filetransfer_canceled)
            self.session.signals.filetransfer_invitation.subscribe(
                self._on_filetransfer_invitation)
            self.session.signals.endpoint_added.subscribe(
                self._on_endpoint_added)
            self.session.signals.endpoint_updated.subscribe(
                self._on_endpoint_updated)

        extension.subscribe(self._on_notification_gui_changed, 'notificationGUI')
        extension.subscribe(self._on_notification_image_changed, 'notificationImage')

        self.notify_online = False
        self.last_online = None
コード例 #13
0
    def _add_subscriptions(self):
        '''subscribe all signals'''
        self.session.signals.message_change_succeed.subscribe(
            self.on_message_change_succeed)
        self.session.signals.media_change_succeed.subscribe(
            self.on_media_change_succeed)
        if self.session.session_has_service(e3.Session.SERVICE_STATUS):
            self.session.signals.status_change_succeed.subscribe(
                self.on_status_change_succeed)
        self.session.signals.contact_list_ready.subscribe(
            self.on_contact_list_ready)
        self.session.signals.picture_change_succeed.subscribe(
            self.on_picture_change_succeed)
        self.session.signals.profile_get_succeed.subscribe(
            self.on_profile_update_succeed)
        self.session.signals.profile_set_succeed.subscribe(
            self.on_profile_update_succeed)

        extension.subscribe(self._on_userpanel_button_changed,
                            "userpanel button")
コード例 #14
0
ファイル: UserPanel.py プロジェクト: sreekumar-kr/emesene
    def _add_subscriptions(self):
        '''subscribe all signals'''
        self.session.signals.message_change_succeed.subscribe(
            self.on_message_change_succeed)
        self.session.signals.media_change_succeed.subscribe(
            self.on_media_change_succeed)
        if self.session.session_has_service(e3.Session.SERVICE_STATUS):
            self.session.signals.status_change_succeed.subscribe(
                self.on_status_change_succeed)
        self.session.signals.contact_list_ready.subscribe(
            self.on_contact_list_ready)
        self.session.signals.picture_change_succeed.subscribe(
            self.on_picture_change_succeed)
        self.session.signals.profile_get_succeed.subscribe(
            self.on_profile_update_succeed)
        self.session.signals.profile_set_succeed.subscribe(
            self.on_profile_update_succeed)

        extension.subscribe(
            self._on_userpanel_button_changed, "userpanel button")
コード例 #15
0
    def __init__(self, session):
        """
        Class Constructor
        """
        self.session = session
        self.session.config.get_or_set('b_mute_notification', False)
        self.session.config.get_or_set('b_notify_contact_online', True)
        self.session.config.get_or_set('b_notify_contact_offline', True)
        self.session.config.get_or_set('b_notify_receive_message', True)
        self.session.config.get_or_set('b_notify_typing', False)
        self.session.config.get_or_set('b_notify_when_focussed', False)
        self.session.config.get_or_set('b_notify_only_when_available', True)

        self.notifier = extension.get_default('notificationGUI')
        self.picture_factory = extension.get_default('notificationImage')
        self.sound_player = extension.get_and_instantiate('sound', session)

        if self.session:
            self.session.signals.conv_message.subscribe(self._on_message)
            self.session.signals.user_typing.subscribe(self._on_user_typing)
            self.session.signals.contact_attr_changed.subscribe(
                self._on_contact_attr_changed)
            self.session.signals.mail_received.subscribe(
                self._on_mail_received)
            self.session.signals.filetransfer_completed.subscribe(
                self._on_filetransfer_completed)
            self.session.signals.filetransfer_canceled.subscribe(
                self._on_filetransfer_canceled)
            self.session.signals.filetransfer_invitation.subscribe(
                self._on_filetransfer_invitation)

        extension.subscribe(self._on_notification_gui_changed,
                            'notificationGUI')
        extension.subscribe(self._on_notification_image_changed,
                            'notificationImage')

        self.notify_online = False
        self.last_online = None
コード例 #16
0
ファイル: MainWindowBase.py プロジェクト: RealDoll/emesene
    def __init__(self, session, on_new_conversation):
        '''class constructor'''

        self.session = session
        self.on_new_conversation = on_new_conversation

        self.session.signals.mail_count_changed.subscribe(self._on_mail_count_changed)
        self.session.signals.social_request.subscribe(self._on_social_request)
        self.session.signals.broken_profile.subscribe(self._on_broken_profile)

        self.session.config.subscribe(self._on_show_userpanel_changed,
            'b_show_userpanel')

        self.below_menu = extension.get_and_instantiate('below menu', self)
        self.below_panel = extension.get_and_instantiate('below panel', self)
        self.below_userlist = extension.get_and_instantiate('below userlist',
                                                            self)
        #extension changes
        extension.subscribe(self._on_below_userlist_changed, "below userlist")
        extension.subscribe(self._on_below_menu_changed, "below menu")
        extension.subscribe(self._on_below_panel_changed, "below panel")
コード例 #17
0
    def __init__(self, session, on_new_conversation):
        '''class constructor'''

        self.session = session
        self.on_new_conversation = on_new_conversation

        self.session.signals.mail_count_changed.subscribe(
            self._on_mail_count_changed)
        self.session.signals.social_request.subscribe(self._on_social_request)
        self.session.signals.broken_profile.subscribe(self._on_broken_profile)

        self.session.config.subscribe(self._on_show_userpanel_changed,
                                      'b_show_userpanel')

        self.below_menu = extension.get_and_instantiate('below menu', self)
        self.below_panel = extension.get_and_instantiate('below panel', self)
        self.below_userlist = extension.get_and_instantiate(
            'below userlist', self)
        #extension changes
        extension.subscribe(self._on_below_userlist_changed, "below userlist")
        extension.subscribe(self._on_below_menu_changed, "below menu")
        extension.subscribe(self._on_below_panel_changed, "below panel")
コード例 #18
0
ファイル: Conversation.py プロジェクト: MechanisM/emesene
    def __init__(self, session, cid, update_win, tab_label, members=None):
        '''constructor'''
        gtk.VBox.__init__(self)
        gui.Conversation.__init__(self, session, cid, update_win, members)
        self.set_border_width(2)

        self.typing_timeout = None
        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()

        self.show_avatar_in_taskbar = self.session.config.get_or_set(
                                                    'b_show_avatar_in_taskbar',
                                                    True)

        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')
        TransfersBar = extension.get_default('filetransfer pool')
        CallWidget = extension.get_default('call widget')

        self.below_conversation = None
        BelowConversation = extension.get_default('below conversation')
        if BelowConversation is not None:
            self.below_conversation = BelowConversation(self, session)

        self.header = Header(session, members)
        toolbar_handler = gui.base.ConversationToolbarHandler(self.session,
            gui.theme, self)
        self.toolbar = ConversationToolbar(toolbar_handler, self.session)
        self.toolbar.set_property('can-focus', False)
        outputview_handler = gui.base.OutputViewHandler(self)
        self.output = OutputText(self.session.config, outputview_handler)
        if self.session.conversation_start_locked:
            self.output.lock()

        self.output.set_size_request(-1, 30)
        self.input = InputText(self.session, self._on_send_message,
                               self.cycle_history, self.on_drag_data_received,
                               self._send_typing_notification)
        self.output.set_size_request(-1, 25)
        self.input.set_size_request(-1, 25)
        self.info = ContactInfo(self.session, self.members)
        self.transfers_bar = TransfersBar(self.session)
        self.call_widget = CallWidget(self.session)

        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, False)
        self.panel.pack2(frame_input, False, False)

        if not check_gtk3():
            self.panel_signal_id = self.panel.connect_after('expose-event',
                    self.update_panel_position)
        else:
            self.panel_signal_id = self.panel.connect_after('draw',
                    self.update_panel_position)
        self.panel.connect('button-release-event', self.on_input_panel_resize)

        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)
        self.pack_start(self.transfers_bar, False)
        if self.below_conversation is not None:
            self.pack_start(self.below_conversation, False)

        if len(self.members) == 0:
            self.header.information = ('connecting', 'creating conversation')
        else:
            #update adium theme header/footer
            account = self.members[0]
            contact = self.session.contacts.safe_get(account)
            his_picture = contact.picture or utils.path_to_url(os.path.abspath(gui.theme.image_theme.user))
            nick = contact.nick
            display_name = contact.display_name
            self.set_sensitive(not contact.blocked, True)
            my_picture = self.session.contacts.me.picture or utils.path_to_url(os.path.abspath(gui.theme.image_theme.user))
            self.output.clear(account, nick, display_name, 
                              my_picture, his_picture)

        self._load_style()
        self.subscribe_signals()
        extension.subscribe(self.on_below_conversation_changed, 'below conversation')
        extension.subscribe(self.on_conversation_info_extension_changed, 'conversation info')

        self.tab_index = -1 # used to select an existing conversation
コード例 #19
0
ファイル: MainWindow.py プロジェクト: bubuntux/emesene
    def __init__(self, session, on_new_conversation):
        '''class constructor'''
        gtk.VBox.__init__(self)
        gui.MainWindowBase.__init__(self, session, on_new_conversation)

        UserPanel = extension.get_default('user panel')
        ContactList = extension.get_default('contact list')

        self.below_menu = extension.get_and_instantiate('below menu', self)
        self.below_panel = extension.get_and_instantiate('below panel', self)
        self.below_userlist = extension.get_and_instantiate('below userlist',
                                                            self)

        self.contact_list = ContactList(session)
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroll.set_shadow_type(gtk.SHADOW_IN)
        scroll.set_border_width(1)

        self.session.signals.contact_attr_changed.subscribe(
            self._on_contact_attr_changed)
        self.session.signals.close.subscribe(self.on_disconnect)

        self.menu = None
        self.contact_menu = None
        self.group_menu = None

        self._build_menus()

        self.panel = UserPanel(session, self)
        self.panel.nick.connect('text-changed', self._on_nick_changed)
        self.panel.message.connect('text-changed', self._on_message_changed)
        self.panel.mail.connect('button_release_event', self._on_mail_click)
        self.panel.search.connect('toggled', self._on_search_toggled)
        self.panel.enabled = False

        self.entry = gtk.Entry()
        if hasattr(gtk.Entry, "set_placeholder_text"):
            self.entry.set_placeholder_text(_('Type to search...'))
        self.entry.set_icon_from_stock(0,gtk.STOCK_FIND)
        self.entry.set_icon_tooltip_text(0, _('Type to search...'))
        self.entry.set_icon_from_stock(1,gtk.STOCK_CLEAR)
        self.entry.set_icon_tooltip_text(1, _('Clear the search'))
        self.entry.connect('changed', self._on_entry_changed)
        self.entry.connect('key-press-event', self._on_entry_key_press)
        self.entry.connect('icon-press', self._on_icon_press)

        self.pack_start(self.menu, False)
        self.pack_start(self.below_menu, False)
        self.pack_start(self.panel, False)
        self.pack_start(self.below_panel, False)
        self.pack_start(self.entry, False)
        self.pack_start(scroll, True, True)
        self.pack_start(self.below_userlist, False)

        self.contact_list.contact_selected.subscribe(self._on_contact_selected)
        self.contact_list.group_selected.subscribe(self._on_group_selected)
        self.contact_list.contact_menu_selected.subscribe(
            self._on_contact_menu_selected)

        if self.session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING):
            self.contact_list.group_menu_selected.subscribe(
                self._on_group_menu_selected)

        scroll.add(self.contact_list)
        scroll.show_all()

        self.session.config.subscribe(self._on_show_userpanel_changed,
            'b_show_userpanel')
        self.session.config.subscribe(self._on_show_mail_inbox_changed,
            'b_show_mail_inbox')

        self._on_show_userpanel_changed(self.session.config.b_show_userpanel)
        self._on_show_mail_inbox_changed(self.session.config.b_show_mail_inbox)

        #extension changes
        extension.subscribe(self._on_below_userlist_changed, "below userlist")
        extension.subscribe(self._on_below_menu_changed, "below menu")
        extension.subscribe(self._on_below_panel_changed, "below panel")
コード例 #20
0
ファイル: MainWindow.py プロジェクト: MechanisM/emesene
    def __init__(self, session, on_new_conversation):
        '''class constructor'''
        gtk.VBox.__init__(self)
        gui.MainWindowBase.__init__(self, session, on_new_conversation)

        UserPanel = extension.get_default('user panel')
        ContactList = extension.get_default('contact list')

        self.below_menu = extension.get_and_instantiate('below menu', self)
        self.below_panel = extension.get_and_instantiate('below panel', self)
        self.below_userlist = extension.get_and_instantiate(
            'below userlist', self)

        self.contact_list = ContactList(session)
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroll.set_shadow_type(gtk.SHADOW_IN)
        scroll.set_border_width(1)

        self.session.signals.contact_attr_changed.subscribe(
            self._on_contact_attr_changed)
        self.session.signals.close.subscribe(self.on_disconnect)

        self.menu = None
        self.contact_menu = None
        self.group_menu = None

        self._build_menus()

        self.panel = UserPanel(session, self)
        self.panel.nick.connect('text-changed', self._on_nick_changed)
        self.panel.message.connect('text-changed', self._on_message_changed)
        self.panel.mail.connect('button_release_event', self._on_mail_click)
        self.panel.search.connect('toggled', self._on_search_toggled)
        self.panel.enabled = False

        self.entry = gtk.Entry()
        if hasattr(gtk.Entry, "set_placeholder_text"):
            self.entry.set_placeholder_text(_('Type to search...'))
        self.entry.set_icon_from_stock(0, gtk.STOCK_FIND)
        self.entry.set_icon_tooltip_text(0, _('Type to search...'))
        self.entry.set_icon_from_stock(1, gtk.STOCK_CLEAR)
        self.entry.set_icon_tooltip_text(1, _('Clear the search'))
        self.entry.connect('changed', self._on_entry_changed)
        self.entry.connect('key-press-event', self._on_entry_key_press)
        self.entry.connect('icon-press', self._on_icon_press)

        self.pack_start(self.menu, False)
        self.pack_start(self.below_menu, False)
        self.pack_start(self.panel, False)
        self.pack_start(self.below_panel, False)
        self.pack_start(self.entry, False)
        self.pack_start(scroll, True, True)
        self.pack_start(self.below_userlist, False)

        self.contact_list.contact_selected.subscribe(self._on_contact_selected)
        self.contact_list.group_selected.subscribe(self._on_group_selected)
        self.contact_list.contact_menu_selected.subscribe(
            self._on_contact_menu_selected)

        if self.session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING):
            self.contact_list.group_menu_selected.subscribe(
                self._on_group_menu_selected)

        scroll.add(self.contact_list)
        scroll.show_all()

        self.session.config.subscribe(self._on_show_userpanel_changed,
                                      'b_show_userpanel')
        self.session.config.subscribe(self._on_show_mail_inbox_changed,
                                      'b_show_mail_inbox')

        self._on_show_userpanel_changed(self.session.config.b_show_userpanel)
        self._on_show_mail_inbox_changed(self.session.config.b_show_mail_inbox)

        #extension changes
        extension.subscribe(self._on_below_userlist_changed, "below userlist")
        extension.subscribe(self._on_below_menu_changed, "below menu")
        extension.subscribe(self._on_below_panel_changed, "below panel")
コード例 #21
0
ファイル: ContactList.py プロジェクト: stlcours/emesene
    def __init__(self, session):
        '''class constructor'''
        self._model = None
        pbr = extension.get_default('avatar renderer')
        self.pbr = pbr()

        gui.ContactList.__init__(self, session)
        gtk.TreeView.__init__(self)

        self.set_enable_search(False)  # Enable our searching widget
        # with CTRL+F in MainWindow.py

        self.online_group_iter = None  # added
        self.no_group_iter = None
        self.offline_group_iter = None
        self.hide_on_filtering = False

        self.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
                                      [('emesene-contact', 0, 0),
                                       ('text/html', 0, 1),
                                       ('text/plain', 0, 2),
                                       ('emesene-invite', 0, 3)],
                                      gtk.gdk.ACTION_COPY)

        self.enable_model_drag_dest([('emesene-contact', 0, 0)],
                                    gtk.gdk.ACTION_DEFAULT)

        self.contact_handler = gui.base.ContactHandler(session, self)
        self.group_handler = gui.base.GroupHandler(session, self)

        if self.session.config.d_weights is None:
            self.session.config.d_weights = {}

        # [0] the image (None for groups),
        # [1] the object (group or contact),
        # [2] the string to display
        # [3] a boolean indicating if the pixbuf should
        #     be shown (False for groups, True for contacts)
        # [4] the status image
        # [5] an int that is used to allow ordering specified by the user
        # [6] a boolean indicating special groups always False for contacts,
        #     True for special groups like "No group"
        # [7] a boolean indicating if the contact is offline
        self._model = gtk.TreeStore(gtk.Image, object, str, bool,
                                    gtk.gdk.Pixbuf, int, bool, bool)
        self.model = self._model.filter_new(root=None)
        self.model.set_visible_func(self._visible_func)

        self._model.set_sort_func(1, self._sort_method)
        self._model.set_sort_column_id(1, gtk.SORT_ASCENDING)

        self.set_model(self.model)

        self.tooltips = Tooltips.Tooltips()
        self.connect('motion-notify-event', self.tooltips.on_motion)
        self.connect('leave-notify-event', self.tooltips.on_leave)

        self.crt = extension.get_and_instantiate('nick renderer')

        self.column = gtk.TreeViewColumn()
        self.column.set_expand(True)
        self.column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE)

        self.exp_column = gtk.TreeViewColumn()
        self.exp_column.set_max_width(16)

        self.append_column(self.exp_column)
        self.append_column(self.column)
        self.set_expander_column(self.exp_column)

        self.prepare_contactlist_column()

        self.set_search_column(2)
        self.set_headers_visible(False)

        self.connect('row-activated', self._on_row_activated)
        self.connect('button-release-event', self._on_button_press_event)
        self.connect('row-expanded', self._on_expand)
        self.connect('row-collapsed', self._on_collapse)
        self.connect('drag-data-get', self._on_drag_data_get)
        self.connect('drag-drop', self._on_drag_drop)
        extension.subscribe(self.on_nick_renderer_changed, 'nick renderer')
コード例 #22
0
ファイル: MainWindow.py プロジェクト: firemountain/emesene
    def __init__(self, session, on_new_conversation):
        """class constructor"""
        gtk.VBox.__init__(self)
        gui.MainWindowBase.__init__(self, session, on_new_conversation)

        self.quit_cb = None
        UserPanel = extension.get_default("user panel")
        ContactList = extension.get_default("contact list")

        self.below_menu = extension.get_and_instantiate("below menu", self)
        self.below_panel = extension.get_and_instantiate("below panel", self)
        self.below_userlist = extension.get_and_instantiate("below userlist", self)

        self.contact_list = ContactList(session)
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroll.set_shadow_type(gtk.SHADOW_IN)
        scroll.set_border_width(1)

        # XXX: unused
        # self.session.signals.contact_attr_changed.subscribe(
        #    self._on_contact_attr_changed)

        self.menu = None
        self.contact_menu = None
        self.group_menu = None

        self._build_menus()

        self.panel = UserPanel(session, self)
        self.panel.search.connect("toggled", self._on_search_toggled)
        self.panel.enabled = False

        self.entry = SearchEntry.SearchEntry()
        self.entry.connect("changed", self._on_entry_changed)
        self.entry.connect("key-press-event", self._on_entry_key_press)

        self.pack_start(self.menu, False)
        self.pack_start(self.below_menu, False)
        self.pack_start(self.panel, False)
        self.pack_start(self.below_panel, False)
        self.pack_start(self.entry, False)
        self.pack_start(scroll, True, True)
        self.pack_start(self.below_userlist, False)

        self.contact_list.contact_selected.subscribe(self._on_contact_selected)
        self.contact_list.group_selected.subscribe(self._on_group_selected)
        self.contact_list.contact_menu_selected.subscribe(self._on_contact_menu_selected)

        if self.session.session_has_service(e3.Session.SERVICE_GROUP_MANAGING):
            self.contact_list.group_menu_selected.subscribe(self._on_group_menu_selected)

        scroll.add(self.contact_list)
        scroll.show_all()

        self.session.config.subscribe(self._on_show_userpanel_changed, "b_show_userpanel")
        self._on_show_userpanel_changed(self.session.config.b_show_userpanel)

        # extension changes
        extension.subscribe(self._on_below_userlist_changed, "below userlist")
        extension.subscribe(self._on_below_menu_changed, "below menu")
        extension.subscribe(self._on_below_panel_changed, "below panel")
コード例 #23
0
ファイル: ContactList.py プロジェクト: firemountain/emesene
    def __init__(self, session):
        '''class constructor'''
        self._model = None
        pbr = extension.get_default('avatar renderer')
        self.pbr = pbr()

        gui.ContactList.__init__(self, session)
        gtk.TreeView.__init__(self)

        self.set_enable_search(False) # Enable our searching widget
                                      # with CTRL+F in MainWindow.py

        self.online_group = None # added
        self.online_group_iter = None # added
        self.no_group = None
        self.no_group_iter = None
        self.offline_group = None
        self.offline_group_iter = None
        self.hide_on_filtering = False

        self.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, [
                                      ('emesene-contact', 0, 0),
                                      ('text/html', 0, 1),
                                      ('text/plain', 0, 2)],
                                      gtk.gdk.ACTION_COPY)

        self.enable_model_drag_dest([('emesene-contact', 0, 0)],
                                    gtk.gdk.ACTION_DEFAULT)

        self.contact_handler = gui.base.ContactHandler(session, self)
        self.group_handler = gui.base.GroupHandler(session, self)

        if self.session.config.d_weights is None:
            self.session.config.d_weights = {}

        # [0] the image (None for groups),
        # [1] the object (group or contact),
        # [2] the string to display
        # [3] a boolean indicating if the pixbuf should
        #     be shown (False for groups, True for contacts)
        # [4] the status image
        # [5] an int that is used to allow ordering specified by the user
        # [6] a boolean indicating special groups always False for contacts,
        #     True for special groups like "No group"
        # [7] a boolean indicating if the contact is offline
        self._model = gtk.TreeStore(gtk.Image, object, str, bool,
            gtk.gdk.Pixbuf, int, bool, bool)
        self.model = self._model.filter_new(root=None)
        self.model.set_visible_func(self._visible_func)

        self._model.set_sort_func(1, self._sort_method)
        self._model.set_sort_column_id(1, gtk.SORT_ASCENDING)

        self.set_model(self.model)

        self.tooltips = Tooltips.Tooltips()
        self.connect('motion-notify-event', self.tooltips.on_motion)
        self.connect('leave-notify-event', self.tooltips.on_leave)

        self.crt = extension.get_and_instantiate('nick renderer')

        self.column = gtk.TreeViewColumn()
        self.column.set_expand(True)
        self.column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE)

        self.exp_column = gtk.TreeViewColumn()
        self.exp_column.set_max_width(16)

        self.append_column(self.exp_column)
        self.append_column(self.column)
        self.set_expander_column(self.exp_column)

        self.prepare_contactlist_column()

        self.set_search_column(2)
        self.set_headers_visible(False)

        self.connect('row-activated',  self._on_row_activated)
        self.connect('button-release-event',  self._on_button_press_event)
        self.connect('row-expanded',  self._on_expand)
        self.connect('row-collapsed',  self._on_collapse)
        self.connect('drag-data-get',  self._on_drag_data_get)
        self.connect('drag-drop',  self._on_drag_drop)
        extension.subscribe(self.on_nick_renderer_changed, 'nick renderer')