diff --git a/src/renku/app/renkuui.rc b/src/renku/app/renkuui.rc --- a/src/renku/app/renkuui.rc +++ b/src/renku/app/renkuui.rc @@ -2,7 +2,7 @@ - + diff --git a/src/renku/kontact/renku_part.rc b/src/renku/kontact/renku_part.rc --- a/src/renku/kontact/renku_part.rc +++ b/src/renku/kontact/renku_part.rc @@ -2,7 +2,7 @@ - + diff --git a/src/widgets/availablepagesview.h b/src/widgets/availablepagesview.h --- a/src/widgets/availablepagesview.h +++ b/src/widgets/availablepagesview.h @@ -71,7 +71,9 @@ private slots: void onCurrentChanged(const QModelIndex ¤t); - void onAddTriggered(); + void onAddProjectTriggered(); + void onAddContextTriggered(); + void onAddTagTriggered(); void onRemoveTriggered(); void onGoPreviousTriggered(); void onGoNextTriggered(); diff --git a/src/widgets/availablepagesview.cpp b/src/widgets/availablepagesview.cpp --- a/src/widgets/availablepagesview.cpp +++ b/src/widgets/availablepagesview.cpp @@ -59,12 +59,26 @@ actionBar->setObjectName("actionBar"); actionBar->setIconSize(QSize(16, 16)); - auto addAction = new QAction(this); - addAction->setObjectName("addAction"); - addAction->setText(tr("New page")); - addAction->setIcon(QIcon::fromTheme("list-add")); - connect(addAction, SIGNAL(triggered()), this, SLOT(onAddTriggered())); - actionBar->addAction(addAction); + auto addProjectAction = new QAction(this); + addProjectAction->setObjectName("addProjectAction"); + addProjectAction->setText(tr("New project")); + addProjectAction->setIcon(QIcon::fromTheme("view-pim-tasks")); + connect(addProjectAction, SIGNAL(triggered()), this, SLOT(onAddProjectTriggered())); + actionBar->addAction(addProjectAction); + + auto addContextAction = new QAction(this); + addContextAction->setObjectName("addContextAction"); + addContextAction->setText(tr("New context")); + addContextAction->setIcon(QIcon::fromTheme("view-pim-notes")); + connect(addContextAction, SIGNAL(triggered()), this, SLOT(onAddContextTriggered())); + actionBar->addAction(addContextAction); + + auto addTagAction = new QAction(this); + addTagAction->setObjectName("addTagAction"); + addTagAction->setText(tr("New tag")); + addTagAction->setIcon(QIcon::fromTheme("view-pim-tasks")); + connect(addTagAction, SIGNAL(triggered()), this, SLOT(onAddTagTriggered())); + actionBar->addAction(addTagAction); auto removeAction = new QAction(this); removeAction->setObjectName("removeAction"); @@ -101,7 +115,9 @@ goNextAction->setShortcut(Qt::ALT | Qt::Key_Down); connect(goNextAction, SIGNAL(triggered(bool)), this, SLOT(onGoNextTriggered())); - m_actions.insert("pages_add", addAction); + m_actions.insert("pages_project_add", addProjectAction); + m_actions.insert("pages_context_add", addContextAction); + m_actions.insert("pages_tag_add", addTagAction); m_actions.insert("pages_remove", removeAction); m_actions.insert("pages_go_previous", goPreviousAction); m_actions.insert("pages_go_next", goNextAction); @@ -184,28 +200,34 @@ emit currentPageChanged(page); } -void AvailablePagesView::onAddTriggered() +void AvailablePagesView::onAddProjectTriggered() { NewPageDialogInterface::Ptr dialog = m_projectDialogFactory(this); dialog->setDataSourcesModel(m_sources); if (dialog->exec() == QDialog::Accepted) { m_defaultSource = dialog->dataSource(); - switch (dialog->pageType()) { - case NewPageDialogInterface::Project: - QMetaObject::invokeMethod(m_model, "addProject", - Q_ARG(QString, dialog->name()), - Q_ARG(Domain::DataSource::Ptr, dialog->dataSource())); - break; - case NewPageDialogInterface::Context: - QMetaObject::invokeMethod(m_model, "addContext", - Q_ARG(QString, dialog->name())); - break; - case NewPageDialogInterface::Tag: - QMetaObject::invokeMethod(m_model, "addTag", - Q_ARG(QString, dialog->name())); - break; - } + QMetaObject::invokeMethod(m_model, "addProject", + Q_ARG(QString, dialog->name()), + Q_ARG(Domain::DataSource::Ptr, dialog->dataSource())); + } +} + +void AvailablePagesView::onAddContextTriggered() +{ + const QString name = m_messageBoxInterface->askTextInput(this, tr("Add Context"), tr("Context name")); + if (!name.isEmpty()) { + QMetaObject::invokeMethod(m_model, "addContext", + Q_ARG(QString, name)); + } +} + +void AvailablePagesView::onAddTagTriggered() +{ + const QString name = m_messageBoxInterface->askTextInput(this, tr("Add Tag"), tr("Tag name")); + if (!name.isEmpty()) { + QMetaObject::invokeMethod(m_model, "addTag", + Q_ARG(QString, name)); } } diff --git a/src/zanshin/app/zanshin-nextui.rc b/src/zanshin/app/zanshin-nextui.rc --- a/src/zanshin/app/zanshin-nextui.rc +++ b/src/zanshin/app/zanshin-nextui.rc @@ -2,7 +2,8 @@ - + + diff --git a/src/zanshin/kontact/zanshin-next_part.rc b/src/zanshin/kontact/zanshin-next_part.rc --- a/src/zanshin/kontact/zanshin-next_part.rc +++ b/src/zanshin/kontact/zanshin-next_part.rc @@ -2,7 +2,8 @@ - + + diff --git a/tests/units/widgets/availablepagesviewtest.cpp b/tests/units/widgets/availablepagesviewtest.cpp --- a/tests/units/widgets/availablepagesviewtest.cpp +++ b/tests/units/widgets/availablepagesviewtest.cpp @@ -158,8 +158,12 @@ QVERIFY(actionBar); QVERIFY(actionBar->isVisibleTo(&available)); - auto addAction = available.findChild("addAction"); - QVERIFY(addAction); + 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"); @@ -171,7 +175,9 @@ QVERIFY(factory(&available).dynamicCast()); auto actions = available.globalActions(); - QCOMPARE(actions.value("pages_add"), addAction); + 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); @@ -214,14 +220,13 @@ available.setDefaultProjectSource(source); available.setProjectDialogFactory([dialogStub] (QWidget *parent) { dialogStub->parent = parent; - dialogStub->setPageType(Widgets::NewPageDialogInterface::Project); return dialogStub; }); - auto addAction = available.findChild("addAction"); + auto addProjectAction = available.findChild("addProjectAction"); // WHEN - addAction->trigger(); + addProjectAction->trigger(); // THEN QCOMPARE(dialogStub->execCount, 1); @@ -243,28 +248,24 @@ auto source = Domain::DataSource::Ptr::create(); + auto msgBoxStub = MessageBoxStub::Ptr::create(); + msgBoxStub->setTextInput("Foo"); + Widgets::AvailablePagesView available; available.setModel(&model); available.setProjectSourcesModel(&sourceModel); available.setDefaultProjectSource(source); - available.setProjectDialogFactory([dialogStub] (QWidget *parent) { - dialogStub->parent = parent; - dialogStub->setPageType(Widgets::NewPageDialogInterface::Context); - return dialogStub; - }); + available.setMessageBoxInterface(msgBoxStub); - auto addAction = available.findChild("addAction"); + auto addContextAction = available.findChild("addContextAction"); // WHEN - addAction->trigger(); + addContextAction->trigger(); // THEN - QCOMPARE(dialogStub->execCount, 1); - QCOMPARE(dialogStub->parent, &available); - QCOMPARE(dialogStub->sourceModel, &sourceModel); - QCOMPARE(dialogStub->pageType(), Widgets::NewPageDialogInterface::Context); + QVERIFY(msgBoxStub->called()); QCOMPARE(model.contextNames.size(), 1); - QCOMPARE(model.contextNames.first(), dialogStub->name()); + QCOMPARE(model.contextNames.first(), QString("Foo")); } void shouldAddNewTags() @@ -276,28 +277,24 @@ auto source = Domain::DataSource::Ptr::create(); + auto msgBoxStub = MessageBoxStub::Ptr::create(); + msgBoxStub->setTextInput("Foo"); + Widgets::AvailablePagesView available; available.setModel(&model); available.setProjectSourcesModel(&sourceModel); available.setDefaultProjectSource(source); - available.setProjectDialogFactory([dialogStub] (QWidget *parent) { - dialogStub->parent = parent; - dialogStub->setPageType(Widgets::NewPageDialogInterface::Tag); - return dialogStub; - }); + available.setMessageBoxInterface(msgBoxStub); - auto addAction = available.findChild("addAction"); + auto addTagAction = available.findChild("addTagAction"); // WHEN - addAction->trigger(); + addTagAction->trigger(); // THEN - QCOMPARE(dialogStub->execCount, 1); - QCOMPARE(dialogStub->parent, &available); - QCOMPARE(dialogStub->sourceModel, &sourceModel); - QCOMPARE(dialogStub->pageType(), Widgets::NewPageDialogInterface::Tag); + QVERIFY(msgBoxStub->called()); QCOMPARE(model.tagNames.size(), 1); - QCOMPARE(model.tagNames.first(), dialogStub->name()); + QCOMPARE(model.tagNames.first(), QString("Foo")); } void shouldRemoveAPage_data()