From ea4031b6450b5ab5a01163c7ac16b5cb7f27ecdf Mon Sep 17 00:00:00 2001 From: Volker Lanz Date: Sun, 23 May 2010 20:13:46 +0000 Subject: [PATCH] add methods to each operation to return if the op targets a given device or partition svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1129811 --- src/ops/backupoperation.cpp | 11 +++++++++++ src/ops/backupoperation.h | 3 +++ src/ops/checkoperation.cpp | 11 +++++++++++ src/ops/checkoperation.h | 3 +++ src/ops/copyoperation.cpp | 10 ++++++++++ src/ops/copyoperation.h | 3 +++ src/ops/createfilesystemoperation.cpp | 11 +++++++++++ src/ops/createfilesystemoperation.h | 3 +++ src/ops/createpartitiontableoperation.cpp | 5 +++++ src/ops/createpartitiontableoperation.h | 6 ++++++ src/ops/deleteoperation.cpp | 10 ++++++++++ src/ops/deleteoperation.h | 3 +++ src/ops/newoperation.cpp | 10 ++++++++++ src/ops/newoperation.h | 3 +++ src/ops/operation.h | 3 +++ src/ops/resizeoperation.cpp | 10 ++++++++++ src/ops/resizeoperation.h | 3 +++ src/ops/restoreoperation.cpp | 10 ++++++++++ src/ops/restoreoperation.h | 3 +++ src/ops/setfilesystemlabeloperation.cpp | 11 +++++++++++ src/ops/setfilesystemlabeloperation.h | 3 +++ src/ops/setpartflagsoperation.cpp | 11 +++++++++++ src/ops/setpartflagsoperation.h | 3 +++ 23 files changed, 149 insertions(+) diff --git a/src/ops/backupoperation.cpp b/src/ops/backupoperation.cpp index 89134ff..ec4e586 100644 --- a/src/ops/backupoperation.cpp +++ b/src/ops/backupoperation.cpp @@ -20,6 +20,7 @@ #include "ops/backupoperation.h" #include "core/partition.h" +#include "core/device.h" #include "jobs/backupfilesystemjob.h" @@ -45,6 +46,16 @@ BackupOperation::BackupOperation(Device& d, Partition& p, const QString& filenam addJob(backupJob()); } +bool BackupOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool BackupOperation::targets(const Partition& p) const +{ + return p == backupPartition(); +} + QString BackupOperation::description() const { return QString(i18nc("@info/plain", "Backup partition %1 (%2, %3) to %4", backupPartition().deviceNode(), Capacity(backupPartition()).toString(), backupPartition().fileSystem().name(), fileName())); diff --git a/src/ops/backupoperation.h b/src/ops/backupoperation.h index 945029e..86020cc 100644 --- a/src/ops/backupoperation.h +++ b/src/ops/backupoperation.h @@ -46,6 +46,9 @@ class BackupOperation : public Operation void preview() {} void undo() {} + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canBackup(const Partition* p); protected: diff --git a/src/ops/checkoperation.cpp b/src/ops/checkoperation.cpp index b7a4ad1..51b5e86 100644 --- a/src/ops/checkoperation.cpp +++ b/src/ops/checkoperation.cpp @@ -20,6 +20,7 @@ #include "ops/checkoperation.h" #include "core/partition.h" +#include "core/device.h" #include "jobs/checkfilesystemjob.h" #include "jobs/resizefilesystemjob.h" @@ -46,6 +47,16 @@ CheckOperation::CheckOperation(Device& d, Partition& p) : addJob(maximizeJob()); } +bool CheckOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool CheckOperation::targets(const Partition& p) const +{ + return p == checkedPartition(); +} + QString CheckOperation::description() const { return QString(i18nc("@info/plain", "Check and repair partition %1 (%2, %3)", checkedPartition().deviceNode(), Capacity(checkedPartition()).toString(), checkedPartition().fileSystem().name())); diff --git a/src/ops/checkoperation.h b/src/ops/checkoperation.h index d8c11c8..5d4eb67 100644 --- a/src/ops/checkoperation.h +++ b/src/ops/checkoperation.h @@ -47,6 +47,9 @@ class CheckOperation : public Operation void preview() {} void undo() {} + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canCheck(const Partition* p); protected: diff --git a/src/ops/copyoperation.cpp b/src/ops/copyoperation.cpp index 23a55c9..6074613 100644 --- a/src/ops/copyoperation.cpp +++ b/src/ops/copyoperation.cpp @@ -92,6 +92,16 @@ CopyOperation::~CopyOperation() cleanupOverwrittenPartition(); } +bool CopyOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool CopyOperation::targets(const Partition& p) const +{ + return p == copiedPartition(); +} + void CopyOperation::preview() { if (overwrittenPartition()) diff --git a/src/ops/copyoperation.h b/src/ops/copyoperation.h index 75ce7fc..e0c9f56 100644 --- a/src/ops/copyoperation.h +++ b/src/ops/copyoperation.h @@ -61,6 +61,9 @@ class CopyOperation : public Operation void preview(); void undo(); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canCopy(const Partition* p); static bool canPaste(const Partition* p, const Partition* source); diff --git a/src/ops/createfilesystemoperation.cpp b/src/ops/createfilesystemoperation.cpp index dcb66fb..1a75c63 100644 --- a/src/ops/createfilesystemoperation.cpp +++ b/src/ops/createfilesystemoperation.cpp @@ -20,6 +20,7 @@ #include "ops/createfilesystemoperation.h" #include "core/partition.h" +#include "core/device.h" #include "jobs/deletefilesystemjob.h" #include "jobs/createfilesystemjob.h" @@ -64,6 +65,16 @@ CreateFileSystemOperation::~CreateFileSystemOperation() delete newFileSystem(); } +bool CreateFileSystemOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool CreateFileSystemOperation::targets(const Partition& p) const +{ + return p == partition(); +} + void CreateFileSystemOperation::preview() { partition().setFileSystem(newFileSystem()); diff --git a/src/ops/createfilesystemoperation.h b/src/ops/createfilesystemoperation.h index 3ca22e4..348362b 100644 --- a/src/ops/createfilesystemoperation.h +++ b/src/ops/createfilesystemoperation.h @@ -58,6 +58,9 @@ class CreateFileSystemOperation : public Operation void undo(); bool execute(Report& parent); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + protected: Device& targetDevice() { return m_TargetDevice; } const Device& targetDevice() const { return m_TargetDevice; } diff --git a/src/ops/createpartitiontableoperation.cpp b/src/ops/createpartitiontableoperation.cpp index 0ba011c..806868c 100644 --- a/src/ops/createpartitiontableoperation.cpp +++ b/src/ops/createpartitiontableoperation.cpp @@ -64,6 +64,11 @@ CreatePartitionTableOperation::~CreatePartitionTableOperation() delete m_PartitionTable; } +bool CreatePartitionTableOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + void CreatePartitionTableOperation::preview() { targetDevice().setPartitionTable(partitionTable()); diff --git a/src/ops/createpartitiontableoperation.h b/src/ops/createpartitiontableoperation.h index 08020e6..a79e145 100644 --- a/src/ops/createpartitiontableoperation.h +++ b/src/ops/createpartitiontableoperation.h @@ -30,6 +30,7 @@ class Device; class CreatePartitionTableJob; class PartitionTable; +class OperationStack; /** Create a PartitionTable. @author Volker Lanz @@ -39,6 +40,8 @@ class CreatePartitionTableOperation : public Operation Q_OBJECT Q_DISABLE_COPY(CreatePartitionTableOperation) + friend class OperationStack; + public: CreatePartitionTableOperation(Device& d, PartitionTable::TableType t); CreatePartitionTableOperation(Device& d, PartitionTable* ptable); @@ -51,6 +54,9 @@ class CreatePartitionTableOperation : public Operation void undo(); bool execute(Report& parent); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition&) const { return false; } + static bool canCreate(const Device* device); protected: diff --git a/src/ops/deleteoperation.cpp b/src/ops/deleteoperation.cpp index c0a579e..344707b 100644 --- a/src/ops/deleteoperation.cpp +++ b/src/ops/deleteoperation.cpp @@ -58,6 +58,16 @@ DeleteOperation::~DeleteOperation() delete m_DeletedPartition; } +bool DeleteOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool DeleteOperation::targets(const Partition& p) const +{ + return p == deletedPartition(); +} + void DeleteOperation::preview() { removePreviewPartition(targetDevice(), deletedPartition()); diff --git a/src/ops/deleteoperation.h b/src/ops/deleteoperation.h index 25a1db6..6511741 100644 --- a/src/ops/deleteoperation.h +++ b/src/ops/deleteoperation.h @@ -53,6 +53,9 @@ class DeleteOperation : public Operation void undo(); bool isSecure() const { return m_Secure; } + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canDelete(const Partition* p); protected: diff --git a/src/ops/newoperation.cpp b/src/ops/newoperation.cpp index 11d3ad5..a09327c 100644 --- a/src/ops/newoperation.cpp +++ b/src/ops/newoperation.cpp @@ -80,6 +80,16 @@ NewOperation::~NewOperation() delete m_NewPartition; } +bool NewOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool NewOperation::targets(const Partition& p) const +{ + return p == newPartition(); +} + void NewOperation::preview() { insertPreviewPartition(targetDevice(), newPartition()); diff --git a/src/ops/newoperation.h b/src/ops/newoperation.h index 37f1ff6..62d63d6 100644 --- a/src/ops/newoperation.h +++ b/src/ops/newoperation.h @@ -56,6 +56,9 @@ class NewOperation : public Operation void preview(); void undo(); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canCreateNew(const Partition* p); static Partition* createNew(const Partition& cloneFrom); diff --git a/src/ops/operation.h b/src/ops/operation.h index 39df6d6..2c737ee 100644 --- a/src/ops/operation.h +++ b/src/ops/operation.h @@ -106,6 +106,9 @@ class Operation : public QObject virtual void undo() = 0; /**< Undo applying the Operation to the current preview */ virtual bool execute(Report& parent); + virtual bool targets(const Device&) const = 0; + virtual bool targets(const Partition&) const = 0; + virtual OperationStatus status() const { return m_Status; } /**< @return the current status */ virtual QString statusText() const; virtual QIcon statusIcon() const; diff --git a/src/ops/resizeoperation.cpp b/src/ops/resizeoperation.cpp index da0f725..303c259 100644 --- a/src/ops/resizeoperation.cpp +++ b/src/ops/resizeoperation.cpp @@ -108,6 +108,16 @@ ResizeOperation::ResizeOperation(Device& d, Partition& p, qint64 newfirst, qint6 } } +bool ResizeOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool ResizeOperation::targets(const Partition& p) const +{ + return p == partition(); +} + void ResizeOperation::preview() { // If the operation has already been executed, the partition will of course have newFirstSector and diff --git a/src/ops/resizeoperation.h b/src/ops/resizeoperation.h index e371c99..39717d0 100644 --- a/src/ops/resizeoperation.h +++ b/src/ops/resizeoperation.h @@ -81,6 +81,9 @@ class ResizeOperation : public Operation void preview(); void undo(); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canGrow(const Partition* p); static bool canShrink(const Partition* p); static bool canMove(const Partition* p); diff --git a/src/ops/restoreoperation.cpp b/src/ops/restoreoperation.cpp index aac99fa..ddeaa94 100644 --- a/src/ops/restoreoperation.cpp +++ b/src/ops/restoreoperation.cpp @@ -95,6 +95,16 @@ RestoreOperation::~RestoreOperation() cleanupOverwrittenPartition(); } +bool RestoreOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool RestoreOperation::targets(const Partition& p) const +{ + return p == restorePartition(); +} + void RestoreOperation::preview() { insertPreviewPartition(targetDevice(), restorePartition()); diff --git a/src/ops/restoreoperation.h b/src/ops/restoreoperation.h index 0cb42ff..1deca46 100644 --- a/src/ops/restoreoperation.h +++ b/src/ops/restoreoperation.h @@ -62,6 +62,9 @@ class RestoreOperation : public Operation void preview(); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + static bool canRestore(const Partition* p); static Partition* createRestorePartition(const Device& device, PartitionNode& parent, qint64 start, const QString& fileName); diff --git a/src/ops/setfilesystemlabeloperation.cpp b/src/ops/setfilesystemlabeloperation.cpp index 211d1ce..851473a 100644 --- a/src/ops/setfilesystemlabeloperation.cpp +++ b/src/ops/setfilesystemlabeloperation.cpp @@ -20,6 +20,7 @@ #include "ops/setfilesystemlabeloperation.h" #include "core/partition.h" +#include "core/device.h" #include "jobs/setfilesystemlabeljob.h" @@ -44,6 +45,16 @@ SetFileSystemLabelOperation::SetFileSystemLabelOperation(Partition& p, const QSt addJob(labelJob()); } +bool SetFileSystemLabelOperation::targets(const Device& d) const +{ + return labeledPartition().parent() == d.partitionTable(); +} + +bool SetFileSystemLabelOperation::targets(const Partition& p) const +{ + return p == labeledPartition(); +} + void SetFileSystemLabelOperation::preview() { labeledPartition().fileSystem().setLabel(newLabel()); diff --git a/src/ops/setfilesystemlabeloperation.h b/src/ops/setfilesystemlabeloperation.h index 0262787..93d0ced 100644 --- a/src/ops/setfilesystemlabeloperation.h +++ b/src/ops/setfilesystemlabeloperation.h @@ -52,6 +52,9 @@ class SetFileSystemLabelOperation : public Operation void preview(); void undo(); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + protected: Partition& labeledPartition() { return m_LabeledPartition; } const Partition& labeledPartition() const { return m_LabeledPartition; } diff --git a/src/ops/setpartflagsoperation.cpp b/src/ops/setpartflagsoperation.cpp index 5e0165b..d081d29 100644 --- a/src/ops/setpartflagsoperation.cpp +++ b/src/ops/setpartflagsoperation.cpp @@ -22,6 +22,7 @@ #include "core/partition.h" #include "core/partitionnode.h" #include "core/partitiontable.h" +#include "core/device.h" #include "jobs/setpartflagsjob.h" @@ -48,6 +49,16 @@ SetPartFlagsOperation::SetPartFlagsOperation(Device& d, Partition& p, const Part addJob(flagsJob()); } +bool SetPartFlagsOperation::targets(const Device& d) const +{ + return d == targetDevice(); +} + +bool SetPartFlagsOperation::targets(const Partition& p) const +{ + return p == flagPartition(); +} + void SetPartFlagsOperation::preview() { flagPartition().setFlags(newFlags()); diff --git a/src/ops/setpartflagsoperation.h b/src/ops/setpartflagsoperation.h index 35d6a5c..72bfb75 100644 --- a/src/ops/setpartflagsoperation.h +++ b/src/ops/setpartflagsoperation.h @@ -55,6 +55,9 @@ class SetPartFlagsOperation : public Operation void preview(); void undo(); + virtual bool targets(const Device& d) const; + virtual bool targets(const Partition& p) const; + protected: Partition& flagPartition() { return m_FlagPartition; } const Partition& flagPartition() const { return m_FlagPartition; }