/* ComboBoxCustomEntry Copyright (C) 2004 ÉRDI Gergõ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "combobox-customentry.h" using namespace Guikachu::GUI; ComboBoxCustomEntry::ComboBoxCustomEntry () { setup (); } ComboBoxCustomEntry::ComboBoxCustomEntry (const Glib::RefPtr &model, const ModelColumn &text_column): Gtk::ComboBox (model), slot_text (sigc::bind (sigc::mem_fun (*this, &ComboBoxCustomEntry::text_cb), text_column)) { setup (); } ComboBoxCustomEntry::ComboBoxCustomEntry (const Glib::RefPtr &model, const SlotText &slot_text_): Gtk::ComboBox (model), slot_text (slot_text_) { setup (); } void ComboBoxCustomEntry::setup () { block = false; entry.show (); add (entry); } ComboBoxCustomEntry::~ComboBoxCustomEntry () { block = true; } void ComboBoxCustomEntry::on_changed () { if (block) return; Gtk::TreeModel::iterator iter = get_active (); if (iter) { entry.set_text (slot_text (iter)); // We have to use g_signal_emit_by_name because Gtk::Entry // doesn't have a signal emitter for 'activate' g_signal_emit_by_name (entry.gobj (), "activate"); } } void ComboBoxCustomEntry::set_text_column (const ModelColumn &text_column) { slot_text = sigc::bind (sigc::mem_fun (*this, &ComboBoxCustomEntry::text_cb), text_column); } void ComboBoxCustomEntry::set_text_func (const SlotText &slot) { slot_text = slot; } Glib::ustring ComboBoxCustomEntry::text_cb (const Gtk::TreeModel::iterator &iter, const ModelColumn &text_column) const { return (*iter)[text_column]; }