mirror of
https://github.com/clangen/musikcube.git
synced 2025-02-14 09:40:53 +00:00
Generalization of message queue stuff so it can be used in non-UI
contexts: - IWindowMessage -> IMessage - New IMessageTarget implemented by IWindow - WindowMessageQueue -> MessageQueue
This commit is contained in:
parent
4f7a6ea7e2
commit
26311255b5
@ -36,7 +36,7 @@
|
|||||||
#include <cursespp/Colors.h>
|
#include <cursespp/Colors.h>
|
||||||
#include <cursespp/IInput.h>
|
#include <cursespp/IInput.h>
|
||||||
#include <cursespp/IKeyHandler.h>
|
#include <cursespp/IKeyHandler.h>
|
||||||
#include <cursespp/WindowMessageQueue.h>
|
#include <cursespp/MessageQueue.h>
|
||||||
#include <cursespp/LayoutStack.h>
|
#include <cursespp/LayoutStack.h>
|
||||||
#include <cursespp/WindowLayout.h>
|
#include <cursespp/WindowLayout.h>
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
ensureFocusIsValid(state);
|
ensureFocusIsValid(state);
|
||||||
Window::WriteToScreen();
|
Window::WriteToScreen();
|
||||||
WindowMessageQueue::Instance().Dispatch();
|
MessageQueue::Instance().Dispatch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "MainLayout.h"
|
#include "MainLayout.h"
|
||||||
#include <cursespp/Screen.h>
|
#include <cursespp/Screen.h>
|
||||||
#include <cursespp/IWindowMessage.h>
|
#include <cursespp/IMessage.h>
|
||||||
|
|
||||||
#define MESSAGE_TYPE_UPDATE 1001
|
#define MESSAGE_TYPE_UPDATE 1001
|
||||||
#define UPDATE_INTERVAL_MS 1000
|
#define UPDATE_INTERVAL_MS 1000
|
||||||
@ -58,7 +58,7 @@ void MainLayout::Show() {
|
|||||||
this->UpdateWindows();
|
this->UpdateWindows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainLayout::ProcessMessage(IWindowMessage &message) {
|
void MainLayout::ProcessMessage(IMessage &message) {
|
||||||
if (message.MessageType() == MESSAGE_TYPE_UPDATE) {
|
if (message.MessageType() == MESSAGE_TYPE_UPDATE) {
|
||||||
this->UpdateWindows();
|
this->UpdateWindows();
|
||||||
this->PostMessage(MESSAGE_TYPE_UPDATE, 0, 0, UPDATE_INTERVAL_MS);
|
this->PostMessage(MESSAGE_TYPE_UPDATE, 0, 0, UPDATE_INTERVAL_MS);
|
||||||
|
@ -22,7 +22,7 @@ class MainLayout : public LayoutBase {
|
|||||||
|
|
||||||
virtual void Layout();
|
virtual void Layout();
|
||||||
virtual void Show();
|
virtual void Show();
|
||||||
virtual void ProcessMessage(IWindowMessage &message);
|
virtual void ProcessMessage(IMessage &message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateWindows();
|
void UpdateWindows();
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
class PlaybackService {
|
#include <cursespp/IMessageTarget.h>
|
||||||
|
|
||||||
|
class PlaybackService : public IMessageTarget {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
};
|
};
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include <cursespp/SingleLineEntry.h>
|
#include <cursespp/SingleLineEntry.h>
|
||||||
#include <cursespp/MultiLineEntry.h>
|
#include <cursespp/MultiLineEntry.h>
|
||||||
#include <cursespp/IWindowMessage.h>
|
#include <cursespp/IMessage.h>
|
||||||
|
|
||||||
#include <core/library/LocalLibraryConstants.h>
|
#include <core/library/LocalLibraryConstants.h>
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ void CategoryListView::OnQueryCompleted(QueryPtr query) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CategoryListView::ProcessMessage(IWindowMessage &message) {
|
void CategoryListView::ProcessMessage(IMessage &message) {
|
||||||
if (message.MessageType() == WINDOW_MESSAGE_QUERY_COMPLETED) {
|
if (message.MessageType() == WINDOW_MESSAGE_QUERY_COMPLETED) {
|
||||||
this->metadata = activeQuery->GetResult();
|
this->metadata = activeQuery->GetResult();
|
||||||
activeQuery.reset();
|
activeQuery.reset();
|
||||||
|
@ -20,7 +20,7 @@ class CategoryListView : public ListWindow, public sigslot::has_slots<> {
|
|||||||
|
|
||||||
void Requery();
|
void Requery();
|
||||||
|
|
||||||
virtual void ProcessMessage(IWindowMessage &message);
|
virtual void ProcessMessage(IMessage &message);
|
||||||
|
|
||||||
DBID GetSelectedId();
|
DBID GetSelectedId();
|
||||||
std::string GetFieldName();
|
std::string GetFieldName();
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
#include <cursespp/Screen.h>
|
#include <cursespp/Screen.h>
|
||||||
#include <cursespp/Colors.h>
|
#include <cursespp/Colors.h>
|
||||||
#include <cursespp/WindowMessageQueue.h>
|
#include <cursespp/MessageQueue.h>
|
||||||
#include <cursespp/WindowMessage.h>
|
#include <cursespp/Message.h>
|
||||||
|
|
||||||
#include "CommandWindow.h"
|
#include "CommandWindow.h"
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include <cursespp/Colors.h>
|
#include <cursespp/Colors.h>
|
||||||
#include <cursespp/SingleLineEntry.h>
|
#include <cursespp/SingleLineEntry.h>
|
||||||
#include <cursespp/IWindowMessage.h>
|
#include <cursespp/IMessage.h>
|
||||||
|
|
||||||
#include "TrackListView.h"
|
#include "TrackListView.h"
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ bool TrackListView::KeyPress(int64 ch) {
|
|||||||
return ListWindow::KeyPress(ch);
|
return ListWindow::KeyPress(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrackListView::ProcessMessage(IWindowMessage &message) {
|
void TrackListView::ProcessMessage(IMessage &message) {
|
||||||
if (message.MessageType() == WINDOW_MESSAGE_QUERY_COMPLETED) {
|
if (message.MessageType() == WINDOW_MESSAGE_QUERY_COMPLETED) {
|
||||||
if (this->query && this->query->GetStatus() == IQuery::Finished) {
|
if (this->query && this->query->GetStatus() == IQuery::Finished) {
|
||||||
this->metadata = this->query->GetResult();
|
this->metadata = this->query->GetResult();
|
||||||
|
@ -20,7 +20,7 @@ class TrackListView : public ListWindow, public sigslot::has_slots<> {
|
|||||||
TrackListView(Transport& transport, LibraryPtr library, IWindow *parent = NULL);
|
TrackListView(Transport& transport, LibraryPtr library, IWindow *parent = NULL);
|
||||||
~TrackListView();
|
~TrackListView();
|
||||||
|
|
||||||
virtual void ProcessMessage(IWindowMessage &message);
|
virtual void ProcessMessage(IMessage &message);
|
||||||
virtual bool KeyPress(int64 ch);
|
virtual bool KeyPress(int64 ch);
|
||||||
|
|
||||||
void Requery(const std::string& column, DBID id);
|
void Requery(const std::string& column, DBID id);
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include <cursespp/Screen.h>
|
#include <cursespp/Screen.h>
|
||||||
#include <cursespp/Colors.h>
|
#include <cursespp/Colors.h>
|
||||||
#include <cursespp/WindowMessage.h>
|
#include <cursespp/Message.h>
|
||||||
|
|
||||||
#include <app/util/Text.h>
|
#include <app/util/Text.h>
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ void TransportWindow::Show() {
|
|||||||
this->Update();
|
this->Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransportWindow::ProcessMessage(IWindowMessage &message) {
|
void TransportWindow::ProcessMessage(IMessage &message) {
|
||||||
int type = message.MessageType();
|
int type = message.MessageType();
|
||||||
|
|
||||||
if (type == REFRESH_TRANSPORT_READOUT) {
|
if (type == REFRESH_TRANSPORT_READOUT) {
|
||||||
|
@ -18,7 +18,7 @@ class TransportWindow : public Window, public sigslot::has_slots<> {
|
|||||||
TransportWindow(LibraryPtr library, Transport& transport);
|
TransportWindow(LibraryPtr library, Transport& transport);
|
||||||
~TransportWindow();
|
~TransportWindow();
|
||||||
|
|
||||||
virtual void ProcessMessage(IWindowMessage &message);
|
virtual void ProcessMessage(IMessage &message);
|
||||||
virtual void Show();
|
virtual void Show();
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
|
17
src/musikbox/cursespp/IMessage.h
Executable file
17
src/musikbox/cursespp/IMessage.h
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdafx.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class IMessageTarget;
|
||||||
|
|
||||||
|
class IMessage {
|
||||||
|
public:
|
||||||
|
virtual ~IMessage() = 0 { }
|
||||||
|
virtual IMessageTarget* Target() = 0;
|
||||||
|
virtual int MessageType() = 0;
|
||||||
|
virtual int64 UserData1() = 0;
|
||||||
|
virtual int64 UserData2() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::shared_ptr<IMessage> IMessagePtr;
|
9
src/musikbox/cursespp/IMessageTarget.h
Executable file
9
src/musikbox/cursespp/IMessageTarget.h
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IMessage.h"
|
||||||
|
|
||||||
|
class IMessageTarget {
|
||||||
|
public:
|
||||||
|
virtual bool IsAcceptingMessages() = 0;
|
||||||
|
virtual void ProcessMessage(IMessage &message) = 0;
|
||||||
|
};
|
@ -3,10 +3,11 @@
|
|||||||
#include "curses_config.h"
|
#include "curses_config.h"
|
||||||
#include "IDisplayable.h"
|
#include "IDisplayable.h"
|
||||||
#include "IOrderable.h"
|
#include "IOrderable.h"
|
||||||
|
#include "IMessageTarget.h"
|
||||||
|
|
||||||
class IWindowMessage;
|
class IMessage;
|
||||||
|
|
||||||
class IWindow : public IOrderable, public IDisplayable {
|
class IWindow : public IOrderable, public IDisplayable, public IMessageTarget {
|
||||||
public:
|
public:
|
||||||
virtual ~IWindow() = 0 { }
|
virtual ~IWindow() = 0 { }
|
||||||
virtual void Repaint() = 0;
|
virtual void Repaint() = 0;
|
||||||
@ -28,8 +29,6 @@ class IWindow : public IOrderable, public IDisplayable {
|
|||||||
virtual int GetId() const = 0;
|
virtual int GetId() const = 0;
|
||||||
virtual int GetFocusOrder() = 0;
|
virtual int GetFocusOrder() = 0;
|
||||||
virtual void SetFocusOrder(int order = -1) = 0;
|
virtual void SetFocusOrder(int order = -1) = 0;
|
||||||
virtual bool IsAcceptingMessages() = 0;
|
|
||||||
virtual void ProcessMessage(IWindowMessage &message) = 0;
|
|
||||||
virtual WINDOW* GetFrame() const = 0;
|
virtual WINDOW* GetFrame() const = 0;
|
||||||
virtual WINDOW* GetContent() const = 0;
|
virtual WINDOW* GetContent() const = 0;
|
||||||
};
|
};
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdafx.h>
|
|
||||||
#include "IWindow.h"
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
class IWindowMessage {
|
|
||||||
public:
|
|
||||||
virtual ~IWindowMessage() = 0 { }
|
|
||||||
virtual IWindow* Target() = 0;
|
|
||||||
virtual int MessageType() = 0;
|
|
||||||
virtual int64 UserData1() = 0;
|
|
||||||
virtual int64 UserData2() = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::shared_ptr<IWindowMessage> IWindowMessagePtr;
|
|
39
src/musikbox/cursespp/Message.cpp
Executable file
39
src/musikbox/cursespp/Message.cpp
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#include <stdafx.h>
|
||||||
|
#include "Message.h"
|
||||||
|
|
||||||
|
IMessagePtr Message::Create(
|
||||||
|
IMessageTarget* target,
|
||||||
|
int messageType,
|
||||||
|
int64 data1,
|
||||||
|
int64 data2)
|
||||||
|
{
|
||||||
|
return IMessagePtr(new Message(target, messageType, data1, data2));
|
||||||
|
}
|
||||||
|
|
||||||
|
Message::Message(
|
||||||
|
IMessageTarget* target,
|
||||||
|
int messageType,
|
||||||
|
int64 data1,
|
||||||
|
int64 data2)
|
||||||
|
{
|
||||||
|
this->target = target;
|
||||||
|
this->messageType = messageType;
|
||||||
|
this->data1 = data1;
|
||||||
|
this->data2 = data2;
|
||||||
|
}
|
||||||
|
|
||||||
|
IMessageTarget* Message::Target() {
|
||||||
|
return this->target;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Message::MessageType() {
|
||||||
|
return this->messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64 Message::UserData1() {
|
||||||
|
return this->data1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64 Message::UserData2() {
|
||||||
|
return this->data2;
|
||||||
|
}
|
@ -1,29 +1,29 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IWindowMessage.h"
|
#include "IMessage.h"
|
||||||
|
|
||||||
class WindowMessage : public IWindowMessage {
|
class Message : public IMessage {
|
||||||
private:
|
private:
|
||||||
WindowMessage(
|
Message(
|
||||||
IWindow* target,
|
IMessageTarget* target,
|
||||||
int messageType,
|
int messageType,
|
||||||
int64 data1,
|
int64 data1,
|
||||||
int64 data2);
|
int64 data2);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static IWindowMessagePtr Create(
|
static IMessagePtr Create(
|
||||||
IWindow* target,
|
IMessageTarget* target,
|
||||||
int messageType,
|
int messageType,
|
||||||
int64 data1,
|
int64 data1,
|
||||||
int64 data2);
|
int64 data2);
|
||||||
|
|
||||||
virtual IWindow* Target();
|
virtual IMessageTarget* Target();
|
||||||
virtual int MessageType();
|
virtual int MessageType();
|
||||||
virtual int64 UserData1();
|
virtual int64 UserData1();
|
||||||
virtual int64 UserData2();
|
virtual int64 UserData2();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IWindow* target;
|
IMessageTarget* target;
|
||||||
int messageType;
|
int messageType;
|
||||||
int64 data1, data2;
|
int64 data1, data2;
|
||||||
};
|
};
|
@ -1,19 +1,19 @@
|
|||||||
#include <stdafx.h>
|
#include <stdafx.h>
|
||||||
#include "WindowMessageQueue.h"
|
#include "MessageQueue.h"
|
||||||
|
|
||||||
using namespace boost::chrono;
|
using namespace boost::chrono;
|
||||||
|
|
||||||
WindowMessageQueue WindowMessageQueue::instance;
|
MessageQueue MessageQueue::instance;
|
||||||
|
|
||||||
WindowMessageQueue::WindowMessageQueue() {
|
MessageQueue::MessageQueue() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowMessageQueue& WindowMessageQueue::Instance() {
|
MessageQueue& MessageQueue::Instance() {
|
||||||
return WindowMessageQueue::instance;
|
return MessageQueue::instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowMessageQueue::Dispatch() {
|
void MessageQueue::Dispatch() {
|
||||||
milliseconds now = duration_cast<milliseconds>(
|
milliseconds now = duration_cast<milliseconds>(
|
||||||
system_clock::now().time_since_epoch());
|
system_clock::now().time_since_epoch());
|
||||||
|
|
||||||
@ -58,12 +58,12 @@ void WindowMessageQueue::Dispatch() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowMessageQueue::Remove(IWindow *target, int type) {
|
void MessageQueue::Remove(IMessageTarget *target, int type) {
|
||||||
boost::recursive_mutex::scoped_lock lock(this->queueMutex);
|
boost::recursive_mutex::scoped_lock lock(this->queueMutex);
|
||||||
|
|
||||||
std::list<EnqueuedMessage*>::iterator it = this->queue.begin();
|
std::list<EnqueuedMessage*>::iterator it = this->queue.begin();
|
||||||
while (it != this->queue.end()) {
|
while (it != this->queue.end()) {
|
||||||
IWindowMessagePtr current = (*it)->message;
|
IMessagePtr current = (*it)->message;
|
||||||
|
|
||||||
if (current->Target() == target) {
|
if (current->Target() == target) {
|
||||||
if (type == -1 || type == current->MessageType()) {
|
if (type == -1 || type == current->MessageType()) {
|
||||||
@ -77,7 +77,7 @@ void WindowMessageQueue::Remove(IWindow *target, int type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowMessageQueue::Post(IWindowMessagePtr message, int64 delayMs) {
|
void MessageQueue::Post(IMessagePtr message, int64 delayMs) {
|
||||||
boost::recursive_mutex::scoped_lock lock(this->queueMutex);
|
boost::recursive_mutex::scoped_lock lock(this->queueMutex);
|
||||||
|
|
||||||
delayMs = max(0, delayMs);
|
delayMs = max(0, delayMs);
|
||||||
@ -107,6 +107,6 @@ void WindowMessageQueue::Post(IWindowMessagePtr message, int64 delayMs) {
|
|||||||
this->queue.insert(curr, m);
|
this->queue.insert(curr, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowMessageQueue::Dispatch(IWindowMessagePtr message) {
|
void MessageQueue::Dispatch(IMessagePtr message) {
|
||||||
message->Target()->ProcessMessage(*message);
|
message->Target()->ProcessMessage(*message);
|
||||||
}
|
}
|
32
src/musikbox/cursespp/MessageQueue.h
Executable file
32
src/musikbox/cursespp/MessageQueue.h
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IMessage.h"
|
||||||
|
#include "IMessageTarget.h"
|
||||||
|
|
||||||
|
#include <boost/thread/recursive_mutex.hpp>
|
||||||
|
#include <boost/chrono.hpp>
|
||||||
|
|
||||||
|
class MessageQueue {
|
||||||
|
public:
|
||||||
|
static MessageQueue& Instance();
|
||||||
|
|
||||||
|
void Post(IMessagePtr message, int64 delayMs = 0);
|
||||||
|
void Remove(IMessageTarget *target, int type = -1);
|
||||||
|
|
||||||
|
void Dispatch();
|
||||||
|
|
||||||
|
private:
|
||||||
|
static MessageQueue instance;
|
||||||
|
|
||||||
|
struct EnqueuedMessage {
|
||||||
|
IMessagePtr message;
|
||||||
|
boost::chrono::milliseconds time;
|
||||||
|
};
|
||||||
|
|
||||||
|
boost::recursive_mutex queueMutex;
|
||||||
|
std::list<EnqueuedMessage*> queue;
|
||||||
|
|
||||||
|
MessageQueue();
|
||||||
|
void Dispatch(IMessagePtr message);
|
||||||
|
|
||||||
|
};
|
@ -3,8 +3,8 @@
|
|||||||
#include <stdafx.h>
|
#include <stdafx.h>
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
#include "IWindowGroup.h"
|
#include "IWindowGroup.h"
|
||||||
#include "WindowMessage.h"
|
#include "Message.h"
|
||||||
#include "WindowMessageQueue.h"
|
#include "MessageQueue.h"
|
||||||
|
|
||||||
static int NEXT_ID = 0;
|
static int NEXT_ID = 0;
|
||||||
static bool drawPending = false;
|
static bool drawPending = false;
|
||||||
@ -34,7 +34,7 @@ Window::Window(IWindow *parent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Window::~Window() {
|
Window::~Window() {
|
||||||
WindowMessageQueue::Instance().Remove(this);
|
MessageQueue::Instance().Remove(this);
|
||||||
this->Destroy();
|
this->Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ int Window::GetId() const {
|
|||||||
return this->id;
|
return this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::ProcessMessage(IWindowMessage &message) {
|
void Window::ProcessMessage(IMessage &message) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,8 +75,8 @@ void Window::SendToBottom() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Window::PostMessage(int messageType, int64 user1, int64 user2, int64 delay) {
|
void Window::PostMessage(int messageType, int64 user1, int64 user2, int64 delay) {
|
||||||
WindowMessageQueue::Instance().Post(
|
MessageQueue::Instance().Post(
|
||||||
WindowMessage::Create(
|
Message::Create(
|
||||||
this,
|
this,
|
||||||
messageType,
|
messageType,
|
||||||
user1,
|
user1,
|
||||||
@ -85,7 +85,7 @@ void Window::PostMessage(int messageType, int64 user1, int64 user2, int64 delay)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Window::RemoveMessage(int messageType) {
|
void Window::RemoveMessage(int messageType) {
|
||||||
WindowMessageQueue::Instance().Remove(this, messageType);
|
MessageQueue::Instance().Remove(this, messageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::SetParent(IWindow* parent) {
|
void Window::SetParent(IWindow* parent) {
|
||||||
|
@ -37,7 +37,7 @@ class Window : public IWindow, public std::enable_shared_from_this<IWindow> {
|
|||||||
virtual void BringToTop();
|
virtual void BringToTop();
|
||||||
virtual void SendToBottom();
|
virtual void SendToBottom();
|
||||||
|
|
||||||
virtual void ProcessMessage(IWindowMessage &message);
|
virtual void ProcessMessage(IMessage &message);
|
||||||
virtual bool IsAcceptingMessages();
|
virtual bool IsAcceptingMessages();
|
||||||
|
|
||||||
virtual WINDOW* GetFrame() const;
|
virtual WINDOW* GetFrame() const;
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
#include <stdafx.h>
|
|
||||||
#include "WindowMessage.h"
|
|
||||||
|
|
||||||
IWindowMessagePtr WindowMessage::Create(
|
|
||||||
IWindow* target,
|
|
||||||
int messageType,
|
|
||||||
int64 data1,
|
|
||||||
int64 data2)
|
|
||||||
{
|
|
||||||
return IWindowMessagePtr(new WindowMessage(target, messageType, data1, data2));
|
|
||||||
}
|
|
||||||
|
|
||||||
WindowMessage::WindowMessage(
|
|
||||||
IWindow* target,
|
|
||||||
int messageType,
|
|
||||||
int64 data1,
|
|
||||||
int64 data2)
|
|
||||||
{
|
|
||||||
this->target = target;
|
|
||||||
this->messageType = messageType;
|
|
||||||
this->data1 = data1;
|
|
||||||
this->data2 = data2;
|
|
||||||
}
|
|
||||||
|
|
||||||
IWindow* WindowMessage::Target() {
|
|
||||||
return this->target;
|
|
||||||
}
|
|
||||||
|
|
||||||
int WindowMessage::MessageType() {
|
|
||||||
return this->messageType;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64 WindowMessage::UserData1() {
|
|
||||||
return this->data1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64 WindowMessage::UserData2() {
|
|
||||||
return this->data2;
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "IWindowMessage.h"
|
|
||||||
|
|
||||||
#include <boost/thread/recursive_mutex.hpp>
|
|
||||||
#include <boost/chrono.hpp>
|
|
||||||
|
|
||||||
class WindowMessageQueue {
|
|
||||||
public:
|
|
||||||
static WindowMessageQueue& Instance();
|
|
||||||
|
|
||||||
void Post(IWindowMessagePtr message, int64 delayMs = 0);
|
|
||||||
void Remove(IWindow *target, int type = -1);
|
|
||||||
|
|
||||||
void Dispatch();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static WindowMessageQueue instance;
|
|
||||||
|
|
||||||
struct EnqueuedMessage {
|
|
||||||
IWindowMessagePtr message;
|
|
||||||
boost::chrono::milliseconds time;
|
|
||||||
};
|
|
||||||
|
|
||||||
boost::recursive_mutex queueMutex;
|
|
||||||
std::list<EnqueuedMessage*> queue;
|
|
||||||
|
|
||||||
WindowMessageQueue();
|
|
||||||
void Dispatch(IWindowMessagePtr message);
|
|
||||||
|
|
||||||
};
|
|
@ -143,8 +143,8 @@
|
|||||||
<ClCompile Include="cursespp\SingleLineEntry.cpp" />
|
<ClCompile Include="cursespp\SingleLineEntry.cpp" />
|
||||||
<ClCompile Include="cursespp\Window.cpp" />
|
<ClCompile Include="cursespp\Window.cpp" />
|
||||||
<ClCompile Include="cursespp\WindowLayout.cpp" />
|
<ClCompile Include="cursespp\WindowLayout.cpp" />
|
||||||
<ClCompile Include="cursespp\WindowMessage.cpp" />
|
<ClCompile Include="cursespp\Message.cpp" />
|
||||||
<ClCompile Include="cursespp\WindowMessageQueue.cpp" />
|
<ClCompile Include="cursespp\MessageQueue.cpp" />
|
||||||
<ClCompile Include="Main.cpp" />
|
<ClCompile Include="Main.cpp" />
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
@ -175,13 +175,14 @@
|
|||||||
<ClInclude Include="cursespp\IKeyHandler.h" />
|
<ClInclude Include="cursespp\IKeyHandler.h" />
|
||||||
<ClInclude Include="cursespp\ILayout.h" />
|
<ClInclude Include="cursespp\ILayout.h" />
|
||||||
<ClInclude Include="cursespp\ILayoutStack.h" />
|
<ClInclude Include="cursespp\ILayoutStack.h" />
|
||||||
|
<ClInclude Include="cursespp\IMessageTarget.h" />
|
||||||
<ClInclude Include="cursespp\IOrderable.h" />
|
<ClInclude Include="cursespp\IOrderable.h" />
|
||||||
<ClInclude Include="cursespp\LayoutStack.h" />
|
<ClInclude Include="cursespp\LayoutStack.h" />
|
||||||
<ClInclude Include="cursespp\IScrollable.h" />
|
<ClInclude Include="cursespp\IScrollable.h" />
|
||||||
<ClInclude Include="cursespp\IScrollAdapter.h" />
|
<ClInclude Include="cursespp\IScrollAdapter.h" />
|
||||||
<ClInclude Include="cursespp\IWindow.h" />
|
<ClInclude Include="cursespp\IWindow.h" />
|
||||||
<ClInclude Include="cursespp\IWindowGroup.h" />
|
<ClInclude Include="cursespp\IWindowGroup.h" />
|
||||||
<ClInclude Include="cursespp\IWindowMessage.h" />
|
<ClInclude Include="cursespp\IMessage.h" />
|
||||||
<ClInclude Include="cursespp\LayoutBase.h" />
|
<ClInclude Include="cursespp\LayoutBase.h" />
|
||||||
<ClInclude Include="cursespp\ListWindow.h" />
|
<ClInclude Include="cursespp\ListWindow.h" />
|
||||||
<ClInclude Include="cursespp\MultiLineEntry.h" />
|
<ClInclude Include="cursespp\MultiLineEntry.h" />
|
||||||
@ -192,8 +193,8 @@
|
|||||||
<ClInclude Include="cursespp\SingleLineEntry.h" />
|
<ClInclude Include="cursespp\SingleLineEntry.h" />
|
||||||
<ClInclude Include="cursespp\Window.h" />
|
<ClInclude Include="cursespp\Window.h" />
|
||||||
<ClInclude Include="cursespp\WindowLayout.h" />
|
<ClInclude Include="cursespp\WindowLayout.h" />
|
||||||
<ClInclude Include="cursespp\WindowMessage.h" />
|
<ClInclude Include="cursespp\Message.h" />
|
||||||
<ClInclude Include="cursespp\WindowMessageQueue.h" />
|
<ClInclude Include="cursespp\MessageQueue.h" />
|
||||||
<ClInclude Include="stdafx.h" />
|
<ClInclude Include="stdafx.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -27,12 +27,6 @@
|
|||||||
<ClCompile Include="cursespp\Window.cpp">
|
<ClCompile Include="cursespp\Window.cpp">
|
||||||
<Filter>cursespp</Filter>
|
<Filter>cursespp</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="cursespp\WindowMessage.cpp">
|
|
||||||
<Filter>cursespp</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="cursespp\WindowMessageQueue.cpp">
|
|
||||||
<Filter>cursespp</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="cursespp\Colors.cpp">
|
<ClCompile Include="cursespp\Colors.cpp">
|
||||||
<Filter>cursespp</Filter>
|
<Filter>cursespp</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -93,6 +87,12 @@
|
|||||||
<ClCompile Include="app\service\PlaybackService.cpp">
|
<ClCompile Include="app\service\PlaybackService.cpp">
|
||||||
<Filter>app\service</Filter>
|
<Filter>app\service</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="cursespp\Message.cpp">
|
||||||
|
<Filter>cursespp</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cursespp\MessageQueue.cpp">
|
||||||
|
<Filter>cursespp</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="stdafx.h" />
|
<ClInclude Include="stdafx.h" />
|
||||||
@ -120,12 +120,6 @@
|
|||||||
<ClInclude Include="cursespp\Window.h">
|
<ClInclude Include="cursespp\Window.h">
|
||||||
<Filter>cursespp</Filter>
|
<Filter>cursespp</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="cursespp\WindowMessage.h">
|
|
||||||
<Filter>cursespp</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="cursespp\WindowMessageQueue.h">
|
|
||||||
<Filter>cursespp</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="cursespp\Colors.h">
|
<ClInclude Include="cursespp\Colors.h">
|
||||||
<Filter>cursespp</Filter>
|
<Filter>cursespp</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -156,9 +150,6 @@
|
|||||||
<ClInclude Include="cursespp\IWindowGroup.h">
|
<ClInclude Include="cursespp\IWindowGroup.h">
|
||||||
<Filter>cursespp</Filter>
|
<Filter>cursespp</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="cursespp\IWindowMessage.h">
|
|
||||||
<Filter>cursespp</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="cursespp\LayoutBase.h">
|
<ClInclude Include="cursespp\LayoutBase.h">
|
||||||
<Filter>cursespp</Filter>
|
<Filter>cursespp</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -222,6 +213,18 @@
|
|||||||
<ClInclude Include="app\service\PlaybackService.h">
|
<ClInclude Include="app\service\PlaybackService.h">
|
||||||
<Filter>app\service</Filter>
|
<Filter>app\service</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="cursespp\IMessage.h">
|
||||||
|
<Filter>cursespp</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cursespp\Message.h">
|
||||||
|
<Filter>cursespp</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cursespp\MessageQueue.h">
|
||||||
|
<Filter>cursespp</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cursespp\IMessageTarget.h">
|
||||||
|
<Filter>cursespp</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="cursespp">
|
<Filter Include="cursespp">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user