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
1=== modified file 'bin/widget/view/form_gtk/textbox.py'
2--- bin/widget/view/form_gtk/textbox.py 2009-01-04 22:13:17 +0000
3+++ bin/widget/view/form_gtk/textbox.py 2009-04-01 10:32:53 +0000
4@@ -1,7 +1,7 @@
5 # -*- encoding: utf-8 -*-
6 ##############################################################################
7 #
8-# OpenERP, Open Source Management Solution
9+# OpenERP, Open Source Management Solution
10 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
11 # $Id$
12 #
13@@ -33,11 +33,24 @@
14 self.widget.set_shadow_type(gtk.SHADOW_NONE)
15 self.widget.set_size_request(-1, 80)
16
17- self.tv = gtk.TextView()
18+ self.tv = gtk.TextView(buffer=None)
19 self.tv.set_wrap_mode(gtk.WRAP_WORD)
20 self.tv.connect('button_press_event', self._menu_open)
21 self.tv.set_accepts_tab(False)
22 self.tv.connect('focus-out-event', lambda x,y: self._focus_out())
23+ self.a = True
24+ self._menu_entries = [
25+ (_('Set to default value'), lambda x: self._menu_sig_default_get(), 1),
26+ (_('Set as default'), lambda x: self._menu_sig_default_set(), 1),
27+ (False,False,False),#For a separator
28+ (_(gtk.STOCK_CUT), lambda x: self._menu_cut_text(), 1),
29+ (_(gtk.STOCK_COPY), lambda x: self._menu_copy_text(), 1),
30+ (_(gtk.STOCK_PASTE), lambda x: self._menu_paste_text(),1),
31+ (_(gtk.STOCK_DELETE), lambda x: self._menu_delete(),1),
32+ (False,False,False),#For a separator
33+ (_(gtk.STOCK_SELECT_ALL), lambda x: self._menu_selectall(),1),
34+ ]
35+
36 if not attrs.get('readonly'):
37 try:
38 import gtkspell
39@@ -48,6 +61,71 @@
40 self.widget.add(self.tv)
41 self.widget.show_all()
42
43+ def _menu_cut_text(self):
44+ cbuffer = self.tv.get_buffer()
45+ start, end, valSelected = self.get_selection_iters(cbuffer)
46+ clipboard = gtk.clipboard_get("CLIPBOARD")
47+ cbuffer.select_range(start, end)
48+ cbuffer.cut_clipboard(clipboard, True)
49+
50+ def _menu_copy_text(self):
51+ cbuffer = self.tv.get_buffer()
52+ start, end, valSelected = self.get_selection_iters(cbuffer)
53+ clipboard = gtk.clipboard_get("CLIPBOARD")
54+ cbuffer.select_range(start, end)
55+ cbuffer.copy_clipboard(clipboard)
56+
57+ def _menu_paste_text(self):
58+ cbuffer = self.tv.get_buffer()
59+ start, end, valSelected = self.get_selection_iters(cbuffer)
60+ clipboard = gtk.clipboard_get("CLIPBOARD")
61+ cbuffer.select_range(start, end)
62+ cbuffer.paste_clipboard(gtk.clipboard_get(), None, True);
63+
64+ def _menu_selectall(self):
65+ cbuffer = self.tv.get_buffer()
66+ start, end = cbuffer.get_bounds()
67+ cbuffer.select_range(start, end)
68+
69+ def clipboard_text_received(self, clipboard, text, data):
70+ if not text or text == '':
71+ self.a = False
72+ return
73+ else:
74+ self.a = True
75+ return
76+
77+ def _menu_delete(self):
78+ cbuffer = self.tv.get_buffer()
79+ cbuffer.delete_selection (False, True);
80+
81+ def get_selection_iters(self, cbuffer):
82+ """This function gets the start and end selection
83+ iters from the text view. If there is no selection
84+ the current position of the cursor will be returned.
85+ Returns - start,end - gtk.TextIter objects"""
86+
87+ start = None
88+ end = None
89+
90+ if (not cbuffer):
91+ self.show_error_dlg("Text buffer not available")
92+ return start, end
93+
94+ bounds = cbuffer.get_selection_bounds();
95+ if (bounds):
96+ valSelected = True
97+ start, end = bounds
98+ else:
99+ cursor_mark = cbuffer.get_insert()
100+ """Set start and end to be gtk.TextIter objects at the
101+ position of the cursor mark"""
102+ start = cbuffer.get_iter_at_mark(cursor_mark)
103+ end = cbuffer.get_iter_at_mark(cursor_mark)
104+ valSelected = False
105+
106+ return start, end, valSelected
107+
108 def _readonly_set(self, value):
109 interface.widget_interface._readonly_set(self, value)
110 self.tv.set_editable(not value)
111@@ -73,5 +151,37 @@
112 iter_start = buffer.get_start_iter()
113 buffer.insert(iter_start, value)
114
115+ def _menu_open(self, obj, event):
116+ if event.button == 3:
117+ cbuffer = self.tv.get_buffer()
118+ clipboard = gtk.clipboard_get("CLIPBOARD")
119+
120+ menu = gtk.Menu()
121+
122+ for stock_id,callback,sensitivity in self._menu_entries:
123+ if stock_id:
124+ item = gtk.ImageMenuItem(stock_id)
125+ if callback:
126+ item.connect("activate",callback)
127+
128+ start, end, valSelected = self.get_selection_iters(cbuffer)
129+ clipboard.request_text(self.clipboard_text_received)
130+
131+ if self.a == False:
132+ sensitivity=0
133+
134+ if valSelected == False and (stock_id =="gtk-cut" or stock_id=="gtk-copy" or stock_id=="gtk-delete"):
135+ sensitivity=0
136+ else:
137+ sensitivity=1
138+
139+ item.set_sensitive(sensitivity)
140+ else:
141+ item = gtk.SeparatorMenuItem()
142+ item.show()
143+ menu.append(item)
144+ menu.popup(None,None,None,event.button,event.time)
145+ return True
146+
147 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
148

Subscribers

People subscribed via source and target branches