From b82b77cf2ac0293a7e93576900e6cffbae9a6034 Mon Sep 17 00:00:00 2001 From: strange Date: Wed, 17 Feb 2010 00:18:57 -0700 Subject: [PATCH] Began re-re-re--doing the GUI visualization framework. This time, however, there's a new twist. Instead of completely separating out non-abstracted visualizations from abstracted (statistical) visualizations, instead everything is grouped together into one Visualization class. The Visualization class is currently operating by simply being nothing other than a control interface. Of course, this is changable by the type of visualization, but in essence, all it does is display a QImage that is generated by a VisualizationThread. The VisualizationThread is combined with VisualizationData instances to render the said QImage. In essence, VisualizationThread calls something along the lines of VisualizationData::render_self(this), to render itself upon the given QImage using an interface provided by the VisualizationThread. The interface will be made up of methods such as draw_rectangle(), which could be used to create a bar graph. However cut and clear it may seem at the moment through the eyes of fatigue, that is bound to change in the harsh light of day, with the clarity that only morning can bring. The "facepalms", to use a colloquial term.. --- gui/src/session/ActiveBlocksEngine.cpp | 10 ------- gui/src/session/ActiveBlocksEngine.h | 16 ----------- gui/src/session/ActiveBlocksRequest.cpp | 32 ---------------------- gui/src/session/ActiveBlocksRequest.h | 22 --------------- gui/src/session/DataRequest.cpp | 4 +-- gui/src/session/DataRequest.h | 42 +++++++++++++---------------- gui/src/session/DataRequestQueue.cpp | 32 ++++++++++++++++++++++ gui/src/session/DataRequestQueue.h | 23 ++++++++++++++++ gui/src/session/DataThread.cpp | 6 ----- gui/src/session/DataThread.h | 4 +-- gui/src/session/Graph.cpp | 18 ------------- gui/src/session/Graph.h | 21 --------------- gui/src/session/GraphData.cpp | 2 -- gui/src/session/GraphData.h | 18 ------------- gui/src/session/GraphDataEngine.cpp | 24 ----------------- gui/src/session/GraphDataEngine.h | 47 --------------------------------- gui/src/session/GraphWidget.cpp | 28 -------------------- gui/src/session/GraphWidget.h | 22 --------------- gui/src/session/RenderThread.cpp | 14 ---------- gui/src/session/RenderThread.h | 19 ------------- gui/src/session/Session.cpp | 44 +++++++++--------------------- gui/src/session/Session.h | 5 ---- gui/src/session/Visualization.cpp | 29 ++++++++++++++++++++ gui/src/session/Visualization.h | 25 ++++++++++++++++++ gui/src/session/VisualizationData.cpp | 1 + gui/src/session/VisualizationData.h | 10 +++++++ gui/src/session/VisualizationThread.cpp | 14 ++++++++++ gui/src/session/VisualizationThread.h | 23 ++++++++++++++++ 28 files changed, 191 insertions(+), 364 deletions(-) delete mode 100644 gui/src/session/ActiveBlocksEngine.cpp delete mode 100644 gui/src/session/ActiveBlocksEngine.h delete mode 100644 gui/src/session/ActiveBlocksRequest.cpp delete mode 100644 gui/src/session/ActiveBlocksRequest.h rewrite gui/src/session/DataRequest.h (74%) create mode 100644 gui/src/session/DataRequestQueue.cpp create mode 100644 gui/src/session/DataRequestQueue.h delete mode 100644 gui/src/session/Graph.cpp delete mode 100644 gui/src/session/Graph.h delete mode 100644 gui/src/session/GraphData.cpp delete mode 100644 gui/src/session/GraphData.h delete mode 100644 gui/src/session/GraphDataEngine.cpp delete mode 100644 gui/src/session/GraphDataEngine.h delete mode 100644 gui/src/session/GraphWidget.cpp delete mode 100644 gui/src/session/GraphWidget.h delete mode 100644 gui/src/session/RenderThread.cpp delete mode 100644 gui/src/session/RenderThread.h rewrite gui/src/session/Session.cpp (69%) create mode 100644 gui/src/session/Visualization.cpp create mode 100644 gui/src/session/Visualization.h create mode 100644 gui/src/session/VisualizationData.cpp create mode 100644 gui/src/session/VisualizationData.h create mode 100644 gui/src/session/VisualizationThread.cpp create mode 100644 gui/src/session/VisualizationThread.h diff --git a/gui/src/session/ActiveBlocksEngine.cpp b/gui/src/session/ActiveBlocksEngine.cpp deleted file mode 100644 index d03a928..0000000 --- a/gui/src/session/ActiveBlocksEngine.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "ActiveBlocksEngine.h" -#include "ActiveBlocksEngine.moc" - -ActiveBlocksEngine::ActiveBlocksEngine(QObject *parent, DataThread *data_thread) : GraphDataEngine(parent, data_thread) { - -} - -ActiveBlocksEngine::~ActiveBlocksEngine() { - -} diff --git a/gui/src/session/ActiveBlocksEngine.h b/gui/src/session/ActiveBlocksEngine.h deleted file mode 100644 index f1883eb..0000000 --- a/gui/src/session/ActiveBlocksEngine.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AESALON_GUI_SESSION_ACTIVE_BLOCKS_ENGINE_H -#define AESALON_GUI_SESSION_ACTIVE_BLOCKS_ENGINE_H - -#include "ActiveBlocksRequest.h" -#include "GraphDataEngine.h" - -class ActiveBlocksEngine : public GraphDataEngine { Q_OBJECT -protected: - DataRequest *spawn_new_request(const Timestamp ×tamp) - { return new ActiveBlocksRequest(this, timestamp); } -public: - ActiveBlocksEngine(QObject *parent, DataThread *data_thread); - virtual ~ActiveBlocksEngine(); -}; - -#endif diff --git a/gui/src/session/ActiveBlocksRequest.cpp b/gui/src/session/ActiveBlocksRequest.cpp deleted file mode 100644 index b0262f6..0000000 --- a/gui/src/session/ActiveBlocksRequest.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "ActiveBlocksRequest.h" -#include "storage/Snapshot.h" -#include "storage/SnapshotList.h" -#include "GraphDataEngine.h" -#include "GraphData.h" - -ActiveBlocksRequest::ActiveBlocksRequest(GraphDataEngine *data_engine, const Timestamp ×tamp) - : DataRequest(data_engine), timestamp(timestamp) { -} - -ActiveBlocksRequest::~ActiveBlocksRequest() { - -} - -void ActiveBlocksRequest::construct_response(SnapshotList *snapshot_list) { - Snapshot *snapshot = snapshot_list->get_snapshot_for(timestamp); - count = count_blocks(snapshot->get_head_node()); -} - -void ActiveBlocksRequest::process_response() { - get_requester()->add_data(new GraphData(timestamp, qreal(count))); -} - - -int ActiveBlocksRequest::count_blocks(BiTreeNode *node) const { - int count = 0; - if(node->get_left()) count += count_blocks(node->get_left()); - if(node->get_right()) count += count_blocks(node->get_right()); - count += node->get_block_list_size(); - - return count; -} diff --git a/gui/src/session/ActiveBlocksRequest.h b/gui/src/session/ActiveBlocksRequest.h deleted file mode 100644 index 0b0ca57..0000000 --- a/gui/src/session/ActiveBlocksRequest.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef AESALON_GUI_SESSION_ACTIVE_BLOCKS_REQUEST_H -#define AESALON_GUI_SESSION_ACTIVE_BLOCKS_REQUEST_H - -#include "DataRequest.h" -#include "storage/Timestamp.h" -#include "storage/BiTreeNode.h" - -class ActiveBlocksRequest : public DataRequest { -private: - Timestamp timestamp; - int count; -public: - ActiveBlocksRequest(GraphDataEngine *data_engine, const Timestamp ×tamp); - virtual ~ActiveBlocksRequest(); - - virtual void construct_response(SnapshotList *snapshot_list); - virtual void process_response(); -private: - int count_blocks(BiTreeNode *node) const; -}; - -#endif diff --git a/gui/src/session/DataRequest.cpp b/gui/src/session/DataRequest.cpp index 98a4c7e..5bb4233 100644 --- a/gui/src/session/DataRequest.cpp +++ b/gui/src/session/DataRequest.cpp @@ -1,3 +1,3 @@ #include "DataRequest.h" -#include "storage/Snapshot.h" -#include "GraphDataEngine.h" +#include "DataThread.h" +#include "VisualizationThread.h" diff --git a/gui/src/session/DataRequest.h b/gui/src/session/DataRequest.h dissimilarity index 74% index 328e8ad..cc93b90 100644 --- a/gui/src/session/DataRequest.h +++ b/gui/src/session/DataRequest.h @@ -1,24 +1,18 @@ -#ifndef AESALON_GUI_SESSION_DATA_REQUEST_H -#define AESALON_GUI_SESSION_DATA_REQUEST_H - -#include - -class SnapshotList; -class GraphDataEngine; - -class DataRequest { -private: - GraphDataEngine *requester; -public: - DataRequest(GraphDataEngine *data_engine) : requester(data_engine) {} - virtual ~DataRequest() {} - - GraphDataEngine *get_requester() const { return requester; } - - /* NOTE: this method is called from within the data storage thread. */ - virtual void construct_response(SnapshotList *snapshot_list) = 0; - /* NOTE: this method is called from the rendering thread. */ - virtual void process_response() = 0; -}; - -#endif +#ifndef AESALON_GUI_SESSION_DATA_REQUEST_H +#define AESALON_GUI_SESSION_DATA_REQUEST_H + +class DataThread; +class VisualizationThread; + +class DataRequest { +private: + VisualizationThread *v_thread; +public: + DataRequest(VisualizationThread *v_thread) : v_thread(v_thread) {} + virtual ~DataRequest() {} + + virtual void gather_data(DataThread *data_thread) = 0; + virtual void apply_data() = 0; +}; + +#endif diff --git a/gui/src/session/DataRequestQueue.cpp b/gui/src/session/DataRequestQueue.cpp new file mode 100644 index 0000000..828a893 --- /dev/null +++ b/gui/src/session/DataRequestQueue.cpp @@ -0,0 +1,32 @@ +#include "DataRequestQueue.h" + +DataRequestQueue::DataRequestQueue() { +} + +DataRequestQueue::~DataRequestQueue() { + +} + +void DataRequestQueue::push_request(DataRequest *request) { + list_mutex.lock(); + request_list.enqueue(request); + list_mutex.unlock(); +} + +DataRequest *DataRequestQueue::pop_request() { + /* Do this out of order so that the mutex is locked for the smallest length of time possible. */ + /* NOTE: dubious speed gains are offset by an obvious complexity increase . . . */ + DataRequest *request = NULL; + list_mutex.lock(); + request = request_list.dequeue(); + list_mutex.unlock(); + return request; +} + +int DataRequestQueue::current_requests() { + int count; + list_mutex.lock(); + count = request_list.count(); + list_mutex.unlock(); + return count; +} diff --git a/gui/src/session/DataRequestQueue.h b/gui/src/session/DataRequestQueue.h new file mode 100644 index 0000000..908c932 --- /dev/null +++ b/gui/src/session/DataRequestQueue.h @@ -0,0 +1,23 @@ +#ifndef AESALON_GUI_SESSION_DATA_REQUEST_QUEUE_H +#define AESALON_GUI_SESSION_DATA_REQUEST_QUEUE_H + +#include +#include +#include "DataRequest.h" + +class DataRequestQueue { +private: + static const int request_list_size = 1000; + QQueue request_list; + QMutex list_mutex; + int last_slot; +public: + DataRequestQueue(); + virtual ~DataRequestQueue(); + + void push_request(DataRequest *request); + DataRequest *pop_request(); + int current_requests(); +}; + +#endif diff --git a/gui/src/session/DataThread.cpp b/gui/src/session/DataThread.cpp index 412107f..6983e7f 100644 --- a/gui/src/session/DataThread.cpp +++ b/gui/src/session/DataThread.cpp @@ -1,7 +1,5 @@ #include "DataThread.h" #include "DataThread.moc" -#include "DataRequest.h" -#include "GraphDataEngine.h" DataThread::DataThread(QObject *parent, DataSource *data_source) : QThread(parent), data_source(data_source) { } @@ -24,10 +22,6 @@ void DataThread::run() { delete snapshot_timer; } -void DataThread::push_request(DataRequest *request) { - -} - void DataThread::event_received(Event *event) { event->apply_to(current_snapshot); current_snapshot->add_event(event); diff --git a/gui/src/session/DataThread.h b/gui/src/session/DataThread.h index b774fa5..b792372 100644 --- a/gui/src/session/DataThread.h +++ b/gui/src/session/DataThread.h @@ -3,6 +3,7 @@ #include #include +#include #include "storage/SnapshotList.h" #include "data/DataSource.h" @@ -16,11 +17,10 @@ private: SnapshotList snapshot_list; Snapshot *current_snapshot; QTimer *snapshot_timer; + QQueue request_list; public: DataThread(QObject *parent, DataSource *data_source); virtual ~DataThread(); - - void push_request(DataRequest *request); private slots: void event_received(Event *event); void create_new_snapshot(); diff --git a/gui/src/session/Graph.cpp b/gui/src/session/Graph.cpp deleted file mode 100644 index c646f8f..0000000 --- a/gui/src/session/Graph.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "Graph.h" -#include "Graph.moc" - -Graph::Graph(QWidget *parent) : QWidget(parent) { - graph_widget = new QWidget(this); - graph_widget->setEnabled(false); -} - -Graph::~Graph() { - -} - -void Graph::update_graph(QImage *image) { - QPainter painter(graph_widget); - - painter.drawImage(0, 0, *image); -} diff --git a/gui/src/session/Graph.h b/gui/src/session/Graph.h deleted file mode 100644 index aa0a51c..0000000 --- a/gui/src/session/Graph.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef AESALON_GUI_SESSION_GRAPH_H -#define AESALON_GUI_SESSION_GRAPH_H - -#include -#include -#include - -#include "GraphData.h" -#include "storage/Timestamp.h" - -class Graph : public QWidget { Q_OBJECT -private: - QWidget *graph_widget; -public: - Graph(QWidget *parent); - virtual ~Graph(); -public slots: - void update_graph(QImage *new_image); -}; - -#endif diff --git a/gui/src/session/GraphData.cpp b/gui/src/session/GraphData.cpp deleted file mode 100644 index c0a98ca..0000000 --- a/gui/src/session/GraphData.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "GraphData.h" - diff --git a/gui/src/session/GraphData.h b/gui/src/session/GraphData.h deleted file mode 100644 index 5007ccc..0000000 --- a/gui/src/session/GraphData.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef AESALON_GUI_SESSION_GRAPH_DATA_H -#define AESALON_GUI_SESSION_GRAPH_DATA_H - -#include -#include "storage/Timestamp.h" - -class GraphData { -private: - qreal value; - Timestamp timestamp; -public: - GraphData(const Timestamp ×tamp, qreal value) : value(value), timestamp(timestamp) {} - - qreal get_value() const { return value; } - const Timestamp &get_timestamp() const { return timestamp; } -}; - -#endif diff --git a/gui/src/session/GraphDataEngine.cpp b/gui/src/session/GraphDataEngine.cpp deleted file mode 100644 index b93b460..0000000 --- a/gui/src/session/GraphDataEngine.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "GraphDataEngine.h" -#include "GraphDataEngine.moc" -#include "RenderThread.h" - -GraphDataEngine::GraphDataEngine(QObject *parent, DataThread *data_thread) : QObject(parent), data_thread(data_thread) { - -} - -GraphDataEngine::~GraphDataEngine() { - -} - -void GraphDataEngine::request_data(RenderThread *thread, const Timestamp ×tamp) { - /* TODO: cache the result . . . */ - data_thread->push_request(spawn_new_request(timestamp)); -} - -void GraphDataEngine::handle_requests() { - DataRequest *request; - while((request = pop_request())) { - request->process_response(); - delete request; - } -} diff --git a/gui/src/session/GraphDataEngine.h b/gui/src/session/GraphDataEngine.h deleted file mode 100644 index a9d1155..0000000 --- a/gui/src/session/GraphDataEngine.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef AESALON_GUI_SESSION_GRAPH_DATA_ENGINE_H -#define AESALON_GUI_SESSION_GRAPH_DATA_ENGINE_H - -#include -#include -#include - -#include "DataRequest.h" -#include "GraphData.h" -#include "DataThread.h" - -class RenderThread; - -class GraphDataEngine : public QObject { Q_OBJECT -private: - QMutex queue_mutex; - QQueue data_request_queue; - - QList graph_data; - DataThread *data_thread; -protected: - virtual DataRequest *spawn_new_request(const Timestamp ×tamp) = 0; -public: - GraphDataEngine(QObject *parent, DataThread *data_thread); - virtual ~GraphDataEngine(); - - /* NOTE: this function is called from outside the current thread. Hence the mutex. */ - void push_request(DataRequest *request) { - QMutexLocker locker(&queue_mutex); - data_request_queue.enqueue(request); - } - DataRequest *pop_request() { - QMutexLocker locker(&queue_mutex); - if(data_request_queue.isEmpty()) return NULL; - return data_request_queue.dequeue(); - } - - void add_data(GraphData *data) { - graph_data.append(data); - } - - void request_data(RenderThread *thread, const Timestamp ×tamp); - - void handle_requests(); -}; - -#endif diff --git a/gui/src/session/GraphWidget.cpp b/gui/src/session/GraphWidget.cpp deleted file mode 100644 index 89fd27d..0000000 --- a/gui/src/session/GraphWidget.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include "GraphWidget.h" -#include "GraphWidget.moc" - -GraphWidget::GraphWidget(QWidget *parent) : QWidget(parent), current_image(NULL) { - -} - -GraphWidget::~GraphWidget() { - -} - -void GraphWidget::set_data_engine(GraphDataEngine *data_engine) { - this->data_engine = data_engine; -} - -void GraphWidget::paintEvent(QPaintEvent *event) { - QPainter painter(this); - qreal x_scale = 0, y_scale = 0; - x_scale = qreal(geometry().width()) / current_image->width(); - y_scale = qreal(geometry().height()) / current_image->height(); - painter.scale(x_scale, y_scale); - painter.drawImage(0, 0, *current_image); -} - -void GraphWidget::update_image(QImage *new_image) { - current_image = new_image; -} diff --git a/gui/src/session/GraphWidget.h b/gui/src/session/GraphWidget.h deleted file mode 100644 index f35cec9..0000000 --- a/gui/src/session/GraphWidget.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef AESALON_GUI_SESSION_GRAPH_WIDGET_H -#define AESALON_GUI_SESSION_GRAPH_WIDGET_H - -#include - -#include "GraphDataEngine.h" - -class GraphWidget : public QWidget { Q_OBJECT -private: - GraphDataEngine *data_engine; - QImage *current_image; -public: - GraphWidget(QWidget *parent); - virtual ~GraphWidget(); -protected: - virtual void paintEvent(QPaintEvent *event); -public slots: - void set_data_engine(GraphDataEngine *data_engine); - void update_image(QImage *new_image); -}; - -#endif diff --git a/gui/src/session/RenderThread.cpp b/gui/src/session/RenderThread.cpp deleted file mode 100644 index 27fbbe4..0000000 --- a/gui/src/session/RenderThread.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "RenderThread.h" -#include "RenderThread.moc" - -RenderThread::RenderThread(QObject *parent) { - -} - -RenderThread::~RenderThread() { - -} - -void RenderThread::run() { - -} diff --git a/gui/src/session/RenderThread.h b/gui/src/session/RenderThread.h deleted file mode 100644 index 71f9f50..0000000 --- a/gui/src/session/RenderThread.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef AESALON_GUI_SESSION_RENDER_THREAD_H -#define AESALON_GUI_SESSION_RENDER_THREAD_H - -#include -#include - -#include "DataRequest.h" - -class RenderThread : public QThread { Q_OBJECT -private: - QList request_list; -public: - RenderThread(QObject *parent); - virtual ~RenderThread(); -protected: - virtual void run(); -}; - -#endif diff --git a/gui/src/session/Session.cpp b/gui/src/session/Session.cpp dissimilarity index 69% index 5a1a1ce..82b1009 100644 --- a/gui/src/session/Session.cpp +++ b/gui/src/session/Session.cpp @@ -1,32 +1,12 @@ -#include -#include "Session.h" -#include "Session.moc" - -Session::Session(QWidget *parent, DataSource *data_source) : QWidget(parent), data_source(data_source) { - data_thread = new DataThread(this, data_source); - data_thread->start(); - - primary_layout = new QVBoxLayout(); - - QPushButton *add_graph_widget = new QPushButton(tr("&New Graph")); - connect(add_graph_widget, SIGNAL(clicked()), this, SLOT(create_graph_widget())); - primary_layout->addWidget(add_graph_widget); - tab_bar = new QTabWidget(); - primary_layout->addWidget(tab_bar); - - setLayout(primary_layout); -} - -Session::~Session() { - data_thread->quit(); - data_thread->wait(); -} - -void Session::create_graph_widget() { - GraphWidget *graph_widget = new GraphWidget(NULL); - tab_bar->addTab(graph_widget, "Graph"); - QImage *image = new QImage(QSize(300, 300), QImage::Format_RGB32); - image->fill(QColor(255, 255, 255).rgb()); - QPainter painter(image); - graph_widget->update_image(image); -} +#include "Session.h" +#include "Session.moc" + +Session::Session(QWidget *parent, DataSource *data_source) : QWidget(parent), data_source(data_source) { + data_thread = new DataThread(this, data_source); + data_thread->start(); +} + +Session::~Session() { + data_thread->quit(); + data_thread->wait(); +} diff --git a/gui/src/session/Session.h b/gui/src/session/Session.h index 40a7beb..28de8cc 100644 --- a/gui/src/session/Session.h +++ b/gui/src/session/Session.h @@ -12,19 +12,14 @@ #include "data/DataReceiver.h" #include "storage/SnapshotList.h" #include "DataThread.h" -#include "GraphWidget.h" class Session : public QWidget { Q_OBJECT private: DataSource *data_source; DataThread *data_thread; - QVBoxLayout *primary_layout; - QTabWidget *tab_bar; public: Session(QWidget *parent, DataSource *data_source); virtual ~Session(); -private slots: - void create_graph_widget(); }; #endif diff --git a/gui/src/session/Visualization.cpp b/gui/src/session/Visualization.cpp new file mode 100644 index 0000000..bb9cc74 --- /dev/null +++ b/gui/src/session/Visualization.cpp @@ -0,0 +1,29 @@ +#include +#include "Visualization.h" +#include "Visualization.moc" + +Visualization::Visualization(QWidget *parent) : QWidget(parent), current_image(NULL) { + v_thread = create_v_thread(); + if(v_thread == NULL) { + this->deleteLater(); + return; + } + connect(v_thread, SIGNAL(replace_image(QImage*)), SLOT(update_image(QImage*))); + v_thread->start(); +} + +Visualization::~Visualization() { + +} + +void Visualization::paintEvent(QPaintEvent *event) { + QWidget::paintEvent(event); + if(!current_image) return; + QPainter painter(this); + painter.scale(qreal(geometry().width()) / current_image->width(), qreal(geometry().height()) / current_image->height()); + painter.drawImage(0, 0, *current_image); +} + +void Visualization::update_image(QImage *image) { + current_image = image; +} diff --git a/gui/src/session/Visualization.h b/gui/src/session/Visualization.h new file mode 100644 index 0000000..f24f1d5 --- /dev/null +++ b/gui/src/session/Visualization.h @@ -0,0 +1,25 @@ +#ifndef AESALON_GUI_SESSION_VISUALIZATION_H +#define AESALON_GUI_SESSION_VISUALIZATION_H + +#include +#include + +#include "VisualizationThread.h" + +class Visualization : public QWidget { Q_OBJECT +private: + VisualizationThread *v_thread; + QImage *current_image; +protected: + virtual VisualizationThread *create_v_thread() + { return NULL; } +public: + Visualization(QWidget *parent = 0); + virtual ~Visualization(); +protected: + virtual void paintEvent(QPaintEvent *event); +private slots: + void update_image(QImage *image); +}; + +#endif diff --git a/gui/src/session/VisualizationData.cpp b/gui/src/session/VisualizationData.cpp new file mode 100644 index 0000000..0302a35 --- /dev/null +++ b/gui/src/session/VisualizationData.cpp @@ -0,0 +1 @@ +#include "VisualizationData.h" diff --git a/gui/src/session/VisualizationData.h b/gui/src/session/VisualizationData.h new file mode 100644 index 0000000..5afc004 --- /dev/null +++ b/gui/src/session/VisualizationData.h @@ -0,0 +1,10 @@ +#ifndef AESALON_GUI_SESSION_VISUALIZATION_DATA_H +#define AESALON_GUI_SESSION_VISUALIZATION_DATA_H + +class VisualizationData { +public: + VisualizationData(); + virtual ~VisualizationData(); +}; + +#endif diff --git a/gui/src/session/VisualizationThread.cpp b/gui/src/session/VisualizationThread.cpp new file mode 100644 index 0000000..15abc83 --- /dev/null +++ b/gui/src/session/VisualizationThread.cpp @@ -0,0 +1,14 @@ +#include "VisualizationThread.h" +#include "VisualizationThread.moc" + +VisualizationThread::VisualizationThread(QObject *parent) : QThread(parent) { + request_queue = new DataRequestQueue(); +} + +VisualizationThread::~VisualizationThread() { + delete request_queue; +} + +void VisualizationThread::run() { + +} diff --git a/gui/src/session/VisualizationThread.h b/gui/src/session/VisualizationThread.h new file mode 100644 index 0000000..0a8b8ae --- /dev/null +++ b/gui/src/session/VisualizationThread.h @@ -0,0 +1,23 @@ +#ifndef AESALON_GUI_SESSION_VISUALIZATION_THREAD_H +#define AESALON_GUI_SESSION_VISUALIZATION_THREAD_H + +#include +#include + +#include "DataRequestQueue.h" + +class VisualizationThread : public QThread { Q_OBJECT +private: + DataRequestQueue *request_queue; +public: + VisualizationThread(QObject *parent = 0); + virtual ~VisualizationThread(); + + DataRequestQueue *get_request_queue() const { return request_queue; } +protected: + virtual void run(); +signals: + void replace_image(QImage *new_image); +}; + +#endif -- 2.11.4.GIT