1 /* 2 SPDX-FileCopyrightText: 2010-2018 Daniel Nicoletti <dantti12@gmail.com> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef PRINTER_MODEL_H 8 #define PRINTER_MODEL_H 9 10 #include <QStandardItemModel> 11 #include <QTimer> 12 13 #include <KCupsPrinter.h> 14 15 class KCupsRequest; 16 class Q_DECL_EXPORT PrinterModel : public QStandardItemModel 17 { 18 Q_OBJECT 19 Q_ENUMS(JobAction) 20 Q_ENUMS(Role) 21 Q_PROPERTY(int count READ count NOTIFY countChanged) 22 Q_PROPERTY(bool serverUnavailable READ serverUnavailable NOTIFY serverUnavailableChanged) 23 public: 24 enum Role { 25 DestStatus = Qt::UserRole, 26 DestState, 27 DestName, 28 DestIsDefault, 29 DestIsShared, 30 DestIsAcceptingJobs, 31 DestIsPaused, 32 DestIsClass, 33 DestLocation, 34 DestDescription, 35 DestKind, 36 DestType, 37 DestCommands, 38 DestMarkerChangeTime, 39 DestMarkers, 40 DestIconName, 41 DestRemote 42 }; 43 44 enum JobAction { 45 Cancel, 46 Hold, 47 Release, 48 Move 49 }; 50 51 explicit PrinterModel(QObject *parent = nullptr); 52 53 Qt::ItemFlags flags(const QModelIndex &index) const override; 54 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 55 int count() const; 56 bool serverUnavailable() const; 57 58 virtual QHash<int,QByteArray> roleNames() const override; 59 60 Q_INVOKABLE void pausePrinter(const QString &printerName); 61 Q_INVOKABLE void resumePrinter(const QString &printerName); 62 Q_INVOKABLE void rejectJobs(const QString &printerName); 63 Q_INVOKABLE void acceptJobs(const QString &printerName); 64 65 public slots: 66 void update(); 67 void getDestsFinished(KCupsRequest *request); 68 void slotCountChanged(); 69 70 signals: 71 void countChanged(int count); 72 void serverUnavailableChanged(bool unavailable); 73 void error(int lastError, const QString &errorTitle, const QString &errorMsg); 74 75 private slots: 76 void insertUpdatePrinterName(const QString &printerName); 77 void insertUpdatePrinter(const QString &text, 78 const QString &printerUri, 79 const QString &printerName, 80 uint printerState, 81 const QString &printerStateReasons, 82 bool printerIsAcceptingJobs); 83 void insertUpdatePrinterFinished(KCupsRequest *request); 84 void printerRemovedName(const QString &printerName); 85 void printerRemoved(const QString &text, const QString &printerUri, const QString &printerName, uint printerState, const QString &printerStateReasons, bool printerIsAcceptingJobs); 86 void printerStateChanged(const QString &text, const QString &printerUri, const QString &printerName, uint printerState, const QString &printerStateReasons, bool printerIsAcceptingJobs); 87 void printerStopped(const QString &text, const QString &printerUri, const QString &printerName, uint printerState, const QString &printerStateReasons, bool printerIsAcceptingJobs); 88 void printerRestarted(const QString &text, const QString &printerUri, const QString &printerName, uint printerState, const QString &printerStateReasons, bool printerIsAcceptingJobs); 89 void printerShutdown(const QString &text, const QString &printerUri, const QString &printerName, uint printerState, const QString &printerStateReasons, bool printerIsAcceptingJobs); 90 void printerModified(const QString &text, const QString &printerUri, const QString &printerName, uint printerState, const QString &printerStateReasons, bool printerIsAcceptingJobs); 91 void serverChanged(const QString &text); 92 93 private: 94 WId m_parentId; 95 QHash<int, QByteArray> m_roles; 96 bool m_unavailable = true; 97 98 int destRow(const QString &destName); 99 void insertDest(int pos, const KCupsPrinter &printer); 100 void updateDest(QStandardItem *item, const KCupsPrinter &printer); 101 102 QString destStatus(KCupsPrinter::Status state, const QString &message, bool isAcceptingJobs) const; 103 void clear(); 104 }; 105 106 #endif // PRINTER_MODEL_H 107