From d60bc423c24c00e4076c7dbd62b7ebdfd0607752 Mon Sep 17 00:00:00 2001 From: Montel Laurent Date: Tue, 13 May 2014 13:24:17 +0200 Subject: [PATCH] Improve formatactionmenu --- tests/displaymessageformatactionmenutest.cpp | 19 ++++++++++++- tests/displaymessageformatactionmenutest.h | 2 ++ widgets/displaymessageformatactionmenu.cpp | 29 ++++++++++++++++++-- widgets/displaymessageformatactionmenu.h | 7 +++++ 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/tests/displaymessageformatactionmenutest.cpp b/tests/displaymessageformatactionmenutest.cpp index e21dd4ef2..691b7b84c 100644 --- a/tests/displaymessageformatactionmenutest.cpp +++ b/tests/displaymessageformatactionmenutest.cpp @@ -21,6 +21,7 @@ #include #include #include + Q_DECLARE_METATYPE(MessageViewer::Viewer::DisplayFormatMessage) DisplayMessageFormatActionMenuTest::DisplayMessageFormatActionMenuTest() { @@ -48,7 +49,23 @@ void DisplayMessageFormatActionMenuTest::shouldEmitSignalWhenClickOnSubMenu() QSignalSpy spy(&menu, SIGNAL(changeDisplayMessageFormat(MessageViewer::Viewer::DisplayFormatMessage))); prefereHtml->trigger(); QCOMPARE(spy.count(), 1); - //QCOMPARE(spy.at(0).at(0).toInt(), int(MessageViewer::Viewer::Html)); + QCOMPARE(spy.at(0).at(0).value(), MessageViewer::Viewer::Html); +} + +void DisplayMessageFormatActionMenuTest::shouldSelectItemWhenChangeFormat() +{ + DisplayMessageFormatActionMenu menu; + menu.setDisplayMessageFormat(MessageViewer::Viewer::Text); + KToggleAction *prefereText = qFindChild(&menu, QLatin1String("prefer-text-action")); + QCOMPARE(prefereText->isChecked(), true); +} + +void DisplayMessageFormatActionMenuTest::shouldDontEmitSignalWhenChangeFormat() +{ + DisplayMessageFormatActionMenu menu; + QSignalSpy spy(&menu, SIGNAL(changeDisplayMessageFormat(MessageViewer::Viewer::DisplayFormatMessage))); + menu.setDisplayMessageFormat(MessageViewer::Viewer::Text); + QCOMPARE(spy.count(), 0); } QTEST_KDEMAIN(DisplayMessageFormatActionMenuTest, GUI) diff --git a/tests/displaymessageformatactionmenutest.h b/tests/displaymessageformatactionmenutest.h index 092fd7ab0..5feee4029 100644 --- a/tests/displaymessageformatactionmenutest.h +++ b/tests/displaymessageformatactionmenutest.h @@ -28,6 +28,8 @@ public: private Q_SLOTS: void shouldHaveDefaultValue(); void shouldEmitSignalWhenClickOnSubMenu(); + void shouldSelectItemWhenChangeFormat(); + void shouldDontEmitSignalWhenChangeFormat(); }; #endif // DISPLAYMESSAGEFORMATACTIONMENUTEST_H diff --git a/widgets/displaymessageformatactionmenu.cpp b/widgets/displaymessageformatactionmenu.cpp index 308b9d855..c9b2d85bb 100644 --- a/widgets/displaymessageformatactionmenu.cpp +++ b/widgets/displaymessageformatactionmenu.cpp @@ -21,10 +21,12 @@ #include #include #include +#include DisplayMessageFormatActionMenu::DisplayMessageFormatActionMenu(QObject *parent) - : KActionMenu(parent) + : KActionMenu(parent), + mDisplayMessageFormat(MessageViewer::Viewer::UseGlobalSetting) { setText(i18n("Message Default Format")); KMenu *subMenu = new KMenu; @@ -49,10 +51,10 @@ DisplayMessageFormatActionMenu::DisplayMessageFormatActionMenu(QObject *parent) act = new KToggleAction(i18n("Use KMail global setting"), this); act->setObjectName(QLatin1String("use-global-setting-action")); act->setData(MessageViewer::Viewer::UseGlobalSetting); - act->setChecked(true); connect(act, SIGNAL(triggered(bool)), this, SLOT(slotChangeDisplayMessageFormat())); actionGroup->addAction(act); subMenu->addAction(act); + updateMenu(); } @@ -71,3 +73,26 @@ void DisplayMessageFormatActionMenu::slotChangeDisplayMessageFormat() } } } +MessageViewer::Viewer::DisplayFormatMessage DisplayMessageFormatActionMenu::displayMessageFormat() const +{ + return mDisplayMessageFormat; +} + +void DisplayMessageFormatActionMenu::setDisplayMessageFormat(MessageViewer::Viewer::DisplayFormatMessage displayMessageFormat) +{ + if (mDisplayMessageFormat != displayMessageFormat) { + mDisplayMessageFormat = displayMessageFormat; + updateMenu(); + } +} + +void DisplayMessageFormatActionMenu::updateMenu() +{ + Q_FOREACH (QAction *act, menu()->actions()) { + MessageViewer::Viewer::DisplayFormatMessage format = static_cast(act->data().toInt()); + if (format == mDisplayMessageFormat) { + act->setChecked(true); + break; + } + } +} diff --git a/widgets/displaymessageformatactionmenu.h b/widgets/displaymessageformatactionmenu.h index 5008fb731..159f0c971 100644 --- a/widgets/displaymessageformatactionmenu.h +++ b/widgets/displaymessageformatactionmenu.h @@ -29,11 +29,18 @@ public: explicit DisplayMessageFormatActionMenu(QObject *parent=0); ~DisplayMessageFormatActionMenu(); + MessageViewer::Viewer::DisplayFormatMessage displayMessageFormat() const; + void setDisplayMessageFormat(MessageViewer::Viewer::DisplayFormatMessage displayMessageFormat); + Q_SIGNALS: void changeDisplayMessageFormat(MessageViewer::Viewer::DisplayFormatMessage format); private slots: void slotChangeDisplayMessageFormat(); + +private: + void updateMenu(); + MessageViewer::Viewer::DisplayFormatMessage mDisplayMessageFormat; }; #endif // DisplayMessageFormatActionMenu_H