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

Reply via email to