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

0001 /*
0002     SPDX-FileCopyrightText: 2008-2010 Volker Lanz <vl@fidra.de>
0003     SPDX-FileCopyrightText: 2014-2016 Andrius Štikonas <andrius@stikonas.eu>
0004     SPDX-FileCopyrightText: 2015 Chris Campbell <c.j.campbell@ed.ac.uk>
0005 
0006     SPDX-License-Identifier: GPL-3.0-or-later
0007 */
0008 
0009 #ifndef KPMCORE_COPYOPERATION_H
0010 #define KPMCORE_COPYOPERATION_H
0011 
0012 #include "util/libpartitionmanagerexport.h"
0013 
0014 #include "ops/operation.h"
0015 
0016 #include <QString>
0017 
0018 class Partition;
0019 class OperationStack;
0020 class Device;
0021 class Report;
0022 
0023 class CreatePartitionJob;
0024 class CheckFileSystemJob;
0025 class CopyFileSystemJob;
0026 class ResizeFileSystemJob;
0027 
0028 /** Copy a Partition.
0029 
0030     Copies a Partition from a given source Device to a Partition on a given target Device and handles overwriting
0031     the target Partition in case that is required.
0032 
0033     @author Volker Lanz <vl@fidra.de>
0034 */
0035 class LIBKPMCORE_EXPORT CopyOperation : public Operation
0036 {
0037     friend class OperationStack;
0038 
0039     Q_DISABLE_COPY(CopyOperation)
0040 
0041 public:
0042     CopyOperation(Device& targetdevice, Partition* copiedpartition, Device& sourcedevice, Partition* sourcepartition);
0043     ~CopyOperation();
0044 
0045 public:
0046     QString iconName() const override {
0047         return QStringLiteral("edit-copy");
0048     }
0049     QString description() const override {
0050         return m_Description;
0051     }
0052 
0053     bool execute(Report& parent) 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 canCopy(const Partition* p);
0061     static bool canPaste(const Partition* p, const Partition* source);
0062 
0063     static Partition* createCopy(const Partition& target, const Partition& source);
0064 
0065 protected:
0066     Partition& copiedPartition() {
0067         return *m_CopiedPartition;
0068     }
0069     const Partition& copiedPartition() const {
0070         return *m_CopiedPartition;
0071     }
0072 
0073     Device& targetDevice() {
0074         return m_TargetDevice;
0075     }
0076     const Device& targetDevice() const {
0077         return m_TargetDevice;
0078     }
0079 
0080     Device& sourceDevice() {
0081         return m_SourceDevice;
0082     }
0083     const Device& sourceDevice() const {
0084         return m_SourceDevice;
0085     }
0086 
0087     Partition& sourcePartition() {
0088         return *m_SourcePartition;
0089     }
0090     const Partition& sourcePartition() const {
0091         return *m_SourcePartition;
0092     }
0093 
0094     Partition* overwrittenPartition() {
0095         return m_OverwrittenPartition;
0096     }
0097     const Partition* overwrittenPartition() const {
0098         return m_OverwrittenPartition;
0099     }
0100 
0101     void setOverwrittenPartition(Partition* p);
0102     void setSourcePartition(Partition* p) {
0103         m_SourcePartition = p;
0104     }
0105 
0106     void cleanupOverwrittenPartition();
0107     bool mustDeleteOverwritten() const {
0108         return m_MustDeleteOverwritten;
0109     }
0110 
0111     CheckFileSystemJob* checkSourceJob() {
0112         return m_CheckSourceJob;
0113     }
0114     CreatePartitionJob* createPartitionJob() {
0115         return m_CreatePartitionJob;
0116     }
0117     CopyFileSystemJob* copyFSJob() {
0118         return m_CopyFSJob;
0119     }
0120     CheckFileSystemJob* checkTargetJob() {
0121         return m_CheckTargetJob;
0122     }
0123     ResizeFileSystemJob* maximizeJob() {
0124         return m_MaximizeJob;
0125     }
0126 
0127     QString updateDescription() const;
0128 
0129 private:
0130     Device& m_TargetDevice;
0131     Partition* m_CopiedPartition;
0132     Device& m_SourceDevice;
0133     Partition* m_SourcePartition;
0134     Partition* m_OverwrittenPartition;
0135     bool m_MustDeleteOverwritten;
0136 
0137     CheckFileSystemJob* m_CheckSourceJob;
0138     CreatePartitionJob* m_CreatePartitionJob;
0139     CopyFileSystemJob* m_CopyFSJob;
0140     CheckFileSystemJob* m_CheckTargetJob;
0141     ResizeFileSystemJob* m_MaximizeJob;
0142 
0143     QString m_Description;
0144 };
0145 
0146 #endif