LibGUI: Support editing filenames through FileSystemModel :^)

This commit is contained in:
Andreas Kling 2020-09-24 11:30:14 +02:00
parent 7f8e18b86a
commit 701787b906
Notes: sideshowbarker 2024-07-19 02:15:30 +09:00
2 changed files with 23 additions and 0 deletions

View file

@ -39,6 +39,7 @@
#include <grp.h>
#include <pwd.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
@ -606,4 +607,24 @@ void FileSystemModel::set_should_show_dotfiles(bool show)
update();
}
bool FileSystemModel::is_editable(const ModelIndex& index) const
{
if (!index.is_valid())
return false;
return index.column() == Column::Name;
}
void FileSystemModel::set_data(const ModelIndex& index, const Variant& data)
{
ASSERT(is_editable(index));
Node& node = const_cast<Node&>(this->node(index));
auto dirname = LexicalPath(node.full_path()).dirname();
auto new_full_path = String::formatted("{}/{}", dirname, data.to_string());
int rc = rename(node.full_path().characters(), new_full_path.characters());
if (rc < 0) {
if (on_error)
on_error(errno, strerror(errno));
}
}
}

View file

@ -149,6 +149,8 @@ public:
virtual StringView drag_data_type() const override { return "text/uri-list"; }
virtual bool accepts_drag(const ModelIndex&, const StringView& data_type) override;
virtual bool is_column_sortable(int column_index) const override { return column_index != Column::Icon; }
virtual bool is_editable(const ModelIndex&) const override;
virtual void set_data(const ModelIndex&, const Variant&) override;
static String timestamp_string(time_t timestamp)
{