Как я могу редактировать дочернюю модель TreeModelFilters? - PullRequest
0 голосов
/ 14 марта 2012

В настоящее время я пытаюсь отфильтровать TreeView на основе ввода текстового поля, в то же время позволяя пользователю редактировать ячейки TreeView.

Проблема, с которой я столкнулсяне удается преобразовать редактирование на TreeView, когда он использует TreeModelFilter, в редактирование на дочерней модели, которое является ListStore.

signal_connect для ячейки (CellRendererText) редактирование выглядит следующим образом:

renderer.signal_connect('edited') do |w, s1, s2|
    cell_edited(s1, s2, treeview, $status)
end

def cell_edited(path, str, trvu, cell)
  if str != ""
    iter = @store.get_iter(path)
    iter[cell] = str
  end
end

Я признаю, что это то, что я обнаружил при поиске редактирования TreeViews в Gtk2, поскольку я новичок в GTK2 и GUI в целом.1015 * Как мне перевести путь в TreeViewFilter к пути в дочерней модели (ListStore)?

Или, проще говоря: когда пользователь редактирует ячейку в таблице, аон отфильтрован, как мне обновить правильную нефильтрованную запись в списке?

1 Ответ

1 голос
/ 15 марта 2012

Прежде всего, вы можете написать свой код, как показано ниже. Он более лаконичен и проверяет правильность пути:

renderer.signal_connect('edited') do  |ren, path, text|
  next unless iter = @store.get_iter(path)
  iter[$status] = text if text != ""
end

Вы делаете все правильно для обычного древовидного представления, но когда вы создаете Gtk :: TreeModelFilter, вам необходимо преобразовать отфильтрованный iter в дочерний iter, используя:

Gtk :: TreeModelFilter # convert_iter_to_child_iter (filter_iter)

http://ruby -gnome2.sourceforge.jp / JA / hiki.cgi? Gtk% 3A% 3ATreeModelFilter

Итак, ваш код должен выглядеть так:

renderer.signal_connect('edited') do  |ren, path, text|
  next unless iter = @store.get_iter(path)
  child_iter = @child_store.convert_iter_to_child(iter) 
  child_iter[$status] = text if text != ""
end

Вы должны взглянуть на visualruby.net. Я буду выпускать новую версию, которая имеет отличный просмотр списка / дерева, где у вас гораздо более простой (и более рубиновый) API. Материал Gtk становится очень сложным.

...