Browse Source

FileManager: Save the DirectoryView's visible columns

Since these are stored as numbers, and "1,2,3,5,6" is a bit meaningless
to anyone who looks at this code, the default set of visible columns is
provided as it was before, by them all being visible except a couple
that are specifically hidden.

The callback is wrapped in a debounce() so that if set_visible_columns
() is called, we'll just save the value once instead of doing so for
each column changed.
Sam Atkins 2 years ago
parent
commit
11af5119b6
1 changed files with 13 additions and 3 deletions
  1. 13 3
      Userland/Applications/FileManager/DirectoryView.cpp

+ 13 - 3
Userland/Applications/FileManager/DirectoryView.cpp

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
- * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
+ * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -11,6 +11,7 @@
 #include <AK/NumberFormat.h>
 #include <AK/StringBuilder.h>
 #include <LibConfig/Client.h>
+#include <LibCore/Debounce.h>
 #include <LibCore/MimeData.h>
 #include <LibCore/StandardPaths.h>
 #include <LibFileSystem/FileSystem.h>
@@ -294,8 +295,17 @@ void DirectoryView::setup_table_view()
     m_table_view->set_model(m_sorting_model);
     m_table_view->set_key_column_and_sort_order(GUI::FileSystemModel::Column::Name, GUI::SortOrder::Ascending);
 
-    m_table_view->set_column_visible(GUI::FileSystemModel::Column::Inode, false);
-    m_table_view->set_column_visible(GUI::FileSystemModel::Column::SymlinkTarget, false);
+    auto visible_columns = Config::read_string("FileManager"sv, "DirectoryView"sv, "TableColumns"sv, ""sv);
+    if (visible_columns.is_empty()) {
+        m_table_view->set_column_visible(GUI::FileSystemModel::Column::Inode, false);
+        m_table_view->set_column_visible(GUI::FileSystemModel::Column::SymlinkTarget, false);
+    } else {
+        m_table_view->set_visible_columns(visible_columns);
+    }
+    m_table_view->on_visible_columns_changed = Core::debounce(100, [this]() {
+        auto visible_columns = m_table_view->get_visible_columns().release_value_but_fixme_should_propagate_errors();
+        Config::write_string("FileManager"sv, "DirectoryView"sv, "TableColumns"sv, visible_columns);
+    });
 
     m_table_view->on_activation = [&](auto& index) {
         handle_activation(index);