Initial commit
This commit is contained in:
92
src/Insight/Insight.hpp
Normal file
92
src/Insight/Insight.hpp
Normal file
@@ -0,0 +1,92 @@
|
||||
#pragma once
|
||||
|
||||
#include <QtCore>
|
||||
#include <QApplication>
|
||||
|
||||
#include "UserInterfaces/InsightWindow/InsightWindow.hpp"
|
||||
#include "src/Helpers/Thread.hpp"
|
||||
#include "src/ApplicationConfig.hpp"
|
||||
#include "src/EventManager/EventManager.hpp"
|
||||
#include "src/EventManager/EventListener.hpp"
|
||||
#include "src/Targets/TargetDescriptor.hpp"
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
/**
|
||||
* The Insight component provides a GUI for insight into the target's GPIO state.
|
||||
* Insight relies heavily on the Qt framework - it's practically a small Qt application. Each supported target
|
||||
* package variant implements a custom Qt widget that presents the user with the current state of the target's GPIO
|
||||
* pins, as well as the ability to manipulate the pin states of output pins by clicking on them.
|
||||
*
|
||||
* The Insight component occupies the Bloom's main thread. See Application::run() for more.
|
||||
*/
|
||||
class Insight: public QObject, public Thread
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
ApplicationConfig applicationConfig;
|
||||
EnvironmentConfig environmentConfig;
|
||||
|
||||
EventManager& eventManager;
|
||||
EventListenerPointer eventListener = std::make_shared<EventListener>("InsightEventListener");
|
||||
|
||||
QApplication* application = nullptr;
|
||||
InsightWindow mainWindow;
|
||||
|
||||
/**
|
||||
* Insight consists of two threads - the main thread where the main Qt event loop runs (for the GUI), and
|
||||
* a single worker thread to handle any blocking/time-expensive operations.
|
||||
*/
|
||||
QThread* workerThread;
|
||||
|
||||
void startup();
|
||||
|
||||
Targets::TargetDescriptor getTargetDescriptor();
|
||||
|
||||
public:
|
||||
Insight(EventManager& eventManager): eventManager(eventManager) {};
|
||||
|
||||
void setApplicationConfig(const ApplicationConfig& applicationConfig) {
|
||||
this->applicationConfig = applicationConfig;
|
||||
}
|
||||
|
||||
void setEnvironmentConfig(const EnvironmentConfig& environmentConfig) {
|
||||
this->environmentConfig = environmentConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Entry point for Insight.
|
||||
*/
|
||||
void run();
|
||||
|
||||
/**
|
||||
* Shuts down Insight. Called when the user closes the Insight window.
|
||||
*/
|
||||
void shutdown();
|
||||
|
||||
/**
|
||||
* Because Insight occupies the main thread, it must handle any application shutdown requests.
|
||||
*
|
||||
* @param event
|
||||
*/
|
||||
void onShutdownApplicationEvent(EventPointer<ShutdownApplication> event);
|
||||
|
||||
/**
|
||||
* If the something horrible was to happen and the TC dies unexpectedly, Insight will shutdown in response.
|
||||
*
|
||||
* @param event
|
||||
*/
|
||||
void onTargetControllerStateChangedEvent(EventPointer<TargetControllerStateChanged> event);
|
||||
|
||||
/**
|
||||
* Dispatches any events currently in the queue.
|
||||
*
|
||||
* Because Insight is effectively a Qt application, we cannot use our own event loop. We must use Qt's event
|
||||
* loop. We do this by utilizing a QTimer instance to call this method on an interval.
|
||||
* See Insight::startup() for more.
|
||||
*/
|
||||
void dispatchEvents() {
|
||||
this->eventListener->dispatchCurrentEvents();
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user