Compare commits

...
Author SHA1 Message Date
Eberhard Graether 9550ea1fdc delta time for loader 2016-07-08 14:37:49 +02:00
Eberhard Graether cad473c097 started with delay 2016-07-08 14:37:49 +02:00
Eberhard Graether 89264d97bb in code view 2016-07-08 14:37:49 +02:00
Eberhard Graether 096291a6c4 fixed animation 2016-07-08 14:37:49 +02:00
Eberhard Graether 1fcb241189 View interface 2016-07-08 14:37:49 +02:00
Eberhard Graether 996b33b1fb overlay for code view 2016-07-08 14:37:49 +02:00
Eberhard Graether fea26bfc60 animated loader with circles 2016-07-08 14:37:49 +02:00
Eberhard Graether 6a3717b8c1 basic overlay for graph view 2016-07-08 14:37:49 +02:00
17 changed files with 322 additions and 12 deletions
+4
View File
@@ -38,6 +38,8 @@ ViewFactory* ComponentFactory::getViewFactory() const
std::shared_ptr<Component> ComponentFactory::createCodeComponent(ViewLayout* viewLayout) std::shared_ptr<Component> ComponentFactory::createCodeComponent(ViewLayout* viewLayout)
{ {
std::shared_ptr<CodeView> view = m_viewFactory->createCodeView(viewLayout); std::shared_ptr<CodeView> view = m_viewFactory->createCodeView(viewLayout);
view->createOverlay();
std::shared_ptr<CodeController> controller = std::make_shared<CodeController>(m_storageAccess); std::shared_ptr<CodeController> controller = std::make_shared<CodeController>(m_storageAccess);
return std::make_shared<Component>(view, controller); return std::make_shared<Component>(view, controller);
@@ -53,6 +55,8 @@ std::shared_ptr<Component> ComponentFactory::createFeatureComponent()
std::shared_ptr<Component> ComponentFactory::createGraphComponent(ViewLayout* viewLayout) std::shared_ptr<Component> ComponentFactory::createGraphComponent(ViewLayout* viewLayout)
{ {
std::shared_ptr<View> view = m_viewFactory->createGraphView(viewLayout); std::shared_ptr<View> view = m_viewFactory->createGraphView(viewLayout);
view->createOverlay();
std::shared_ptr<GraphController> controller = std::make_shared<GraphController>(m_storageAccess); std::shared_ptr<GraphController> controller = std::make_shared<GraphController>(m_storageAccess);
return std::make_shared<Component>(view, controller); return std::make_shared<Component>(view, controller);
@@ -25,12 +25,13 @@ CodeController::~CodeController()
{ {
} }
const uint CodeController::s_lineRadius = 2;
void CodeController::handleMessage(MessageActivateAll* message) void CodeController::handleMessage(MessageActivateAll* message)
{ {
TRACE("code all"); TRACE("code all");
CodeView* view = getView();
view->showOverlay();
std::vector<ErrorInfo> errors; std::vector<ErrorInfo> errors;
m_collection = m_storageAccess->getErrorTokenLocations(&errors); m_collection = m_storageAccess->getErrorTokenLocations(&errors);
std::vector<CodeSnippetParams> snippets = getSnippetsForCollection(m_collection); std::vector<CodeSnippetParams> snippets = getSnippetsForCollection(m_collection);
@@ -82,7 +83,6 @@ void CodeController::handleMessage(MessageActivateAll* message)
snippets.insert(snippets.begin(), statsSnippet); snippets.insert(snippets.begin(), statsSnippet);
CodeView* view = getView();
view->clear(); view->clear();
view->setErrorInfos(errors); view->setErrorInfos(errors);
view->showCodeSnippets(snippets, std::vector<Id>()); view->showCodeSnippets(snippets, std::vector<Id>());
@@ -101,6 +101,7 @@ void CodeController::handleMessage(MessageActivateTokens* message)
TRACE("code activate"); TRACE("code activate");
CodeView* view = getView(); CodeView* view = getView();
view->showOverlay();
if (!message->keepContent()) if (!message->keepContent())
{ {
@@ -168,6 +169,7 @@ void CodeController::handleMessage(MessageChangeFileView* message)
case MessageChangeFileView::FILE_SNIPPETS: case MessageChangeFileView::FILE_SNIPPETS:
if (message->needsData) if (message->needsData)
{ {
view->showOverlay();
view->addCodeSnippets(getSnippetsForFile( view->addCodeSnippets(getSnippetsForFile(
m_collection->getTokenLocationFileByPath(message->filePath), !message->showErrors), false); m_collection->getTokenLocationFileByPath(message->filePath), !message->showErrors), false);
} }
@@ -177,6 +179,8 @@ void CodeController::handleMessage(MessageChangeFileView* message)
case MessageChangeFileView::FILE_MAXIMIZED: case MessageChangeFileView::FILE_MAXIMIZED:
if (message->needsData) if (message->needsData)
{ {
view->showOverlay();
CodeSnippetParams params; CodeSnippetParams params;
params.startLineNumber = 1; params.startLineNumber = 1;
params.refCount = -1; params.refCount = -1;
@@ -246,11 +250,13 @@ void CodeController::handleMessage(MessageShowErrors* message)
{ {
TRACE("code errors"); TRACE("code errors");
CodeView* view = getView();
view->showOverlay();
std::vector<ErrorInfo> errors; std::vector<ErrorInfo> errors;
m_collection = m_storageAccess->getErrorTokenLocations(&errors); m_collection = m_storageAccess->getErrorTokenLocations(&errors);
std::vector<CodeSnippetParams> snippets = getSnippetsForCollection(m_collection); std::vector<CodeSnippetParams> snippets = getSnippetsForCollection(m_collection);
CodeView* view = getView();
view->clear(); view->clear();
view->setErrorInfos(errors); view->setErrorInfos(errors);
view->showCodeSnippets(snippets, std::vector<Id>()); view->showCodeSnippets(snippets, std::vector<Id>());
@@ -263,6 +269,7 @@ void CodeController::handleMessage(MessageSearchFullText* message)
TRACE("code fulltext"); TRACE("code fulltext");
CodeView* view = getView(); CodeView* view = getView();
view->showOverlay();
view->clear(); view->clear();
m_collection = m_storageAccess->getFullTextSearchLocations(message->searchTerm, message->caseSensitive); m_collection = m_storageAccess->getFullTextSearchLocations(message->searchTerm, message->caseSensitive);
@@ -46,8 +46,6 @@ public:
~CodeController(); ~CodeController();
private: private:
static const uint s_lineRadius;
virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateAll* message);
virtual void handleMessage(MessageActivateLocalSymbols* message); virtual void handleMessage(MessageActivateLocalSymbols* message);
virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTokens* message);
@@ -26,6 +26,8 @@ void GraphController::handleMessage(MessageActivateAll* message)
{ {
TRACE("graph all"); TRACE("graph all");
getView()->showOverlay();
m_activeNodeIds.clear(); m_activeNodeIds.clear();
m_activeEdgeIds.clear(); m_activeEdgeIds.clear();
@@ -43,6 +45,8 @@ void GraphController::handleMessage(MessageActivateTokens* message)
{ {
TRACE("graph activate"); TRACE("graph activate");
getView()->showOverlay();
if (message->isEdge || message->keepContent()) if (message->isEdge || message->keepContent())
{ {
m_activeEdgeIds = message->tokenIds; m_activeEdgeIds = message->tokenIds;
+17 -2
View File
@@ -25,14 +25,29 @@ void View::addToLayout()
m_viewLayout->addView(this); m_viewLayout->addView(this);
} }
void View::setComponent(Component* component)
{
m_component = component;
}
ViewWidgetWrapper* View::getWidgetWrapper() const ViewWidgetWrapper* View::getWidgetWrapper() const
{ {
return m_widgetWrapper.get(); return m_widgetWrapper.get();
} }
void View::setComponent(Component* component) void View::createOverlay()
{ {
m_component = component; getWidgetWrapper()->createOverlay();
}
void View::showOverlay()
{
getWidgetWrapper()->showOverlay();
}
void View::hideOverlay()
{
getWidgetWrapper()->hideOverlay();
} }
ViewLayout* View::getViewLayout() const ViewLayout* View::getViewLayout() const
+4
View File
@@ -35,6 +35,10 @@ public:
ViewWidgetWrapper* getWidgetWrapper() const; ViewWidgetWrapper* getWidgetWrapper() const;
void createOverlay();
void showOverlay();
void hideOverlay();
protected: protected:
template <typename ControllerType> template <typename ControllerType>
ControllerType* getController(); ControllerType* getController();
@@ -6,6 +6,10 @@ class ViewWidgetWrapper
public: public:
ViewWidgetWrapper(); ViewWidgetWrapper();
virtual ~ViewWidgetWrapper(); virtual ~ViewWidgetWrapper();
virtual void createOverlay() = 0;
virtual void showOverlay() = 0;
virtual void hideOverlay() = 0;
}; };
#endif // VIEW_WIDGET_WRAPPER_H #endif // VIEW_WIDGET_WRAPPER_H
+10
View File
@@ -24,6 +24,11 @@ TimePoint::TimePoint(std::string s)
} }
} }
TimePoint TimePoint::now()
{
return TimePoint(boost::posix_time::microsec_clock::local_time());
}
std::string TimePoint::toString() const std::string TimePoint::toString() const
{ {
std::stringstream stream; std::stringstream stream;
@@ -32,4 +37,9 @@ std::string TimePoint::toString() const
stream.imbue(std::locale(std::locale::classic(), facet)); stream.imbue(std::locale(std::locale::classic(), facet));
stream << m_time; stream << m_time;
return stream.str(); return stream.str();
}
size_t TimePoint::deltaMS(const TimePoint& other) const
{
return (m_time - other.m_time).total_milliseconds();
} }
+5 -1
View File
@@ -11,6 +11,8 @@ public:
//TimePoint(time_t t); //TimePoint(time_t t);
TimePoint(std::string s); TimePoint(std::string s);
static TimePoint now();
std::string toString() const; std::string toString() const;
inline bool operator==(const TimePoint& rhs){ return m_time == rhs.m_time; } inline bool operator==(const TimePoint& rhs){ return m_time == rhs.m_time; }
@@ -20,7 +22,9 @@ public:
inline bool operator<=(const TimePoint& rhs){ return m_time <= rhs.m_time; } inline bool operator<=(const TimePoint& rhs){ return m_time <= rhs.m_time; }
inline bool operator>=(const TimePoint& rhs){ return m_time >= rhs.m_time; } inline bool operator>=(const TimePoint& rhs){ return m_time >= rhs.m_time; }
inline float operator-(const TimePoint& rhs){ return (m_time - rhs.m_time).total_milliseconds() / 1000.0f; } inline float operator-(const TimePoint& rhs){ return deltaMS(rhs) / 1000.0f; }
size_t deltaMS(const TimePoint& other) const;
private: private:
boost::posix_time::ptime m_time; boost::posix_time::ptime m_time;
+1 -1
View File
@@ -3,7 +3,7 @@
TimePoint utility::durationStart() TimePoint utility::durationStart()
{ {
return TimePoint(boost::posix_time::microsec_clock::local_time()); return TimePoint::now();
} }
float utility::duration(const TimePoint& start) float utility::duration(const TimePoint& start)
+2
View File
@@ -102,6 +102,8 @@ add_files(
qt/view/QtUndoRedoView.h qt/view/QtUndoRedoView.h
qt/view/QtViewFactory.cpp qt/view/QtViewFactory.cpp
qt/view/QtViewFactory.h qt/view/QtViewFactory.h
qt/view/QtViewOverlay.cpp
qt/view/QtViewOverlay.h
qt/view/QtViewWidgetWrapper.cpp qt/view/QtViewWidgetWrapper.cpp
qt/view/QtViewWidgetWrapper.h qt/view/QtViewWidgetWrapper.h
+8
View File
@@ -157,6 +157,8 @@ void QtCodeView::doShowCodeSnippets(const std::vector<CodeSnippetParams>& snippe
m_widget->updateFiles(); m_widget->updateFiles();
setStyleSheet(); // so property "isLast" of QtCodeSnippet is computed correctly setStyleSheet(); // so property "isLast" of QtCodeSnippet is computed correctly
hideOverlay();
} }
void QtCodeView::doAddCodeSnippets(const std::vector<CodeSnippetParams>& snippets, bool insert) void QtCodeView::doAddCodeSnippets(const std::vector<CodeSnippetParams>& snippets, bool insert)
@@ -170,12 +172,16 @@ void QtCodeView::doAddCodeSnippets(const std::vector<CodeSnippetParams>& snippet
setStyleSheet(); // so property "isLast" of QtCodeSnippet is computed correctly setStyleSheet(); // so property "isLast" of QtCodeSnippet is computed correctly
hideOverlay();
m_widget->scrollToActiveFileIfRequested(); m_widget->scrollToActiveFileIfRequested();
} }
void QtCodeView::doShowCodeFile(const CodeSnippetParams& params) void QtCodeView::doShowCodeFile(const CodeSnippetParams& params)
{ {
m_widget->addCodeSnippet(params); m_widget->addCodeSnippet(params);
hideOverlay();
} }
void QtCodeView::doSetFileState(const FilePath filePath, FileState state) void QtCodeView::doSetFileState(const FilePath filePath, FileState state)
@@ -192,6 +198,8 @@ void QtCodeView::doSetFileState(const FilePath filePath, FileState state)
m_widget->setFileMaximized(filePath); m_widget->setFileMaximized(filePath);
break; break;
} }
hideOverlay();
} }
void QtCodeView::doShowFirstActiveSnippet(const std::vector<Id>& activeTokenIds, bool scrollTo) void QtCodeView::doShowFirstActiveSnippet(const std::vector<Id>& activeTokenIds, bool scrollTo)
+3 -1
View File
@@ -19,7 +19,6 @@
#include "qt/utility/utilityQt.h" #include "qt/utility/utilityQt.h"
#include "qt/graphics/QtGraphicsView.h" #include "qt/graphics/QtGraphicsView.h"
#include "qt/view/QtViewWidgetWrapper.h"
#include "qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h" #include "qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h"
#include "qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h" #include "qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h"
#include "qt/view/graphElements/QtGraphEdge.h" #include "qt/view/graphElements/QtGraphEdge.h"
@@ -27,6 +26,7 @@
#include "qt/view/graphElements/QtGraphNodeBundle.h" #include "qt/view/graphElements/QtGraphNodeBundle.h"
#include "qt/view/graphElements/QtGraphNodeData.h" #include "qt/view/graphElements/QtGraphNodeData.h"
#include "qt/view/graphElements/QtGraphNodeExpandToggle.h" #include "qt/view/graphElements/QtGraphNodeExpandToggle.h"
#include "qt/view/QtViewWidgetWrapper.h"
#include "settings/ColorScheme.h" #include "settings/ColorScheme.h"
QtGraphView::QtGraphView(ViewLayout* viewLayout) QtGraphView::QtGraphView(ViewLayout* viewLayout)
@@ -251,6 +251,8 @@ void QtGraphView::doRebuildGraph(
m_graph = graph; m_graph = graph;
} }
hideOverlay();
if (animated) if (animated)
{ {
createTransition(); createTransition();
+138
View File
@@ -0,0 +1,138 @@
#include "qt/view/QtViewOverlay.h"
#include <cmath>
#include <QEvent>
#include <QPainter>
#include <QPaintEvent>
#include <QTimer>
ResizeFilter::ResizeFilter(QWidget* widget)
: m_widget(widget)
{
}
bool ResizeFilter::eventFilter(QObject* obj, QEvent* event)
{
if (event->type() == QEvent::Resize)
{
QWidget* parent = dynamic_cast<QWidget*>(obj);
m_widget->setGeometry(0, 0, parent->width(), parent->height());
}
return QObject::eventFilter(obj, event);
}
QtOverlay::QtOverlay(QWidget* parent)
: QWidget(parent)
, m_count(rand() % 1000000)
, m_size(40)
{
m_timer = new QTimer(this);
QObject::connect(m_timer, SIGNAL(timeout()), this, SLOT(animate()));
}
void QtOverlay::start()
{
m_timePoint = TimePoint::now();
m_timer->start(FRAME_DELAY_MS);
show();
}
void QtOverlay::stop()
{
m_timer->stop();
hide();
}
void QtOverlay::animate()
{
TimePoint t = TimePoint::now();
size_t dt = t.deltaMS(m_timePoint);
if (dt < 5)
{
return;
}
m_timePoint = t;
m_count += dt;
QPoint center = geometry().center();
update(QRect(center.x() - m_size / 2, center.y() - m_size / 2, m_size, m_size));
}
void QtOverlay::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.fillRect(geometry(), "#AAFFFFFF");
QPoint center = geometry().center();
size_t x = m_size / 2;
size_t y = m_size / 2;
size_t s = (m_count / 7) % 200;
if (s < 100)
{
x = std::cos(3.1415f * s / 100) * x;
}
else
{
y = std::cos(3.1415f * (s - 100) / 100) * y;
}
painter.translate(center.x(), center.y());
// painter.rotate(m_count / 8);
if (s > 50 && s < 150)
{
painter.setBrush(QBrush("#882E3C86"));
}
else
{
painter.setBrush(QBrush("#88007AC2"));
}
painter.setPen(QPen(Qt::transparent));
painter.drawEllipse(-x, -y, 2 * x, 2 * y);
}
QtViewOverlay::QtViewOverlay(QWidget* parent)
: m_parent(parent)
, m_showFunctor(std::bind(&QtViewOverlay::doShowOverlay, this))
, m_hideFunctor(std::bind(&QtViewOverlay::doHideOverlay, this))
{
m_overlay = new QtOverlay(m_parent);
m_overlay->hide();
m_parent->installEventFilter(new ResizeFilter(m_overlay));
m_delayTimer = new QTimer(m_overlay);
m_delayTimer->setSingleShot(true);
QObject::connect(m_delayTimer, SIGNAL(timeout()), m_overlay, SLOT(start()));
}
void QtViewOverlay::showOverlay()
{
m_showFunctor();
}
void QtViewOverlay::hideOverlay()
{
m_hideFunctor();
}
void QtViewOverlay::doShowOverlay()
{
m_delayTimer->start(500);
}
void QtViewOverlay::doHideOverlay()
{
m_delayTimer->stop();
m_overlay->stop();
}
+79
View File
@@ -0,0 +1,79 @@
#ifndef QT_VIEW_OVERLAY
#define QT_VIEW_OVERLAY
#include <QWidget>
#include "qt/utility/QtThreadedFunctor.h"
#include "utility/TimePoint.h"
class QTimer;
class ResizeFilter
: public QObject
{
Q_OBJECT
signals:
void triggered();
public:
ResizeFilter(QWidget* widget);
protected:
bool eventFilter(QObject* obj, QEvent* event);
private:
QWidget* m_widget;
};
class QtOverlay
: public QWidget
{
Q_OBJECT
public:
QtOverlay(QWidget* parent = nullptr);
static const size_t FRAME_DELAY_MS = 25;
public slots:
void start();
void stop();
void animate();
protected:
void paintEvent(QPaintEvent *event);
private:
QTimer* m_timer;
size_t m_count;
size_t m_size;
TimePoint m_timePoint;
};
class QtViewOverlay
{
public:
QtViewOverlay(QWidget* parent = 0);
void showOverlay();
void hideOverlay();
private:
void doShowOverlay();
void doHideOverlay();
QWidget* m_parent;
QtOverlay* m_overlay;
QTimer* m_delayTimer;
QtThreadedFunctor<void> m_showFunctor;
QtThreadedFunctor<void> m_hideFunctor;
};
#endif // QT_VIEW_OVERLAY
@@ -1,6 +1,7 @@
#include "qt/view/QtViewWidgetWrapper.h" #include "qt/view/QtViewWidgetWrapper.h"
#include "component/view/View.h" #include "component/view/View.h"
#include "qt/view/QtViewOverlay.h"
#include "utility/logging/logging.h" #include "utility/logging/logging.h"
QWidget* QtViewWidgetWrapper::getWidgetOfView(const View* view) QWidget* QtViewWidgetWrapper::getWidgetOfView(const View* view)
@@ -24,6 +25,7 @@ QWidget* QtViewWidgetWrapper::getWidgetOfView(const View* view)
QtViewWidgetWrapper::QtViewWidgetWrapper(QWidget* widget) QtViewWidgetWrapper::QtViewWidgetWrapper(QWidget* widget)
: m_widget(widget) : m_widget(widget)
, m_overlay(nullptr)
{ {
} }
@@ -31,6 +33,27 @@ QtViewWidgetWrapper::~QtViewWidgetWrapper()
{ {
} }
void QtViewWidgetWrapper::createOverlay()
{
m_overlay = new QtViewOverlay(m_widget);
}
void QtViewWidgetWrapper::showOverlay()
{
if (m_overlay)
{
m_overlay->showOverlay();
}
}
void QtViewWidgetWrapper::hideOverlay()
{
if (m_overlay)
{
m_overlay->hideOverlay();
}
}
QWidget* QtViewWidgetWrapper::getWidget() QWidget* QtViewWidgetWrapper::getWidget()
{ {
return m_widget; return m_widget;
+9 -1
View File
@@ -6,8 +6,10 @@
#include "component/view/ViewWidgetWrapper.h" #include "component/view/ViewWidgetWrapper.h"
class View; class View;
class QtViewOverlay;
class QtViewWidgetWrapper: public ViewWidgetWrapper class QtViewWidgetWrapper
: public ViewWidgetWrapper
{ {
public: public:
static QWidget* getWidgetOfView(const View* view); static QWidget* getWidgetOfView(const View* view);
@@ -15,10 +17,16 @@ public:
QtViewWidgetWrapper(QWidget* widget); QtViewWidgetWrapper(QWidget* widget);
virtual ~QtViewWidgetWrapper(); virtual ~QtViewWidgetWrapper();
virtual void createOverlay() override;
virtual void showOverlay() override;
virtual void hideOverlay() override;
QWidget* getWidget(); QWidget* getWidget();
private: private:
QWidget* m_widget; QWidget* m_widget;
QtViewOverlay* m_overlay;
}; };
#endif // QT_VIEW_WIDGET_WRAPPER_H #endif // QT_VIEW_WIDGET_WRAPPER_H