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
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")
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')
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')
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')
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')
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)
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')
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')
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
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")
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")
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
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")
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")
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
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")
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")
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')
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")
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')