mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
LibGUI: Support editing filenames through FileSystemModel :^)
This commit is contained in:
parent
7f8e18b86a
commit
701787b906
Notes:
sideshowbarker
2024-07-19 02:15:30 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/701787b9067
2 changed files with 23 additions and 0 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue