File indexing completed on 2024-05-05 05:48:52

0001 /*
0002     SPDX-FileCopyrightText: 2008-2010 Volker Lanz <vl@fidra.de>
0003     SPDX-FileCopyrightText: 2012-2016 Andrius Štikonas <andrius@stikonas.eu>
0004     SPDX-FileCopyrightText: 2015 Chris Campbell <c.j.campbell@ed.ac.uk>
0005     SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org>
0006     SPDX-FileCopyrightText: 2020 Gaël PORTAY <gael.portay@collabora.com>
0007 
0008     SPDX-License-Identifier: GPL-3.0-or-later
0009 */
0010 
0011 #ifndef KPMCORE_NEWOPERATION_H
0012 #define KPMCORE_NEWOPERATION_H
0013 
0014 #include "fs/filesystem.h"
0015 #include "ops/operation.h"
0016 #include "util/libpartitionmanagerexport.h"
0017 
0018 #include <QString>
0019 
0020 struct NewOperationPrivate;
0021 class Device;
0022 class OperationStack;
0023 
0024 class CreatePartitionJob;
0025 class SetPartitionLabelJob;
0026 class SetPartitionUUIDJob;
0027 class SetPartitionAttributesJob;
0028 class CreateFileSystemJob;
0029 class SetFileSystemLabelJob;
0030 class SetPartFlagsJob;
0031 class CheckFileSystemJob;
0032 
0033 /** Create a Partition.
0034 
0035     Creates the given Partition on the given Device.
0036 
0037     @author Volker Lanz <vl@fidra.de>
0038 */
0039 class LIBKPMCORE_EXPORT NewOperation : public Operation
0040 {
0041     friend class OperationStack;
0042 
0043     Q_DISABLE_COPY(NewOperation)
0044 
0045 public:
0046     NewOperation(Device& d, Partition* p);
0047     ~NewOperation();
0048 
0049 public:
0050     QString iconName() const override {
0051         return QStringLiteral("document-new");
0052     }
0053     QString description() const override;
0054     void preview() override;
0055     void undo() override;
0056 
0057     bool targets(const Device& d) const override;
0058     bool targets(const Partition& p) const override;
0059 
0060     static bool canCreateNew(const Partition* p);
0061     static Partition* createNew(const Partition& cloneFrom, FileSystem::Type type);
0062 
0063 protected:
0064     Partition& newPartition();
0065     const Partition& newPartition() const;
0066 
0067     Device& targetDevice();
0068     const Device& targetDevice() const;
0069 
0070     CreatePartitionJob* createPartitionJob();
0071     SetPartitionLabelJob* setPartitionLabelJob();
0072     SetPartitionUUIDJob* setPartitionUUIDJob();
0073     SetPartitionAttributesJob* setPartitionAttributesJob();
0074     CreateFileSystemJob* createFileSystemJob();
0075     SetPartFlagsJob* setPartFlagsJob();
0076     SetFileSystemLabelJob* setLabelJob();
0077     CheckFileSystemJob* checkJob();
0078 
0079 private:
0080     std::unique_ptr<NewOperationPrivate> d_ptr;
0081 };
0082 
0083 #endif