1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:27:35 +00:00

FileManager: Port to GTableModel/GTableView.

Replace the custom DirectoryView widget with a GTableView subclass.
This was pleasantly straightforward and it's so cool seeing the huge
increase in app quality from GTableView. :^)
This commit is contained in:
Andreas Kling 2019-03-01 13:54:28 +01:00
parent b5dcad932e
commit ac8fb5da4c
8 changed files with 308 additions and 236 deletions

View file

@ -0,0 +1,62 @@
#pragma once
#include <LibGUI/GTableModel.h>
#include <sys/stat.h>
class DirectoryTableModel final : public GTableModel {
public:
DirectoryTableModel();
virtual ~DirectoryTableModel() override;
enum Column {
Icon = 0,
Name,
Size,
UID,
GID,
Permissions,
Inode,
__Count,
};
virtual int row_count() const override;
virtual int column_count() const override;
virtual String column_name(int column) const override;
virtual ColumnMetadata column_metadata(int column) const override;
virtual GVariant data(int row, int column) const override;
virtual void update() override;
virtual void activate(const GModelIndex&) override;
String path() const { return m_path; }
void open(const String& path);
size_t bytes_in_files() const { return m_bytes_in_files; }
private:
struct Entry {
String name;
size_t size { 0 };
mode_t mode { 0 };
uid_t uid { 0 };
uid_t gid { 0 };
ino_t inode { 0 };
bool is_directory() const { return S_ISDIR(mode); }
};
const Entry& entry(int index) const
{
if (index < m_directories.size())
return m_directories[index];
return m_files[index - m_directories.size()];
}
const GraphicsBitmap& icon_for(const Entry& entry) const;
String m_path;
Vector<Entry> m_files;
Vector<Entry> m_directories;
size_t m_bytes_in_files;
RetainPtr<GraphicsBitmap> m_directory_icon;
RetainPtr<GraphicsBitmap> m_file_icon;
RetainPtr<GraphicsBitmap> m_symlink_icon;
RetainPtr<GraphicsBitmap> m_socket_icon;
};