| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | /*=============================================================================  Library: CTK  Copyright (c) German Cancer Research Center,    Division of Medical and Biological Informatics  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at    http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License.=============================================================================*/#ifndef CTKSNIPPETREPORTMANAGER_H#define CTKSNIPPETREPORTMANAGER_H#include <ctkPluginContext.h>#include <ctkServiceReference.h>#include <service/event/ctkEventAdmin.h>#include <service/event/ctkEventHandler.h>#include <ctkPluginFrameworkLauncher.h>#include <QTime>class Report{public:  QString getTitle() const { return "dummy"; }  QString getAbsolutePath() const { return "dummy"; }};//! [Event Handler service]class ReportEventHandler : public QObject, public ctkEventHandler{  Q_OBJECT  Q_INTERFACES(ctkEventHandler)public:  void handleEvent(const ctkEvent& event)  {    QString reportTitle = event.getProperty("title").toString();    QString reportPath = event.getProperty("path").toString();    // sendReportByEmail(reportTitle, reportPath);    qDebug() << "title:" << reportTitle << "path:" << reportPath;  }};//! [Event Handler service]//! [Event Handler slot]class ReportEventHandlerUsingSlots : public QObject{  Q_OBJECTpublic slots:  void handleEvent(const ctkEvent& event)  {    QString reportTitle = event.getProperty("title").toString();    QString reportPath = event.getProperty("path").toString();    // sendReportByEmail(reportTitle, reportPath);    qDebug() << "[slot] title:" << reportTitle << "path:" << reportPath;  }};//! [Event Handler slot]class ReportManager : public QObject{  Q_OBJECTpublic:  //! [Register signal]  ReportManager(ctkPluginContext* context)  {    ctkServiceReference ref = context->getServiceReference<ctkEventAdmin>();    if (ref)    {      ctkEventAdmin* eventAdmin = context->getService<ctkEventAdmin>(ref);      // Using Qt::DirectConnection is equivalent to ctkEventAdmin::sendEvent()      eventAdmin->publishSignal(this, SIGNAL(reportGeneratedSignal(ctkDictionary)),                                "com/acme/reportgenerator/GENERATED", Qt::DirectConnection);    }  }  //! [Register signal]  //! [Emit signal]  void reportGenerated(const Report& report)  {    ctkDictionary properties;    properties["title"] = report.getTitle();    properties["path"] = report.getAbsolutePath();    properties["time"] = QTime::currentTime();    emit reportGeneratedSignal(properties);  }  //! [Emit signal]  //! [Publish event]  void reportGenerated(const Report& report, ctkPluginContext* context)  {    ctkServiceReference ref = context->getServiceReference<ctkEventAdmin>();    if (ref)    {      ctkEventAdmin* eventAdmin = context->getService<ctkEventAdmin>(ref);      ctkDictionary properties;      properties["title"] = report.getTitle();      properties["path"] = report.getAbsolutePath();      properties["time"] = QTime::currentTime();      ctkEvent reportGeneratedEvent("com/acme/reportgenerator/GENERATED", properties);      eventAdmin->sendEvent(reportGeneratedEvent);    }  }  //! [Publish event]  void reportGeneratedAsync(const Report& report, ctkPluginContext* context)  {    ctkServiceReference ref = context->getServiceReference<ctkEventAdmin>();    if (ref)    {      ctkEventAdmin* eventAdmin = context->getService<ctkEventAdmin>(ref);      ctkDictionary properties;      properties["title"] = report.getTitle();      properties["path"] = report.getAbsolutePath();      properties["time"] = QTime::currentTime();      //! [Publish event async]      ctkEvent reportGeneratedEvent("com/acme/reportgenerator/GENERATED", properties);      eventAdmin->postEvent(reportGeneratedEvent);      //! [Publish event async]    }  }  //! [Declare signal]signals:  void reportGeneratedSignal(const ctkDictionary&);  //! [Declare signal]};#endif // CTKSNIPPETREPORTMANAGER_H
 |