Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gui_for_me.py « gui_for_me - dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: cdf3b08fd5c2db4fb346e074ea9f780d6046dde4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- coding: utf-8 -*-

import gtk

from common import gajim
from plugins import GajimPlugin
from plugins.helpers import log_calls


class GuiForMe(GajimPlugin):

    @log_calls('GuiForMePlugin')
    def init(self):
        self.description = _('Gui for the \'/me\' command.')
        self.config_dialog = None  # GuiForMePluginConfigDialog(self)
        self.gui_extension_points = {
            'chat_control_base': (self.connect_with_chat_control,
                                  self.disconnect_from_chat_control),
            'chat_control_base_update_toolbar': (self.update_button_state,
                                                None)}
        self.controls = []

    @log_calls('GuiForMePlugin')
    def connect_with_chat_control(self, chat_control):
        if chat_control.widget_name != 'groupchat_control':
            return

        self.chat_control = chat_control
        control = Base(self, self.chat_control)
        self.controls.append(control)


    @log_calls('GuiForMePlugin')
    def disconnect_from_chat_control(self, chat_control):
        for control in self.controls:
            control.disconnect_from_chat_control()
        self.controls = []

    @log_calls('GuiForMePlugin')
    def update_button_state(self, chat_control):
        for base in self.controls:
            if base.chat_control != chat_control:
                continue
            base.button.set_sensitive(chat_control.contact.show != 'offline' \
            and gajim.connections[chat_control.account].connected > 0)


class Base(object):
    def __init__(self, plugin, chat_control):
        self.chat_control = chat_control
        self.plugin = plugin
        self.textview = self.chat_control.conv_textview
        self.change_cursor = False

        self.create_buttons()

    def create_buttons(self):
        # create juick button
        actions_hbox = self.chat_control.xml.get_object('actions_hbox')
        self.button = gtk.Button(label=None, stock=None, use_underline=True)
        self.button.set_property('relief', gtk.RELIEF_NONE)
        self.button.set_property('can-focus', False)
        img = gtk.Image()
        img_path = self.plugin.local_file_path('gui_for_me.png')
        pixbuf = gtk.gdk.pixbuf_new_from_file(img_path)
        iconset = gtk.IconSet(pixbuf=pixbuf)
        factory = gtk.IconFactory()
        factory.add('gui_for_me', iconset)
        factory.add_default()
        img.set_from_stock('gui_for_me', gtk.ICON_SIZE_MENU)
        self.button.set_image(img)
        self.button.set_tooltip_text(_('Insert /me to conversation input box,'
            ' at cursor position'))
        send_button = self.chat_control.xml.get_object('send_button')
        send_button_pos = actions_hbox.child_get_property(send_button,
            'position')
        actions_hbox.add_with_properties(self.button, 'position',
            send_button_pos - 1, 'expand', False)
        id_ = self.button.connect('clicked', self.on_me_button_clicked)
        self.chat_control.handlers[id_] = self.button
        self.button.show()

    def on_me_button_clicked(self, widget):
        """
        Insert /me to conversation input box, at cursor position
        """
        message_buffer = self.chat_control.msg_textview.get_buffer()
        message_buffer.insert_at_cursor('/me ')
        self.chat_control.msg_textview.grab_focus()

    def disconnect_from_chat_control(self):
        actions_hbox = self.chat_control.xml.get_object('actions_hbox')
        actions_hbox.remove(self.button)