ui: statusview

* statusview as tab
This commit is contained in:
Andreas Stallinger
2016-12-07 12:56:56 +01:00
parent 3a269ad7b3
commit 5d5a0922f5
19 changed files with 607 additions and 0 deletions
+7
View File
@@ -35,6 +35,8 @@ add_files(
component/controller/SearchController.h
component/controller/StatusBarController.cpp
component/controller/StatusBarController.h
component/controller/StatusController.cpp
component/controller/StatusController.h
component/controller/UndoRedoController.cpp
component/controller/UndoRedoController.h
@@ -63,6 +65,8 @@ add_files(
component/view/SearchView.h
component/view/StatusBarView.cpp
component/view/StatusBarView.h
component/view/StatusView.cpp
component/view/StatusView.h
component/view/TabbedView.cpp
component/view/TabbedView.h
component/view/UndoRedoView.cpp
@@ -256,6 +260,7 @@ add_files(
utility/messaging/type/MessageChangeFileView.h
utility/messaging/type/MessageClearErrorCount.h
utility/messaging/type/MessageClearLogView.h
utility/messaging/type/MessageClearStatusView.h
utility/messaging/type/MessageCodeReference.h
utility/messaging/type/MessageColorSchemeTest.h
utility/messaging/type/MessageDeactivateEdge.h
@@ -274,6 +279,7 @@ add_files(
utility/messaging/type/MessageIDECreateCDB.h
utility/messaging/type/MessageInterruptTasks.h
utility/messaging/type/MessageLoadProject.h
utility/messaging/type/MessageLogFilterChanged.h
utility/messaging/type/MessageMoveIDECursor.h
utility/messaging/type/MessageNewErrors.h
utility/messaging/type/MessagePingReceived.h
@@ -293,6 +299,7 @@ add_files(
utility/messaging/type/MessageShowScope.h
utility/messaging/type/MessageShowStartScreen.h
utility/messaging/type/MessageStatus.h
utility/messaging/type/MessageStatusFilterChanged.h
utility/messaging/type/MessageSwitchColorScheme.h
utility/messaging/type/MessageUndo.h
utility/messaging/type/MessageWindowClosed.h
+10
View File
@@ -9,6 +9,7 @@
#include "component/controller/RefreshController.h"
#include "component/controller/SearchController.h"
#include "component/controller/StatusBarController.h"
#include "component/controller/StatusController.h"
#include "component/controller/UndoRedoController.h"
#include "component/view/CodeView.h"
#include "component/view/ErrorView.h"
@@ -17,6 +18,7 @@
#include "component/view/RefreshView.h"
#include "component/view/SearchView.h"
#include "component/view/StatusBarView.h"
#include "component/view/StatusView.h"
#include "component/view/UndoRedoView.h"
#include "component/view/ViewFactory.h"
@@ -119,6 +121,14 @@ std::shared_ptr<Component> ComponentFactory::createStatusBarComponent(ViewLayout
return std::make_shared<Component>(view, controller);
}
std::shared_ptr<Component> ComponentFactory::createStatusComponent(ViewLayout* viewLayout)
{
std::shared_ptr<StatusView> view = m_viewFactory->createStatusView(viewLayout);
std::shared_ptr<StatusController> controller = std::make_shared<StatusController>();
return std::make_shared<Component>(view, controller);
}
ComponentFactory::ComponentFactory()
{
}
+1
View File
@@ -27,6 +27,7 @@ public:
std::shared_ptr<Component> createRefreshComponent(ViewLayout* viewLayout);
std::shared_ptr<Component> createSearchComponent(ViewLayout* viewLayout);
std::shared_ptr<Component> createStatusBarComponent(ViewLayout* viewLayout);
std::shared_ptr<Component> createStatusComponent(ViewLayout* viewLayout);
std::shared_ptr<Component> createUndoRedoComponent(ViewLayout* viewLayout);
private:
+4
View File
@@ -63,8 +63,12 @@ void ComponentManager::setup(ViewLayout* viewLayout)
// std::shared_ptr<Component> logComponent = m_componentFactory->createLogComponent(tabbedView.get());
// m_components.push_back(logComponent);
std::shared_ptr<Component> statusComponent = m_componentFactory->createStatusComponent(tabbedView.get());
m_components.push_back(statusComponent);
std::shared_ptr<Component> errorComponent = m_componentFactory->createErrorComponent(tabbedView.get());
m_components.push_back(errorComponent);
}
void ComponentManager::clearComponents()
@@ -0,0 +1,110 @@
#include "component/controller/StatusController.h"
#include "data/access/StorageAccess.h"
#include "utility/logging/LogManager.h"
#include "settings/ApplicationSettings.h"
#include "component/view/StatusView.h"
StatusController::StatusController()
: m_enabled(false)
, m_lastSyncedStatus(0)
, m_waiting(false)
{
}
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>();
}
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();
std::cout << "handlefilterchange" << std::endl;
syncStatus();
}
void StatusController::clearTable()
{
getView()->clear();
}
void StatusController::handleMessage(MessageClearStatusView* message)
{
clear();
}
void StatusController::syncStatus()
{
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);
}
@@ -0,0 +1,57 @@
#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/MessageStatus.h"
#include "utility/Status.h"
class StatusView;
class StorageAccess;
class StatusController
: public Controller
, public MessageListener<MessageClearStatusView>
, public MessageListener<MessageStatusFilterChanged>
, public MessageListener<MessageStatus>
{
public:
StatusController();
~StatusController();
void setEnabled(bool enabled);
bool getEnabled() const;
private:
bool m_enabled;
StatusView* getView() const;
virtual void clear();
virtual void handleMessage(MessageClearStatusView* message);
virtual void handleMessage(MessageStatusFilterChanged* message);
virtual void handleMessage(MessageStatus* message);
void addStatus(Logger::LogLevel type, const LogMessage& message);
void syncStatus();
void clearTable();
std::vector<Status> m_status;
size_t m_lastSyncedStatus;
StatusFilter m_statusFilter;
std::mutex m_statusMutex;
bool m_waiting;
};
#endif // STATUS_CONTROLLER_H
+16
View File
@@ -0,0 +1,16 @@
#include "component/view/StatusView.h"
StatusView::StatusView(ViewLayout* viewLayout)
: View(viewLayout)
{
}
StatusView::~StatusView()
{
}
std::string StatusView::getName() const
{
return "Status";
}
+28
View File
@@ -0,0 +1,28 @@
#ifndef STATUS_VIEW_H
#define STATUS_VIEW_H
#include "component/view/View.h"
#include "utility/Status.h"
#include "utility/logging/LogMessage.h"
#include "utility/logging/Logger.h"
class StatusView
: public View
{
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
+2
View File
@@ -14,6 +14,7 @@ class LogView;
class RefreshView;
class SearchView;
class StatusBarView;
class StatusView;
class StorageAccess;
class TabbedView;
class UndoRedoView;
@@ -37,6 +38,7 @@ public:
virtual std::shared_ptr<RefreshView> createRefreshView(ViewLayout* viewLayout) const = 0;
virtual std::shared_ptr<SearchView> createSearchView(ViewLayout* viewLayout) const = 0;
virtual std::shared_ptr<StatusBarView> createStatusBarView(ViewLayout* viewLayout) const = 0;
virtual std::shared_ptr<StatusView> createStatusView(ViewLayout* viewLayout) const = 0;
virtual std::shared_ptr<UndoRedoView> createUndoRedoView(ViewLayout* viewLayout) const = 0;
virtual std::shared_ptr<DialogView> createDialogView(ViewLayout* viewLayout, StorageAccess* storageAccess) const = 0;
+11
View File
@@ -1,6 +1,7 @@
#include "settings/ApplicationSettings.h"
#include "utility/ResourcePaths.h"
#include "utility/Status.h"
#include "utility/utility.h"
const size_t ApplicationSettings::VERSION = 1;
@@ -180,6 +181,16 @@ void ApplicationSettings::setLogFilter(int mask)
setValue<int>("application/log_filter", mask);
}
void ApplicationSettings::setStatusFilter(int mask)
{
setValue<int>("application/status_filter", mask);
}
int ApplicationSettings::getStatusFilter() const
{
return getValue<int>("application/status_filter", STATUSTYPE::STATUS_INFO | STATUSTYPE::STATUS_ERROR);
}
int ApplicationSettings::getLogFilter() const
{
return getValue<int>("application/log_filter", Logger::LOG_WARNINGS | Logger::LOG_ERRORS);
+3
View File
@@ -57,6 +57,9 @@ public:
int getLogFilter() const;
void setLogFilter(int mask);
int getStatusFilter() const;
void setStatusFilter(int mask);
std::vector<FilePath> getIndexingFilePaths() const;
bool setIndexingFilePaths(const std::vector<FilePath>& indexingFiles);
+24
View File
@@ -0,0 +1,24 @@
#ifndef STATUS_H
#define STATUS_H
#include <string>
struct Status
{
Status(std::string message, bool isError = false)
: message(message)
, isError(isError){};
std::string message;
bool isError;
};
enum STATUSTYPE
{
STATUS_INFO = 1,
STATUS_ERROR = 2,
};
typedef int StatusFilter;
#endif //STATUS_H
@@ -0,0 +1,20 @@
#ifndef MESSAGE_CLEAR_STATUS_VIEW_H
#define MESSAGE_CLEAR_STATUS_VIEW_H
#include "utility/messaging/Message.h"
class MessageClearStatusView:
public Message<MessageClearStatusView>
{
public:
MessageClearStatusView()
{
}
static const std::string getStaticType()
{
return "MessageClearStatusView";
}
};
#endif // MESSAGE_CLEAR_STATUS_VIEW_H
@@ -0,0 +1,25 @@
#ifndef MESSAGE_STATUS_FILTER_CHANGED_H
#define MESSAGE_STATUS_FILTER_CHANGED_H
#include "utility/messaging/Message.h"
#include "utility/logging/Logger.h"
#include "utility/Status.h"
class MessageStatusFilterChanged
: public Message<MessageStatusFilterChanged>
{
public:
MessageStatusFilterChanged(const StatusFilter filter)
: statusFilter(filter)
{
}
static const std::string getStaticType()
{
return "MessageStatusFilterChanged";
}
const StatusFilter statusFilter;
};
#endif // MESSAGE_STATUS_FILTER_CHANGED_H