2009-08-18 12:43:18 +00:00
|
|
|
#!/usr/bin/python
|
|
|
|
# Terminator by Chris Jones <cmsj@tenshu.net>
|
|
|
|
# GPL v2 only
|
|
|
|
"""searchbar.py - classes necessary to provide a terminal search bar"""
|
|
|
|
|
|
|
|
import gtk
|
|
|
|
import gobject
|
|
|
|
|
|
|
|
from translation import _
|
|
|
|
|
2009-08-18 12:51:09 +00:00
|
|
|
# pylint: disable-msg=R0904
|
2009-08-18 12:43:18 +00:00
|
|
|
class Searchbar(gtk.HBox):
|
|
|
|
"""Class implementing the Searchbar widget"""
|
|
|
|
|
|
|
|
__gsignals__ = {
|
|
|
|
'do-search': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
|
|
|
|
'next-search': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
|
|
|
|
'end-search': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
|
|
|
|
}
|
|
|
|
|
|
|
|
entry = None
|
|
|
|
reslabel = None
|
|
|
|
next = None
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
"""Class initialiser"""
|
|
|
|
gtk.HBox.__init__(self)
|
2009-08-19 00:05:30 +00:00
|
|
|
self.__gobject_init__()
|
2009-08-18 12:43:18 +00:00
|
|
|
|
|
|
|
# Search text
|
|
|
|
self.entry = gtk.Entry()
|
|
|
|
self.entry.set_activates_default(True)
|
|
|
|
self.entry.show()
|
|
|
|
self.entry.connect('activate', self.do_search)
|
|
|
|
self.entry.connect('key-press-event', self.search_keypress)
|
|
|
|
|
|
|
|
# Label
|
|
|
|
label = gtk.Label(_('Search:'))
|
|
|
|
label.show()
|
|
|
|
|
|
|
|
# Result label
|
|
|
|
self.reslabel = gtk.Label('')
|
|
|
|
self.reslabel.show()
|
|
|
|
|
|
|
|
# Close Button
|
|
|
|
close = gtk.Button()
|
|
|
|
close.set_relief(gtk.RELIEF_NONE)
|
|
|
|
close.set_focus_on_click(False)
|
|
|
|
icon = gtk.Image()
|
|
|
|
icon.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
|
|
|
|
close.add(icon)
|
|
|
|
close.set_name('terminator-search-close-button')
|
|
|
|
if hasattr(close, 'set_tooltip_text'):
|
|
|
|
close.set_tooltip_text(_('Close Search bar'))
|
|
|
|
close.connect('clicked', self.end_search)
|
|
|
|
close.show_all()
|
|
|
|
|
|
|
|
# Next Button
|
|
|
|
self.next = gtk.Button(_('Next'))
|
|
|
|
self.next.connect('clicked', self.next_search)
|
|
|
|
|
|
|
|
self.pack_start(label, False)
|
|
|
|
self.pack_start(self.entry)
|
|
|
|
self.pack_start(self.reslabel, False)
|
|
|
|
self.pack_start(self.next, False, False)
|
|
|
|
self.pack_end(close, False, False)
|
|
|
|
|
|
|
|
self.show()
|
|
|
|
|
2009-08-18 12:51:09 +00:00
|
|
|
# pylint: disable-msg=W0613
|
2009-08-18 12:43:18 +00:00
|
|
|
def search_keypress(self, widget, event):
|
2009-08-18 12:48:04 +00:00
|
|
|
"""Handle keypress events"""
|
|
|
|
key = gtk.gdk.keyval_name(event.keyval)
|
|
|
|
if key == 'Escape':
|
|
|
|
self.end_search()
|
2009-08-18 12:43:18 +00:00
|
|
|
|
|
|
|
def do_search(self, widget):
|
|
|
|
"""Trap and re-emit the clicked signal"""
|
|
|
|
self.emit('do-search', widget)
|
|
|
|
|
|
|
|
def next_search(self, widget):
|
|
|
|
"""Trap and re-emit the next-search signal"""
|
|
|
|
self.emit('next-search', widget)
|
|
|
|
|
|
|
|
def end_search(self, widget):
|
|
|
|
"""Trap and re-emit the end-search signal"""
|
|
|
|
self.emit('end-search', widget)
|
|
|
|
|
|
|
|
def get_search_term(self):
|
|
|
|
"""Return the currently set search term"""
|
|
|
|
return(self.entry.get_text())
|
|
|
|
|
|
|
|
def set_search_label(self, string = ''):
|
|
|
|
"""Set the search label"""
|
|
|
|
self.reslabel.set_text(string)
|
|
|
|
|
|
|
|
def hide_next(self):
|
|
|
|
"""Hide the Next button"""
|
|
|
|
self.next.hide()
|
|
|
|
|
|
|
|
def show_next(self):
|
|
|
|
"""Show the Next button"""
|
|
|
|
self.next.show()
|
|
|
|
|
|
|
|
gobject.type_register(Searchbar)
|