Add placeholder on some search widgets
review594002
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
import gtk
|
||||
|
||||
|
||||
class PlaceholderEntry(gtk.Entry):
|
||||
|
||||
_placeholder = ''
|
||||
_default = True
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(PlaceholderEntry, self).__init__(*args, **kwargs)
|
||||
style = self.get_style()
|
||||
self._text_color_normal = style.text[gtk.STATE_NORMAL]
|
||||
self._text_color_placeholder = style.text[gtk.STATE_INSENSITIVE]
|
||||
self.connect('focus-in-event', PlaceholderEntry._focus_in)
|
||||
self.connect('focus-out-event', PlaceholderEntry._focus_out)
|
||||
|
||||
def _focus_in(self, event):
|
||||
if self._default:
|
||||
super(PlaceholderEntry, self).set_text('')
|
||||
self.modify_text(gtk.STATE_NORMAL, self._text_color_normal)
|
||||
self._default = False
|
||||
|
||||
def _focus_out(self, event=None):
|
||||
if super(PlaceholderEntry, self).get_text() == '':
|
||||
super(PlaceholderEntry, self).set_text(self._placeholder)
|
||||
self.modify_text(gtk.STATE_NORMAL, self._text_color_placeholder)
|
||||
self._default = True
|
||||
else:
|
||||
self.modify_text(gtk.STATE_NORMAL, self._text_color_normal)
|
||||
self._default = False
|
||||
|
||||
def set_placeholder_text(self, text):
|
||||
self._placeholder = text
|
||||
if not self.has_focus():
|
||||
self._focus_out()
|
||||
|
||||
def get_text(self):
|
||||
if self._default:
|
||||
return ''
|
||||
return super(PlaceholderEntry, self).get_text()
|
||||
|
||||
def set_text(self, text):
|
||||
super(PlaceholderEntry, self).set_text(text)
|
||||
if not self.has_focus():
|
||||
self._focus_out()
|
||||
|
||||
if __name__ == '__main__':
|
||||
win = gtk.Window()
|
||||
win.set_title('PlaceholderEntry')
|
||||
|
||||
def cb(window, event):
|
||||
gtk.main_quit()
|
||||
win.connect('delete-event', cb)
|
||||
vbox = gtk.VBox()
|
||||
win.add(vbox)
|
||||
|
||||
entry = gtk.Entry()
|
||||
vbox.pack_start(entry)
|
||||
|
||||
placeholder_entry = PlaceholderEntry()
|
||||
placeholder_entry.set_placeholder_text('Placeholder')
|
||||
vbox.pack_start(placeholder_entry)
|
||||
|
||||
win.show_all()
|
||||
gtk.main()
|
||||
@@ -9,6 +9,7 @@ from tryton.config import CONFIG
|
||||
import tryton.common as common
|
||||
import gettext
|
||||
from tryton.common import RPCExecute, RPCException
|
||||
from tryton.common.placeholder_entry import PlaceholderEntry
|
||||
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -33,7 +34,8 @@ class Many2Many(WidgetInterface):
|
||||
|
||||
tooltips = common.Tooltips()
|
||||
|
||||
self.wid_text = gtk.Entry()
|
||||
self.wid_text = PlaceholderEntry()
|
||||
self.wid_text.set_placeholder_text(_('Search'))
|
||||
self.wid_text.set_property('width_chars', 13)
|
||||
self.wid_text.connect('activate', self._sig_activate)
|
||||
self.wid_text.connect('focus-out-event', self._focus_out)
|
||||
@@ -41,7 +43,7 @@ class Many2Many(WidgetInterface):
|
||||
hbox.pack_start(self.wid_text, expand=True, fill=True)
|
||||
|
||||
self.but_add = gtk.Button()
|
||||
tooltips.set_tip(self.but_add, _('Add'))
|
||||
tooltips.set_tip(self.but_add, _('Add existing record'))
|
||||
self.but_add.connect('clicked', self._sig_add)
|
||||
self.but_add.connect('enter-notify-event', self.enter)
|
||||
img_add = gtk.Image()
|
||||
@@ -53,7 +55,7 @@ class Many2Many(WidgetInterface):
|
||||
hbox.pack_start(self.but_add, expand=False, fill=False)
|
||||
|
||||
self.but_remove = gtk.Button()
|
||||
tooltips.set_tip(self.but_remove, _('Remove <Del>'))
|
||||
tooltips.set_tip(self.but_remove, _('Remove selected record <Del>'))
|
||||
self.but_remove.connect('clicked', self._sig_remove)
|
||||
self.but_remove.connect('enter-notify-event', self.enter)
|
||||
img_remove = gtk.Image()
|
||||
|
||||
@@ -9,6 +9,7 @@ from tryton.gui.window.win_form import WinForm
|
||||
from tryton.config import CONFIG
|
||||
import tryton.common as common
|
||||
from tryton.common import RPCExecute, RPCException
|
||||
from tryton.common.placeholder_entry import PlaceholderEntry
|
||||
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -37,14 +38,15 @@ class One2Many(WidgetInterface):
|
||||
self.focus_out = True
|
||||
if attrs.get('add_remove'):
|
||||
|
||||
self.wid_text = gtk.Entry()
|
||||
self.wid_text = PlaceholderEntry()
|
||||
self.wid_text.set_placeholder_text(_('Search'))
|
||||
self.wid_text.set_property('width_chars', 13)
|
||||
self.wid_text.connect('activate', self._sig_activate)
|
||||
self.wid_text.connect('focus-out-event', self._focus_out)
|
||||
hbox.pack_start(self.wid_text, expand=True, fill=True)
|
||||
|
||||
self.but_add = gtk.Button()
|
||||
tooltips.set_tip(self.but_add, _('Add'))
|
||||
tooltips.set_tip(self.but_add, _('Add existing record'))
|
||||
self.but_add.connect('clicked', self._sig_add)
|
||||
self.but_add.connect('enter-notify-event', self.enter)
|
||||
img_add = gtk.Image()
|
||||
@@ -56,7 +58,8 @@ class One2Many(WidgetInterface):
|
||||
hbox.pack_start(self.but_add, expand=False, fill=False)
|
||||
|
||||
self.but_remove = gtk.Button()
|
||||
tooltips.set_tip(self.but_remove, _('Remove <Del>'))
|
||||
tooltips.set_tip(self.but_remove,
|
||||
_('Remove selected record'))
|
||||
self.but_remove.connect('clicked', self._sig_remove, True)
|
||||
self.but_remove.connect('enter-notify-event', self.enter)
|
||||
img_remove = gtk.Image()
|
||||
|
||||
@@ -8,6 +8,7 @@ import collections
|
||||
|
||||
import tryton.common as common
|
||||
from tryton.common.domain_parser import quote
|
||||
from tryton.common.placeholder_entry import PlaceholderEntry
|
||||
from tryton.translate import date_format
|
||||
from tryton.config import TRYTON_ICON
|
||||
from tryton.pyson import PYSONDecoder
|
||||
@@ -105,7 +106,8 @@ class ScreenContainer(object):
|
||||
self.filter_button.connect('toggled', self.search_box)
|
||||
hbox.pack_start(self.filter_button, expand=False, fill=False)
|
||||
|
||||
self.search_entry = gtk.Entry()
|
||||
self.search_entry = PlaceholderEntry()
|
||||
self.search_entry.set_placeholder_text(_('Search'))
|
||||
self.search_entry.set_alignment(0.0)
|
||||
self.completion = gtk.EntryCompletion()
|
||||
self.completion.set_model(gtk.ListStore(str))
|
||||
|
||||
Reference in New Issue
Block a user