GTK + CellRendererCombo Pass Дополнительная информация о signal_edited - PullRequest
1 голос
/ 08 декабря 2010

Я создаю Gtk :: CellRendererCombo в Gtk :: TreeView следующим образом:

Gtk::CellRendererCombo *someRenderer = manage(new Gtk::CellRendererCombo());
someRenderer->property_has_entry() = false;
someRenderer->property_text_column() = 0;
someRenderer->property_editable() = true;
someRenderer->property_model() = m_someListStore;
someRenderer->signal_edited().connect(sigc::mem_fun(*this, &SomeClass::onEdited));
col = manage(new Gtk::TreeViewColumn(_("Some Column Name"),*someRenderer));

Где соответствующее хранилище списка "m_someListStore" создается как:

{
Gtk::TreeModel::ColumnRecord colRec;
colRec.add(someList_str);
colRec.add(someList_id);
m_someListStore = Gtk::ListStore::create(colRec);
}

Gtk::TreeModel::iterator itr1 = m_someListStore->append();
(*itr1)[lotInfoCol_id] = 0;
(*itr1)[lotInfoCol_str] = "Zero";
itr1 = m_someListStore->append();
(*itr1)[lotInfoCol_id] = 1;
(*itr1)[lotInfoCol_str] = "One";
etc...

Myпроблема заключается в том, что когда я выбираю из CellRenderer Combo, он обрабатывается методом SomeClass :: onEdited.

void SomeClass::onEdited(const Glib::ustring& path_string, const Glib::ustring& new_text)
{
  Gtk::TreePath path(path_string);
  Gtk::TreeModel::iterator iter = m_TreeViewListStore->get_iter(path);
  if(iter)
  {
    Gtk::TreeRow row = *iter;
    row[m_TreeViewModel.some_column] = new_text;
  }
}

new_text содержит выбранное строковое значение в моем CellRendererCombo (someList_str).Можно ли как-то передать идентификатор int (someList_id)?

Спасибо.

1 Ответ

0 голосов
/ 15 декабря 2010

На этой странице из документации по gtkmm показано, как использовать шаблонный класс sigc::bind<> для передачи дополнительных параметров в обработчик сигнала.

Это кажется более или менее осуждаемым разработчиками gtkmm, но для меня (раскрытие: с довольно длинным фоновым программированием GTK + на старом старом C) это кажется вполне естественным. Не все является подклассом виджета.

...