diff --git a/src/renku/app/main.cpp b/src/renku/app/main.cpp --- a/src/renku/app/main.cpp +++ b/src/renku/app/main.cpp @@ -75,11 +75,7 @@ window->addDockWidget(Qt::LeftDockWidgetArea, pagesDock); window->addDockWidget(Qt::LeftDockWidgetArea, sourcesDock); - auto actions = QHash(); - actions.unite(components->availableSourcesView()->globalActions()); - actions.unite(components->availablePagesView()->globalActions()); - actions.unite(components->pageView()->globalActions()); - + auto actions = components->globalActions(); auto ac = window->actionCollection(); ac->addAction(KStandardAction::Quit, window, SLOT(close())); for (auto it = actions.constBegin(); it != actions.constEnd(); ++it) { diff --git a/src/widgets/applicationcomponents.h b/src/widgets/applicationcomponents.h --- a/src/widgets/applicationcomponents.h +++ b/src/widgets/applicationcomponents.h @@ -25,6 +25,7 @@ #ifndef WIDGETS_APPLICATIONCOMPONENTS_H #define WIDGETS_APPLICATIONCOMPONENTS_H +#include #include #include "domain/artifact.h" @@ -47,6 +48,8 @@ public: explicit ApplicationComponents(QWidget *parent = Q_NULLPTR); + QHash globalActions() const; + QObjectPtr model() const; AvailableSourcesView *availableSourcesView() const; @@ -62,6 +65,7 @@ void onCurrentArtifactChanged(const Domain::Artifact::Ptr &artifact); private: + QHash m_actions; QObjectPtr m_model; QWidget *m_parent; diff --git a/src/widgets/applicationcomponents.cpp b/src/widgets/applicationcomponents.cpp --- a/src/widgets/applicationcomponents.cpp +++ b/src/widgets/applicationcomponents.cpp @@ -49,6 +49,17 @@ { } +QHash ApplicationComponents::globalActions() const +{ + auto actions = QHash(); + actions.unite(availableSourcesView()->globalActions()); + actions.unite(availablePagesView()->globalActions()); + actions.unite(pageView()->globalActions()); + actions.unite(m_actions); + + return actions; +} + QObjectPtr ApplicationComponents::model() const { return m_model; diff --git a/src/zanshin/app/main.cpp b/src/zanshin/app/main.cpp --- a/src/zanshin/app/main.cpp +++ b/src/zanshin/app/main.cpp @@ -92,11 +92,7 @@ window->addDockWidget(Qt::LeftDockWidgetArea, pagesDock); window->addDockWidget(Qt::LeftDockWidgetArea, sourcesDock); - auto actions = QHash(); - actions.unite(components->availableSourcesView()->globalActions()); - actions.unite(components->availablePagesView()->globalActions()); - actions.unite(components->pageView()->globalActions()); - + auto actions = components->globalActions(); auto ac = window->actionCollection(); ac->addAction(KStandardAction::Quit, window, SLOT(close())); for (auto it = actions.constBegin(); it != actions.constEnd(); ++it) { diff --git a/src/zanshin/kontact/part.cpp b/src/zanshin/kontact/part.cpp --- a/src/zanshin/kontact/part.cpp +++ b/src/zanshin/kontact/part.cpp @@ -68,11 +68,7 @@ splitter->addWidget(components->editorView()); setWidget(splitter); - auto actions = QHash(); - actions.unite(components->availableSourcesView()->globalActions()); - actions.unite(components->availablePagesView()->globalActions()); - actions.unite(components->pageView()->globalActions()); - + auto actions = components->globalActions(); auto ac = actionCollection(); for (auto it = actions.constBegin(); it != actions.constEnd(); ++it) { ac->addAction(it.key(), it.value()); diff --git a/tests/units/widgets/applicationcomponentstest.cpp b/tests/units/widgets/applicationcomponentstest.cpp --- a/tests/units/widgets/applicationcomponentstest.cpp +++ b/tests/units/widgets/applicationcomponentstest.cpp @@ -424,6 +424,71 @@ QCOMPARE(editorModel.property("artifact").value(), pageModel.itemAtRow(index.row())); } + + void shouldHaveDefaultActionsList() + { + // GIVEN + Widgets::ApplicationComponents components; + + // WHEN + auto actions = components.globalActions(); + + // THEN + QCOMPARE(actions.size(), 12); + + // availablePage view + auto available = components.availablePagesView(); + + auto addProjectAction = available->findChild("addProjectAction"); + QVERIFY(addProjectAction); + auto addContextAction = available->findChild("addContextAction"); + QVERIFY(addContextAction); + auto addTagAction = available->findChild("addTagAction"); + QVERIFY(addTagAction); + auto removeAction = available->findChild("removeAction"); + QVERIFY(removeAction); + auto goPreviousAction = available->findChild("goPreviousAction"); + QVERIFY(goPreviousAction); + auto goNextAction = available->findChild("goNextAction"); + QVERIFY(goNextAction); + auto goToAction = available->findChild("goToAction"); + QVERIFY(goToAction); + + QCOMPARE(actions.value("pages_project_add"), addProjectAction); + QCOMPARE(actions.value("pages_context_add"), addContextAction); + QCOMPARE(actions.value("pages_tag_add"), addTagAction); + QCOMPARE(actions.value("pages_remove"), removeAction); + QCOMPARE(actions.value("pages_go_previous"), goPreviousAction); + QCOMPARE(actions.value("pages_go_next"), goNextAction); + QCOMPARE(actions.value("pages_go_to"), goToAction); + + // availableSource view + auto availableSource = components.availableSourcesView(); + + auto settingsAction = availableSource->findChild("settingsAction"); + QVERIFY(settingsAction); + + QCOMPARE(actions.value("options_configure"), settingsAction); + + // page view + auto page = components.pageView(); + + auto addAction = page->findChild("addItemAction"); + QVERIFY(addAction); + auto cancelAddAction = page->findChild("cancelAddItemAction"); + QVERIFY(cancelAddAction); + auto removeItemAction = page->findChild("removeItemAction"); + QVERIFY(removeItemAction); + auto promoteAction = page->findChild("promoteItemAction"); + QVERIFY(promoteAction); + auto filterAction = page->findChild("filterViewAction"); + QVERIFY(filterAction); + + QCOMPARE(actions.value("page_view_add"), addAction); + QCOMPARE(actions.value("page_view_remove"), removeItemAction); + QCOMPARE(actions.value("page_view_promote"), promoteAction); + QCOMPARE(actions.value("page_view_filter"), filterAction); + } }; QTEST_MAIN(ApplicationComponentsTest)