Merge lp:~openerp-commiter/openobject-client/text_popup_menu into lp:~openerp/openobject-client/old_trunk

Proposed by Jay Vora (Serpent Consulting Services)
Status: Needs review
Proposed branch: lp:~openerp-commiter/openobject-client/text_popup_menu
Merge into: lp:~openerp/openobject-client/old_trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~openerp-commiter/openobject-client/text_popup_menu
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+5130@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jay Vora (Serpent Consulting Services) (jayvora) wrote :

A branch which contains a code for contextmenu display on the right click of mouse on the text widget.(menuitems: set to default, set as default, cut,copy,paste,select all).

We can apply this utility to all char widgets.

Thanks.

Screenshots:
http://picasaweb.google.com/jay.vora4ce/Screenshots#5319986816512519906
http://picasaweb.google.com/jay.vora4ce/Screenshots#5319986818730110626

Unmerged revisions

951. By Jay Vora (Serpent Consulting Services)

Corrections: added select all

950. By Jay Vora (Serpent Consulting Services)

Merged from Trunk

949. By sme (OpenERP)

text editing features like cut, copy, paste added

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/widget/view/form_gtk/textbox.py'
--- bin/widget/view/form_gtk/textbox.py 2009-01-04 22:13:17 +0000
+++ bin/widget/view/form_gtk/textbox.py 2009-04-01 10:32:53 +0000
@@ -1,7 +1,7 @@
1# -*- encoding: utf-8 -*-1# -*- encoding: utf-8 -*-
2##############################################################################2##############################################################################
3#3#
4# OpenERP, Open Source Management Solution 4# OpenERP, Open Source Management Solution
5# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved5# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
6# $Id$6# $Id$
7#7#
@@ -33,11 +33,24 @@
33 self.widget.set_shadow_type(gtk.SHADOW_NONE)33 self.widget.set_shadow_type(gtk.SHADOW_NONE)
34 self.widget.set_size_request(-1, 80)34 self.widget.set_size_request(-1, 80)
3535
36 self.tv = gtk.TextView()36 self.tv = gtk.TextView(buffer=None)
37 self.tv.set_wrap_mode(gtk.WRAP_WORD)37 self.tv.set_wrap_mode(gtk.WRAP_WORD)
38 self.tv.connect('button_press_event', self._menu_open)38 self.tv.connect('button_press_event', self._menu_open)
39 self.tv.set_accepts_tab(False)39 self.tv.set_accepts_tab(False)
40 self.tv.connect('focus-out-event', lambda x,y: self._focus_out())40 self.tv.connect('focus-out-event', lambda x,y: self._focus_out())
41 self.a = True
42 self._menu_entries = [
43 (_('Set to default value'), lambda x: self._menu_sig_default_get(), 1),
44 (_('Set as default'), lambda x: self._menu_sig_default_set(), 1),
45 (False,False,False),#For a separator
46 (_(gtk.STOCK_CUT), lambda x: self._menu_cut_text(), 1),
47 (_(gtk.STOCK_COPY), lambda x: self._menu_copy_text(), 1),
48 (_(gtk.STOCK_PASTE), lambda x: self._menu_paste_text(),1),
49 (_(gtk.STOCK_DELETE), lambda x: self._menu_delete(),1),
50 (False,False,False),#For a separator
51 (_(gtk.STOCK_SELECT_ALL), lambda x: self._menu_selectall(),1),
52 ]
53
41 if not attrs.get('readonly'):54 if not attrs.get('readonly'):
42 try:55 try:
43 import gtkspell56 import gtkspell
@@ -48,6 +61,71 @@
48 self.widget.add(self.tv)61 self.widget.add(self.tv)
49 self.widget.show_all()62 self.widget.show_all()
5063
64 def _menu_cut_text(self):
65 cbuffer = self.tv.get_buffer()
66 start, end, valSelected = self.get_selection_iters(cbuffer)
67 clipboard = gtk.clipboard_get("CLIPBOARD")
68 cbuffer.select_range(start, end)
69 cbuffer.cut_clipboard(clipboard, True)
70
71 def _menu_copy_text(self):
72 cbuffer = self.tv.get_buffer()
73 start, end, valSelected = self.get_selection_iters(cbuffer)
74 clipboard = gtk.clipboard_get("CLIPBOARD")
75 cbuffer.select_range(start, end)
76 cbuffer.copy_clipboard(clipboard)
77
78 def _menu_paste_text(self):
79 cbuffer = self.tv.get_buffer()
80 start, end, valSelected = self.get_selection_iters(cbuffer)
81 clipboard = gtk.clipboard_get("CLIPBOARD")
82 cbuffer.select_range(start, end)
83 cbuffer.paste_clipboard(gtk.clipboard_get(), None, True);
84
85 def _menu_selectall(self):
86 cbuffer = self.tv.get_buffer()
87 start, end = cbuffer.get_bounds()
88 cbuffer.select_range(start, end)
89
90 def clipboard_text_received(self, clipboard, text, data):
91 if not text or text == '':
92 self.a = False
93 return
94 else:
95 self.a = True
96 return
97
98 def _menu_delete(self):
99 cbuffer = self.tv.get_buffer()
100 cbuffer.delete_selection (False, True);
101
102 def get_selection_iters(self, cbuffer):
103 """This function gets the start and end selection
104 iters from the text view. If there is no selection
105 the current position of the cursor will be returned.
106 Returns - start,end - gtk.TextIter objects"""
107
108 start = None
109 end = None
110
111 if (not cbuffer):
112 self.show_error_dlg("Text buffer not available")
113 return start, end
114
115 bounds = cbuffer.get_selection_bounds();
116 if (bounds):
117 valSelected = True
118 start, end = bounds
119 else:
120 cursor_mark = cbuffer.get_insert()
121 """Set start and end to be gtk.TextIter objects at the
122 position of the cursor mark"""
123 start = cbuffer.get_iter_at_mark(cursor_mark)
124 end = cbuffer.get_iter_at_mark(cursor_mark)
125 valSelected = False
126
127 return start, end, valSelected
128
51 def _readonly_set(self, value):129 def _readonly_set(self, value):
52 interface.widget_interface._readonly_set(self, value)130 interface.widget_interface._readonly_set(self, value)
53 self.tv.set_editable(not value)131 self.tv.set_editable(not value)
@@ -73,5 +151,37 @@
73 iter_start = buffer.get_start_iter()151 iter_start = buffer.get_start_iter()
74 buffer.insert(iter_start, value)152 buffer.insert(iter_start, value)
75153
154 def _menu_open(self, obj, event):
155 if event.button == 3:
156 cbuffer = self.tv.get_buffer()
157 clipboard = gtk.clipboard_get("CLIPBOARD")
158
159 menu = gtk.Menu()
160
161 for stock_id,callback,sensitivity in self._menu_entries:
162 if stock_id:
163 item = gtk.ImageMenuItem(stock_id)
164 if callback:
165 item.connect("activate",callback)
166
167 start, end, valSelected = self.get_selection_iters(cbuffer)
168 clipboard.request_text(self.clipboard_text_received)
169
170 if self.a == False:
171 sensitivity=0
172
173 if valSelected == False and (stock_id =="gtk-cut" or stock_id=="gtk-copy" or stock_id=="gtk-delete"):
174 sensitivity=0
175 else:
176 sensitivity=1
177
178 item.set_sensitive(sensitivity)
179 else:
180 item = gtk.SeparatorMenuItem()
181 item.show()
182 menu.append(item)
183 menu.popup(None,None,None,event.button,event.time)
184 return True
185
76# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:186# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
77187

Subscribers

People subscribed via source and target branches