logic: polished status view
* click message in status bar to show status view * renamed status tab to output * renamed status column to message * fixed list not properly updating when using filters * scroll to first row after clearing
This commit is contained in:
@@ -299,6 +299,7 @@ add_files(
|
||||
utility/messaging/type/MessageShowReference.h
|
||||
utility/messaging/type/MessageShowScope.h
|
||||
utility/messaging/type/MessageShowStartScreen.h
|
||||
utility/messaging/type/MessageShowStatus.h
|
||||
utility/messaging/type/MessageStatus.h
|
||||
utility/messaging/type/MessageStatusFilterChanged.h
|
||||
utility/messaging/type/MessageSwitchColorScheme.h
|
||||
|
||||
@@ -1,31 +1,18 @@
|
||||
#include "component/controller/StatusController.h"
|
||||
|
||||
#include "data/access/StorageAccess.h"
|
||||
#include "utility/logging/LogManager.h"
|
||||
#include "settings/ApplicationSettings.h"
|
||||
#include "component/view/StatusView.h"
|
||||
#include "utility/utility.h"
|
||||
|
||||
StatusController::StatusController()
|
||||
: m_enabled(false)
|
||||
, m_lastSyncedStatus(0)
|
||||
, m_waiting(false)
|
||||
{
|
||||
m_statusFilter = ApplicationSettings::getInstance()->getStatusFilter();
|
||||
}
|
||||
|
||||
StatusController::~StatusController()
|
||||
{
|
||||
}
|
||||
|
||||
void StatusController::setEnabled(bool enabled)
|
||||
{
|
||||
m_enabled = enabled;
|
||||
}
|
||||
|
||||
bool StatusController::getEnabled() const
|
||||
{
|
||||
return m_enabled;
|
||||
}
|
||||
|
||||
StatusView* StatusController::getView() const
|
||||
{
|
||||
return Controller::getView<StatusView>();
|
||||
@@ -33,43 +20,7 @@ StatusView* StatusController::getView() const
|
||||
|
||||
void StatusController::clear()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_statusMutex);
|
||||
m_status.clear();
|
||||
clearTable();
|
||||
m_lastSyncedStatus = 0;
|
||||
}
|
||||
|
||||
|
||||
void StatusController::handleMessage(MessageStatus* message)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_statusMutex);
|
||||
m_status.push_back(Status(message->status, message->isError));
|
||||
|
||||
if (!m_waiting)
|
||||
{
|
||||
m_waiting = true;
|
||||
std::thread([&]()
|
||||
{
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(200));
|
||||
syncStatus();
|
||||
m_waiting = false;
|
||||
}
|
||||
).detach();
|
||||
}
|
||||
}
|
||||
|
||||
void StatusController::handleMessage(MessageStatusFilterChanged* message)
|
||||
{
|
||||
m_statusFilter = message->statusFilter;
|
||||
ApplicationSettings* settings = ApplicationSettings::getInstance().get();
|
||||
settings->setStatusFilter(m_statusFilter);
|
||||
settings->save();
|
||||
clearTable();
|
||||
syncStatus();
|
||||
}
|
||||
|
||||
void StatusController::clearTable()
|
||||
{
|
||||
getView()->clear();
|
||||
}
|
||||
|
||||
@@ -78,32 +29,44 @@ void StatusController::handleMessage(MessageClearStatusView* message)
|
||||
clear();
|
||||
}
|
||||
|
||||
void StatusController::syncStatus()
|
||||
void StatusController::handleMessage(MessageShowStatus* message)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_statusMutex);
|
||||
|
||||
std::vector<Status> status;
|
||||
|
||||
for (size_t i = m_lastSyncedStatus; i < m_status.size(); i++)
|
||||
{
|
||||
if ((m_status[i].isError && (STATUSTYPE::STATUS_ERROR & m_statusFilter))
|
||||
|| (!m_status[i].isError && (STATUSTYPE::STATUS_INFO & m_statusFilter)))
|
||||
{
|
||||
status.push_back(m_status[i]);
|
||||
}
|
||||
m_lastSyncedStatus = i;
|
||||
}
|
||||
m_lastSyncedStatus++;
|
||||
|
||||
//for (Status s : m_status)
|
||||
//{
|
||||
//if ((s.isError && (STATUSTYPE::STATUS_ERROR & m_statusFilter))
|
||||
//|| (!s.isError && (STATUSTYPE::STATUS_INFO & m_statusFilter)))
|
||||
//{
|
||||
//status.push_back(s);
|
||||
//}
|
||||
//}
|
||||
|
||||
getView()->addStatus(status);
|
||||
getView()->showDockWidget();
|
||||
}
|
||||
|
||||
void StatusController::handleMessage(MessageStatus* message)
|
||||
{
|
||||
std::vector<Status> status;
|
||||
status.push_back(Status(message->status, message->isError));
|
||||
|
||||
utility::append(m_status, status);
|
||||
|
||||
addStatus(status);
|
||||
}
|
||||
|
||||
void StatusController::handleMessage(MessageStatusFilterChanged* message)
|
||||
{
|
||||
m_statusFilter = message->statusFilter;
|
||||
|
||||
getView()->clear();
|
||||
addStatus(m_status);
|
||||
|
||||
ApplicationSettings* settings = ApplicationSettings::getInstance().get();
|
||||
settings->setStatusFilter(m_statusFilter);
|
||||
settings->save();
|
||||
}
|
||||
|
||||
void StatusController::addStatus(const std::vector<Status> status)
|
||||
{
|
||||
std::vector<Status> filteredStatus;
|
||||
|
||||
for (const Status& s : status)
|
||||
{
|
||||
if (s.type & m_statusFilter)
|
||||
{
|
||||
filteredStatus.push_back(s);
|
||||
}
|
||||
}
|
||||
|
||||
getView()->addStatus(filteredStatus);
|
||||
}
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
#ifndef STATUS_CONTROLLER_H
|
||||
#define STATUS_CONTROLLER_H
|
||||
|
||||
#include <mutex>
|
||||
|
||||
#include "component/controller/Controller.h"
|
||||
|
||||
#include "utility/logging/Logger.h"
|
||||
#include "utility/logging/LogMessage.h"
|
||||
#include "utility/messaging/MessageListener.h"
|
||||
#include "utility/messaging/type/MessageClearStatusView.h"
|
||||
#include "utility/messaging/type/MessageStatusFilterChanged.h"
|
||||
#include "utility/messaging/type/MessageShowStatus.h"
|
||||
#include "utility/messaging/type/MessageStatus.h"
|
||||
#include "utility/messaging/type/MessageStatusFilterChanged.h"
|
||||
#include "utility/Status.h"
|
||||
|
||||
class StatusView;
|
||||
@@ -19,16 +16,14 @@ class StorageAccess;
|
||||
class StatusController
|
||||
: public Controller
|
||||
, public MessageListener<MessageClearStatusView>
|
||||
, public MessageListener<MessageStatusFilterChanged>
|
||||
, public MessageListener<MessageShowStatus>
|
||||
, public MessageListener<MessageStatus>
|
||||
, public MessageListener<MessageStatusFilterChanged>
|
||||
{
|
||||
public:
|
||||
StatusController();
|
||||
~StatusController();
|
||||
|
||||
void setEnabled(bool enabled);
|
||||
bool getEnabled() const;
|
||||
|
||||
private:
|
||||
bool m_enabled;
|
||||
StatusView* getView() const;
|
||||
@@ -36,22 +31,14 @@ private:
|
||||
virtual void clear();
|
||||
|
||||
virtual void handleMessage(MessageClearStatusView* message);
|
||||
virtual void handleMessage(MessageStatusFilterChanged* message);
|
||||
virtual void handleMessage(MessageShowStatus* message);
|
||||
virtual void handleMessage(MessageStatus* message);
|
||||
virtual void handleMessage(MessageStatusFilterChanged* message);
|
||||
|
||||
|
||||
void addStatus(Logger::LogLevel type, const LogMessage& message);
|
||||
void syncStatus();
|
||||
void clearTable();
|
||||
|
||||
void addStatus(const std::vector<Status> status);
|
||||
|
||||
std::vector<Status> m_status;
|
||||
size_t m_lastSyncedStatus;
|
||||
StatusFilter m_statusFilter;
|
||||
|
||||
std::mutex m_statusMutex;
|
||||
bool m_waiting;
|
||||
|
||||
};
|
||||
|
||||
#endif // STATUS_CONTROLLER_H
|
||||
|
||||
@@ -13,8 +13,3 @@ std::string ErrorView::getName() const
|
||||
{
|
||||
return "Errors";
|
||||
}
|
||||
|
||||
void ErrorView::showDockWidget()
|
||||
{
|
||||
getViewLayout()->showView(this);
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@ public:
|
||||
|
||||
virtual std::string getName() const;
|
||||
|
||||
virtual void showDockWidget();
|
||||
|
||||
virtual void clear() = 0;
|
||||
|
||||
virtual void addErrors(const std::vector<ErrorInfo>& errors, bool scrollTo) = 0;
|
||||
|
||||
@@ -11,6 +11,6 @@ StatusView::~StatusView()
|
||||
|
||||
std::string StatusView::getName() const
|
||||
{
|
||||
return "Status";
|
||||
return "Output";
|
||||
}
|
||||
|
||||
|
||||
@@ -15,14 +15,10 @@ public:
|
||||
StatusView(ViewLayout* viewLayout);
|
||||
virtual ~StatusView();
|
||||
|
||||
|
||||
virtual std::string getName() const;
|
||||
|
||||
virtual void addStatus(const std::vector<Status>& status) = 0;
|
||||
virtual void clear() = 0;
|
||||
//virtual bool hasLogLevel(const Logger::LogLevel type, const Logger::LogLevelMask mask) const;
|
||||
//virtual void addLog(Logger::LogLevel type, const LogMessage& message) = 0;
|
||||
//virtual void addLogs(const std::vector<Log>& logs) = 0;
|
||||
//static const int LogLimit;
|
||||
};
|
||||
|
||||
#endif // STATUS_VIEW_H
|
||||
|
||||
@@ -25,6 +25,11 @@ void View::addToLayout()
|
||||
m_viewLayout->addView(this);
|
||||
}
|
||||
|
||||
void View::showDockWidget()
|
||||
{
|
||||
m_viewLayout->showView(this);
|
||||
}
|
||||
|
||||
ViewWidgetWrapper* View::getWidgetWrapper() const
|
||||
{
|
||||
return m_widgetWrapper.get();
|
||||
|
||||
@@ -29,11 +29,13 @@ public:
|
||||
|
||||
void init();
|
||||
void addToLayout();
|
||||
void showDockWidget();
|
||||
|
||||
void setComponent(Component* component);
|
||||
|
||||
ViewWidgetWrapper* getWidgetWrapper() const;
|
||||
|
||||
|
||||
protected:
|
||||
template <typename ControllerType>
|
||||
ControllerType* getController();
|
||||
|
||||
@@ -188,7 +188,7 @@ void ApplicationSettings::setStatusFilter(int mask)
|
||||
|
||||
int ApplicationSettings::getStatusFilter() const
|
||||
{
|
||||
return getValue<int>("application/status_filter", STATUSTYPE::STATUS_INFO | STATUSTYPE::STATUS_ERROR);
|
||||
return getValue<int>("application/status_filter", StatusType::STATUS_INFO | StatusType::STATUS_ERROR);
|
||||
}
|
||||
|
||||
int ApplicationSettings::getLogFilter() const
|
||||
|
||||
+14
-12
@@ -3,17 +3,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
struct Status
|
||||
{
|
||||
Status(std::string message, bool isError = false)
|
||||
: message(message)
|
||||
, isError(isError){};
|
||||
|
||||
std::string message;
|
||||
bool isError;
|
||||
};
|
||||
|
||||
enum STATUSTYPE
|
||||
enum StatusType
|
||||
{
|
||||
STATUS_INFO = 1,
|
||||
STATUS_ERROR = 2,
|
||||
@@ -21,4 +11,16 @@ enum STATUSTYPE
|
||||
|
||||
typedef int StatusFilter;
|
||||
|
||||
#endif //STATUS_H
|
||||
struct Status
|
||||
{
|
||||
Status(std::string message, bool isError = false)
|
||||
: message(message)
|
||||
, type(isError ? StatusType::STATUS_ERROR : StatusType::STATUS_INFO)
|
||||
{
|
||||
}
|
||||
|
||||
std::string message;
|
||||
StatusType type;
|
||||
};
|
||||
|
||||
#endif // STATUS_H
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef MESSAGE_SHOW_STATUS_H
|
||||
#define MESSAGE_SHOW_STATUS_H
|
||||
|
||||
#include "utility/messaging/Message.h"
|
||||
|
||||
class MessageShowStatus
|
||||
: public Message<MessageShowStatus>
|
||||
{
|
||||
public:
|
||||
MessageShowStatus()
|
||||
{
|
||||
}
|
||||
|
||||
static const std::string getStaticType()
|
||||
{
|
||||
return "MessageShowStatus";
|
||||
}
|
||||
};
|
||||
|
||||
#endif // MESSAGE_SHOW_STATUS_H
|
||||
Reference in New Issue
Block a user