gajim-plural/src/message_textview.py

116 lines
3.9 KiB
Python
Raw Normal View History

## src/message_textview.py
2005-10-29 16:51:47 +02:00
##
## Copyright (C) 2003-2007 Yann Leboulanger <asterix AT lagaule.org>
## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com>
## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com>
## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
2005-10-29 16:51:47 +02:00
##
## This file is part of Gajim.
##
## Gajim is free software; you can redistribute it and/or modify
2005-10-29 16:51:47 +02:00
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 3 only.
2005-10-29 16:51:47 +02:00
##
## Gajim is distributed in the hope that it will be useful,
2005-10-29 16:51:47 +02:00
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2005-10-29 16:51:47 +02:00
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
##
2005-10-29 16:51:47 +02:00
import gtk
import gobject
class MessageTextView(gtk.TextView):
2005-10-29 17:30:24 +02:00
'''Class for the message textview (where user writes new messages)
for chat/groupchat windows'''
2005-10-29 16:51:47 +02:00
__gsignals__ = dict(
mykeypress = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION,
None, # return value
(int, gtk.gdk.ModifierType ) # arguments
2005-10-29 16:51:47 +02:00
)
)
def __init__(self):
gtk.TextView.__init__(self)
# set properties
self.set_border_width(1)
self.set_accepts_tab(True)
self.set_editable(True)
self.set_cursor_visible(True)
self.set_wrap_mode(gtk.WRAP_WORD_CHAR)
2005-10-29 17:03:50 +02:00
self.set_left_margin(2)
self.set_right_margin(2)
self.set_pixels_above_lines(2)
self.set_pixels_below_lines(2)
2005-10-29 16:51:47 +02:00
self.lang = None # Lang used for spell checking
def destroy(self):
import gc
gobject.idle_add(lambda:gc.collect())
def clear(self, widget = None):
'''clear text in the textview'''
buffer = self.get_buffer()
start, end = buffer.get_bounds()
buffer.delete(start, end)
2005-10-29 16:51:47 +02:00
# We register depending on keysym and modifier some bindings
# but we also pass those as param so we can construct fake Event
2005-11-02 20:01:17 +01:00
# Here we register bindings for those combinations that there is NO DEFAULT
# action to be done by gtk TextView. In such case we should not add a binding
# as the default action comes first and our bindings is useless. In that case
# we catch and do stuff before default action in normal key_press_event
# and we also return True there to stop the default action from running
2005-10-29 16:51:47 +02:00
# CTRL + SHIFT + TAB
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.ISO_Left_Tab,
gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.ISO_Left_Tab,
gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
# CTRL + TAB
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab,
gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Tab,
gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
# TAB
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab,
0, 'mykeypress', int, gtk.keysyms.Tab, gtk.gdk.ModifierType, 0)
2005-10-29 16:51:47 +02:00
# CTRL + UP
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Up,
gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Up,
gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
# CTRL + DOWN
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Down,
gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Down,
gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
# ENTER
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return,
0, 'mykeypress', int, gtk.keysyms.Return,
gtk.gdk.ModifierType, 0)
# Ctrl + Enter
2005-10-29 16:51:47 +02:00
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return,
gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Return,
gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
# Keypad Enter
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.KP_Enter,
0, 'mykeypress', int, gtk.keysyms.KP_Enter,
gtk.gdk.ModifierType, 0)
# Ctrl + Keypad Enter
2005-10-29 16:51:47 +02:00
gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.KP_Enter,
gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.KP_Enter,
gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
# vim: se ts=3: