Source code for kiwi.ui.comboboxentry
#
# Kiwi: a Framework and Enhanced Widgets for Python
#
# Copyright (C) 2005 Async Open Source
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
#
# Author(s): Johan Dahlin <jdahlin@async.com.br>
"""Reimplementation of GtkComboBoxEntry in Python.
The main difference between the :class:`BaseComboBoxEntry` and GtkComboBoxEntry
is that a {kiwi.ui.widgets.entry.Entry} is used instead of a GtkEntry."""
import gobject
import gtk
from kiwi.python import deprecationwarn
from kiwi.ui.entry import KiwiEntry
[docs]class BaseComboBoxEntry(gtk.ComboBox):
def __init__(self, model=None, text_column=-1):
deprecationwarn(
'ComboBoxEntry is deprecated, use ComboEntry instead',
stacklevel=3)
gtk.ComboBox.__init__(self)
self.entry = KiwiEntry()
# HACK: We need to set a private variable, this seems to
# be the only way of doing so
self.entry.start_editing(gtk.gdk.Event(gtk.gdk.BUTTON_PRESS))
self.add(self.entry)
self.entry.show()
self._text_renderer = gtk.CellRendererText()
self.pack_start(self._text_renderer, True)
self.set_active(-1)
self.entry_changed_id = self.entry.connect('changed',
self._on_entry__changed)
self._active_changed_id = self.connect("changed",
self._on_entry__active_changed)
self._has_frame_changed(None)
self.connect("notify::has-frame", self._has_frame_changed)
if not model:
model = gtk.ListStore(str)
text_column = 0
self.set_model(model)
self.set_text_column(text_column)
# Virtual methods
[docs] def do_mnemnoic_activate(self, group_cycling):
self.entry.grab_focus()
return True
[docs] def do_grab_focus(self):
self.entry.grab_focus()
# Signal handlers
def _on_entry__active_changed(self, combobox):
iter = combobox.get_active_iter()
if not iter:
return
self.entry.handler_block(self.entry_changed_id)
model = self.get_model()
self.entry.set_text(model[iter][self._text_column])
self.entry.handler_unblock(self.entry_changed_id)
def _has_frame_changed(self, pspec):
has_frame = self.get_property("has-frame")
self.entry.set_has_frame(has_frame)
def _on_entry__changed(self, entry):
self.handler_block(self._active_changed_id)
self.set_active(-1)
self.handler_unblock(self._active_changed_id)
# Public API
[docs] def set_text_column(self, text_column):
self._text_column = text_column
if text_column != -1:
self.set_attributes(self._text_renderer, text=text_column)
[docs] def get_text_column(self):
return self._text_column
# IconEntry
[docs] def set_pixbuf(self, pixbuf):
self.entry.set_pixbuf(pixbuf)
[docs] def update_background(self, color):
self.entry.update_background(color)
[docs] def get_background(self):
return self.entry.get_background()
gobject.type_register(BaseComboBoxEntry)
[docs]def test():
win = gtk.Window()
win.connect('delete-event', gtk.main_quit)
e = BaseComboBoxEntry()
win.add(e)
m = gtk.ListStore(str)
m.append(['foo'])
m.append(['bar'])
m.append(['baz'])
e.set_model(m)
win.show_all()
gtk.main()
if __name__ == '__main__':
test()