summaryrefslogtreecommitdiff
path: root/Userland/Applications/PartitionEditor/PartitionModel.h
diff options
context:
space:
mode:
authorSamuel Bowman <sam@sambowman.tech>2022-06-27 22:48:30 -0400
committerLinus Groh <mail@linusgroh.de>2022-07-21 20:13:44 +0100
commit7a8953a833e5243df4809ae8b9bffc3a1bab10e1 (patch)
treedcb516fe7fb75f437061ba54716fab31dd401558 /Userland/Applications/PartitionEditor/PartitionModel.h
parent7b8088c78d66f4d4a551c626971276d148907820 (diff)
downloadserenity-7a8953a833e5243df4809ae8b9bffc3a1bab10e1.zip
PartitionEditor: Add the beginnings of a partition editor :^)
This adds a new application PartitionEditor which will eventually be used to create and edit partition tables. Since LibPartition does not know how to write partition tables yet, it is currently read-only. Devices are discovered by scanning /dev for block device files. Since block devices are chmod 600, PartitionEditor be must run as root. By default Serenity uses the entire disk for the ext2 filesystem without a partition table. This isn't useful for testing as the partition list for the default disk will be empty. To test properly, I created a few disk images using various partitioning schemes (MBR, EBR, and GPT) and attached them using the following command: export SERENITY_EXTRA_QEMU_ARGS=" -drive file=/path/to/mbr.img,format=raw,index=1,media=disk -drive file=/path/to/ebr.img,format=raw,index=2,media=disk -drive file=/path/to/gpt.img,format=raw,index=3,media=disk"
Diffstat (limited to 'Userland/Applications/PartitionEditor/PartitionModel.h')
-rw-r--r--Userland/Applications/PartitionEditor/PartitionModel.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/Userland/Applications/PartitionEditor/PartitionModel.h b/Userland/Applications/PartitionEditor/PartitionModel.h
new file mode 100644
index 0000000000..65be6dac7f
--- /dev/null
+++ b/Userland/Applications/PartitionEditor/PartitionModel.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2022, Samuel Bowman <sam@sambowman.tech>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibGUI/Model.h>
+#include <LibPartition/PartitionTable.h>
+
+namespace PartitionEditor {
+
+class PartitionModel final : public GUI::Model {
+public:
+ enum Column {
+ Partition,
+ StartBlock,
+ EndBlock,
+ __Count,
+ };
+
+ static NonnullRefPtr<PartitionModel> create() { return adopt_ref(*new PartitionModel()); }
+ virtual ~PartitionModel() override = default;
+
+ virtual int row_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return m_partition_table->partitions_count(); }
+ virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return Column::__Count; }
+ virtual String column_name(int) const override;
+ virtual GUI::Variant data(GUI::ModelIndex const&, GUI::ModelRole) const override;
+
+ ErrorOr<void> set_device_path(String const&);
+
+private:
+ PartitionModel() = default;
+
+ OwnPtr<Partition::PartitionTable> m_partition_table;
+};
+
+}