Можно ли указать `Gtk::TreeView` для отображения пользовательского типа?
Есть кое-что, что я не понимаю, как делать с Gtkmm 3.
У меня есть собственный тип бизнеса, который я объявил так:
enum class Eurocents : int {};
Я хотел бы сделать этот тип в Gtk::TreeView
который имеет Gtk::ListStore
как модель. Поэтому я объявляю Gtk::TreeModelColumn<Eurocents>
и добавьте его в модель. После, я append_column
эта модель столбца к Gtk::TreeView
с соответствующим названием.
После, я append_row
к модели и установите значение, соответствующее столбцу (Eurocents)100
,
В результате я получаю, что ячейка отображается пустой. Понятно так, потому что я не ожидал бы, что Gtkmm узнает, как отобразить мой произвольный тип.
Я хотел бы проинструктировать Gtkmm о том, как визуализировать мой тип.
Я уже знаю, как отображать типы Glib, такие как Glib::ustring
и форматирование в Glib::ustring
для отображения возможно, но это не предмет вопроса.
Можно ли кодировать столбцы, которые могут отображать произвольные типы, как это? И если да, то как? Что требуется для сортировки на работу?
1 ответ
Наиболее распространенным и простым способом является использование обратного вызова cell_data_func. Например, вы можете создать свой собственный экземпляр Gtk::TreeView::Column (столбец представления), упаковать средство визуализации ячеек (или более) в ваш Gtk::TreeView::Column, добавить свой Gtk:: TreeView:: Столбец TreeView с помощью Gtk::TreeView::append_column() и вызовите set_cell_data_func() для вашего Gtk::TreeView::Column (): https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeViewColumn.html
Затем обратный вызов получит значение (я) из модели и установит соответствующие значения свойств средства визуализации.
Вот пример, который показывает использование set_cell_data_func(), а также показывает другие вещи: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-examples.html.en#sec-editable-cells-example
Эта ссылка также должна быть полезной: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview.html.en#treeview-cellrenderer-details
Если вам нравится, Gtk::TreeView::insert_column_with_data_func() делает это немного более кратким: https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeView.html
Что касается сортировки, у вас должна быть возможность просто вызвать set_sort_func(), чтобы указать, как сортируется столбец: https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeSortable.html
Тогда этот обычный совет сортировки должен применяться: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-sort.html.en