2005-10-29 16:51:47 +02:00
|
|
|
## message_textview.py
|
|
|
|
##
|
2005-12-09 18:15:30 +01:00
|
|
|
## Contributors for this file:
|
2005-10-29 16:51:47 +02:00
|
|
|
## - Yann Le Boulanger <asterix@lagaule.org>
|
|
|
|
## - Nikos Kouremenos <kourem@gmail.com>
|
|
|
|
##
|
2005-12-10 00:30:28 +01:00
|
|
|
## Copyright (C) 2003-2004 Yann Le Boulanger <asterix@lagaule.org>
|
|
|
|
## Vincent Hanquez <tab@snarc.org>
|
|
|
|
## Copyright (C) 2005 Yann Le Boulanger <asterix@lagaule.org>
|
|
|
|
## Vincent Hanquez <tab@snarc.org>
|
|
|
|
## Nikos Kouremenos <nkour@jabber.org>
|
|
|
|
## Dimitur Kirov <dkirov@gmail.com>
|
|
|
|
## Travis Shirk <travis@pobox.com>
|
|
|
|
## Norman Rasmussen <norman@rasmussen.co.za>
|
2005-10-29 16:51:47 +02:00
|
|
|
##
|
|
|
|
## This program is free software; you can redistribute it and/or modify
|
|
|
|
## it under the terms of the GNU General Public License as published
|
|
|
|
## by the Free Software Foundation; version 2 only.
|
|
|
|
##
|
|
|
|
## This program is distributed in the hope that it will be useful,
|
|
|
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
## GNU General Public License for more details.
|
|
|
|
##
|
|
|
|
|
|
|
|
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
|
2005-10-29 18:06:39 +02:00
|
|
|
(int, gtk.gdk.ModifierType ) # arguments
|
2005-10-29 16:51:47 +02:00
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
def __init__(self):
|
2005-10-29 18:06:39 +02:00
|
|
|
gtk.TextView.__init__(self)
|
|
|
|
|
2005-10-29 17:26:41 +02:00
|
|
|
# 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)
|
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
|
|
|
|
2006-04-18 17:36:16 +02:00
|
|
|
def destroy(self):
|
|
|
|
import gc
|
|
|
|
gobject.idle_add(lambda:gc.collect())
|
2005-10-29 16:51:47 +02:00
|
|
|
if gobject.pygtk_version < (2, 8, 0):
|
|
|
|
gobject.type_register(MessageTextView)
|
|
|
|
|
|
|
|
|
|
|
|
# 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)
|
2005-10-29 18:33:59 +02:00
|
|
|
|
|
|
|
# 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)
|
|
|
|
|
2005-10-29 18:06:39 +02:00
|
|
|
# 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)
|
|
|
|
|
2005-10-29 18:06:39 +02:00
|
|
|
# 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)
|