File indexing completed on 2024-04-14 05:39:30

0001 // SPDX-FileCopyrightText: 2020 Simon Persson <simon.persson@mykolab.com>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #ifndef DRIVESELECTION_H
0006 #define DRIVESELECTION_H
0007 
0008 #include <QListView>
0009 #include <QStringList>
0010 
0011 class QStandardItem;
0012 class QStandardItemModel;
0013 
0014 class BackupPlan;
0015 
0016 class DriveSelection : public QListView
0017 {
0018     Q_OBJECT
0019     Q_PROPERTY(QString selectedDrive READ selectedDrive WRITE setSelectedDrive NOTIFY selectedDriveChanged USER true)
0020     Q_PROPERTY(bool driveIsSelected READ driveIsSelected NOTIFY driveIsSelectedChanged)
0021     Q_PROPERTY(bool selectedDriveIsAccessible READ selectedDriveIsAccessible NOTIFY selectedDriveIsAccessibleChanged)
0022 public:
0023     enum DataType {
0024         UUID = Qt::UserRole + 1,
0025         UDI,
0026         TotalSpace,
0027         UsedSpace,
0028         Label,
0029         DeviceDescription,
0030         PartitionNumber,
0031         PartitionsOnDrive,
0032         FileSystem,
0033         PermissionLossWarning,
0034         SymlinkLossWarning
0035     };
0036 
0037 public:
0038     explicit DriveSelection(BackupPlan *pBackupPlan, QWidget *parent=nullptr);
0039     QString selectedDrive() const {return mSelectedUuid;}
0040     bool driveIsSelected() const {return !mSelectedUuid.isEmpty();}
0041     bool selectedDriveIsAccessible() const {return mSelectedAndAccessible;}
0042     QString mountPathOfSelectedDrive() const;
0043 
0044 public slots:
0045     void setSelectedDrive(const QString &pUuid);
0046     void saveExtraData();
0047     void updateSyncWarning(bool pSyncBackupSelected);
0048 
0049 signals:
0050     void selectedDriveChanged(const QString &pSelectedDrive);
0051     void driveIsSelectedChanged(bool pDriveIsSelected);
0052     void selectedDriveIsAccessibleChanged(bool pDriveIsSelectedAndAccessible);
0053 
0054 protected slots:
0055     void deviceAdded(const QString &pUdi);
0056     void delayedDeviceAdded();
0057     void deviceRemoved(const QString &pUdi);
0058     void accessabilityChanged(bool pAccessible, const QString &pUdi);
0059     void updateSelection(const QItemSelection &pSelected, const QItemSelection &pDeselected);
0060 
0061 protected:
0062     void paintEvent(QPaintEvent *pPaintEvent) override;
0063     int findItem(const DataType pField, const QString &pSearchString, QStandardItem **pReturnedItem = nullptr) const;
0064 
0065     QStandardItemModel *mDrivesModel;
0066     QString mSelectedUuid;
0067     BackupPlan *mBackupPlan;
0068     QStringList mDrivesToAdd;
0069     bool mSelectedAndAccessible;
0070     bool mSyncedBackupType;
0071 };
0072 
0073 #endif