logic: initially parse source on message thread and add more StatusBar messages
This change puts the initial project loading into a MessageLoadProject so that the UI thread is still responding. Also the StatusBar is now responding to more Messages and it's MessageListeners get added to the MessageQueue in front of other listeners so that the StatusBar UI can announce actions.
This commit is contained in:
@@ -25,6 +25,8 @@ std::shared_ptr<Application> Application::create(ViewFactory* viewFactory)
|
||||
ptr->m_componentManager->setup();
|
||||
ptr->m_mainView->loadLayout();
|
||||
|
||||
MessageLoadProject("data/ProjectSettings.xml").dispatch();
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
#include "utility/messaging/MessageListener.h"
|
||||
#include "utility/messaging/type/MessageLoadProject.h"
|
||||
#include "utility/messaging/type/MessageLoadSource.h"
|
||||
#include "utility/messaging/type/MessageSaveProject.h"
|
||||
#include "utility/messaging/type/MessageRefresh.h"
|
||||
#include "utility/messaging/type/MessageSaveProject.h"
|
||||
|
||||
class ViewFactory;
|
||||
class MainView;
|
||||
|
||||
@@ -3,8 +3,13 @@
|
||||
#include "component/view/StatusBarView.h"
|
||||
|
||||
StatusBarController::StatusBarController()
|
||||
: MessageListener<MessageError>(true)
|
||||
, MessageListener<MessageFinishedParsing>(true)
|
||||
, MessageListener<MessageLoadProject>(true)
|
||||
, MessageListener<MessageLoadSource>(true)
|
||||
, MessageListener<MessageRefresh>(true)
|
||||
, MessageListener<MessageStatus>(true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
StatusBarController::~StatusBarController()
|
||||
@@ -28,12 +33,28 @@ void StatusBarController::handleMessage(MessageStatus* message)
|
||||
|
||||
void StatusBarController::handleMessage(MessageError* message)
|
||||
{
|
||||
setStatus(message->error, true);
|
||||
setStatus(message->error, true);
|
||||
}
|
||||
|
||||
void StatusBarController::handleMessage(MessageLoadProject* message)
|
||||
{
|
||||
setStatus("Loading Project: " + message->projectSettingsFilePath);
|
||||
}
|
||||
|
||||
void StatusBarController::handleMessage(MessageLoadSource* message)
|
||||
{
|
||||
setStatus("Loading Source: " + message->sourceDirectoryPath);
|
||||
}
|
||||
|
||||
void StatusBarController::handleMessage(MessageRefresh* message)
|
||||
{
|
||||
setStatus("Refreshing Project");
|
||||
}
|
||||
|
||||
void StatusBarController::setStatus(const std::string& status, bool isError)
|
||||
{
|
||||
if(!status.empty())
|
||||
getView()->showMessage(status, isError);
|
||||
if (!status.empty())
|
||||
{
|
||||
getView()->showMessage(status, isError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,28 +8,37 @@
|
||||
#include "utility/messaging/MessageListener.h"
|
||||
#include "utility/messaging/type/MessageError.h"
|
||||
#include "utility/messaging/type/MessageFinishedParsing.h"
|
||||
#include "utility/messaging/type/MessageLoadProject.h"
|
||||
#include "utility/messaging/type/MessageLoadSource.h"
|
||||
#include "utility/messaging/type/MessageRefresh.h"
|
||||
#include "utility/messaging/type/MessageStatus.h"
|
||||
|
||||
class StatusBarView;
|
||||
|
||||
class StatusBarController
|
||||
: public Controller
|
||||
, public MessageListener<MessageError>
|
||||
, public MessageListener<MessageFinishedParsing>
|
||||
, public MessageListener<MessageStatus>
|
||||
: public Controller
|
||||
, public MessageListener<MessageError>
|
||||
, public MessageListener<MessageFinishedParsing>
|
||||
, public MessageListener<MessageLoadProject>
|
||||
, public MessageListener<MessageLoadSource>
|
||||
, public MessageListener<MessageRefresh>
|
||||
, public MessageListener<MessageStatus>
|
||||
{
|
||||
public:
|
||||
|
||||
StatusBarController(void);
|
||||
~StatusBarController(void);
|
||||
virtual ~StatusBarController(void);
|
||||
|
||||
StatusBarView* getView();
|
||||
private:
|
||||
void setStatus(const std::string& status, bool isError = false);
|
||||
|
||||
virtual void handleMessage(MessageError* message);
|
||||
private:
|
||||
virtual void handleMessage(MessageError* message);
|
||||
virtual void handleMessage(MessageFinishedParsing* message);
|
||||
virtual void handleMessage(MessageLoadProject* message);
|
||||
virtual void handleMessage(MessageLoadSource* message);
|
||||
virtual void handleMessage(MessageRefresh* message);
|
||||
virtual void handleMessage(MessageStatus* message);
|
||||
|
||||
void setStatus(const std::string& status, bool isError = false);
|
||||
};
|
||||
|
||||
#endif // STATUS_BAR_CONTROLLER_H
|
||||
|
||||
@@ -5,12 +5,10 @@
|
||||
StatusBarView::StatusBarView(ViewLayout* viewLayout)
|
||||
: View(viewLayout, Vec2i(100,100))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
StatusBarView::~StatusBarView()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string StatusBarView::getName() const
|
||||
@@ -21,4 +19,4 @@ std::string StatusBarView::getName() const
|
||||
StatusBarController* StatusBarView::getController()
|
||||
{
|
||||
return View::getController<StatusBarController>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,11 @@ template<typename MessageType>
|
||||
class MessageListener: public MessageListenerBase
|
||||
{
|
||||
public:
|
||||
MessageListener(bool toFront = false)
|
||||
: MessageListenerBase(toFront)
|
||||
{
|
||||
}
|
||||
|
||||
virtual std::string getType() const
|
||||
{
|
||||
return MessageType::getStaticType();
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
class MessageListenerBase
|
||||
{
|
||||
public:
|
||||
MessageListenerBase()
|
||||
MessageListenerBase(bool toFront)
|
||||
{
|
||||
MessageQueue::getInstance()->registerListener(this);
|
||||
MessageQueue::getInstance()->registerListener(this, toFront);
|
||||
}
|
||||
|
||||
virtual ~MessageListenerBase()
|
||||
|
||||
@@ -16,10 +16,20 @@ std::shared_ptr<MessageQueue> MessageQueue::getInstance()
|
||||
return s_instance;
|
||||
}
|
||||
|
||||
void MessageQueue::registerListener(MessageListenerBase* listener)
|
||||
void MessageQueue::registerListener(MessageListenerBase* listener, bool toFront)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_listenersMutex);
|
||||
m_listeners.push_back(listener);
|
||||
|
||||
if (toFront)
|
||||
{
|
||||
m_listeners.insert(m_listeners.begin(), listener);
|
||||
m_listenersLength++;
|
||||
m_currentListenerIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_listeners.push_back(listener);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageQueue::unregisterListener(MessageListenerBase* listener)
|
||||
|
||||
@@ -13,7 +13,7 @@ class MessageQueue
|
||||
public:
|
||||
static std::shared_ptr<MessageQueue> getInstance();
|
||||
|
||||
void registerListener(MessageListenerBase* listener);
|
||||
void registerListener(MessageListenerBase* listener, bool toFront = false);
|
||||
void unregisterListener(MessageListenerBase* listener);
|
||||
|
||||
void pushMessage(std::shared_ptr<MessageBase> message);
|
||||
|
||||
Reference in New Issue
Block a user