root/branches/gajim_0.11/src/message_textview.py

Revision 6980, 4.1 kB (checked in by nk, 23 months ago)

put my email (and jid), not one of my JIDs

Line 
1##      message_textview.py
2##
3## Contributors for this file:
4## - Yann Le Boulanger <asterix@lagaule.org>
5## - Nikos Kouremenos <kourem@gmail.com>
6##
7## Copyright (C) 2003-2004 Yann Le Boulanger <asterix@lagaule.org>
8##                         Vincent Hanquez <tab@snarc.org>
9## Copyright (C) 2005 Yann Le Boulanger <asterix@lagaule.org>
10##                    Vincent Hanquez <tab@snarc.org>
11##                    Nikos Kouremenos <kourem@gmail.com>
12##                    Dimitur Kirov <dkirov@gmail.com>
13##                    Travis Shirk <travis@pobox.com>
14##                    Norman Rasmussen <norman@rasmussen.co.za>
15##
16## This program is free software; you can redistribute it and/or modify
17## it under the terms of the GNU General Public License as published
18## by the Free Software Foundation; version 2 only.
19##
20## This program is distributed in the hope that it will be useful,
21## but WITHOUT ANY WARRANTY; without even the implied warranty of
22## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23## GNU General Public License for more details.
24##
25
26import gtk
27import gobject
28
29class MessageTextView(gtk.TextView):
30        '''Class for the message textview (where user writes new messages)
31        for chat/groupchat windows'''
32        __gsignals__ = dict(
33                mykeypress = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION,
34                                None, # return value
35                                (int, gtk.gdk.ModifierType ) # arguments
36                        )
37                )
38               
39        def __init__(self):
40                gtk.TextView.__init__(self)
41               
42                # set properties
43                self.set_border_width(1)
44                self.set_accepts_tab(True)
45                self.set_editable(True)
46                self.set_cursor_visible(True)
47                self.set_wrap_mode(gtk.WRAP_WORD_CHAR)
48                self.set_left_margin(2)
49                self.set_right_margin(2)
50                self.set_pixels_above_lines(2)
51                self.set_pixels_below_lines(2)
52
53                self.lang = None # Lang used for spell checking
54
55        def destroy(self):
56                import gc
57                gobject.idle_add(lambda:gc.collect())
58
59        def clear(self, widget = None):
60                '''clear text in the textview'''
61                buffer = self.get_buffer()
62                start, end = buffer.get_bounds()
63                buffer.delete(start, end)
64
65if gobject.pygtk_version < (2, 8, 0):
66        gobject.type_register(MessageTextView)
67
68
69# We register depending on keysym and modifier some bindings
70# but we also pass those as param so we can construct fake Event
71# Here we register bindings for those combinations that there is NO DEFAULT
72# action to be done by gtk TextView. In such case we should not add a binding
73# as the default action comes first and our bindings is useless. In that case
74# we catch and do stuff before default action in normal key_press_event
75# and we also return True there to stop the default action from running
76
77# CTRL + SHIFT + TAB
78gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.ISO_Left_Tab,
79        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.ISO_Left_Tab,
80        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
81
82# CTRL + TAB
83gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab,
84        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Tab,
85        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
86       
87# TAB
88gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab,
89        0, 'mykeypress', int, gtk.keysyms.Tab,  gtk.gdk.ModifierType, 0)
90
91# CTRL + UP
92gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Up,
93        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Up,
94        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
95
96# CTRL + DOWN
97gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Down,
98        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Down,
99        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
100
101# ENTER
102gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return,
103        0, 'mykeypress', int, gtk.keysyms.Return,
104        gtk.gdk.ModifierType, 0)
105
106# Ctrl + Enter
107gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return,
108        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Return,
109        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
110
111# Keypad Enter
112gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.KP_Enter,
113        0, 'mykeypress', int, gtk.keysyms.KP_Enter,
114        gtk.gdk.ModifierType, 0)
115
116# Ctrl + Keypad Enter
117gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.KP_Enter,
118        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.KP_Enter,
119        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
Note: See TracBrowser for help on using the browser.