diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -261,11 +261,12 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--as-needed") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed -Wl,--no-undefined") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed") # TODO: remove multiple definitions of payeeIdentifierLoader::createPayeeIdentifierFromSqlDatabase - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--allow-multiple-definition") + # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--allow-multiple-definition") -elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FORCE:Multiple") +# elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") +# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FORCE:Multiple") endif() # Set compiler flags diff --git a/kmymoney/CMakeLists.txt b/kmymoney/CMakeLists.txt --- a/kmymoney/CMakeLists.txt +++ b/kmymoney/CMakeLists.txt @@ -81,6 +81,7 @@ PRIVATE KF5::I18n kmm_settings + kmm_icons ) # must build kmymoney/transactionsortoption.h diff --git a/kmymoney/dialogs/CMakeLists.txt b/kmymoney/dialogs/CMakeLists.txt --- a/kmymoney/dialogs/CMakeLists.txt +++ b/kmymoney/dialogs/CMakeLists.txt @@ -89,6 +89,9 @@ onlinetask_interfaces kmm_widgets kmm_utils_platformtools + PRIVATE + KF5::ConfigWidgets + kmm_icons ) target_link_libraries(dialogs LINK_PUBLIC diff --git a/kmymoney/kmymoney.h b/kmymoney/kmymoney.h --- a/kmymoney/kmymoney.h +++ b/kmymoney/kmymoney.h @@ -409,11 +409,11 @@ * @see KMainWindow#queryClose * @see QWidget#closeEvent */ - virtual bool queryClose(); + bool queryClose() final override; void slotCheckSchedules(); - virtual void resizeEvent(QResizeEvent*); + void resizeEvent(QResizeEvent*) final override; void createSchedule(MyMoneySchedule newSchedule, MyMoneyAccount& newAccount); @@ -613,7 +613,7 @@ /** * Re-implemented from IMyMoneyProcessingCalendar */ - bool isProcessingDate(const QDate& date) const; + bool isProcessingDate(const QDate& date) const final override; /** * Depending on the setting of AutoSaveOnQuit, this method diff --git a/kmymoney/models/CMakeLists.txt b/kmymoney/models/CMakeLists.txt --- a/kmymoney/models/CMakeLists.txt +++ b/kmymoney/models/CMakeLists.txt @@ -37,6 +37,11 @@ kmm_settings KF5::ItemModels $<$:kmymoney_common> + PRIVATE + kmm_icons + kmm_payeeidentifier_loader + KF5::I18n + Qt5::Widgets ) if (USE_MODELTEST) diff --git a/kmymoney/models/payeeidentifiercontainermodel.h b/kmymoney/models/payeeidentifiercontainermodel.h --- a/kmymoney/models/payeeidentifiercontainermodel.h +++ b/kmymoney/models/payeeidentifiercontainermodel.h @@ -54,20 +54,20 @@ explicit payeeIdentifierContainerModel(QObject* parent = 0); - virtual QVariant data(const QModelIndex& index, int role) const; + QVariant data(const QModelIndex& index, int role) const final override; /** * This model only supports to edit payeeIdentifier role with a QVariant of type * payeeIdentifier. */ - virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) final override; - virtual Qt::ItemFlags flags(const QModelIndex& index) const; + Qt::ItemFlags flags(const QModelIndex& index) const final override; - virtual int rowCount(const QModelIndex& parent) const; + int rowCount(const QModelIndex& parent) const final override; - virtual bool insertRows(int row, int count, const QModelIndex& parent); - virtual bool removeRows(int row, int count, const QModelIndex& parent); + bool insertRows(int row, int count, const QModelIndex& parent) final override; + bool removeRows(int row, int count, const QModelIndex& parent) final override; /** * @brief Set source of data diff --git a/kmymoney/mymoney/CMakeLists.txt b/kmymoney/mymoney/CMakeLists.txt --- a/kmymoney/mymoney/CMakeLists.txt +++ b/kmymoney/mymoney/CMakeLists.txt @@ -73,21 +73,21 @@ target_link_libraries(kmm_mymoney PUBLIC - kmm_icons Qt5::Xml Qt5::Core Qt5::Gui Qt5::Sql KF5::Service - KF5::I18n Alkimia::alkimia - kmm_payeeidentifier_loader kmm_payeeidentifier payeeidentifier_iban_bic payeeidentifier_nationalAccount + PRIVATE # TODO: fix this KF5::XmlGui - PRIVATE + KF5::I18n + kmm_icons + kmm_payeeidentifier_loader onlinetask_unavailabletask ) diff --git a/kmymoney/mymoney/mymoneypayee.h b/kmymoney/mymoney/mymoneypayee.h --- a/kmymoney/mymoney/mymoneypayee.h +++ b/kmymoney/mymoney/mymoneypayee.h @@ -44,7 +44,7 @@ class MyMoneyPayeePrivate; class KMM_MYMONEY_EXPORT MyMoneyPayee : public MyMoneyObject, public MyMoneyPayeeIdentifierContainer { - Q_DECLARE_PRIVATE(MyMoneyPayee) + Q_DECLARE_PRIVATE_D(MyMoneyObject::d_ptr, MyMoneyPayee) KMM_MYMONEY_UNIT_TESTABLE @@ -183,8 +183,8 @@ inline void swap(MyMoneyPayee& first, MyMoneyPayee& second) // krazy:exclude=inline { using std::swap; - swap(first.d_ptr, second.d_ptr); - swap(first.m_payeeIdentifiers, second.m_payeeIdentifiers); + swap(first.MyMoneyObject::d_ptr, second.MyMoneyObject::d_ptr); + swap(first.MyMoneyPayeeIdentifierContainer::d_ptr, second.MyMoneyPayeeIdentifierContainer::d_ptr); } inline MyMoneyPayee::MyMoneyPayee(MyMoneyPayee && other) : MyMoneyPayee() // krazy:exclude=inline diff --git a/kmymoney/mymoney/mymoneypayee.cpp b/kmymoney/mymoney/mymoneypayee.cpp --- a/kmymoney/mymoney/mymoneypayee.cpp +++ b/kmymoney/mymoney/mymoneypayee.cpp @@ -38,7 +38,8 @@ MyMoneyPayee MyMoneyPayee::null; MyMoneyPayee::MyMoneyPayee() : - MyMoneyObject(*new MyMoneyPayeePrivate) + MyMoneyObject(*new MyMoneyPayeePrivate), + MyMoneyPayeeIdentifierContainer() { } @@ -49,7 +50,8 @@ const QString& postcode, const QString& telephone, const QString& email) : - MyMoneyObject(*new MyMoneyPayeePrivate) + MyMoneyObject(*new MyMoneyPayeePrivate), + MyMoneyPayeeIdentifierContainer() { Q_D(MyMoneyPayee); d->m_name = name; @@ -65,7 +67,8 @@ } MyMoneyPayee::MyMoneyPayee(const QDomElement& node) : - MyMoneyObject(*new MyMoneyPayeePrivate, node) + MyMoneyObject(*new MyMoneyPayeePrivate, node), + MyMoneyPayeeIdentifierContainer() { if (nodeNames[nnPayee] != node.tagName()) { throw MYMONEYEXCEPTION("Node was not PAYEE"); @@ -104,7 +107,6 @@ d->m_postcode = addrNode.attribute(d->getAttrName(Payee::Attribute::PostCode)); d->m_state = addrNode.attribute(d->getAttrName(Payee::Attribute::State)); d->m_telephone = addrNode.attribute(d->getAttrName(Payee::Attribute::Telephone)); - MyMoneyPayeeIdentifierContainer::loadXML(node); } diff --git a/kmymoney/mymoney/mymoneypayeeidentifiercontainer.h b/kmymoney/mymoney/mymoneypayeeidentifiercontainer.h --- a/kmymoney/mymoney/mymoneypayeeidentifiercontainer.h +++ b/kmymoney/mymoney/mymoneypayeeidentifiercontainer.h @@ -34,11 +34,20 @@ * is loaded. Optimal would be if they are only created if needed (which won't be often). */ template class payeeIdentifierTyped; + +class MyMoneyPayeeIdentifierContainerPrivate; class KMM_MYMONEY_EXPORT MyMoneyPayeeIdentifierContainer { + Q_DECLARE_PRIVATE(MyMoneyPayeeIdentifierContainer) public: MyMoneyPayeeIdentifierContainer(); + MyMoneyPayeeIdentifierContainer(const MyMoneyPayeeIdentifierContainer & other); + MyMoneyPayeeIdentifierContainer(MyMoneyPayeeIdentifierContainer && other); + MyMoneyPayeeIdentifierContainer & operator=(MyMoneyPayeeIdentifierContainer other); + friend void swap(MyMoneyPayeeIdentifierContainer& first, MyMoneyPayeeIdentifierContainer& second); + virtual ~MyMoneyPayeeIdentifierContainer(); + unsigned int payeeIdentifierCount() const; ::payeeIdentifier payeeIdentifier(unsigned int) const; QList< ::payeeIdentifier > payeeIdentifiers() const; @@ -58,9 +67,10 @@ void resetPayeeIdentifiers(const QList< ::payeeIdentifier >& list = QList< ::payeeIdentifier >()); protected: + MyMoneyPayeeIdentifierContainerPrivate * d_ptr; + void loadXML(QDomElement node); void writeXML(QDomDocument document, QDomElement parent) const; - QList< ::payeeIdentifier > m_payeeIdentifiers; }; template< class type > diff --git a/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp b/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp --- a/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp +++ b/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp @@ -17,56 +17,94 @@ */ #include "mymoneypayeeidentifiercontainer.h" +#include "mymoneypayeeidentifiercontainer_p.h" #include +#include #include "payeeidentifier/payeeidentifierloader.h" -MyMoneyPayeeIdentifierContainer::MyMoneyPayeeIdentifierContainer() - : m_payeeIdentifiers(QList< ::payeeIdentifier >()) +MyMoneyPayeeIdentifierContainer::MyMoneyPayeeIdentifierContainer() : + d_ptr(new MyMoneyPayeeIdentifierContainerPrivate) { } +MyMoneyPayeeIdentifierContainer::MyMoneyPayeeIdentifierContainer(const MyMoneyPayeeIdentifierContainer& other) : + d_ptr(new MyMoneyPayeeIdentifierContainerPrivate(*other.d_func())) +{ +} + +void swap(MyMoneyPayeeIdentifierContainer& first, MyMoneyPayeeIdentifierContainer& second) +{ + using std::swap; + swap(first.d_ptr, second.d_ptr); +} + +MyMoneyPayeeIdentifierContainer::MyMoneyPayeeIdentifierContainer(MyMoneyPayeeIdentifierContainer && other) : MyMoneyPayeeIdentifierContainer() +{ + swap(*this, other); +} + +MyMoneyPayeeIdentifierContainer & MyMoneyPayeeIdentifierContainer::operator=(MyMoneyPayeeIdentifierContainer other) +{ + swap(*this, other); + return *this; +} + +MyMoneyPayeeIdentifierContainer::~MyMoneyPayeeIdentifierContainer() +{ + Q_D(MyMoneyPayeeIdentifierContainer); + delete d; +} + unsigned int MyMoneyPayeeIdentifierContainer::payeeIdentifierCount() const { - return m_payeeIdentifiers.count(); + Q_D(const MyMoneyPayeeIdentifierContainer); + return d->m_payeeIdentifiers.count(); } payeeIdentifier MyMoneyPayeeIdentifierContainer::payeeIdentifier(unsigned int index) const { - return m_payeeIdentifiers.at(index); + Q_D(const MyMoneyPayeeIdentifierContainer); + return d->m_payeeIdentifiers.at(index); } QList MyMoneyPayeeIdentifierContainer::payeeIdentifiers() const { - return m_payeeIdentifiers; + Q_D(const MyMoneyPayeeIdentifierContainer); + return d->m_payeeIdentifiers; } void MyMoneyPayeeIdentifierContainer::addPayeeIdentifier(const ::payeeIdentifier& ident) { - m_payeeIdentifiers.append(ident); + Q_D(MyMoneyPayeeIdentifierContainer); + d->m_payeeIdentifiers.append(ident); } void MyMoneyPayeeIdentifierContainer::addPayeeIdentifier(const unsigned int position, const ::payeeIdentifier& ident) { - m_payeeIdentifiers.insert(position, ident); + Q_D(MyMoneyPayeeIdentifierContainer); + d->m_payeeIdentifiers.insert(position, ident); } void MyMoneyPayeeIdentifierContainer::removePayeeIdentifier(const ::payeeIdentifier& ident) { - m_payeeIdentifiers.removeOne(ident); + Q_D(MyMoneyPayeeIdentifierContainer); + d->m_payeeIdentifiers.removeOne(ident); } void MyMoneyPayeeIdentifierContainer::removePayeeIdentifier(const int index) { - Q_ASSERT(m_payeeIdentifiers.count() > index && index >= 0); - m_payeeIdentifiers.removeAt(index); + Q_D(MyMoneyPayeeIdentifierContainer); + Q_ASSERT(d->m_payeeIdentifiers.count() > index && index >= 0); + d->m_payeeIdentifiers.removeAt(index); } void MyMoneyPayeeIdentifierContainer::modifyPayeeIdentifier(const ::payeeIdentifier& ident) { - QList< ::payeeIdentifier >::Iterator end = m_payeeIdentifiers.end(); - for (QList< ::payeeIdentifier >::Iterator iter = m_payeeIdentifiers.begin(); iter != end; ++iter) { + Q_D(MyMoneyPayeeIdentifierContainer); + QList< ::payeeIdentifier >::Iterator end = d->m_payeeIdentifiers.end(); + for (QList< ::payeeIdentifier >::Iterator iter = d->m_payeeIdentifiers.begin(); iter != end; ++iter) { if (iter->id() == ident.id()) { *iter = ident; return; @@ -76,13 +114,15 @@ void MyMoneyPayeeIdentifierContainer::modifyPayeeIdentifier(const int index, const ::payeeIdentifier& ident) { - Q_ASSERT(m_payeeIdentifiers.count() > index && index >= 0); - m_payeeIdentifiers[index] = ident; + Q_D(MyMoneyPayeeIdentifierContainer); + Q_ASSERT(d->m_payeeIdentifiers.count() > index && index >= 0); + d->m_payeeIdentifiers[index] = ident; } void MyMoneyPayeeIdentifierContainer::resetPayeeIdentifiers(const QList< ::payeeIdentifier >& list) { - m_payeeIdentifiers = list; + Q_D(MyMoneyPayeeIdentifierContainer); + d->m_payeeIdentifiers = list; } void MyMoneyPayeeIdentifierContainer::loadXML(QDomElement node) @@ -103,8 +143,9 @@ void MyMoneyPayeeIdentifierContainer::writeXML(QDomDocument document, QDomElement parent) const { + Q_D(const MyMoneyPayeeIdentifierContainer); // Add payee identifiers - foreach (const ::payeeIdentifier& ident, m_payeeIdentifiers) { + foreach (const ::payeeIdentifier& ident, d->m_payeeIdentifiers) { if (!ident.isNull()) { ident.writeXML(document, parent); } diff --git a/kmymoney/mymoney/mymoneypayeeidentifiercontainer_p.h b/kmymoney/mymoney/mymoneypayeeidentifiercontainer_p.h new file mode 100644 --- /dev/null +++ b/kmymoney/mymoney/mymoneypayeeidentifiercontainer_p.h @@ -0,0 +1,50 @@ +/* + * This file is part of KMyMoney, A Personal Finance Manager by KDE + * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz + * + * 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. If not, see . + */ + +#ifndef MYMONEYPAYEEIDENTIFIERCONTAINER_P_H +#define MYMONEYPAYEEIDENTIFIERCONTAINER_P_H + +// ---------------------------------------------------------------------------- +// QT Includes + +#include + +// ---------------------------------------------------------------------------- +// KDE Includes + +// ---------------------------------------------------------------------------- +// Project Includes + +#include "payeeidentifier/payeeidentifier.h" + +class MyMoneyPayeeIdentifierContainerPrivate +{ +public: + MyMoneyPayeeIdentifierContainerPrivate() : + m_payeeIdentifiers(QList< ::payeeIdentifier >()) + { + } + + virtual ~MyMoneyPayeeIdentifierContainerPrivate() + { + } + + QList< ::payeeIdentifier > m_payeeIdentifiers; +}; +#endif diff --git a/kmymoney/mymoney/onlinejobadministration.cpp b/kmymoney/mymoney/onlinejobadministration.cpp --- a/kmymoney/mymoney/onlinejobadministration.cpp +++ b/kmymoney/mymoney/onlinejobadministration.cpp @@ -30,7 +30,7 @@ #include #include #include - +#include // ---------------------------------------------------------------------------- // KDE Includes diff --git a/kmymoney/mymoney/payeeidentifier/CMakeLists.txt b/kmymoney/mymoney/payeeidentifier/CMakeLists.txt --- a/kmymoney/mymoney/payeeidentifier/CMakeLists.txt +++ b/kmymoney/mymoney/payeeidentifier/CMakeLists.txt @@ -17,6 +17,7 @@ generate_export_header( kmm_payeeidentifier ) target_link_libraries( kmm_payeeidentifier + PUBLIC Qt5::Sql Qt5::Core Qt5::Xml @@ -35,20 +36,27 @@ payeeidentifierloader.cpp ) -add_library( kmm_payeeidentifier_loader STATIC +add_library( kmm_payeeidentifier_loader SHARED ${PAYEEIDENTIFIER_LOADER_SCRS} ) +generate_export_header( kmm_payeeidentifier_loader ) + target_link_libraries( kmm_payeeidentifier_loader + PUBLIC kmm_payeeidentifier + Qt5::Widgets + Qt5::Core + PRIVATE + KF5::I18n payeeidentifier_iban_bic payeeidentifier_nationalAccount payeeidentifier_unavailable - KF5::I18n - Qt5::Widgets - Qt5::Core ) +install(TARGETS kmm_payeeidentifier_loader + ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) + if(BUILD_TESTING) add_subdirectory(tests) endif() diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifier.h b/kmymoney/mymoney/payeeidentifier/payeeidentifier.h --- a/kmymoney/mymoney/payeeidentifier/payeeidentifier.h +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifier.h @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,16 +21,14 @@ #define PAYEEIDENTIFIER_H #include -#include -#include /** @todo fix include path after upgrade to cmake 3 */ #include "payeeidentifier/kmm_payeeidentifier_export.h" -// Q_DECLARE_METATYPE requries this include - class QDomDocument; class QDomElement; +class QString; + class payeeIdentifierData; class KMM_PAYEEIDENTIFIER_EXPORT payeeIdentifier { @@ -37,20 +36,19 @@ typedef unsigned int id_t; explicit payeeIdentifier(); - explicit payeeIdentifier(payeeIdentifierData *const data); - explicit payeeIdentifier(const id_t& id, payeeIdentifierData *const data); - explicit payeeIdentifier(const QString& id, payeeIdentifierData *const data); + explicit payeeIdentifier(payeeIdentifierData *const ident); + explicit payeeIdentifier(const id_t& id, payeeIdentifierData *const ident); + explicit payeeIdentifier(const QString& id, payeeIdentifierData *const ident); explicit payeeIdentifier(const id_t& id, const payeeIdentifier& other); - payeeIdentifier(const payeeIdentifier& other); - ~payeeIdentifier(); + payeeIdentifier(const payeeIdentifier & other); + + virtual ~payeeIdentifier(); payeeIdentifier& operator=(const payeeIdentifier& other); bool operator==(const payeeIdentifier& other); /** @brief Check if any data is associated */ - bool isNull() const { - return (m_payeeIdentifier == 0); - } + bool isNull() const; /** * @brief create xml to save this payeeIdentifier @@ -59,40 +57,27 @@ * * The counter part to load a payee identifier again is payeeIdentifierLoader::createPayeeIdentifierFromXML(). */ - void writeXML(QDomDocument &document, QDomElement &parent, const QString& elementName = QLatin1String("payeeIdentifier")) const; + void writeXML(QDomDocument &document, QDomElement &parent, const QString& elementName) const; + void writeXML(QDomDocument &document, QDomElement &parent) const; /** * @throws payeeIdentifier::empty */ - payeeIdentifierData* operator->(); + virtual payeeIdentifierData* operator->(); /** @copydoc operator->() */ - const payeeIdentifierData* operator->() const; + virtual const payeeIdentifierData* operator->() const; /** @copydoc operator->() */ - payeeIdentifierData* data(); + virtual payeeIdentifierData* data(); /** @copydoc operator->() */ - const payeeIdentifierData* data() const; - - template< class T > - T* data(); - - template< class T > - const T* data() const; + virtual const payeeIdentifierData* data() const; bool isValid() const; - - - id_t id() const { - return m_id; - } - + id_t id() const; QString idString() const; - - void clearId() { - m_id = 0; - } + void clearId(); /** * @brief Get payeeIdentifier Iid which identifiers the type @@ -121,7 +106,7 @@ class badCast : public exception { public: - explicit badCast(const QString& file = "", const long unsigned int& line = 0) + explicit badCast(const QString& file, const long unsigned int line) //: MyMoneyException("Casted payeeIdentifier with wrong type", file, line) { Q_UNUSED(file); Q_UNUSED(line); @@ -135,7 +120,7 @@ class empty : public exception { public: - explicit empty(const QString& file = "", const long unsigned int& line = 0) + explicit empty(const QString& file, const long unsigned int line) //: MyMoneyException("Requested payeeIdentifierData of empty payeeIdentifier", file, line) { Q_UNUSED(file); Q_UNUSED(line); @@ -155,24 +140,6 @@ payeeIdentifierData* m_payeeIdentifier; }; -template -T* payeeIdentifier::data() -{ - T *const ident = dynamic_cast(operator->()); - if (ident == 0) - throw badCast(__FILE__, __LINE__); - return ident; -} - -template -const T* payeeIdentifier::data() const -{ - const T *const ident = dynamic_cast(operator->()); - if (ident == 0) - throw badCast(__FILE__, __LINE__); - return ident; -} - Q_DECLARE_METATYPE(payeeIdentifier) #endif // PAYEEIDENTIFIER_H diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp b/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp --- a/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifier.cpp @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -23,43 +24,43 @@ #include "payeeidentifierdata.h" -payeeIdentifier::payeeIdentifier() - : m_id(0), +payeeIdentifier::payeeIdentifier() : + m_id(0), m_payeeIdentifier(0) { } -payeeIdentifier::payeeIdentifier(const payeeIdentifier& other) - : m_id(other.m_id), - m_payeeIdentifier(0) +payeeIdentifier::payeeIdentifier(const payeeIdentifier& other) : + m_id(other.m_id), + m_payeeIdentifier(0) { if (other.m_payeeIdentifier != 0) m_payeeIdentifier = other.m_payeeIdentifier->clone(); } -payeeIdentifier::payeeIdentifier(payeeIdentifierData*const data) - : m_id(0), - m_payeeIdentifier(data) +payeeIdentifier::payeeIdentifier(payeeIdentifierData*const ident) : + m_id(0), + m_payeeIdentifier(ident) { } -payeeIdentifier::payeeIdentifier(const payeeIdentifier::id_t& id, payeeIdentifierData*const data) - : m_id(id), - m_payeeIdentifier(data) +payeeIdentifier::payeeIdentifier(const payeeIdentifier::id_t& id, payeeIdentifierData*const ident) : + m_id(id), + m_payeeIdentifier(ident) { } -payeeIdentifier::payeeIdentifier(const QString& id, payeeIdentifierData*const data) - : m_id(id.mid(5).toUInt()), - m_payeeIdentifier(data) +payeeIdentifier::payeeIdentifier(const QString& id, payeeIdentifierData*const ident) : + m_id(id.mid(5).toUInt()), + m_payeeIdentifier(ident) { bool ok = false; // hopefully the compiler optimizes this away if compiled in non-debug mode Q_ASSERT(id.mid(5).toUInt(&ok) && ok); } -payeeIdentifier::payeeIdentifier(const payeeIdentifier::id_t& id, const payeeIdentifier& other) - : m_id(id), - m_payeeIdentifier(0) +payeeIdentifier::payeeIdentifier(const payeeIdentifier::id_t& id, const payeeIdentifier& other) : + m_id(id), + m_payeeIdentifier(0) { if (other.m_payeeIdentifier != 0) m_payeeIdentifier = other.m_payeeIdentifier->clone(); @@ -72,6 +73,11 @@ return QLatin1String("IDENT") + QString::number(m_id).rightJustified(6, '0'); } +void payeeIdentifier::clearId() +{ + m_id = 0; +} + payeeIdentifier::~payeeIdentifier() { delete m_payeeIdentifier; @@ -93,12 +99,12 @@ payeeIdentifierData* payeeIdentifier::data() { - return operator->(); + return payeeIdentifier::operator->(); } const payeeIdentifierData* payeeIdentifier::data() const { - return operator->(); + return payeeIdentifier::operator->(); } bool payeeIdentifier::isValid() const @@ -108,6 +114,11 @@ return false; } +id_t payeeIdentifier::id() const +{ + return m_id; +} + QString payeeIdentifier::iid() const { if (m_payeeIdentifier != 0) @@ -139,7 +150,17 @@ return false; return true; } - return (*data() == *(other.data())); + return (*m_payeeIdentifier == *(other.m_payeeIdentifier)); +} + +bool payeeIdentifier::isNull() const +{ + return (m_payeeIdentifier == 0); +} + +void payeeIdentifier::writeXML(QDomDocument& document, QDomElement& parent) const +{ + writeXML(document, parent, QStringLiteral("payeeIdentifier")); } void payeeIdentifier::writeXML(QDomDocument& document, QDomElement& parent, const QString& elemenName) const diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifiercontainermodel.h b/kmymoney/mymoney/payeeidentifier/payeeidentifiercontainermodel.h deleted file mode 100644 --- a/kmymoney/mymoney/payeeidentifier/payeeidentifiercontainermodel.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * This file is part of KMyMoney, A Personal Finance Manager by KDE - * Copyright (C) 2014 Christian Dávid - * - * 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. If not, see . - */ - -#ifndef PAYEEIDENTIFIERCONTAINERMODEL_H -#define PAYEEIDENTIFIERCONTAINERMODEL_H - -#include -#include "mymoney/mymoneypayeeidentifiercontainer.h" -#include "payeeidentifier/payeeidentifier.h" - -/** - * @brief Model for MyMoneyPayeeIdentifierContainer - * - * Changes the user does have initernal effect only. - */ -class payeeIdentifierContainerModel : public QAbstractListModel -{ - Q_OBJECT - -public: - enum roles { - payeeIdentifierType = Qt::UserRole, /**< type of payeeIdentifier */ - payeeIdentifier = Qt::UserRole + 1 /**< actual payeeIdentifier */ - }; - - explicit payeeIdentifierContainerModel(QObject* parent = 0); - - virtual QVariant data(const QModelIndex& index, int role) const; - - /** - * This model only supports to edit payeeIdentifier role with a QVariant of type - * payeeIdentifier. - */ - virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); - - virtual Qt::ItemFlags flags(const QModelIndex& index) const; - - virtual int rowCount(const QModelIndex& parent) const; - - virtual bool insertRows(int row, int count, const QModelIndex& parent); - virtual bool removeRows(int row, int count, const QModelIndex& parent); - - /** - * @brief Set source of data - * - * This makes the model editable. - */ - void setSource(MyMoneyPayeeIdentifierContainer data); - - /** @brief Get stored data */ - QList< ::payeeIdentifier > identifiers() const; - -public Q_SLOTS: - /** - * @brief Removes all data from the model - * - * The model is not editable afterwards. - */ - void closeSource(); - -private: - /** @internal - * The use of a shared pointer makes this future prof. Because using identifier() causes - * some unnecessary work. - */ - QSharedPointer m_data; -}; - -#endif // PAYEEIDENTIFIERMODEL_H diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifiercontainermodel.cpp b/kmymoney/mymoney/payeeidentifier/payeeidentifiercontainermodel.cpp deleted file mode 100644 --- a/kmymoney/mymoney/payeeidentifier/payeeidentifiercontainermodel.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * This file is part of KMyMoney, A Personal Finance Manager by KDE - * Copyright (C) 2014 Christian Dávid - * - * 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. If not, see . - */ - -#include "payeeidentifiermodel.h" -#include "mymoney/mymoneyfile.h" -#include "payeeidentifier/payeeidentifierloader.h" -#include "payeeidentifier/payeeidentifier.h" - -#include - -#include - -payeeIdentifierContainerModel::payeeIdentifierModel(QObject* parent) - : QAbstractListModel(parent), - m_data(QSharedPointer()) -{ -} - -QVariant payeeIdentifierContainerModel::data(const QModelIndex& index, int role) const -{ - // Needed for the selection box and it prevents a crash if index is out of range - if (m_data.isNull() || index.row() >= rowCount(index.parent()) - 1) - return QVariant(); - - const ::payeeIdentifier ident = m_data->payeeIdentifiers().at(index.row()); - - if (role == payeeIdentifier) { - return QVariant::fromValue< ::payeeIdentifier >(ident); - } else if (ident.isNull()) { - return QVariant(); - } else if (role == payeeIdentifierType) { - return ident.iid(); - } else if (role == Qt::DisplayRole) { - // The custom delegates won't ask for this role - return QVariant::fromValue(i18n("The plugin to show this information could not be found.")); - } - return QVariant(); -} - -bool payeeIdentifierContainerModel::setData(const QModelIndex& index, const QVariant& value, int role) -{ - if (!m_data.isNull() && role == payeeIdentifier) { - ::payeeIdentifier ident = value.value< ::payeeIdentifier >(); - if (index.row() == rowCount(index.parent()) - 1) { - // The new row will be the last but one - beginInsertRows(index.parent(), index.row() - 1, index.row() - 1); - m_data->addPayeeIdentifier(ident); - endInsertRows(); - } else { - m_data->modifyPayeeIdentifier(index.row(), ident); - emit dataChanged(createIndex(index.row(), 0), createIndex(index.row(), 0)); - } - return true; - } - return QAbstractItemModel::setData(index, value, role); -} - -Qt::ItemFlags payeeIdentifierContainerModel::flags(const QModelIndex& index) const -{ - Qt::ItemFlags flags = QAbstractItemModel::flags(index) | Qt::ItemIsDragEnabled; - const QString type = data(index, payeeIdentifierType).toString(); - // type.isEmpty() means the type selection can be shown - if (!type.isEmpty() && payeeIdentifierLoader::instance()->hasItemEditDelegate(type)) - flags |= Qt::ItemIsEditable; - return flags; -} - -int payeeIdentifierContainerModel::rowCount(const QModelIndex& parent) const -{ - Q_UNUSED(parent); - if (m_data.isNull()) - return 0; - // Always a row more which creates new entries - return m_data->payeeIdentifiers().count() + 1; -} - -/** @brief unused at the moment */ -bool payeeIdentifierContainerModel::insertRows(int row, int count, const QModelIndex& parent) -{ - Q_UNUSED(row); - Q_UNUSED(count); - Q_UNUSED(parent); - return false; -} - -bool payeeIdentifierContainerModel::removeRows(int row, int count, const QModelIndex& parent) -{ - if (m_data.isNull()) - return false; - - if (count < 1 || row + count >= rowCount(parent)) - return false; - - beginRemoveRows(parent, row, row + count - 1); - for (int i = row; i < row + count; ++i) { - m_data->removePayeeIdentifier(i); - } - endRemoveRows(); - return true; -} - -void payeeIdentifierContainerModel::setSource(const MyMoneyPayeeIdentifierContainer data) -{ - beginResetModel(); - m_data = QSharedPointer(new MyMoneyPayeeIdentifierContainer(data)); - endResetModel(); -} - -void payeeIdentifierContainerModel::closeSource() -{ - beginResetModel(); - m_data = QSharedPointer(); - endResetModel(); -} - -QList< ::payeeIdentifier > payeeIdentifierContainerModel::identifiers() const -{ - if (m_data.isNull()) - return QList< ::payeeIdentifier >(); - return m_data->payeeIdentifiers(); -} diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifierdata.h b/kmymoney/mymoney/payeeidentifier/payeeidentifierdata.h --- a/kmymoney/mymoney/payeeidentifier/payeeidentifierdata.h +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifierdata.h @@ -19,16 +19,13 @@ #ifndef PAYEEIDENTIFIERDATA_H #define PAYEEIDENTIFIERDATA_H -#include "payeeidentifier/kmm_payeeidentifier_export.h" - -#include -#include -#include -#include -#include +#include #include "storage/databasestoreableobject.h" +class QDomElement; +class QDomDocument; + class payeeIdentifier; class payeeIdentifierLoader; @@ -50,7 +47,7 @@ return _pidid; \ } \ /** @brief Returns the payeeIdentifier Id */ \ - virtual QString payeeIdentifierId() const { \ + QString payeeIdentifierId() const override { \ return className::staticPayeeIdentifierIid(); \ } @@ -81,7 +78,7 @@ * To identify the type of an payeeIdentifier you must use the macro @ref PAYEEIDENTIFIER_IID() * in the public section of your subclass. */ -class KMM_PAYEEIDENTIFIER_EXPORT payeeIdentifierData : public databaseStoreableObject +class payeeIdentifierData : public databaseStoreableObject { public: virtual ~payeeIdentifierData() {} diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h --- a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -21,18 +22,22 @@ #include "payeeidentifier.h" -#include -#include +#include "payeeidentifier/kmm_payeeidentifier_loader_export.h" class QAbstractItemDelegate; class QSqlDatabase; +class QDomElement; +class QString; /** * * @todo Load delegates dynamically */ -class payeeIdentifierLoader +class payeeIdentifierLoaderPrivate; +class KMM_PAYEEIDENTIFIER_LOADER_EXPORT payeeIdentifierLoader { + Q_DISABLE_COPY(payeeIdentifierLoader) + public: payeeIdentifierLoader(); ~payeeIdentifierLoader(); @@ -72,12 +77,11 @@ /** I take ownership */ void addPayeeIdentifier(payeeIdentifierData *const identifier); - static payeeIdentifierLoader* instance() { - return &m_self; - } + static payeeIdentifierLoader* instance(); private: - QHash m_identifiers; + Q_DECLARE_PRIVATE(payeeIdentifierLoader) + payeeIdentifierLoaderPrivate * const d_ptr; static payeeIdentifierLoader m_self; }; diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp --- a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -26,14 +27,34 @@ #include #include +#include +#include #include #include payeeIdentifierLoader payeeIdentifierLoader::m_self; -payeeIdentifierLoader::payeeIdentifierLoader() - : m_identifiers(QHash()) +class payeeIdentifierLoaderPrivate +{ + Q_DISABLE_COPY(payeeIdentifierLoaderPrivate) +public: + payeeIdentifierLoaderPrivate() : + m_identifiers(QHash()) + { + } + + ~payeeIdentifierLoaderPrivate() + { + qDeleteAll(m_identifiers); + } + + QHash m_identifiers; +}; + + +payeeIdentifierLoader::payeeIdentifierLoader() : + d_ptr(new payeeIdentifierLoaderPrivate) { addPayeeIdentifier(new payeeIdentifiers::ibanBic()); addPayeeIdentifier(new payeeIdentifiers::nationalAccount()); @@ -41,37 +62,37 @@ payeeIdentifierLoader::~payeeIdentifierLoader() { - qDeleteAll(m_identifiers); + Q_D(payeeIdentifierLoader); + delete d; } void payeeIdentifierLoader::addPayeeIdentifier(payeeIdentifierData* const identifier) { Q_CHECK_PTR(identifier); - m_identifiers.insertMulti(identifier->payeeIdentifierId(), identifier); + Q_D(payeeIdentifierLoader); + d->m_identifiers.insertMulti(identifier->payeeIdentifierId(), identifier); } -payeeIdentifier payeeIdentifierLoader::createPayeeIdentifier(const QString& payeeIdentifierId) +payeeIdentifierLoader* payeeIdentifierLoader::instance() { - const payeeIdentifierData* ident = m_identifiers.value(payeeIdentifierId); - if (ident != nullptr) { - return payeeIdentifier(ident->clone()); - } + return &m_self; +} - return payeeIdentifier(); +payeeIdentifier payeeIdentifierLoader::createPayeeIdentifier(const QString& payeeIdentifierId) +{ + Q_D(payeeIdentifierLoader); + const auto ident = d->m_identifiers.value(payeeIdentifierId); + return ident ? payeeIdentifier(ident->clone()) : payeeIdentifier(); } payeeIdentifier payeeIdentifierLoader::createPayeeIdentifierFromXML(const QDomElement& element) { - const QString payeeIdentifierId = element.attribute("type"); - const payeeIdentifierData* identData = m_identifiers.value(payeeIdentifierId); - payeeIdentifier ident; - - if (identData != nullptr) { - payeeIdentifierData* newIdent = identData->createFromXml(element); - ident = payeeIdentifier(newIdent); - } else { - ident = payeeIdentifier(new payeeIdentifiers::payeeIdentifierUnavailable(element)); - } + Q_D(payeeIdentifierLoader); + const auto payeeIdentifierId = element.attribute(QStringLiteral("type")); + const auto identData = d->m_identifiers.value(payeeIdentifierId); + auto ident = identData ? + payeeIdentifier(identData->createFromXml(element)) : + payeeIdentifier(new payeeIdentifiers::payeeIdentifierUnavailable(element)); ident.m_id = element.attribute("id", 0).toUInt(); return ident; @@ -79,14 +100,11 @@ payeeIdentifier payeeIdentifierLoader::createPayeeIdentifierFromSqlDatabase(QSqlDatabase db, const QString& identifierType, const QString& identifierId) { - const payeeIdentifierData* identData = m_identifiers.value(identifierType); - - if (identData != nullptr) { - payeeIdentifierData* data = identData->createFromSqlDatabase(db, identifierId); - return payeeIdentifier(identifierId, data); - } - - return payeeIdentifier(identifierId, nullptr); + Q_D(payeeIdentifierLoader); + const auto identData = d->m_identifiers.value(identifierType); + return identData ? + payeeIdentifier(identifierId, identData->createFromSqlDatabase(db, identifierId)) : + payeeIdentifier(identifierId, nullptr); } /** @@ -95,7 +113,7 @@ QAbstractItemDelegate* payeeIdentifierLoader::createItemDelegate(const QString& payeeIdentifierId, QObject* parent) { /** @todo escape ' in payeeIdentifierId */ - KService::List offers = KServiceTypeTrader::self()->query(QLatin1String("KMyMoney/PayeeIdentifierDelegate"), QString("'%1' ~in [X-KMyMoney-payeeIdentifierIds]").arg(payeeIdentifierId)); + auto offers = KServiceTypeTrader::self()->query(QLatin1String("KMyMoney/PayeeIdentifierDelegate"), QString("'%1' ~in [X-KMyMoney-payeeIdentifierIds]").arg(payeeIdentifierId)); if (!offers.isEmpty()) { QString error; QAbstractItemDelegate* ptr = offers.at(0)->createInstance(parent, QVariantList(), &error); @@ -118,10 +136,9 @@ QStringList payeeIdentifierLoader::availableDelegates() { QStringList list; - KService::List offers = KServiceTypeTrader::self()->query(QLatin1String("KMyMoney/PayeeIdentifierDelegate")); - foreach (KService::Ptr offer, offers) { + const auto offers = KServiceTypeTrader::self()->query(QLatin1String("KMyMoney/PayeeIdentifierDelegate")); + for (KService::Ptr offer : offers) list.append(offer->property("X-KMyMoney-payeeIdentifierIds", QVariant::StringList).toStringList()); - } return list; } diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifiertyped.h b/kmymoney/mymoney/payeeidentifier/payeeidentifiertyped.h --- a/kmymoney/mymoney/payeeidentifier/payeeidentifiertyped.h +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifiertyped.h @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -29,16 +30,13 @@ payeeIdentifierTyped(T* pid); //explicit payeeIdentifierTyped(); explicit payeeIdentifierTyped(const payeeIdentifier& other); + ~payeeIdentifierTyped() override {} - T* operator->(); - const T* operator->() const; + T* operator->() final override; + const T* operator->() const final override; - T* data() { - return operator->(); - } - const T* data() const { - return operator->(); - } + T* data() final override; + const T* data() const final override; payeeIdentifierTyped& operator=(const payeeIdentifierTyped& other); bool operator==(const payeeIdentifierTyped& other); @@ -115,5 +113,18 @@ return m_payeeIdentifierTyped; } +template< class T > +T* payeeIdentifierTyped::data() +{ + return operator->(); +} + +template< class T > +const T* payeeIdentifierTyped::data() const +{ + return operator->(); +} + + #endif // PAYEEIDENTIFIERTYPED_H diff --git a/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt b/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt --- a/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt +++ b/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt @@ -8,4 +8,6 @@ Qt5::Test kmm_payeeidentifier kmm_payeeidentifier_loader + payeeidentifier_iban_bic + payeeidentifier_nationalAccount ) diff --git a/kmymoney/mymoney/payeeidentifiermodel.h b/kmymoney/mymoney/payeeidentifiermodel.h --- a/kmymoney/mymoney/payeeidentifiermodel.h +++ b/kmymoney/mymoney/payeeidentifiermodel.h @@ -47,12 +47,12 @@ }; explicit payeeIdentifierModel(QObject* parent = 0); - virtual QVariant data(const QModelIndex& index, int role) const; - virtual int columnCount(const QModelIndex& parent) const; - virtual int rowCount(const QModelIndex& parent) const; - virtual QModelIndex parent(const QModelIndex& child) const; - virtual QModelIndex index(int row, int column, const QModelIndex &parent) const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant data(const QModelIndex& index, int role) const override; + int columnCount(const QModelIndex& parent) const override; + int rowCount(const QModelIndex& parent) const override; + QModelIndex parent(const QModelIndex& child) const override; + QModelIndex index(int row, int column, const QModelIndex &parent) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; /** * @brief Set which payeeIdentifier types to show diff --git a/kmymoney/mymoney/payeeidentifiermodel.cpp b/kmymoney/mymoney/payeeidentifiermodel.cpp --- a/kmymoney/mymoney/payeeidentifiermodel.cpp +++ b/kmymoney/mymoney/payeeidentifiermodel.cpp @@ -80,17 +80,17 @@ if (!index.isValid()) return QVariant(); - const bool isPayeeIdentifier = index.parent().isValid(); + const bool isPayeeIdentifierValid = index.parent().isValid(); if (role == payeeIdentifierModel::isPayeeIdentifier) - return isPayeeIdentifier; + return isPayeeIdentifierValid; - const MyMoneyPayee payee = (isPayeeIdentifier) ? payeeByIndex(index.parent()) : payeeByIndex(index); + const MyMoneyPayee payee = (isPayeeIdentifierValid) ? payeeByIndex(index.parent()) : payeeByIndex(index); - if (role == payeeName || (!isPayeeIdentifier && role == Qt::DisplayRole)) { + if (role == payeeName || (!isPayeeIdentifierValid && role == Qt::DisplayRole)) { // Return data for MyMoneyPayee return payee.name(); - } else if (isPayeeIdentifier) { + } else if (isPayeeIdentifierValid) { // Return data for payeeIdentifier if (index.row() >= 0 && static_cast(index.row()) < payee.payeeIdentifierCount()) { ::payeeIdentifier ident = payee.payeeIdentifier(index.row()); diff --git a/kmymoney/mymoney/storage/databasestoreableobject.h b/kmymoney/mymoney/storage/databasestoreableobject.h --- a/kmymoney/mymoney/storage/databasestoreableobject.h +++ b/kmymoney/mymoney/storage/databasestoreableobject.h @@ -19,8 +19,9 @@ #ifndef DATABASESTOREABLEOBJECT_H #define DATABASESTOREABLEOBJECT_H -#include -#include +#include + +class QSqlDatabase; /** * @brief Base class for plugin based objects which are stored in the database diff --git a/kmymoney/mymoney/storage/kmymoneystorageplugin.h b/kmymoney/mymoney/storage/kmymoneystorageplugin.h --- a/kmymoney/mymoney/storage/kmymoneystorageplugin.h +++ b/kmymoney/mymoney/storage/kmymoneystorageplugin.h @@ -32,7 +32,7 @@ * @brief Interface for plugins which store data in an sql database * */ -class KMM_MYMONEY_EXPORT storagePlugin : public QObject +class KMM_MYMONEY_EXPORT SQLStorageExtension : public QObject { Q_OBJECT @@ -40,7 +40,7 @@ /** * This is the constructor needed by KService */ - explicit storagePlugin(QObject* parent = 0, const QVariantList& options = QVariantList()); + explicit SQLStorageExtension(QObject* parent = 0, const QVariantList& options = QVariantList()); /** * @brief Setup database to make it usable by the plugins @@ -59,11 +59,11 @@ */ virtual bool removePluginData(QSqlDatabase connection) = 0; - virtual ~storagePlugin(); + virtual ~SQLStorageExtension(); }; } // end namespace KMyMoneyPlugin -Q_DECLARE_INTERFACE(KMyMoneyPlugin::storagePlugin, "org.kmymoney.plugin.storageplugin") +Q_DECLARE_INTERFACE(KMyMoneyPlugin::SQLStorageExtension, "org.kmymoney.plugin.storageplugin") #endif // KMYMONEYPLUGIN_STORAGEPLUGIN_H diff --git a/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp b/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp --- a/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp +++ b/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp @@ -18,13 +18,13 @@ #include "kmymoneystorageplugin.h" -KMyMoneyPlugin::storagePlugin::storagePlugin(QObject* parent, const QVariantList& options) +KMyMoneyPlugin::SQLStorageExtension::SQLStorageExtension(QObject* parent, const QVariantList& options) : QObject(parent) { Q_UNUSED(options); } -KMyMoneyPlugin::storagePlugin::~storagePlugin() +KMyMoneyPlugin::SQLStorageExtension::~SQLStorageExtension() { } diff --git a/kmymoney/mymoney/tests/CMakeLists.txt b/kmymoney/mymoney/tests/CMakeLists.txt --- a/kmymoney/mymoney/tests/CMakeLists.txt +++ b/kmymoney/mymoney/tests/CMakeLists.txt @@ -15,6 +15,7 @@ Qt5::Xml Qt5::Gui kmm_mymoney + kmm_payeeidentifier_loader kmm_testutils reports_testcommon onlinetask_unavailabletask diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbic.h b/kmymoney/payeeidentifier/ibanandbic/ibanbic.h --- a/kmymoney/payeeidentifier/ibanandbic/ibanbic.h +++ b/kmymoney/payeeidentifier/ibanandbic/ibanbic.h @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -19,13 +20,13 @@ #ifndef PAYEEIDENTIFIER_IBANBIC_H #define PAYEEIDENTIFIER_IBANBIC_H -#include -#include - #include "payeeidentifier/payeeidentifierdata.h" #include "mymoneyunittestable.h" #include "iban_bic_identifier_export.h" +class QString; +class QSqlQuery; + class ibanBicData; namespace payeeIdentifiers @@ -36,11 +37,11 @@ * Can store a pair of an International Bank Account Number (ISO 13616) and Business Identifier Code (ISO 9362). * */ +class ibanBicPrivate; class IBAN_BIC_IDENTIFIER_EXPORT ibanBic : public payeeIdentifierData { KMM_MYMONEY_UNIT_TESTABLE public: - PAYEEIDENTIFIER_IID(ibanBic, "org.kmymoney.payeeIdentifier.ibanbic"); enum bicAllocationStatus { bicAllocated = 0, @@ -51,19 +52,23 @@ ibanBic(); ibanBic(const ibanBic& other); - ibanBic* clone() const; - ibanBic* createFromXml(const QDomElement& element) const; - void writeXML(QDomDocument& document, QDomElement& parent) const; + ~ibanBic() override; + + ibanBic* clone() const final override; + ibanBic* createFromXml(const QDomElement& element) const final override; + void writeXML(QDomDocument& document, QDomElement& parent) const final override; + + /** @brief Returns the payeeIdentifier Iid */ + static QString staticPayeeIdentifierIid(); + + /** @brief Returns the payeeIdentifier Id */ + QString payeeIdentifierId() const final override; /** * @brief Set an owner name for this account */ - void setOwnerName(const QString& ownerName) { - m_ownerName = ownerName; - } - QString ownerName() const { - return m_ownerName; - } + void setOwnerName(const QString& ownerName); + QString ownerName() const; /** * @brief Set a IBAN @@ -75,21 +80,17 @@ /** @copydoc m_iban * Use this method if you know that iban is in electronic format already. No futher checks are done. */ - void setElectronicIban(const QString& iban) { - Q_ASSERT(iban == ibanToElectronic(iban)); - m_iban = iban; - } + void setElectronicIban(const QString& iban); /** @copydoc m_iban */ - QString electronicIban() const { - return m_iban; - } + QString electronicIban() const; /** * @brief Returns iban in human readable format * @see toPaperformatIban() */ - QString paperformatIban(const QString& separator = QLatin1String(" ")) const; + QString paperformatIban() const; + QString paperformatIban(const QString& separator) const; /** * @brief Set Business Identifier Code @@ -98,7 +99,8 @@ * * @param bic will be normalized */ - void setBic(const QString& bic = QString()); + void setBic(); + void setBic(const QString& bic); /** * @brief Business Identifier Code @@ -107,9 +109,7 @@ * The returned bic is normalized: * A tailing XXX is omitted, all characters are uppercase. */ - QString storedBic() const { - return m_bic; - } + QString storedBic() const; /** * @copydoc storedBic() @@ -137,13 +137,11 @@ * * Uses any available information to return an institutionName */ - QString institutionName() const { - return institutionNameByBic(bic()); - } + QString institutionName() const; - virtual bool operator==(const payeeIdentifierData& other) const; + bool operator==(const payeeIdentifierData& other) const final override; bool operator==(const ibanBic& other) const; - virtual bool isValid() const; + bool isValid() const final override; /** * @brief Extends a bic to 11 characters @@ -167,7 +165,8 @@ * @param iban an iban, not needed to be canonical, valid or completed * @param separator Overwrite the default separator (e.g. a smaller space) */ - static QString ibanToPaperformat(const QString& iban, const QString& separator = QLatin1String(" ")); + static QString ibanToPaperformat(const QString& iban); + static QString ibanToPaperformat(const QString& iban, const QString& separator); /** * @brief Extract Basic Bank Account Number @@ -229,14 +228,10 @@ */ static bool validateIbanChecksum(const QString& iban); - static const int ibanMaxLength; - - QString storagePluginIid() const { - return QLatin1String("org.kmymoney.payeeIdentifier.ibanbic.sqlStoragePlugin"); - } - bool sqlSave(QSqlDatabase databaseConnection, const QString& objectId) const; - bool sqlModify(QSqlDatabase databaseConnection, const QString& objectId) const; - bool sqlRemove(QSqlDatabase databaseConnection, const QString& objectId) const; + QString storagePluginIid() const final override; + bool sqlSave(QSqlDatabase databaseConnection, const QString& objectId) const final override; + bool sqlModify(QSqlDatabase databaseConnection, const QString& objectId) const final override; + bool sqlRemove(QSqlDatabase databaseConnection, const QString& objectId) const final override; private: /** @@ -260,7 +255,7 @@ static ::ibanBicData* m_ibanBicData; bool writeQuery(QSqlQuery& query, const QString& id) const; - payeeIdentifierData* createFromSqlDatabase(QSqlDatabase db, const QString& identId) const; + payeeIdentifierData* createFromSqlDatabase(QSqlDatabase db, const QString& identId) const final override; static QString canonizeBic(const QString& bic); }; diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp b/kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp --- a/kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp +++ b/kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -25,6 +26,7 @@ #include #include #include +#include #include "ibanbicdata.h" #include "mymoney/mymoneyexception.h" @@ -33,17 +35,20 @@ { ibanBicData* ibanBic::m_ibanBicData = 0; -const int ibanBic::ibanMaxLength = 30; ibanBic::ibanBic() { } -ibanBic::ibanBic(const ibanBic& other) - : payeeIdentifierData(other), - m_bic(other.m_bic), - m_iban(other.m_iban), - m_ownerName(other.m_ownerName) +ibanBic::ibanBic(const ibanBic& other) : + payeeIdentifierData(other), + m_bic(other.m_bic), + m_iban(other.m_iban), + m_ownerName(other.m_ownerName) +{ +} + +ibanBic::~ibanBic() { } @@ -59,7 +64,9 @@ bool ibanBic::operator==(const ibanBic& other) const { - return (m_iban == other.m_iban && m_bic == other.m_bic && m_ownerName == other.m_ownerName); + return (m_iban == other.m_iban && + m_bic == other.m_bic && + m_ownerName == other.m_ownerName); } ibanBic* ibanBic::clone() const @@ -105,6 +112,27 @@ parent.setAttribute("ownerName", m_ownerName); } +QString ibanBic::staticPayeeIdentifierIid() +{ + return QStringLiteral("org.kmymoney.payeeIdentifier.ibanbic"); +} + +/** @brief Returns the payeeIdentifier Id */ +QString ibanBic::payeeIdentifierId() const +{ + return staticPayeeIdentifierIid(); +} + +void ibanBic::setOwnerName(const QString& ownerName) +{ + m_ownerName = ownerName; +} + +QString ibanBic::ownerName() const +{ + return m_ownerName; +} + bool ibanBic::writeQuery(QSqlQuery& query, const QString& id) const { query.bindValue(":id", id); @@ -119,6 +147,11 @@ return true; } +QString ibanBic::storagePluginIid() const +{ + return QStringLiteral("org.kmymoney.payeeIdentifier.ibanbic.sqlStoragePlugin"); +} + bool ibanBic::sqlSave(QSqlDatabase databaseConnection, const QString& objectId) const { QSqlQuery query(databaseConnection); @@ -148,6 +181,11 @@ return true; } +QString ibanBic::paperformatIban() const +{ + return paperformatIban(QStringLiteral(" ")); +} + QString ibanBic::paperformatIban(const QString& separator) const { return ibanToPaperformat(m_iban, separator); @@ -158,11 +196,32 @@ m_iban = ibanToElectronic(iban); } +void ibanBic::setElectronicIban(const QString& iban) +{ + Q_ASSERT(iban == ibanToElectronic(iban)); + m_iban = iban; +} + +QString ibanBic::electronicIban() const +{ + return m_iban; +} + +void ibanBic::setBic() +{ + m_bic.clear(); +} + void ibanBic::setBic(const QString& bic) { m_bic = canonizeBic(bic); } +QString ibanBic::storedBic() const +{ + return m_bic; +} + QString ibanBic::canonizeBic(const QString& bic) { QString canonizedBic = bic.toUpper(); @@ -179,6 +238,12 @@ return m_bic; } +QString ibanBic::institutionName() const +{ + return institutionNameByBic(bic()); +} + + QString ibanBic::fullBic() const { if (m_bic.isNull()) { @@ -263,6 +328,11 @@ return canonicalIban; } +QString ibanBic::ibanToPaperformat(const QString& iban) +{ + return ibanToPaperformat(iban, QStringLiteral(" ")); +} + QString ibanBic::ibanToPaperformat(const QString& iban, const QString& separator) { QString paperformat; diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.h b/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.h --- a/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.h +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.h @@ -31,7 +31,7 @@ public: explicit bicValidator(QObject* parent = 0); - virtual QValidator::State validate(QString& , int&) const; + QValidator::State validate(QString& , int&) const final override; static QPair validateWithMessage(const QString&); }; diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h --- a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h @@ -32,12 +32,12 @@ public: explicit ibanBicItemDelegate(QObject* parent = nullptr, const QVariantList& args = QVariantList()); - virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual void setEditorData(QWidget* editor, const QModelIndex& index) const; - virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; - virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override; + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override; + void setEditorData(QWidget* editor, const QModelIndex& index) const override; + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override; + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override; Q_SIGNALS: void sizeHintChanged(const QModelIndex&) const; diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.h b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.h --- a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.h +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.h @@ -33,9 +33,9 @@ public: explicit ibanValidator(QObject* parent = 0); - virtual State validate(QString& , int&) const; + State validate(QString& , int&) const final override; State validate(const QString&) const; - virtual void fixup(QString&) const; + void fixup(QString&) const final override; static QPair validateWithMessage(const QString&); }; diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp b/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp --- a/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp @@ -33,8 +33,8 @@ { public: explicit bicItemDelegate(QObject* parent = 0) : QStyledItemDelegate(parent) {} - void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const; - virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; + void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const final override; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const final override; private: inline QFont getSmallFont(const QStyleOptionViewItem& option) const; diff --git a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.h b/kmymoney/payeeidentifier/nationalaccount/nationalaccount.h --- a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.h +++ b/kmymoney/payeeidentifier/nationalaccount/nationalaccount.h @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -22,73 +23,61 @@ #include "mymoney/payeeidentifier/payeeidentifierdata.h" #include "nationalaccount_identifier_export.h" +class QSqlQuery; + namespace payeeIdentifiers { class NATIONALACCOUNT_IDENTIFIER_EXPORT nationalAccount : public payeeIdentifierData { public: - PAYEEIDENTIFIER_IID(nationalAccount, "org.kmymoney.payeeIdentifier.national"); nationalAccount(); nationalAccount(const nationalAccount& other); + ~nationalAccount() override; - virtual bool isValid() const; - virtual bool operator==(const payeeIdentifierData& other) const; + bool isValid() const final override; + bool operator==(const payeeIdentifierData& other) const final override; bool operator==(const nationalAccount& other) const; - nationalAccount* clone() const { - return new nationalAccount(*this); - } - nationalAccount* createFromXml(const QDomElement& element) const; - void writeXML(QDomDocument& document, QDomElement& parent) const; - - QString storagePluginIid() const; - bool sqlSave(QSqlDatabase databaseConnection, const QString& objectId) const; - bool sqlModify(QSqlDatabase databaseConnection, const QString& objectId) const; - bool sqlRemove(QSqlDatabase databaseConnection, const QString& objectId) const; - nationalAccount* createFromSqlDatabase(QSqlDatabase db, const QString& identId) const; - - void setBankCode(const QString& bankCode) { - m_bankCode = bankCode; - } - QString bankCode() const { - return m_bankCode; - } + nationalAccount* clone() const final override; + nationalAccount* createFromXml(const QDomElement& element) const final override; + void writeXML(QDomDocument& document, QDomElement& parent) const final override; + + /** @brief Returns the payeeIdentifier Iid */ + static QString staticPayeeIdentifierIid(); + + /** @brief Returns the payeeIdentifier Id */ + QString payeeIdentifierId() const final override; + + QString storagePluginIid() const final override; + bool sqlSave(QSqlDatabase databaseConnection, const QString& objectId) const final override; + bool sqlModify(QSqlDatabase databaseConnection, const QString& objectId) const final override; + bool sqlRemove(QSqlDatabase databaseConnection, const QString& objectId) const final override; + nationalAccount* createFromSqlDatabase(QSqlDatabase db, const QString& identId) const final override; + + void setBankCode(const QString& bankCode); + QString bankCode() const; /** @todo implement */ - QString bankName() const { - return QString(); - } - - void setAccountNumber(const QString& accountNumber) { - m_accountNumber = accountNumber; - } - QString accountNumber() const { - return m_accountNumber; - } - - QString country() const { - return m_country; - } - void setCountry(const QString& countryCode) { - m_country = countryCode.toUpper(); - } - - QString ownerName() const { - return m_ownerName; - } - void setOwnerName(const QString& ownerName) { - m_ownerName = ownerName; - } + QString bankName() const; -private: - bool writeQuery(QSqlQuery& query, const QString& id) const; + void setAccountNumber(const QString& accountNumber); + QString accountNumber() const; + + QString country() const; + void setCountry(const QString& countryCode); + + QString ownerName() const; + void setOwnerName(const QString& ownerName); +private: QString m_ownerName; QString m_country; QString m_bankCode; QString m_accountNumber; + + bool writeQuery(QSqlQuery& query, const QString& id) const; }; } // namespace payeeIdentifiers diff --git a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp b/kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp --- a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp +++ b/kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -23,27 +24,28 @@ #include #include #include +#include namespace payeeIdentifiers { nationalAccount::nationalAccount() - : m_ownerName(), - m_country(), - m_bankCode(), - m_accountNumber() { } -nationalAccount::nationalAccount(const nationalAccount& other) - : m_ownerName(other.m_ownerName), - m_country(other.m_country), - m_bankCode(other.m_bankCode), - m_accountNumber(other.m_accountNumber) +nationalAccount::nationalAccount(const nationalAccount& other) : + m_ownerName(other.m_ownerName), + m_country(other.m_country), + m_bankCode(other.m_bankCode), + m_accountNumber(other.m_accountNumber) { } +nationalAccount::~nationalAccount() +{ +} + nationalAccount* nationalAccount::createFromXml(const QDomElement& element) const { nationalAccount* ident = new nationalAccount; @@ -65,6 +67,16 @@ parent.setAttribute("country", m_country); } +QString nationalAccount::staticPayeeIdentifierIid() +{ + return QStringLiteral("org.kmymoney.payeeIdentifier.national"); +} + +QString nationalAccount::payeeIdentifierId() const +{ + return staticPayeeIdentifierIid(); +} + nationalAccount* nationalAccount::createFromSqlDatabase(QSqlDatabase db, const QString& identId) const { QSqlQuery query(db); @@ -83,6 +95,51 @@ return ident; } +void nationalAccount::setBankCode(const QString& bankCode) +{ + m_bankCode = bankCode; +} + +QString nationalAccount::bankCode() const +{ + return m_bankCode; +} + +QString nationalAccount::bankName() const +{ + return QString(); +} + +void nationalAccount::setAccountNumber(const QString& accountNumber) +{ + m_accountNumber = accountNumber; +} + +QString nationalAccount::accountNumber() const +{ + return m_accountNumber; +} + +QString nationalAccount::country() const +{ + return m_country; +} + +void nationalAccount::setCountry(const QString& countryCode) +{ + m_country = countryCode.toUpper(); +} + +QString nationalAccount::ownerName() const +{ + return m_ownerName; +} + +void nationalAccount::setOwnerName(const QString& ownerName) +{ + m_ownerName = ownerName; +} + QString nationalAccount::storagePluginIid() const { return QLatin1String("org.kmymoney.payeeIdentifier.nationalAccount.sqlStoragePlugin"); @@ -149,7 +206,15 @@ bool nationalAccount::operator==(const nationalAccount& other) const { - return (m_accountNumber == other.m_accountNumber && m_bankCode == other.m_bankCode && m_ownerName == other.m_ownerName && m_country == other.m_country); + return (m_accountNumber == other.m_accountNumber && + m_bankCode == other.m_bankCode && + m_ownerName == other.m_ownerName && + m_country == other.m_country); +} + +nationalAccount* nationalAccount::clone() const +{ + return new nationalAccount(*this); } } // namespace payeeIdentifiers diff --git a/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h b/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h --- a/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h +++ b/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h @@ -30,12 +30,12 @@ public: explicit nationalAccountDelegate(QObject* parent, const QVariantList& options = QVariantList()); - virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual void setEditorData(QWidget* editor, const QModelIndex& index) const; - virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; - virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const final override; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const final override; + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const final override; + void setEditorData(QWidget* editor, const QModelIndex& index) const final override; + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const final override; + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const final override; Q_SIGNALS: void sizeHintChanged(const QModelIndex&) const; diff --git a/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.h b/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.h --- a/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.h +++ b/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.h @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +21,8 @@ #define UNAVAILABLEPLUGIN_H #include "payeeidentifier/payeeidentifierdata.h" -#include + +class QDomElement; class payeeIdentifierLoader; @@ -33,16 +35,30 @@ * To avoid data loss if a plugin could not be loaded this payeeIdentifier is used in the xml backend. * It stores the data in plain xml so it can be written back to the file. */ +class payeeIdentifierUnavailablePrivate; class payeeIdentifierUnavailable : public payeeIdentifierData { public: - PAYEEIDENTIFIER_IID(payeeIdentifierUnavailable, "org.kmymoney.payeeIdentifier.payeeIdentifierUnavailable"); +// PAYEEIDENTIFIER_IID(payeeIdentifierUnavailable, "org.kmymoney.payeeIdentifier.payeeIdentifierUnavailable"); payeeIdentifierUnavailable(); - virtual void writeXML(QDomDocument& document, QDomElement& parent) const; - virtual payeeIdentifierUnavailable* createFromXml(const QDomElement& element) const; - virtual bool isValid() const; - virtual bool operator==(const payeeIdentifierData& other) const; + payeeIdentifierUnavailable(const payeeIdentifierUnavailable& other); + payeeIdentifierUnavailable(payeeIdentifierUnavailable && other); + payeeIdentifierUnavailable & operator=(payeeIdentifierUnavailable other); + friend void swap(payeeIdentifierUnavailable& first, payeeIdentifierUnavailable& second); + ~payeeIdentifierUnavailable() override; + + void writeXML(QDomDocument& document, QDomElement& parent) const final override; + + /** @brief Returns the payeeIdentifier Iid */ + static QString staticPayeeIdentifierIid(); + + /** @brief Returns the payeeIdentifier Id */ + QString payeeIdentifierId() const final override; + + payeeIdentifierUnavailable* createFromXml(const QDomElement& element) const final override; + bool isValid() const final override; + bool operator==(const payeeIdentifierData& other) const final override; bool operator==(const payeeIdentifierUnavailable& other) const; friend class payeeIdentifierLoader; @@ -55,18 +71,19 @@ * For SQL databases this plugin is not needed nor used. So these functions * do not have a real implementation. */ - virtual QString storagePluginIid() const; - virtual bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual payeeIdentifierData* createFromSqlDatabase(QSqlDatabase db, const QString& identId) const; + QString storagePluginIid() const final override; + bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override; + bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override; + bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override; + payeeIdentifierData* createFromSqlDatabase(QSqlDatabase db, const QString& identId) const final override; /** @} */ protected: - virtual payeeIdentifierUnavailable* clone() const; + payeeIdentifierUnavailable* clone() const final override; private: - QDomElement m_data; + Q_DECLARE_PRIVATE(payeeIdentifierUnavailable) + payeeIdentifierUnavailablePrivate * d_ptr; }; } // namespace payeeidentifiers diff --git a/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp b/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp --- a/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp +++ b/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp @@ -1,6 +1,7 @@ /* * This file is part of KMyMoney, A Personal Finance Manager by KDE * Copyright (C) 2014 Christian Dávid + * Copyright (C) 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -18,35 +19,92 @@ #include "unavailableplugin.h" +#include +#include + #include namespace payeeIdentifiers { -payeeIdentifierUnavailable::payeeIdentifierUnavailable() - : payeeIdentifierData(), - m_data(QDomElement()) -{ -} + class payeeIdentifierUnavailablePrivate + { + public: + payeeIdentifierUnavailablePrivate() + { + } -payeeIdentifierUnavailable::payeeIdentifierUnavailable(QDomElement data) - : payeeIdentifierData(), - m_data(data) -{ + ~payeeIdentifierUnavailablePrivate() + { + } + + QDomElement m_data; + }; + payeeIdentifierUnavailable::payeeIdentifierUnavailable() : + d_ptr(new payeeIdentifierUnavailablePrivate) + { + } + + payeeIdentifierUnavailable::payeeIdentifierUnavailable(const payeeIdentifierUnavailable& other) : + d_ptr(new payeeIdentifierUnavailablePrivate(*other.d_func())) + { + } + + void swap(payeeIdentifierUnavailable& first, payeeIdentifierUnavailable& second) + { + using std::swap; + swap(first.d_ptr, second.d_ptr); + } + + payeeIdentifierUnavailable::payeeIdentifierUnavailable(payeeIdentifierUnavailable && other) : payeeIdentifierUnavailable() + { + swap(*this, other); + } + + payeeIdentifierUnavailable & payeeIdentifierUnavailable::operator=(payeeIdentifierUnavailable other) + { + swap(*this, other); + return *this; + } + + payeeIdentifierUnavailable::~payeeIdentifierUnavailable() + { + Q_D(payeeIdentifierUnavailable); + delete d; + } + +payeeIdentifierUnavailable::payeeIdentifierUnavailable(QDomElement data) : + d_ptr(new payeeIdentifierUnavailablePrivate) +{ + Q_D(payeeIdentifierUnavailable); + d->m_data = data; } payeeIdentifierUnavailable* payeeIdentifierUnavailable::clone() const { - return new payeeIdentifierUnavailable(m_data); + Q_D(const payeeIdentifierUnavailable); + return new payeeIdentifierUnavailable(d->m_data); } void payeeIdentifierUnavailable::writeXML(QDomDocument& document, QDomElement& parent) const { Q_UNUSED(document); - parent = m_data; + Q_D(const payeeIdentifierUnavailable); + parent = d->m_data; } +QString payeeIdentifierUnavailable::staticPayeeIdentifierIid() +{ + return QStringLiteral("org.kmymoney.payeeIdentifier.payeeIdentifierUnavailable"); +} + +QString payeeIdentifierUnavailable::payeeIdentifierId() const +{ + return staticPayeeIdentifierIid(); +} + + payeeIdentifierUnavailable* payeeIdentifierUnavailable::createFromXml(const QDomElement& element) const { return new payeeIdentifierUnavailable(element); @@ -104,7 +162,8 @@ bool payeeIdentifierUnavailable::operator==(const payeeIdentifierUnavailable& other) const { - return (m_data == other.m_data); + Q_D(const payeeIdentifierUnavailable); + return (d->m_data == other.d_func()->m_data); } diff --git a/kmymoney/plugins/CMakeLists.txt b/kmymoney/plugins/CMakeLists.txt --- a/kmymoney/plugins/CMakeLists.txt +++ b/kmymoney/plugins/CMakeLists.txt @@ -61,8 +61,10 @@ KF5::XmlGui KF5::KCMUtils KF5::KIOWidgets + KF5::I18n Qt5::Gui Qt5::Widgets + kmm_icons kmm_mymoney ) diff --git a/kmymoney/plugins/csv/import/core/CMakeLists.txt b/kmymoney/plugins/csv/import/core/CMakeLists.txt --- a/kmymoney/plugins/csv/import/core/CMakeLists.txt +++ b/kmymoney/plugins/csv/import/core/CMakeLists.txt @@ -15,6 +15,11 @@ target_link_libraries(kmm_csvimportercore PUBLIC kmm_mymoney + KF5::ConfigCore + PRIVATE + Qt5::Widgets + KF5::I18n + KF5::WidgetsAddons ) set_target_properties(kmm_csvimportercore PROPERTIES diff --git a/kmymoney/plugins/ofx/import/CMakeLists.txt b/kmymoney/plugins/ofx/import/CMakeLists.txt --- a/kmymoney/plugins/ofx/import/CMakeLists.txt +++ b/kmymoney/plugins/ofx/import/CMakeLists.txt @@ -31,14 +31,17 @@ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") target_link_libraries(ofximporter - ofximporter_dialogs - kmm_mymoney - kmm_widgets - kmm_plugin - KF5::Wallet - Qt5::Xml - Alkimia::alkimia - ${LIBOFX_LIBRARIES} + PUBLIC + ofximporter_dialogs + kmm_mymoney + kmm_widgets + kmm_plugin + KF5::Wallet + Qt5::Xml + Alkimia::alkimia + ${LIBOFX_LIBRARIES} + PRIVATE + KF5::XmlGui ) target_include_directories(ofximporter diff --git a/kmymoney/plugins/ofx/import/dialogs/CMakeLists.txt b/kmymoney/plugins/ofx/import/dialogs/CMakeLists.txt --- a/kmymoney/plugins/ofx/import/dialogs/CMakeLists.txt +++ b/kmymoney/plugins/ofx/import/dialogs/CMakeLists.txt @@ -15,4 +15,4 @@ ki18n_wrap_ui(ofximporter_dialogs_la_SOURCES ${ofximporter_dialogs_UI}) add_library(ofximporter_dialogs STATIC ${ofximporter_dialogs_la_SOURCES}) -target_link_libraries(ofximporter_dialogs kmm_widgets KF5::WidgetsAddons KF5::I18n KF5::CoreAddons KF5::KIOCore KF5::KIOWidgets KF5::Wallet Qt5::Widgets Qt5::Sql Qt5::Xml) +target_link_libraries(ofximporter_dialogs PUBLIC kmm_widgets KF5::WidgetsAddons KF5::I18n KF5::CoreAddons KF5::KIOCore KF5::KIOWidgets KF5::Wallet Qt5::Widgets Qt5::Sql Qt5::Xml PRIVATE KF5::XmlGui) diff --git a/kmymoney/plugins/onlinetasks/dummy/tasks/dummytask.h b/kmymoney/plugins/onlinetasks/dummy/tasks/dummytask.h --- a/kmymoney/plugins/onlinetasks/dummy/tasks/dummytask.h +++ b/kmymoney/plugins/onlinetasks/dummy/tasks/dummytask.h @@ -20,6 +20,7 @@ #define DUMMYTASK_H #include "onlinetasks/interfaces/tasks/onlinetask.h" +#include class dummyTask : public onlineTask { @@ -38,16 +39,16 @@ /** * @brief Checks if the task is ready for sending */ - virtual bool isValid() const { + bool isValid() const final override { return true; - }; + } /** * @brief Human readable type-name */ - virtual QString jobTypeName() const { + QString jobTypeName() const final override { return QLatin1String("Dummy task"); - }; + } void setTestNumber(const int& number) { m_testNumber = number; @@ -55,38 +56,38 @@ int testNumber() { return m_testNumber; } - virtual QString storagePluginIid() const { + QString storagePluginIid() const final override { return QString(); } - virtual bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const { + bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override { Q_UNUSED(databaseConnection); Q_UNUSED(onlineJobId); return false; } - virtual bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const { + bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override { Q_UNUSED(databaseConnection); Q_UNUSED(onlineJobId); return false; } - virtual bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const { + bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override { Q_UNUSED(databaseConnection); Q_UNUSED(onlineJobId); return false; } protected: - virtual dummyTask* clone() const { + dummyTask* clone() const final override { return (new dummyTask(*this)); } - virtual bool hasReferenceTo(const QString &id) const { + bool hasReferenceTo(const QString &id) const final override { Q_UNUSED(id); return false; } - virtual void writeXML(QDomDocument&, QDomElement&) const {} - virtual dummyTask* createFromXml(const QDomElement&) const { + void writeXML(QDomDocument&, QDomElement&) const final override {} + dummyTask* createFromXml(const QDomElement&) const final override { return (new dummyTask); } - virtual onlineTask* createFromSqlDatabase(QSqlDatabase connection, const QString& onlineJobId) const { + onlineTask* createFromSqlDatabase(QSqlDatabase connection, const QString& onlineJobId) const final override { Q_UNUSED(connection); Q_UNUSED(onlineJobId); return (new dummyTask); } - virtual QString responsibleAccount() const { + QString responsibleAccount() const final override { return QString(); - }; + } int m_testNumber; }; diff --git a/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt b/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt --- a/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt +++ b/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt @@ -20,10 +20,12 @@ target_link_libraries( onlinetask_interfaces PUBLIC - kmm_payeeidentifier - Qt5::Widgets - # Copy build dependencies from kmm_mymoney as this has actually a cyclic dependency - $ + Qt5::Sql + Qt5::Core + Qt5::Xml + Qt5::Widgets + kmm_payeeidentifier + Alkimia::alkimia ) install(FILES ${onlinetask_interfaces_HEADER} diff --git a/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.h b/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.h --- a/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.h +++ b/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.h @@ -23,15 +23,15 @@ #include -class sepaStoragePlugin : public KMyMoneyPlugin::storagePlugin +class sepaStoragePlugin : public KMyMoneyPlugin::SQLStorageExtension { Q_OBJECT - Q_INTERFACES(KMyMoneyPlugin::storagePlugin) + Q_INTERFACES(KMyMoneyPlugin::SQLStorageExtension) public: explicit sepaStoragePlugin(QObject* parent = 0, const QVariantList& options = QVariantList()); - virtual bool removePluginData(QSqlDatabase connection); - virtual bool setupDatabase(QSqlDatabase connection); + bool removePluginData(QSqlDatabase connection) final override; + bool setupDatabase(QSqlDatabase connection) final override; static const QString iid; }; diff --git a/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.cpp b/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.cpp --- a/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.cpp +++ b/kmymoney/plugins/onlinetasks/sepa/sepastorageplugin.cpp @@ -23,7 +23,7 @@ const QString sepaStoragePlugin::iid = QLatin1String("org.kmymoney.creditTransfer.sepa.sqlStoragePlugin"); sepaStoragePlugin::sepaStoragePlugin(QObject* parent, const QVariantList& options) - : storagePlugin(parent) + : SQLStorageExtension(parent) { Q_UNUSED(options); } diff --git a/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransfer.h b/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransfer.h --- a/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransfer.h +++ b/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransfer.h @@ -37,17 +37,17 @@ sepaOnlineTransfer(); sepaOnlineTransfer(const sepaOnlineTransfer &other); - virtual QString responsibleAccount() const = 0; + virtual QString responsibleAccount() const override = 0; virtual void setOriginAccount(const QString& accountId) = 0; - virtual MyMoneyMoney value() const = 0; + virtual MyMoneyMoney value() const override = 0; virtual void setValue(MyMoneyMoney value) = 0; virtual void setBeneficiary(const payeeIdentifiers::ibanBic& accountIdentifier) = 0; virtual payeeIdentifiers::ibanBic beneficiaryTyped() const = 0; virtual void setPurpose(const QString purpose) = 0; - virtual QString purpose() const = 0; + virtual QString purpose() const override = 0; virtual void setEndToEndReference(const QString& reference) = 0; virtual QString endToEndReference() const = 0; @@ -61,16 +61,16 @@ /** * National account can handle the currency of the related account only. */ - virtual MyMoneySecurity currency() const = 0; + virtual MyMoneySecurity currency() const override = 0; - virtual bool isValid() const = 0; + virtual bool isValid() const override = 0; - virtual QString jobTypeName() const = 0; + virtual QString jobTypeName() const override = 0; virtual unsigned short int textKey() const = 0; virtual unsigned short int subTextKey() const = 0; - virtual bool hasReferenceTo(const QString& id) const = 0; + virtual bool hasReferenceTo(const QString& id) const override = 0; class settings : public IonlineTaskSettings { @@ -120,10 +120,10 @@ virtual QSharedPointer getSettings() const = 0; protected: - virtual sepaOnlineTransfer* clone() const = 0; + virtual sepaOnlineTransfer* clone() const override = 0; - virtual sepaOnlineTransfer* createFromXml(const QDomElement &element) const = 0; - virtual void writeXML(QDomDocument& document, QDomElement& parent) const = 0; + virtual sepaOnlineTransfer* createFromXml(const QDomElement &element) const override = 0; + virtual void writeXML(QDomDocument& document, QDomElement& parent) const override = 0; }; diff --git a/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.h b/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.h --- a/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.h +++ b/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.h @@ -34,73 +34,73 @@ sepaOnlineTransferImpl(); sepaOnlineTransferImpl(const sepaOnlineTransferImpl &other); - QString responsibleAccount() const { + QString responsibleAccount() const final override { return _originAccount; } - void setOriginAccount(const QString& accountId); + void setOriginAccount(const QString& accountId) final override; - MyMoneyMoney value() const { + MyMoneyMoney value() const final override{ return _value; } - virtual void setValue(MyMoneyMoney value) { + void setValue(MyMoneyMoney value) final override { _value = value; } - virtual void setBeneficiary(const payeeIdentifiers::ibanBic& accountIdentifier) { + void setBeneficiary(const payeeIdentifiers::ibanBic& accountIdentifier) final override { _beneficiaryAccount = accountIdentifier; - }; - virtual payeeIdentifier beneficiary() const { + } + payeeIdentifier beneficiary() const final override { return payeeIdentifier(_beneficiaryAccount.clone()); } - virtual payeeIdentifiers::ibanBic beneficiaryTyped() const { + payeeIdentifiers::ibanBic beneficiaryTyped() const final override { return _beneficiaryAccount; } - virtual void setPurpose(const QString purpose) { + void setPurpose(const QString purpose) final override { _purpose = purpose; } - QString purpose() const { + QString purpose() const final override { return _purpose; } - virtual void setEndToEndReference(const QString& reference) { + void setEndToEndReference(const QString& reference) final override { _endToEndReference = reference; } - QString endToEndReference() const { + QString endToEndReference() const final override { return _endToEndReference; } - payeeIdentifier originAccountIdentifier() const; + payeeIdentifier originAccountIdentifier() const final override; - MyMoneySecurity currency() const; + MyMoneySecurity currency() const final override; - bool isValid() const; + bool isValid() const final override; - QString jobTypeName() const; - virtual QString storagePluginIid() const { + QString jobTypeName() const final override; + QString storagePluginIid() const final override { return sepaStoragePlugin::iid; } - virtual bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const; + bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override; + bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override; + bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const final override; - unsigned short int textKey() const { + unsigned short int textKey() const final override { return _textKey; } - unsigned short int subTextKey() const { + unsigned short int subTextKey() const final override { return _subTextKey; } - virtual bool hasReferenceTo(const QString& id) const; + bool hasReferenceTo(const QString& id) const final override; - QSharedPointer getSettings() const; + QSharedPointer getSettings() const final override; protected: - sepaOnlineTransfer* clone() const; + sepaOnlineTransfer* clone() const final override; - virtual sepaOnlineTransfer* createFromXml(const QDomElement &element) const; - virtual onlineTask* createFromSqlDatabase(QSqlDatabase connection, const QString& onlineJobId) const; - virtual void writeXML(QDomDocument& document, QDomElement& parent) const; + sepaOnlineTransfer* createFromXml(const QDomElement &element) const final override; + onlineTask* createFromSqlDatabase(QSqlDatabase connection, const QString& onlineJobId) const final override; + void writeXML(QDomDocument& document, QDomElement& parent) const final override; private: void bindValuesToQuery(QSqlQuery& query, const QString& id) const; diff --git a/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.cpp b/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.cpp --- a/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.cpp +++ b/kmymoney/plugins/onlinetasks/sepa/tasks/sepaonlinetransferimpl.cpp @@ -20,6 +20,7 @@ #include #include +#include #include "mymoneyutils.h" #include "mymoneyaccount.h" @@ -40,77 +41,77 @@ { public: // Limits getter - virtual int purposeMaxLines() const { + int purposeMaxLines() const final override { return 1; } - virtual int purposeLineLength() const { + int purposeLineLength() const final override { return 27; } - virtual int purposeMinLength() const { + int purposeMinLength() const final override { return 0; } - virtual int recipientNameLineLength() const { + int recipientNameLineLength() const final override { return 1; } - virtual int recipientNameMinLength() const { + int recipientNameMinLength() const final override { return 0; } - virtual int payeeNameLineLength() const { + int payeeNameLineLength() const final override { return 0; } - virtual int payeeNameMinLength() const { + int payeeNameMinLength() const final override { return 0; } - virtual QString allowedChars() const { + QString allowedChars() const final override { return QString(); } // Checker - virtual bool checkPurposeCharset(const QString&) const { + bool checkPurposeCharset(const QString&) const final override { return false; } - virtual bool checkPurposeLineLength(const QString&) const { + bool checkPurposeLineLength(const QString&) const final override { return false; } - virtual validators::lengthStatus checkPurposeLength(const QString&) const { + validators::lengthStatus checkPurposeLength(const QString&) const final override { return validators::tooLong; } - virtual bool checkPurposeMaxLines(const QString&) const { + bool checkPurposeMaxLines(const QString&) const final override { return false; } - virtual validators::lengthStatus checkNameLength(const QString&) const { + validators::lengthStatus checkNameLength(const QString&) const final override { return validators::tooLong; } - virtual bool checkNameCharset(const QString&) const { + bool checkNameCharset(const QString&) const final override{ return false; } - virtual validators::lengthStatus checkRecipientLength(const QString&) const { + validators::lengthStatus checkRecipientLength(const QString&) const final override { return validators::tooLong; } - virtual bool checkRecipientCharset(const QString&) const { + bool checkRecipientCharset(const QString&) const final override { return false; } - virtual int endToEndReferenceLength() const { + int endToEndReferenceLength() const final override { return 0; } - virtual validators::lengthStatus checkEndToEndReferenceLength(const QString&) const { + validators::lengthStatus checkEndToEndReferenceLength(const QString&) const final override { return validators::tooLong; } virtual bool isIbanValid(const QString&) const { return false; } - virtual bool checkRecipientBic(const QString&) const { + bool checkRecipientBic(const QString&) const final override { return false; } - virtual bool isBicMandatory(const QString&, const QString&) const { + bool isBicMandatory(const QString&, const QString&) const final override { return true; } }; @@ -154,21 +155,21 @@ { QString iban; try { - payeeIdentifier ident = originAccountIdentifier(); - iban = ident.data()->electronicIban(); + if (auto ident = dynamic_cast(originAccountIdentifier().data())) + iban = ident->electronicIban(); } catch (payeeIdentifier::exception&) { } - QSharedPointer settings = getSettings(); - if (settings->checkPurposeLength(_purpose) == validators::ok - && settings->checkPurposeMaxLines(_purpose) - && settings->checkPurposeLineLength(_purpose) - && settings->checkPurposeCharset(_purpose) - && settings->checkEndToEndReferenceLength(_endToEndReference) == validators::ok + QSharedPointer localSettings = getSettings(); + if (localSettings->checkPurposeLength(_purpose) == validators::ok + && localSettings->checkPurposeMaxLines(_purpose) + && localSettings->checkPurposeLineLength(_purpose) + && localSettings->checkPurposeCharset(_purpose) + && localSettings->checkEndToEndReferenceLength(_endToEndReference) == validators::ok //&& settings->checkRecipientCharset( _beneficiaryAccount.ownerName() ) //&& settings->checkRecipientLength( _beneficiaryAccount.ownerName()) == validators::ok && _beneficiaryAccount.isIbanValid() // do not check the BIC, maybe it is not needed - && (!settings->isBicMandatory(iban, _beneficiaryAccount.electronicIban()) || (settings->checkRecipientBic(_beneficiaryAccount.bic()) && _beneficiaryAccount.isValid() /** @todo double check of BIC here, fix that */)) + && (!localSettings->isBicMandatory(iban, _beneficiaryAccount.electronicIban()) || (localSettings->checkRecipientBic(_beneficiaryAccount.bic()) && _beneficiaryAccount.isValid() /** @todo double check of BIC here, fix that */)) && value().isPositive() ) return true; diff --git a/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.h b/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.h --- a/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.h +++ b/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.h @@ -46,28 +46,28 @@ explicit sepaCreditTransferEdit(QWidget *parent = 0, QVariantList args = QVariantList()); ~sepaCreditTransferEdit(); onlineJobTyped getOnlineJobTyped() const; - onlineJob getOnlineJob() const { + onlineJob getOnlineJob() const final override { return getOnlineJobTyped(); } - QStringList supportedOnlineTasks() const { + QStringList supportedOnlineTasks() const final override { return QStringList(sepaOnlineTransfer::name()); } QString label() const { return i18n("SEPA Credit Transfer"); - }; + } - bool isValid() const { + bool isValid() const final override { return getOnlineJobTyped().isValid(); - }; + } - bool isReadOnly() const { + bool isReadOnly() const final override { return m_readOnly; } - virtual void showAllErrorMessages(const bool); + void showAllErrorMessages(const bool) final override; - virtual void showEvent(QShowEvent*); + void showEvent(QShowEvent*) final override; Q_SIGNALS: void onlineJobChanged(); @@ -75,8 +75,8 @@ public Q_SLOTS: void setOnlineJob(const onlineJobTyped &job); - bool setOnlineJob(const onlineJob& job); - void setOriginAccount(const QString& accountId); + bool setOnlineJob(const onlineJob& job) final override; + void setOriginAccount(const QString& accountId) final override; void setReadOnly(const bool&); private Q_SLOTS: diff --git a/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp b/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp --- a/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp +++ b/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp @@ -49,7 +49,7 @@ : StyledItemDelegateForwarder(parent) {} protected: - virtual QAbstractItemDelegate* getItemDelegate(const QModelIndex &index) const { + QAbstractItemDelegate* getItemDelegate(const QModelIndex &index) const final override { static QPointer defaultDelegate; static QPointer ibanBicDelegate; @@ -104,7 +104,7 @@ ibanBicFilterProxyModel(QObject* parent = 0) : QSortFilterProxyModel(parent) {} - virtual QVariant data(const QModelIndex &index, int role) const { + QVariant data(const QModelIndex &index, int role) const final override { if (role == payeeIban) { if (!index.isValid()) return QVariant(); @@ -122,7 +122,7 @@ return QSortFilterProxyModel::data(index, role); } - virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { + bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const final override { if (!source_parent.isValid()) return true; @@ -410,8 +410,8 @@ QString payeeIban; try { - payeeIdentifier ident = getOnlineJobTyped().task()->originAccountIdentifier(); - payeeIban = ident.data()->electronicIban(); + if (auto ident = dynamic_cast(getOnlineJobTyped().task()->originAccountIdentifier().data())) + payeeIban = ident->electronicIban(); } catch (payeeIdentifier::exception&) { } @@ -429,11 +429,11 @@ if (bic.isEmpty() && !ui->beneficiaryIban->text().isEmpty()) { QSharedPointer settings = taskSettings(); - const payeeIdentifier payee = getOnlineJobTyped().task()->originAccountIdentifier(); QString iban; try { - iban = payee.data()->electronicIban(); - } catch (payeeIdentifier::badCast&) { + if (auto ident = dynamic_cast(getOnlineJobTyped().task()->originAccountIdentifier().data())) + iban = ident->electronicIban(); + } catch (...) { } if (settings->isBicMandatory(iban , ui->beneficiaryIban->text())) { diff --git a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.h b/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.h --- a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.h +++ b/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.h @@ -35,8 +35,8 @@ { public: ONLINETASK_META(unavailableTask, "org.kmymoney.onlineTask.unavailableTask"); - virtual bool isValid() const; - virtual QString jobTypeName() const; + bool isValid() const override; + QString jobTypeName() const override; /** * @name SqlMethods @@ -44,19 +44,19 @@ * For sql databases this plugin is not needed nor used. So these functions * do not have a real implementation. */ - virtual QString storagePluginIid() const; - virtual bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const; - virtual onlineTask* createFromSqlDatabase(QSqlDatabase connection, const QString& onlineJobId) const; + QString storagePluginIid() const override; + bool sqlSave(QSqlDatabase databaseConnection, const QString& onlineJobId) const override; + bool sqlModify(QSqlDatabase databaseConnection, const QString& onlineJobId) const override; + bool sqlRemove(QSqlDatabase databaseConnection, const QString& onlineJobId) const override; + onlineTask* createFromSqlDatabase(QSqlDatabase connection, const QString& onlineJobId) const override; /** @} */ protected: - virtual QString responsibleAccount() const; - virtual unavailableTask* createFromXml(const QDomElement& element) const; - virtual void writeXML(QDomDocument& document, QDomElement& parent) const; - virtual bool hasReferenceTo(const QString& id) const; - virtual unavailableTask* clone() const; + QString responsibleAccount() const override; + unavailableTask* createFromXml(const QDomElement& element) const override; + void writeXML(QDomDocument& document, QDomElement& parent) const override; + bool hasReferenceTo(const QString& id) const override; + unavailableTask* clone() const override; private: explicit unavailableTask(const QDomElement& element); diff --git a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.cpp b/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.cpp --- a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.cpp +++ b/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.cpp @@ -17,6 +17,9 @@ */ #include "unavailabletask.h" + +#include + #include unavailableTask::unavailableTask(const QDomElement& element) diff --git a/kmymoney/plugins/qif/config/CMakeLists.txt b/kmymoney/plugins/qif/config/CMakeLists.txt --- a/kmymoney/plugins/qif/config/CMakeLists.txt +++ b/kmymoney/plugins/qif/config/CMakeLists.txt @@ -34,12 +34,15 @@ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") target_link_libraries(kcm_qif - kmm_mymoney - KF5::I18n - KF5::ConfigWidgets - KF5::Completion - KF5::KIOWidgets - ) + PUBLIC + kmm_mymoney + KF5::ConfigWidgets + KF5::Completion + KF5::KIOWidgets + PRIVATE + KF5::I18n + kmm_icons + ) if(ENABLE_QIFIMPORTER) install(FILES kcm_qifimporter.desktop diff --git a/kmymoney/plugins/sql/CMakeLists.txt b/kmymoney/plugins/sql/CMakeLists.txt --- a/kmymoney/plugins/sql/CMakeLists.txt +++ b/kmymoney/plugins/sql/CMakeLists.txt @@ -30,6 +30,8 @@ kmm_plugin kmm_widgets kmm_utils_platformtools + PRIVATE + kmm_payeeidentifier_loader ) install(FILES sqlstorage.rc diff --git a/kmymoney/plugins/sql/mymoneystoragesql.cpp b/kmymoney/plugins/sql/mymoneystoragesql.cpp --- a/kmymoney/plugins/sql/mymoneystoragesql.cpp +++ b/kmymoney/plugins/sql/mymoneystoragesql.cpp @@ -32,6 +32,8 @@ // ---------------------------------------------------------------------------- // Project Includes +#include "payeeidentifier/payeeidentifierloader.h" + //************************ Constructor/Destructor ***************************** MyMoneyStorageSql::MyMoneyStorageSql(MyMoneyStorageMgr *storage, const QUrl &url) : QSqlDatabase(QUrlQuery(url).queryItemValue("driver")), diff --git a/kmymoney/plugins/sql/mymoneystoragesql_p.h b/kmymoney/plugins/sql/mymoneystoragesql_p.h --- a/kmymoney/plugins/sql/mymoneystoragesql_p.h +++ b/kmymoney/plugins/sql/mymoneystoragesql_p.h @@ -45,6 +45,7 @@ #include #include #include +#include // ---------------------------------------------------------------------------- // KDE Includes @@ -59,7 +60,6 @@ #include "mymoneystoragemgr.h" #include "kmymoneystorageplugin.h" #include "onlinejobadministration.h" -#include "payeeidentifier/payeeidentifierloader.h" #include "onlinetasks/interfaces/tasks/onlinetask.h" #include "mymoneycostcenter.h" #include "mymoneyexception.h" diff --git a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h --- a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h +++ b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h @@ -21,16 +21,16 @@ #include "mymoney/storage/kmymoneystorageplugin.h" -class ibanBicStoragePlugin : public KMyMoneyPlugin::storagePlugin +class ibanBicStoragePlugin : public KMyMoneyPlugin::SQLStorageExtension { Q_OBJECT - Q_INTERFACES(KMyMoneyPlugin::storagePlugin) + Q_INTERFACES(KMyMoneyPlugin::SQLStorageExtension) // Q_PLUGIN_METADATA(IID "org.kmymoney.payeeIdentifier.ibanbic.sqlStoragePlugin") public: explicit ibanBicStoragePlugin(QObject* parent = 0, const QVariantList& options = QVariantList()); - virtual bool removePluginData(QSqlDatabase connection); - virtual bool setupDatabase(QSqlDatabase connection); + bool removePluginData(QSqlDatabase connection) final override; + bool setupDatabase(QSqlDatabase connection) final override; static QString iid(); }; diff --git a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.cpp b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.cpp --- a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.cpp +++ b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.cpp @@ -31,7 +31,7 @@ } ibanBicStoragePlugin::ibanBicStoragePlugin(QObject* parent, const QVariantList& options) - : storagePlugin(parent, options) + : SQLStorageExtension(parent, options) { } diff --git a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h --- a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h +++ b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h @@ -21,15 +21,15 @@ #include "mymoney/storage/kmymoneystorageplugin.h" -class nationalAccountStoragePlugin : public KMyMoneyPlugin::storagePlugin +class nationalAccountStoragePlugin : public KMyMoneyPlugin::SQLStorageExtension { Q_OBJECT - Q_INTERFACES(KMyMoneyPlugin::storagePlugin) + Q_INTERFACES(KMyMoneyPlugin::SQLStorageExtension) public: explicit nationalAccountStoragePlugin(QObject* parent = 0, const QVariantList& options = QVariantList()); - virtual bool removePluginData(QSqlDatabase connection); - virtual bool setupDatabase(QSqlDatabase connection); + bool removePluginData(QSqlDatabase connection) final override; + bool setupDatabase(QSqlDatabase connection) final override; static QString iid(); }; diff --git a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp --- a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp +++ b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp @@ -34,7 +34,7 @@ } nationalAccountStoragePlugin::nationalAccountStoragePlugin(QObject* parent, const QVariantList& options) - : storagePlugin(parent, options) + : SQLStorageExtension(parent, options) { } diff --git a/kmymoney/plugins/sql/tests/CMakeLists.txt b/kmymoney/plugins/sql/tests/CMakeLists.txt --- a/kmymoney/plugins/sql/tests/CMakeLists.txt +++ b/kmymoney/plugins/sql/tests/CMakeLists.txt @@ -23,6 +23,7 @@ kmm_testutils kmm_plugin kmm_widgets + kmm_payeeidentifier_loader kmm_utils_platformtools onlinetask_unavailabletask ) diff --git a/kmymoney/reports/CMakeLists.txt b/kmymoney/reports/CMakeLists.txt --- a/kmymoney/reports/CMakeLists.txt +++ b/kmymoney/reports/CMakeLists.txt @@ -23,7 +23,7 @@ Qt5::PrintSupport kmymoney_common kmm_settings - PRIVATE + PRIVATE KF5::I18n ) diff --git a/kmymoney/reports/tests/CMakeLists.txt b/kmymoney/reports/tests/CMakeLists.txt --- a/kmymoney/reports/tests/CMakeLists.txt +++ b/kmymoney/reports/tests/CMakeLists.txt @@ -6,6 +6,7 @@ target_link_libraries(reports_testcommon PUBLIC Qt5::Core + KF5::I18n reports ) @@ -22,6 +23,7 @@ LINK_LIBRARIES Qt5::Core Qt5::Test + KF5::I18n kmm_mymoney reports_testcommon ) @@ -32,4 +34,5 @@ Qt5::Core Qt5::Gui Qt5::Test + KF5::I18n ) diff --git a/kmymoney/settings/CMakeLists.txt b/kmymoney/settings/CMakeLists.txt --- a/kmymoney/settings/CMakeLists.txt +++ b/kmymoney/settings/CMakeLists.txt @@ -11,6 +11,9 @@ generate_export_header(kmm_settings BASE_NAME kmm_settings) target_link_libraries(kmm_settings + PUBLIC + KF5::ConfigCore + KF5::ConfigGui PRIVATE KF5::ConfigWidgets) diff --git a/kmymoney/views/CMakeLists.txt b/kmymoney/views/CMakeLists.txt --- a/kmymoney/views/CMakeLists.txt +++ b/kmymoney/views/CMakeLists.txt @@ -75,8 +75,10 @@ target_link_libraries( views PUBLIC payeeidentifier_iban_bic payeeidentifier_nationalAccount - kmm_mymoney # needed to load payeeIdentifier + kmm_mymoney kmm_widgets + PRIVATE + kmm_payeeidentifier_loader ) # we rely on some of the dialogs to be generated diff --git a/kmymoney/views/payeeidentifierselectiondelegate.h b/kmymoney/views/payeeidentifierselectiondelegate.h --- a/kmymoney/views/payeeidentifierselectiondelegate.h +++ b/kmymoney/views/payeeidentifierselectiondelegate.h @@ -28,10 +28,10 @@ public: explicit payeeIdentifierSelectionDelegate(QObject* parent = 0); - virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; - virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const final override; + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const final override; + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const final override; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const final override; }; class payeeIdentifierTypeSelectionWidget : public QComboBox diff --git a/kmymoney/widgets/CMakeLists.txt b/kmymoney/widgets/CMakeLists.txt --- a/kmymoney/widgets/CMakeLists.txt +++ b/kmymoney/widgets/CMakeLists.txt @@ -83,6 +83,9 @@ Alkimia::alkimia kmm_mymoney kmm_models + PRIVATE + KF5::ConfigWidgets + kmm_icons ) set_target_properties(kmm_widgets PROPERTIES