diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,8 @@ XmlGui ConfigWidgets TextEditor + Notifications + NotifyConfig ) find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -36,5 +36,6 @@ AtCore::AtCore AtCore::AtCoreWidgets KF5::ConfigWidgets + KF5::NotifyConfig KF5::XmlGui ) diff --git a/src/atelier.notifyrc b/src/atelier.notifyrc new file mode 100644 --- /dev/null +++ b/src/atelier.notifyrc @@ -0,0 +1,29 @@ +[Global] +IconName=atelier +Comment=Atelier Printer Host +Name=Atelier + +[Event/printerConnected] +Name=Printer Connected +Comment=The printer is connected +Action=Popup + +[Event/printerDisconnected] +Name=Printer Disconnected +Comment=The printer is disconnected +Action=Popup + +[Event/printerError] +Name=Error +Comment=An error has occurred, please check the logs for more info. +Action=Popup + +[Event/startPrint] +Name=Started Print +Comment=A print job has started +Action=Popup + +[Event/finishedPrint] +Name=Finished Print +Comment=A print job has finished +Action=Popup diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -18,6 +18,7 @@ */ #include #include +#include #include #include #include @@ -291,6 +292,11 @@ emit(profilesChanged()); }); + action = KStandardAction::configureNotifications(this, SLOT(configureNotifications()), actionCollection()); + action->setText(i18n("Configure Notifications...")); + connect(action, &QAction::triggered,[&]{ + KNotifyConfigWidget::configure(this); + }); action = actionCollection()->addAction(QStringLiteral("quit")); action->setIcon(QIcon::fromTheme("application-exit", QIcon(":/icon/exit"))); diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -15,6 +15,7 @@ target_link_libraries(AtelierWidgets AtCore::AtCore KF5::I18n + KF5::Notifications KF5::TextEditor Qt5::Charts Qt5::Core diff --git a/src/widgets/atcoreinstancewidget.cpp b/src/widgets/atcoreinstancewidget.cpp --- a/src/widgets/atcoreinstancewidget.cpp +++ b/src/widgets/atcoreinstancewidget.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include #include "atcoreinstancewidget.h" @@ -358,6 +359,8 @@ } break; case AtCore::IDLE: { stateString = i18n("Connected to %1", m_core.serial()->portName()); + KNotification::event("printerConnected", i18n("Connected"), i18n("Connected to port %1 and using profile %2.", + m_core.serial()->portName(), m_comboProfile->currentText())); emit extruderCountChanged(m_core.extruderCount()); m_logWidget->appendLog(stateString); emit disableDisconnect(false); @@ -372,6 +375,8 @@ disconnect(&m_core, &AtCore::receivedMessage, m_logWidget, &LogWidget::appendRLog); disconnect(m_core.serial(), &SerialLayer::pushedCommand, m_logWidget, &LogWidget::appendSLog); m_logWidget->appendLog(i18n("Serial disconnected")); + KNotification::event("printerDisconnected", i18n("Disconnected"), + i18n("Disconnected from %1.", m_comboProfile->currentText())); m_core.setSerialTimerInterval(100); m_connectButton->setText(i18n("Connect")); m_connectButton->setIcon(QIcon::fromTheme("network-connect", QIcon(QString(":/%1/connect").arg(m_theme)))); @@ -386,14 +391,18 @@ case AtCore::STARTPRINT: { stateString = i18n("Starting Print"); m_statusWidget->showPrintArea(true); + KNotification::event("startPrint", i18n("Started!"), i18n("The print job of profile %1 has just started.", + m_comboProfile->currentText())); connect(&m_core, &AtCore::printProgressChanged, m_statusWidget, &StatusWidget::updatePrintProgress); } break; case AtCore::FINISHEDPRINT: { stateString = i18n("Finished Print"); m_statusWidget->showPrintArea(false); disconnect(&m_core, &AtCore::printProgressChanged, m_statusWidget, &StatusWidget::updatePrintProgress); m_printAction->setText(i18n("Print")); m_printAction->setIcon(QIcon::fromTheme("media-playback-start", QIcon(QString(":/%1/start").arg(m_theme)))); + KNotification::event("finishedPrint", i18n("Finished!"), i18n("The print job of profile %1 has just finished.", + m_comboProfile->currentText())); m_logWidget->appendLog(i18n("Finished Print Job")); } break; case AtCore::BUSY: {