File indexing completed on 2024-04-28 05:46:35
0001 /* 0002 SPDX-FileCopyrightText: 2008-2010 Volker Lanz <vl@fidra.de> 0003 SPDX-FileCopyrightText: 2008 Laurent Montel <montel@kde.org> 0004 SPDX-FileCopyrightText: 2014-2017 Andrius Štikonas <andrius@stikonas.eu> 0005 0006 SPDX-License-Identifier: GPL-3.0-or-later 0007 */ 0008 0009 #if !defined(SIZEDIALOGBASE_H) 0010 0011 #define SIZEDIALOGBASE_H 0012 0013 #include <util/capacity.h> 0014 0015 #include <QtGlobal> 0016 #include <QDebug> 0017 #include <QDialog> 0018 #include <QPushButton> 0019 0020 class Device; 0021 class Partition; 0022 class PartitionTable; 0023 class SizeDialogWidget; 0024 class SizeDetailsWidget; 0025 0026 /** Base class for all dialogs moving or resizing Partitions. 0027 @author Volker Lanz <vl@fidra.de> 0028 */ 0029 class SizeDialogBase : public QDialog 0030 { 0031 Q_DISABLE_COPY(SizeDialogBase) 0032 0033 protected: 0034 SizeDialogBase(QWidget* parent, Device& device, Partition& part, qint64 minFirst, qint64 maxLast); 0035 virtual ~SizeDialogBase() {} 0036 0037 SizeDialogWidget& dialogWidget() { 0038 Q_ASSERT(m_SizeDialogWidget); 0039 return *m_SizeDialogWidget; 0040 } 0041 const SizeDialogWidget& dialogWidget() const { 0042 Q_ASSERT(m_SizeDialogWidget); 0043 return *m_SizeDialogWidget; 0044 } 0045 0046 SizeDetailsWidget& detailsWidget() { 0047 Q_ASSERT(m_SizeDetailsWidget); 0048 return *m_SizeDetailsWidget; 0049 } 0050 const SizeDetailsWidget& detailsWidget() const { 0051 Q_ASSERT(m_SizeDetailsWidget); 0052 return *m_SizeDetailsWidget; 0053 } 0054 0055 virtual const PartitionTable& partitionTable() const; 0056 virtual bool canGrow() const { 0057 return true; 0058 } 0059 virtual bool canShrink() const { 0060 return true; 0061 } 0062 virtual bool canMove() const { 0063 return true; 0064 } 0065 virtual void setupDialog(); 0066 virtual void setupConstraints(); 0067 virtual void setupConnections(); 0068 virtual Partition& partition() { 0069 return m_Partition; 0070 } 0071 virtual const Partition& partition() const { 0072 return m_Partition; 0073 } 0074 virtual Device& device() { 0075 return m_Device; 0076 } 0077 virtual const Device& device() const { 0078 return m_Device; 0079 } 0080 virtual qint64 minimumLength() const; 0081 virtual qint64 maximumLength() const; 0082 virtual qint64 minimumFirstSector() const { 0083 return m_MinimumFirstSector; 0084 } 0085 virtual qint64 maximumLastSector() const { 0086 return m_MaximumLastSector; 0087 } 0088 virtual void setDirty() {} 0089 virtual void updateSpinCapacity(qint64 newLengthInSectors); 0090 0091 virtual bool align() const; 0092 virtual qint64 minimumLastSector() const; 0093 virtual qint64 maximumFirstSector() const; 0094 0095 virtual void updateSpinFirstSector(qint64 newFirst); 0096 virtual void updateSpinFreeBefore(qint64 sectorsFreeBefore); 0097 0098 virtual void updateSpinLastSector(qint64 newLast); 0099 virtual void updateSpinFreeAfter(qint64 sectorsFreeAfter); 0100 0101 virtual void setMinimumLength(qint64 s) { 0102 m_MinimumLength = s; 0103 } 0104 virtual void setMaximumLength(qint64 s) { 0105 m_MaximumLength = s; 0106 } 0107 0108 bool isValidLVName() const { 0109 return m_IsValidLVName; 0110 } 0111 0112 protected: 0113 void onResizerWidgetFirstSectorChanged(qint64 newFirst); 0114 void onResizerWidgetLastSectorChanged(qint64 newLast); 0115 0116 void onSpinCapacityChanged(double newCapacity); 0117 void onSpinFreeBeforeChanged(double newBefore); 0118 void onSpinFreeAfterChanged(double newAfter); 0119 0120 void onSpinFirstSectorChanged(double newFirst); 0121 void onSpinLastSectorChanged(double newLast); 0122 void onAlignToggled(bool); 0123 0124 void onLVNameChanged(const QString& newName); 0125 virtual void updateOkButtonStatus(); 0126 0127 void toggleDetails(); 0128 0129 SizeDialogWidget* m_SizeDialogWidget; 0130 SizeDetailsWidget* m_SizeDetailsWidget; 0131 Device& m_Device; 0132 Partition& m_Partition; 0133 qint64 m_MinimumFirstSector; 0134 qint64 m_MaximumLastSector; 0135 qint64 m_MinimumLength; 0136 qint64 m_MaximumLength; 0137 bool m_IsValidLVName; 0138 0139 public: 0140 QPushButton* okButton; 0141 QPushButton* cancelButton; 0142 QPushButton* detailsButton; 0143 }; 0144 0145 #endif