The documentation at https://docs.gtk.org/gtk4/method.ColumnView.get_sorter.html suggests you need a SortListModel
On Tue, Aug 23, 2022 at 4:32 AM Jackson Campolattaro via gtkmm-list < gtkmm-list@gnome.org> wrote: > Hello, > > I'm trying to use the Gtk ColumnView to show a custom ListModel in sorted > order. I noticed that when I set a simple sorter for a column and then sort > by that column, the order isn't changed. The UI allows me to switch between > ascending and descending, but doing so doesn't reverse the list. > > I've created a simplified example, which is supposed to show the file > paths in the current directory in alphabetical order, but doesn't: > > #include <gtkmm.h> >> #include <giomm.h> >> >> class MyWindow : public Gtk::Window { >> private: >> >> Glib::RefPtr<Gio::ListStore<Gio::File>> _listModel; >> Glib::RefPtr<Gtk::SingleSelection> _selectionModel; >> >> Gtk::ColumnView _columnView; >> >> public: >> MyWindow() { >> >> _listModel = Gio::ListStore<Gio::File>::create(); >> _selectionModel = Gtk::SingleSelection::create(_listModel); >> _columnView.set_model(_selectionModel); >> >> auto files = >> Gio::File::create_for_path(".")->enumerate_children(); >> Glib::RefPtr<Gio::FileInfo> fileInfo; >> while ((fileInfo = files->next_file())) { >> >> _listModel->append(Gio::File::create_for_path(fileInfo->get_name())); >> } >> >> auto _factory = Gtk::SignalListItemFactory::create(); >> _factory->signal_setup().connect([](auto listItem) { >> >> listItem->set_child(*Gtk::make_managed<Gtk::Label>("Placeholder!")); >> }); >> _factory->signal_bind().connect([](auto listItem) { >> auto data = >> std::dynamic_pointer_cast<Gio::File>(listItem->get_item()); >> auto label = dynamic_cast<Gtk::Label >> *>(listItem->get_child()); >> if (data && label) { >> label->set_text(data->get_path()); >> label->set_xalign(0); >> } >> }); >> >> auto column = Gtk::ColumnViewColumn::create("File Paths", >> _factory); >> _columnView.append_column(column); >> >> column->set_sorter(Gtk::StringSorter::create( >> Gtk::ClosureExpression<Glib::ustring>::create([](auto >> item) { >> auto data = >> std::dynamic_pointer_cast<Gio::File>(item); >> return data->get_path(); >> }) >> )); >> _columnView.sort_by_column(column, Gtk::SortType::ASCENDING); >> >> set_child(_columnView); >> }; >> }; >> >> int main(int argc, char *argv[]) { >> auto app = Gtk::Application::create("org.gtkmm.examples.base"); >> return app->make_window_and_run<MyWindow>(argc, argv); >> } >> > > Perhaps this is a bug, but before I report it I wanted to make sure I'm > not doing something wrong. > > Thanks, > > Jackson > _______________________________________________ > gtkmm-list mailing list > gtkmm-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtkmm-list >
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list