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

Reply via email to