diff --git a/CMakeLists.txt b/CMakeLists.txt index 31664d83..58e2e21f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,133 +1,133 @@ cmake_minimum_required(VERSION 3.5) -set(PIM_VERSION "5.12.41") +set(PIM_VERSION "5.12.42") if (POLICY CMP0053) cmake_policy(SET CMP0053 NEW) endif() project(Messagelib VERSION ${PIM_VERSION}) option(MIMETREEPARSER_ONLY_BUILD "Build only mimetreeparser" FALSE) option(KDEPIM_ENTERPRISE_BUILD "Enable features specific to the enterprise branch, which are normally disabled. Also, it disables many components not needed for Kontact such as the Kolab client." FALSE) option(KDEPIM_RUN_AKONADI_TEST "Enable autotest based on Akonadi." TRUE) option(DKIM_CHECKER_BUILD "DKIM CHECKER (experimental)" FALSE) set(KF5_MIN_VERSION "5.60.0") set(MESSAGELIB_LIB_VERSION ${PIM_VERSION}) set(AKONADIMIME_LIB_VERSION "5.12.40") set(QT_REQUIRED_VERSION "5.11.0") set(AKONADI_VERSION "5.12.40") set(GRANTLEETHEME_LIB_VERSION "5.12.40") set(GRAVATAR_LIB_VERSION "5.12.40") set(IDENTITYMANAGEMENT_LIB_VERSION "5.12.40") set(KCONTACTS_LIB_VERSION "5.12.40") set(KDEPIM_APPS_LIB_VERSION "5.12.40") set(KLDAP_LIB_VERSION "5.12.40") set(KMAILTRANSPORT_LIB_VERSION "5.12.40") set(KMBOX_LIB_VERSION "5.12.40") set(KMIME_LIB_VERSION "5.12.40") set(KPIMTEXTEDIT_LIB_VERSION "5.12.40") set(LIBKDEPIM_LIB_VERSION "5.12.40") set(LIBKLEO_LIB_VERSION "5.12.40") set(PIMCOMMON_LIB_VERSION "5.12.40") set(GPGME_LIB_VERSION "1.11.1") set(AKONADI_CONTACT_VERSION "5.12.40") if (${MIMETREEPARSER_ONLY_BUILD}) set(ECM_VERSION "5.26.0") set(KMIME_LIB_VERSION "5.1.40") else() set(ECM_VERSION ${KF5_MIN_VERSION}) endif() find_package(ECM ${ECM_VERSION} CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${Messagelib_SOURCE_DIR}/cmake/modules ${ECM_MODULE_PATH}) set(LIBRARY_NAMELINK) include(GenerateExportHeader) include(ECMSetupVersion) include(ECMGenerateHeaders) include(ECMGeneratePriFile) include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(ECMQtDeclareLoggingCategory) include(ECMAddTests) find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED Gui Test) find_package(KF5Codecs ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5I18n ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5Mime ${KMIME_LIB_VERSION} CONFIG REQUIRED) find_package(KF5NewStuff ${KMIME_LIB_VERSION} CONFIG REQUIRED) find_package(QGpgme ${GPGME_LIB_VERSION} CONFIG REQUIRED) if (NOT ${MIMETREEPARSER_ONLY_BUILD}) find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED Widgets Network PrintSupport WebEngine WebEngineWidgets) find_package(KF5Archive ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5Completion ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5Config ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5ConfigWidgets ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5IconThemes ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5ItemViews ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5JobWidgets ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5KIO ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5Service ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5Sonnet ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5TextWidgets ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5WidgetsAddons ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5WindowSystem ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5XmlGui ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5SyntaxHighlighting ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(KF5DBusAddons ${KF5_MIN_VERSION} CONFIG REQUIRED) find_package(Grantlee5 "5.1" CONFIG REQUIRED) find_package(KF5Akonadi ${AKONADI_VERSION} CONFIG REQUIRED) find_package(KF5AkonadiMime ${AKONADIMIME_LIB_VERSION} CONFIG REQUIRED) find_package(KF5Contacts ${KCONTACTS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5AkonadiContact ${AKONADI_CONTACT_VERSION} CONFIG REQUIRED) find_package(KF5FollowupReminder ${KDEPIM_APPS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5GrantleeTheme ${GRANTLEETHEME_LIB_VERSION} CONFIG REQUIRED) find_package(KF5Gravatar ${GRAVATAR_LIB_VERSION} CONFIG REQUIRED) find_package(KF5IdentityManagement ${IDENTITYMANAGEMENT_LIB_VERSION} CONFIG REQUIRED) find_package(KF5KaddressbookGrantlee ${KDEPIM_APPS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5Ldap ${KLDAP_LIB_VERSION} CONFIG REQUIRED) find_package(KF5LibkdepimAkonadi ${LIBKDEPIM_LIB_VERSION} CONFIG REQUIRED) find_package(KF5Libkleo ${LIBKLEO_LIB_VERSION} CONFIG REQUIRED) find_package(KF5MailTransportAkonadi ${KMAILTRANSPORT_LIB_VERSION} CONFIG REQUIRED) find_package(KF5Mbox ${KMBOX_LIB_VERSION} CONFIG REQUIRED) find_package(KF5PimCommonAkonadi ${PIMCOMMON_LIB_VERSION} CONFIG REQUIRED) find_package(KF5PimTextEdit ${KPIMTEXTEDIT_LIB_VERSION} CONFIG REQUIRED) find_package(KF5SendLater ${KDEPIM_APPS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5AkonadiSearch "5.12.40" CONFIG REQUIRED) set_package_properties(KF5AkonadiSearch PROPERTIES DESCRIPTION "The Akonadi Search libraries" URL "https://kde.org/" TYPE REQUIRED PURPOSE "Provides search capabilities in KMail and Akonadi") endif() set(CMAKE_CXX_STANDARD 14) #add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000) if(BUILD_TESTING) add_definitions(-DBUILD_TESTING) endif() add_subdirectory(mimetreeparser) if (NOT ${MIMETREEPARSER_ONLY_BUILD}) add_subdirectory(messageviewer) add_subdirectory(templateparser) add_subdirectory(messagecomposer) add_subdirectory(messagecore) add_subdirectory(messagelist) add_subdirectory(webengineviewer) endif() install(FILES messagelib.renamecategories messagelib.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/messagecomposer/src/CMakeLists.txt b/messagecomposer/src/CMakeLists.txt index 05216b39..01f183ba 100644 --- a/messagecomposer/src/CMakeLists.txt +++ b/messagecomposer/src/CMakeLists.txt @@ -1,461 +1,476 @@ add_definitions(-DTRANSLATION_DOMAIN=\"libmessagecomposer\") if(BUILD_TESTING) add_subdirectory( imagescaling/autotests ) add_subdirectory( imagescaling/tests ) add_subdirectory( composer-ng/autotests ) + add_subdirectory( statusbarwidget/autotests ) endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/part) set( messagecomposer_job_src job/jobbase.cpp job/contentjobbase.cpp job/attachmentjob.cpp job/singlepartjob.cpp job/multipartjob.cpp job/maintextjob.cpp job/signjob.cpp job/encryptjob.cpp job/signencryptjob.cpp job/transparentjob.cpp job/inserttextfilejob.cpp job/skeletonmessagejob.cpp job/aliasesexpandjob.cpp job/emailaddressresolvejob.cpp job/attachmentfrompublickeyjob.cpp job/distributionlistexpandjob.cpp job/savecontactpreferencejob.cpp job/attachmentvcardfromaddressbookjob.cpp job/attachmentclipboardjob.cpp ) +set( messagecomposer_statusbarwidget_src + statusbarwidget/statusbarlabeltoggledstate.cpp + ) + set( messagecomposer_composer_src composer/composer.cpp composer/signaturecontroller.cpp composer/composerlineedit.cpp composer/composerviewbase.cpp composer/keyresolver.cpp ) set( messagecomposer_recipient_src recipient/recipientspicker.cpp recipient/recipient.cpp recipient/recipientline.cpp recipient/recipientseditor.cpp recipient/recipientseditorsidewidget.cpp recipient/kwindowpositioner.cpp recipient/distributionlistdialog.cpp recipient/recipientseditormanager.cpp recipient/recipientspickerwidget.cpp ) set( messagecomposer_imagescaling_src imagescaling/imagescaling.cpp imagescaling/imagescalingwidget.cpp imagescaling/imagescalingutils.cpp imagescaling/imagescalingselectformat.cpp ) set( messagecomposer_part_src part/messagepart.cpp part/globalpart.cpp part/infopart.cpp part/textpart.cpp ) set( messagecomposer_attachment_src attachment/attachmentcontrollerbase.cpp attachment/attachmentmodel.cpp ) set( messagecomposer_helper_src helper/messagehelper.cpp helper/messagefactoryng.cpp helper/messagefactoryforwardjob.cpp helper/messagefactoryreplyjob.cpp ) set( messagecomposer_sender_src sender/akonadisender.cpp ) set(messagecomposer_followupreminder_SRCS followupreminder/followupreminderselectdatedialog.cpp followupreminder/followupremindercreatejob.cpp ) set(messagecomposer_richtextcomposerng_SRCS composer-ng/richtextcomposerng.cpp composer-ng/richtextcomposersignatures.cpp ) set(messagecomposer_plugineditor_SRCS plugineditor/plugineditormanager.cpp plugineditor/plugineditor.cpp plugineditor/plugineditorinterface.cpp plugineditor/pluginactiontype.cpp ) set(messagecomposer_plugineditorcheckbeforesend_SRCS plugineditorcheckbeforesend/plugineditorcheckbeforesend.cpp plugineditorcheckbeforesend/plugineditorcheckbeforesendinterface.cpp plugineditorcheckbeforesend/plugineditorcheckbeforesendmanager.cpp plugineditorcheckbeforesend/plugineditorcheckbeforesendconfigurewidget.cpp plugineditorcheckbeforesend/plugineditorcheckbeforesendparams.cpp ) set(messagecomposer_plugineditorinit_SRCS plugineditorinit/plugineditorinitconfigurewidget.cpp plugineditorinit/plugineditorinit.cpp plugineditorinit/plugineditorinitmanager.cpp plugineditorinit/plugineditorinitinterface.cpp ) set(messagecomposer_plugineditorconverttext_SRCS plugineditorconverttext/plugineditorconverttextconfigurewidget.cpp plugineditorconverttext/plugineditorconverttext.cpp plugineditorconverttext/plugineditorconverttextmanager.cpp plugineditorconverttext/plugineditorconverttextinterface.cpp plugineditorconverttext/plugineditorconverterinitialdata.cpp plugineditorconverttext/plugineditorconverterbeforeconvertingdata.cpp ) set(messagecomposer_plugineditorgrammar_SRCS plugineditorgrammar/plugineditorgrammarmanager.cpp plugineditorgrammar/plugineditorgrammarcustomtoolsviewinterface.cpp ) set( messagecomposer_src + ${messagecomposer_statusbarwidget_src} ${messagecomposer_plugineditorconverttext_SRCS} ${messagecomposer_plugineditorinit_SRCS} ${messagecomposer_plugineditor_SRCS} ${messagecomposer_richtextcomposerng_SRCS} ${messagecomposer_part_src} ${messagecomposer_imagescaling_src} ${messagecomposer_job_src} ${messagecomposer_composer_src} ${messagecomposer_recipient_src} ${messagecomposer_attachment_src} ${messagecomposer_helper_src} ${messagecomposer_sender_src} ${messagecomposer_followupreminder_SRCS} ${messagecomposer_plugineditorcheckbeforesend_SRCS} ${messagecomposer_plugineditorgrammar_SRCS} utils/util.cpp settings/messagecomposersettings.cpp ) ki18n_wrap_ui(messagecomposer_src imagescaling/ui/imagescalingwidget.ui ) ecm_qt_declare_logging_category(messagecomposer_src HEADER messagecomposer_debug.h IDENTIFIER MESSAGECOMPOSER_LOG CATEGORY_NAME org.kde.pim.messagecomposer) if(KDEPIM_ENTERPRISE_BUILD) set(WARN_TOOMANY_RECIPIENTS_DEFAULT true) set(ALLOW_SEMICOLON_AS_ADDRESS_SEPARATOR_DEFAULT true) else() set(WARN_TOOMANY_RECIPIENTS_DEFAULT false) set(ALLOW_SEMICOLON_AS_ADDRESS_SEPARATOR_DEFAULT false) endif() configure_file(settings/messagecomposer.kcfg.cmake ${CMAKE_CURRENT_BINARY_DIR}/messagecomposer.kcfg) kconfig_add_kcfg_files(messagecomposer_src settings/messagecomposersettings_base.kcfgc ) add_library( KF5MessageComposer ${messagecomposer_src} ) generate_export_header(KF5MessageComposer BASE_NAME messagecomposer) add_library(KF5::MessageComposer ALIAS KF5MessageComposer) target_link_libraries(KF5MessageComposer PUBLIC KF5::Mime KF5::MessageCore KF5::PimCommon KF5::AkonadiCore KF5::IdentityManagement KF5::AkonadiMime KF5::Libkleo KF5::MessageViewer PRIVATE KF5::MailTransportAkonadi KF5::PimTextEdit KF5::TemplateParser KF5::AkonadiWidgets KF5::LibkdepimAkonadi KF5::KIOCore KF5::I18n KF5::Completion # for KComboBox KF5::KIOWidgets # for KIO::JobUiDelegate KF5::KIOFileWidgets # for KEncodingDialog KF5::XmlGui # for KActionCollection KF5::SonnetUi Grantlee5::TextDocument KF5::CalendarCore # for KCalendarCore/Todo KF5::SendLater KF5::FollowupReminder KF5::Archive KF5::Contacts KF5::SonnetCore ) target_include_directories(KF5MessageComposer INTERFACE "$") set_target_properties(KF5MessageComposer PROPERTIES VERSION ${MESSAGECOMPOSER_VERSION_STRING} SOVERSION ${MESSAGECOMPOSER_SOVERSION} EXPORT_NAME MessageComposer ) install(TARGETS KF5MessageComposer EXPORT KF5MessageComposerTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} ${LIBRARY_NAMELINK} ) +ecm_generate_headers(MessageComposer_Camelstatusbarwidget_HEADERS + HEADER_NAMES + StatusBarLabelToggledState + REQUIRED_HEADERS MessageComposer_statusbarwidget_HEADERS + PREFIX MessageComposer + RELATIVE statusbarwidget + ) ecm_generate_headers(MessageComposer_Camelplugineditor_HEADERS HEADER_NAMES PluginEditor PluginActionType PluginEditorInterface PluginEditorManager REQUIRED_HEADERS MessageComposer_plugineditor_HEADERS PREFIX MessageComposer RELATIVE plugineditor ) ecm_generate_headers(MessageComposer_Camelplugineditorinit_HEADERS HEADER_NAMES PluginEditorInitConfigureWidget PluginEditorInit PluginEditorInitManager PluginEditorInitInterface REQUIRED_HEADERS MessageComposer_plugineditorinit_HEADERS PREFIX MessageComposer RELATIVE plugineditorinit ) ecm_generate_headers(MessageComposer_Camelplugineditorconverttext_HEADERS HEADER_NAMES PluginEditorConvertTextConfigureWidget PluginEditorConvertText PluginEditorConvertTextManager PluginEditorConvertTextInterface PluginEditorConverterInitialData PluginEditorConverterBeforeConvertingData REQUIRED_HEADERS MessageComposer_plugineditorconverttext_HEADERS PREFIX MessageComposer RELATIVE plugineditorconverttext ) ecm_generate_headers(MessageComposer_Camelplugineditorgrammar_HEADERS HEADER_NAMES PluginEditorGrammarManager PluginEditorGrammarCustomToolsViewInterface REQUIRED_HEADERS MessageComposer_plugineditorgrammar_HEADERS PREFIX MessageComposer RELATIVE plugineditorgrammar ) ecm_generate_headers(MessageComposer_Camelplugineditorcheckbeforesend_HEADERS HEADER_NAMES PluginEditorCheckBeforeSend PluginEditorCheckBeforeSendInterface PluginEditorCheckBeforeSendManager PluginEditorCheckBeforeSendConfigureWidget PluginEditorCheckBeforeSendParams REQUIRED_HEADERS MessageComposer_plugineditorcheckbeforesend_HEADERS PREFIX MessageComposer RELATIVE plugineditorcheckbeforesend ) ecm_generate_headers(MessageComposer_Camelcaseattachement_HEADERS HEADER_NAMES AttachmentModel AttachmentControllerBase REQUIRED_HEADERS MessageComposer_attachement_HEADERS PREFIX MessageComposer RELATIVE attachment ) ecm_generate_headers(MessageComposer_Camelcasecomposer_HEADERS HEADER_NAMES Composer ComposerLineEdit ComposerViewBase SignatureController REQUIRED_HEADERS MessageComposer_composer_HEADERS PREFIX MessageComposer RELATIVE composer ) ecm_generate_headers(MessageComposer_Camelcasecomposerng_HEADERS HEADER_NAMES RichTextComposerNg RichTextComposerSignatures REQUIRED_HEADERS MessageComposer_composerng_HEADERS PREFIX MessageComposer RELATIVE composer-ng ) ecm_generate_headers(MessageComposer_Camelcasesender_HEADERS HEADER_NAMES AkonadiSender MessageSender REQUIRED_HEADERS MessageComposer_sender_HEADERS PREFIX MessageComposer RELATIVE sender ) ecm_generate_headers(MessageComposer_Camelcaseutils_HEADERS HEADER_NAMES Util Kleo_Util REQUIRED_HEADERS MessageComposer_utils_HEADERS PREFIX MessageComposer RELATIVE utils ) ecm_generate_headers(MessageComposer_Camelcasehelper_HEADERS HEADER_NAMES MessageHelper MessageFactoryNG REQUIRED_HEADERS MessageComposer_helper_HEADERS PREFIX MessageComposer RELATIVE helper ) ecm_generate_headers(MessageComposer_Camelcasesettings_HEADERS HEADER_NAMES MessageComposerSettings REQUIRED_HEADERS MessageComposer_settings_HEADERS PREFIX MessageComposer RELATIVE settings ) ecm_generate_headers(MessageComposer_Camelcasepart_HEADERS HEADER_NAMES TextPart GlobalPart InfoPart MessagePart REQUIRED_HEADERS MessageComposer_part_HEADERS PREFIX MessageComposer RELATIVE part ) ecm_generate_headers(MessageComposer_Camelcasefollowupreminder_HEADERS HEADER_NAMES FollowupReminderCreateJob FollowUpReminderSelectDateDialog REQUIRED_HEADERS MessageComposer_followupreminder_HEADERS PREFIX MessageComposer RELATIVE followupreminder ) ecm_generate_headers(MessageComposer_Camelcaserecipient_HEADERS HEADER_NAMES Recipient RecipientsEditor RecipientLine REQUIRED_HEADERS MessageComposer_recipient_HEADERS PREFIX MessageComposer RELATIVE recipient ) ecm_generate_headers(MessageComposer_Camelcaseimagescaling_HEADERS HEADER_NAMES ImageScalingWidget REQUIRED_HEADERS MessageComposer_imagescaling_HEADERS PREFIX MessageComposer RELATIVE imagescaling ) ecm_generate_headers(MessageComposer_Camelcasejob_HEADERS HEADER_NAMES JobBase AbstractEncryptJob ContentJobBase InsertTextFileJob AttachmentJob SinglepartJob MainTextJob AttachmentFromPublicKeyJob MultipartJob EncryptJob AttachmentVcardFromAddressBookJob SignJob TransparentJob JobBase AliasesExpandJob SkeletonMessageJob AttachmentClipBoardJob REQUIRED_HEADERS MessageComposer_job_HEADERS PREFIX MessageComposer RELATIVE job ) ecm_generate_pri_file(BASE_NAME MessageComposer LIB_NAME KF5MessageComposer DEPS "Mime MessageCore PimCommon Akonadi IdentityManagement AkonadiMime Libkleo" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/MessageComposer ) install(FILES ${MessageComposer_Camelplugineditorconverttext_HEADERS} ${MessageComposer_Camelplugineditorinit_HEADERS} ${MessageComposer_Camelplugineditorcheckbeforesend_HEADERS} ${MessageComposer_Camelcasecomposer_HEADERS} ${MessageComposer_Camelcasecomposerng_HEADERS} ${MessageComposer_Camelcasesender_HEADERS} ${MessageComposer_Camelcaseutils_HEADERS} ${MessageComposer_Camelcasehelper_HEADERS} ${MessageComposer_Camelcasesettings_HEADERS} ${MessageComposer_Camelcasepart_HEADERS} ${MessageComposer_Camelcasefollowupreminder_HEADERS} ${MessageComposer_Camelcaserecipient_HEADERS} ${MessageComposer_Camelcaseimagescaling_HEADERS} ${MessageComposer_Camelcasejob_HEADERS} ${MessageComposer_Camelcaseattachement_HEADERS} ${MessageComposer_Camelplugineditor_HEADERS} ${MessageComposer_Camelplugineditorgrammar_HEADERS} + ${MessageComposer_Camelstatusbarwidget_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/MessageComposer COMPONENT Devel ) install(FILES ${MessageComposer_HEADERS} ${MessageComposer_plugineditorconverttext_HEADERS} ${MessageComposer_plugineditorinit_HEADERS} + ${MessageComposer_statusbarwidget_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/messagecomposer_export.h ${CMAKE_CURRENT_BINARY_DIR}/messagecomposersettings_base.h ${CMAKE_CURRENT_BINARY_DIR}/messagecomposer_debug.h ${MessageComposer_composer_HEADERS} ${MessageComposer_composerng_HEADERS} ${MessageComposer_sender_HEADERS} ${MessageComposer_utils_HEADERS} ${MessageComposer_helper_HEADERS} ${MessageComposer_settings_HEADERS} ${MessageComposer_part_HEADERS} ${MessageComposer_followupreminder_HEADERS} ${MessageComposer_recipient_HEADERS} ${MessageComposer_imagescaling_HEADERS} ${MessageComposer_attachement_HEADERS} ${MessageComposer_job_HEADERS} ${MessageComposer_plugineditor_HEADERS} ${MessageComposer_plugineditorcheckbeforesend_HEADERS} ${MessageComposer_plugineditorgrammar_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/messagecomposer COMPONENT Devel ) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/messagecomposer/src/statusbarwidget/autotests/CMakeLists.txt b/messagecomposer/src/statusbarwidget/autotests/CMakeLists.txt new file mode 100644 index 00000000..5c53809a --- /dev/null +++ b/messagecomposer/src/statusbarwidget/autotests/CMakeLists.txt @@ -0,0 +1,6 @@ + +set( kmail_statusbarlabeltoggledstate_source statusbarlabeltoggledstatetest.cpp) +add_executable(statusbarlabeltoggledstatetest ${kmail_statusbarlabeltoggledstate_source}) +ecm_mark_as_test(kmail-statusbarlabeltoggledstatetest) +target_link_libraries( statusbarlabeltoggledstatetest Qt5::Test KF5::KIOWidgets KF5::I18n KF5::MessageComposer) + diff --git a/messagecomposer/src/statusbarwidget/autotests/statusbarlabeltoggledstatetest.cpp b/messagecomposer/src/statusbarwidget/autotests/statusbarlabeltoggledstatetest.cpp new file mode 100644 index 00000000..f987f213 --- /dev/null +++ b/messagecomposer/src/statusbarwidget/autotests/statusbarlabeltoggledstatetest.cpp @@ -0,0 +1,112 @@ +/* + Copyright (c) 2014-2019 Montel Laurent + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License, version 2, as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "statusbarlabeltoggledstatetest.h" +#include "MessageComposer/StatusBarLabelToggledState" +#include +#include +#include + +QTEST_MAIN(StatusBarLabelToggledStateTest) + +StatusBarLabelToggledStateTest::StatusBarLabelToggledStateTest(QObject *parent) + : QObject(parent) +{ +} + +StatusBarLabelToggledStateTest::~StatusBarLabelToggledStateTest() +{ +} + +void StatusBarLabelToggledStateTest::shouldHasDefaultValue() +{ + MessageComposer::StatusBarLabelToggledState widget; + widget.setStateString(QStringLiteral("toggle"), QStringLiteral("untoggle")); + QVERIFY(!widget.toggleMode()); +} + +void StatusBarLabelToggledStateTest::shouldChangeState() +{ + MessageComposer::StatusBarLabelToggledState widget; + widget.setStateString(QStringLiteral("toggle"), QStringLiteral("untoggle")); + widget.setToggleMode(true); + QVERIFY(widget.toggleMode()); + QVERIFY(!widget.text().isEmpty()); + + widget.setToggleMode(true); + QVERIFY(widget.toggleMode()); + + widget.setToggleMode(false); + QVERIFY(!widget.toggleMode()); +} + +void StatusBarLabelToggledStateTest::shouldEmitSignalWhenChangeState() +{ + MessageComposer::StatusBarLabelToggledState widget; + widget.setStateString(QStringLiteral("toggle"), QStringLiteral("untoggle")); + QSignalSpy spy(&widget, &MessageComposer::StatusBarLabelToggledState::toggleModeChanged); + widget.setToggleMode(true); + QCOMPARE(spy.count(), 1); + + widget.setToggleMode(false); + QCOMPARE(spy.count(), 2); +} + +void StatusBarLabelToggledStateTest::shouldNotEmitSignalWhenWeDontChangeState() +{ + MessageComposer::StatusBarLabelToggledState widget; + widget.setStateString(QStringLiteral("toggle"), QStringLiteral("untoggle")); + QSignalSpy spy(&widget, &MessageComposer::StatusBarLabelToggledState::toggleModeChanged); + widget.setToggleMode(false); + QCOMPARE(spy.count(), 0); + + widget.setToggleMode(true); + QCOMPARE(spy.count(), 1); + + widget.setToggleMode(true); + QCOMPARE(spy.count(), 1); +} + +void StatusBarLabelToggledStateTest::shouldEmitSignalWhenClickOnLabel() +{ + MessageComposer::StatusBarLabelToggledState widget; + widget.setStateString(QStringLiteral("toggle"), QStringLiteral("untoggle")); + QSignalSpy spy(&widget, &MessageComposer::StatusBarLabelToggledState::toggleModeChanged); + widget.show(); + QVERIFY(QTest::qWaitForWindowExposed(&widget)); + QTest::mouseClick(&widget, Qt::LeftButton); + QCOMPARE(spy.count(), 1); + + QTest::mouseClick(&widget, Qt::LeftButton); + QCOMPARE(spy.count(), 2); +} + +void StatusBarLabelToggledStateTest::shouldChangeTestWhenStateChanged() +{ + MessageComposer::StatusBarLabelToggledState widget; + widget.setStateString(QStringLiteral("toggle"), QStringLiteral("untoggle")); + const QString initialText = widget.text(); + widget.setToggleMode(true); + const QString newText = widget.text(); + QVERIFY(initialText != newText); + + widget.setToggleMode(false); + QCOMPARE(widget.text(), initialText); + + widget.setToggleMode(true); + QCOMPARE(widget.text(), newText); +} diff --git a/messagecomposer/src/statusbarwidget/autotests/statusbarlabeltoggledstatetest.h b/messagecomposer/src/statusbarwidget/autotests/statusbarlabeltoggledstatetest.h new file mode 100644 index 00000000..4f49a872 --- /dev/null +++ b/messagecomposer/src/statusbarwidget/autotests/statusbarlabeltoggledstatetest.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2014-2019 Montel Laurent + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License, version 2, as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef StatusBarLabelToggledStateTEST_H +#define StatusBarLabelToggledStateTEST_H + +#include + +class StatusBarLabelToggledStateTest : public QObject +{ + Q_OBJECT +public: + explicit StatusBarLabelToggledStateTest(QObject *parent = nullptr); + ~StatusBarLabelToggledStateTest(); + +private Q_SLOTS: + void shouldHasDefaultValue(); + void shouldChangeState(); + void shouldEmitSignalWhenChangeState(); + void shouldNotEmitSignalWhenWeDontChangeState(); + void shouldEmitSignalWhenClickOnLabel(); + void shouldChangeTestWhenStateChanged(); +}; + +#endif // StatusBarLabelToggledStateTEST_H diff --git a/messagecomposer/src/statusbarwidget/statusbarlabeltoggledstate.cpp b/messagecomposer/src/statusbarwidget/statusbarlabeltoggledstate.cpp new file mode 100644 index 00000000..5c43a09c --- /dev/null +++ b/messagecomposer/src/statusbarwidget/statusbarlabeltoggledstate.cpp @@ -0,0 +1,70 @@ +/* + Copyright (C) 2014-2019 Montel Laurent + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "statusbarlabeltoggledstate.h" +#include "messagecomposer_debug.h" +using namespace MessageComposer; +StatusBarLabelToggledState::StatusBarLabelToggledState(QWidget *parent) + : QLabel(parent) +{ + setTextFormat(Qt::PlainText); +} + +StatusBarLabelToggledState::~StatusBarLabelToggledState() +{ +} + +void StatusBarLabelToggledState::setStateString(const QString &toggled, const QString &untoggled) +{ + if (toggled.isEmpty() || untoggled.isEmpty()) { + qCWarning(MESSAGECOMPOSER_LOG) << " State string is empty. Need to fix it"; + } + mToggled = toggled; + mUnToggled = untoggled; + updateLabel(); +} + +void StatusBarLabelToggledState::setToggleMode(bool state) +{ + if (mToggleMode != state) { + mToggleMode = state; + Q_EMIT toggleModeChanged(mToggleMode); + updateLabel(); + } +} + +bool StatusBarLabelToggledState::toggleMode() const +{ + return mToggleMode; +} + +void StatusBarLabelToggledState::updateLabel() +{ + if (mToggleMode) { + setText(mToggled); + } else { + setText(mUnToggled); + } +} + +void StatusBarLabelToggledState::mousePressEvent(QMouseEvent *ev) +{ + Q_UNUSED(ev); + setToggleMode(!mToggleMode); +} diff --git a/messagecomposer/src/statusbarwidget/statusbarlabeltoggledstate.h b/messagecomposer/src/statusbarwidget/statusbarlabeltoggledstate.h new file mode 100644 index 00000000..7c8dfdcc --- /dev/null +++ b/messagecomposer/src/statusbarwidget/statusbarlabeltoggledstate.h @@ -0,0 +1,51 @@ +/* + Copyright (C) 2014-2019 Montel Laurent + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef STATUSBARLABELTOGGLEDSTATE_H +#define STATUSBARLABELTOGGLEDSTATE_H + +#include +#include "messagecomposer_export.h" +namespace MessageComposer { +class MESSAGECOMPOSER_EXPORT StatusBarLabelToggledState : public QLabel +{ + Q_OBJECT +public: + explicit StatusBarLabelToggledState(QWidget *parent = nullptr); + ~StatusBarLabelToggledState() override; + + void setToggleMode(bool state); + + bool toggleMode() const; + + void setStateString(const QString &toggled, const QString &untoggled); +Q_SIGNALS: + void toggleModeChanged(bool state); + +protected: + void mousePressEvent(QMouseEvent *ev) override; + +private: + void updateLabel(); + QString mToggled; + QString mUnToggled; + bool mToggleMode = false; +}; +} +#endif // STATUSBARLABELTOGGLEDSTATE_H