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