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