diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,8 @@ add_feature_info("Forecast view" ENABLE_FORECASTVIEW "It adds possibility to calculate forecasts.") option(ENABLE_REPORTSVIEW "Enable reports view" ON) add_feature_info("Reports view" ENABLE_REPORTSVIEW "It adds possibility to display chart and table reports.") +option(ENABLE_ONLINEJOBOUTBOXVIEW "Enable online job outbox view" ON) +add_feature_info("Online job outbox view" ENABLE_ONLINEJOBOUTBOXVIEW "It adds outbox for sending online jobs.") cmake_dependent_option(ENABLE_SQLSTORAGE "Enable SQL storage support." ON "Qt5Sql_FOUND" OFF) diff --git a/kmymoney/dialogs/CMakeLists.txt b/kmymoney/dialogs/CMakeLists.txt --- a/kmymoney/dialogs/CMakeLists.txt +++ b/kmymoney/dialogs/CMakeLists.txt @@ -43,7 +43,6 @@ transactioneditor.cpp stdtransactioneditor.cpp transactionmatcher.cpp - konlinetransferform.cpp ) set(dialogs_HEADERS @@ -71,7 +70,6 @@ ksortoptiondlg.ui ksplitcorrectiondlg.ui ksplittransactiondlg.ui ktemplateexportdlg.ui kupdatestockpricedlg.ui - konlinetransferform.ui ) ki18n_wrap_ui(libdialogs_a_SOURCES ${dialogs_UI} ) diff --git a/kmymoney/kmymoney.cpp b/kmymoney/kmymoney.cpp --- a/kmymoney/kmymoney.cpp +++ b/kmymoney/kmymoney.cpp @@ -117,8 +117,6 @@ #include "widgets/kmymoneymvccombo.h" #include "views/kmymoneyview.h" -#include "views/konlinejoboutbox.h" -#include "models/onlinejobmessagesmodel.h" #include "models/models.h" #include "models/accountsmodel.h" #include "models/equitiesmodel.h" @@ -168,7 +166,6 @@ #include #include "transactioneditor.h" -#include "konlinetransferform.h" #include #include @@ -179,6 +176,7 @@ #include "storageenums.h" #include "mymoneyenums.h" #include "dialogenums.h" +#include "viewenums.h" #include "menuenums.h" #include "misc/platformtools.h" @@ -3075,6 +3073,9 @@ if(dialogName.compare(QLatin1String("Plugins")) == 0) { KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Reorganize, d->m_plugins, this, guiFactory()); onlineJobAdministration::instance()->updateActions(); + onlineJobAdministration::instance()->setOnlinePlugins(d->m_plugins.extended); + d->m_myMoneyView->setOnlinePlugins(d->m_plugins.online); + d->m_myMoneyView->setStoragePlugins(d->m_plugins.storage); return; } MyMoneyTransactionFilter::setFiscalYearStart(KMyMoneySettings::firstFiscalMonth(), KMyMoneySettings::firstFiscalDay()); diff --git a/kmymoney/models/CMakeLists.txt b/kmymoney/models/CMakeLists.txt --- a/kmymoney/models/CMakeLists.txt +++ b/kmymoney/models/CMakeLists.txt @@ -3,13 +3,11 @@ payeesmodel.cpp accountsmodel.cpp accountsproxymodel.cpp - onlinejobmodel.cpp onlinebankingaccountsfilterproxymodel.cpp ../mymoney/onlinejobmessage.cpp ../plugins/onlinetasks/interfaces/tasks/credittransfer.cpp models.cpp payeeidentifiercontainermodel.cpp - onlinejobmessagesmodel.cpp equitiesmodel.cpp securitiesmodel.cpp ) diff --git a/kmymoney/models/models.h b/kmymoney/models/models.h --- a/kmymoney/models/models.h +++ b/kmymoney/models/models.h @@ -37,7 +37,6 @@ */ class AccountsModel; class InstitutionsModel; -class onlineJobModel; class LedgerModel; class CostCenterModel; class PayeesModel; @@ -76,7 +75,6 @@ AccountsModel* accountsModel(); InstitutionsModel* institutionsModel(); - onlineJobModel* onlineJobsModel(); LedgerModel* ledgerModel(); CostCenterModel* costCenterModel(); PayeesModel* payeesModel(); diff --git a/kmymoney/models/models.cpp b/kmymoney/models/models.cpp --- a/kmymoney/models/models.cpp +++ b/kmymoney/models/models.cpp @@ -31,7 +31,6 @@ // Project Includes #include "accountsmodel.h" -#include "onlinejobmodel.h" #include "ledgermodel.h" #include "costcentermodel.h" #include "payeesmodel.h" @@ -48,7 +47,6 @@ Private() : m_accountsModel(0) , m_institutionsModel(0) - , m_onlineJobModel(0) , m_ledgerModel(0) , m_costCenterModel(0) , m_payeesModel(0) @@ -58,7 +56,6 @@ AccountsModel *m_accountsModel; InstitutionsModel *m_institutionsModel; - onlineJobModel *m_onlineJobModel; LedgerModel *m_ledgerModel; CostCenterModel *m_costCenterModel; PayeesModel *m_payeesModel; @@ -117,18 +114,6 @@ return d->m_institutionsModel; } -onlineJobModel* Models::onlineJobsModel() -{ - if (!d->m_onlineJobModel) { - d->m_onlineJobModel = new onlineJobModel(this); -#ifdef KMM_MODELTEST - /// @todo using the ModelTest feature on the onlineJobModel crashes. Need to fix. - // new ModelTest(d->m_onlineJobModel, Models::instance()); -#endif - } - return d->m_onlineJobModel; -} - #ifdef ENABLE_UNFINISHEDFEATURES /** * This is the function to get a reference to the core @ref LedgerModel. @@ -230,7 +215,6 @@ { accountsModel()->AccountsModel::load(); institutionsModel()->InstitutionsModel::load(); - onlineJobsModel()->load(); costCenterModel()->load(); #ifdef ENABLE_UNFINISHEDFEATURES ledgerModel()->load(); @@ -248,7 +232,6 @@ // to avoid any uncaught KMyMoneyExceptions while using the account objects from this model after the file has been closed accountsModel()->removeRows(0, accountsModel()->rowCount()); institutionsModel()->removeRows(0, institutionsModel()->rowCount()); - onlineJobsModel()->unload(); #ifdef ENABLE_UNFINISHEDFEATURES ledgerModel()->unload(); #endif diff --git a/kmymoney/plugins/views/CMakeLists.txt b/kmymoney/plugins/views/CMakeLists.txt --- a/kmymoney/plugins/views/CMakeLists.txt +++ b/kmymoney/plugins/views/CMakeLists.txt @@ -5,3 +5,7 @@ if(ENABLE_REPORTSVIEW) add_subdirectory(reports) endif() + +if(ENABLE_ONLINEJOBOUTBOXVIEW) + add_subdirectory(onlinejoboutbox) +endif() diff --git a/kmymoney/plugins/views/onlinejoboutbox/CMakeLists.txt b/kmymoney/plugins/views/onlinejoboutbox/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/kmymoney/plugins/views/onlinejoboutbox/CMakeLists.txt @@ -0,0 +1,35 @@ +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/onlinejoboutboxview.json.in ${CMAKE_CURRENT_BINARY_DIR}/onlinejoboutboxview.json @ONLY) + +set(onlinejoboutboxview_SOURCES + onlinejoboutboxview.cpp + konlinejoboutboxview.cpp + konlinetransferform.cpp + onlinejobmodel.cpp + onlinejobmessagesmodel.cpp + ${CMAKE_SOURCE_DIR}/kmymoney/widgets/kmymoneyaccountcombo.cpp + ) + +ki18n_wrap_ui(onlinejoboutboxview_SOURCES + konlinejoboutboxview.ui + konlinetransferform.ui + ) + +kcoreaddons_add_plugin(onlinejoboutboxview + SOURCES ${onlinejoboutboxview_SOURCES} + JSON "${CMAKE_CURRENT_BINARY_DIR}/onlinejoboutboxview.json" + INSTALL_NAMESPACE "kmymoney") + +#kcoreaddons_add_plugin sets LIBRARY_OUTPUT_DIRECTORY to ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${INSTALL_NAMESPACE} +set_target_properties(onlinejoboutboxview + PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + +target_link_libraries(onlinejoboutboxview + PUBLIC + kmm_plugin + models + onlinetask_interfaces + KF5::TextWidgets + viewbase + kmm_menus +) diff --git a/kmymoney/views/konlinejoboutbox.h b/kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.h rename from kmymoney/views/konlinejoboutbox.h rename to kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.h --- a/kmymoney/views/konlinejoboutbox.h +++ b/kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef KONLINEJOBOUTBOX_H -#define KONLINEJOBOUTBOX_H +#ifndef KONLINEJOBOUTBOXVIEW_H +#define KONLINEJOBOUTBOXVIEW_H #include "kmymoneyviewbase.h" @@ -27,25 +27,24 @@ namespace KMyMoneyPlugin { class OnlinePlugin; } -class KOnlineJobOutboxPrivate; -class KOnlineJobOutbox : public KMyMoneyViewBase +class KOnlineJobOutboxViewPrivate; +class KOnlineJobOutboxView : public KMyMoneyViewBase { Q_OBJECT public: - explicit KOnlineJobOutbox(QWidget *parent = 0); - ~KOnlineJobOutbox() override; + explicit KOnlineJobOutboxView(QWidget *parent = 0); + ~KOnlineJobOutboxView() override; void executeCustomAction(eView::Action action) override; void updateActions(const MyMoneyObject& obj); QStringList selectedOnlineJobs() const; - void setOnlinePlugins(QMap& plugins); - public Q_SLOTS: void slotSelectByObject(const MyMoneyObject& obj, eView::Intent intent) override; + void slotSelectByVariant(const QVariantList& variant, eView::Intent intent) override; Q_SIGNALS: void sendJobs(QList); @@ -57,7 +56,7 @@ void contextMenuEvent(QContextMenuEvent*) override; private: - Q_DECLARE_PRIVATE(KOnlineJobOutbox) + Q_DECLARE_PRIVATE(KOnlineJobOutboxView) private Q_SLOTS: void updateNewCreditTransferButton(); @@ -86,4 +85,4 @@ void slotNewCreditTransfer(); }; -#endif // KONLINEJOBOUTBOX_H +#endif // KONLINEJOBOUTBOXVIEW_H diff --git a/kmymoney/views/konlinejoboutbox.cpp b/kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.cpp rename from kmymoney/views/konlinejoboutbox.cpp rename to kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.cpp --- a/kmymoney/views/konlinejoboutbox.cpp +++ b/kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.cpp @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -#include "konlinejoboutbox.h" +#include "konlinejoboutboxview.h" #include -#include "ui_konlinejoboutbox.h" +#include "ui_konlinejoboutboxview.h" #include "kmymoneyviewbase_p.h" #include "konlinetransferform.h" #include "kmymoneyplugin.h" @@ -51,54 +51,68 @@ #include -class KOnlineJobOutboxPrivate : public KMyMoneyViewBasePrivate +class KOnlineJobOutboxViewPrivate : public KMyMoneyViewBasePrivate { - Q_DECLARE_PUBLIC(KOnlineJobOutbox) + Q_DECLARE_PUBLIC(KOnlineJobOutboxView) public: - explicit KOnlineJobOutboxPrivate(KOnlineJobOutbox *qq) : + explicit KOnlineJobOutboxViewPrivate(KOnlineJobOutboxView *qq) : KMyMoneyViewBasePrivate(), q_ptr(qq), - ui(new Ui::KOnlineJobOutbox), + ui(new Ui::KOnlineJobOutboxView), m_needLoad(true), - m_onlinePlugins(nullptr) + m_onlinePlugins(nullptr), + m_onlineJobModel(nullptr) { } - ~KOnlineJobOutboxPrivate() + ~KOnlineJobOutboxViewPrivate() { if (!m_needLoad) { // Save column state - KConfigGroup configGroup = KSharedConfig::openConfig()->group("KOnlineJobOutbox"); + KConfigGroup configGroup = KSharedConfig::openConfig()->group("KOnlineJobOutboxView"); configGroup.writeEntry("HeaderState", ui->m_onlineJobView->header()->saveState()); } } void init() { - Q_Q(KOnlineJobOutbox); + Q_Q(KOnlineJobOutboxView); m_needLoad = false; ui->setupUi(q); // Restore column state - KConfigGroup configGroup = KSharedConfig::openConfig()->group("KOnlineJobOutbox"); + KConfigGroup configGroup = KSharedConfig::openConfig()->group("KOnlineJobOutboxView"); QByteArray columns; columns = configGroup.readEntry("HeaderState", columns); ui->m_onlineJobView->header()->restoreState(columns); - ui->m_onlineJobView->setModel(Models::instance()->onlineJobsModel()); - q->connect(ui->m_buttonSend, &QAbstractButton::clicked, q, &KOnlineJobOutbox::slotSendJobs); - q->connect(ui->m_buttonRemove, &QAbstractButton::clicked, q, &KOnlineJobOutbox::slotRemoveJob); - q->connect(ui->m_buttonEdit, &QAbstractButton::clicked, q, static_cast(&KOnlineJobOutbox::slotEditJob)); - q->connect(ui->m_onlineJobView, &QAbstractItemView::doubleClicked, q, static_cast(&KOnlineJobOutbox::slotEditJob)); - q->connect(ui->m_onlineJobView->selectionModel(), &QItemSelectionModel::selectionChanged, q, &KOnlineJobOutbox::updateButtonState); + ui->m_onlineJobView->setModel(this->onlineJobsModel()); + q->connect(ui->m_buttonSend, &QAbstractButton::clicked, q, &KOnlineJobOutboxView::slotSendJobs); + q->connect(ui->m_buttonRemove, &QAbstractButton::clicked, q, &KOnlineJobOutboxView::slotRemoveJob); + q->connect(ui->m_buttonEdit, &QAbstractButton::clicked, q, static_cast(&KOnlineJobOutboxView::slotEditJob)); + q->connect(ui->m_onlineJobView, &QAbstractItemView::doubleClicked, q, static_cast(&KOnlineJobOutboxView::slotEditJob)); + q->connect(ui->m_onlineJobView->selectionModel(), &QItemSelectionModel::selectionChanged, q, &KOnlineJobOutboxView::updateButtonState); // Set new credit transfer button - q->connect(pActions[eMenu::Action::AccountCreditTransfer], &QAction::changed, q, &KOnlineJobOutbox::updateNewCreditTransferButton); - q->connect(ui->m_buttonNewCreditTransfer, &QAbstractButton::clicked, q, &KOnlineJobOutbox::slotNewCreditTransfer); + q->connect(pActions[eMenu::Action::AccountCreditTransfer], &QAction::changed, q, &KOnlineJobOutboxView::updateNewCreditTransferButton); + q->connect(ui->m_buttonNewCreditTransfer, &QAbstractButton::clicked, q, &KOnlineJobOutboxView::slotNewCreditTransfer); q->updateNewCreditTransferButton(); } + onlineJobModel* onlineJobsModel() + { + Q_Q(KOnlineJobOutboxView); + if (!m_onlineJobModel) { + m_onlineJobModel = new onlineJobModel(q); + #ifdef KMM_MODELTEST + /// @todo using the ModelTest feature on the onlineJobModel crashes. Need to fix. + // new ModelTest(m_onlineJobModel, Models::instance()); + #endif + } + return m_onlineJobModel; + } + void editJob(const QString jobId) { @@ -120,41 +134,42 @@ void editJob(const onlineJobTyped job) { - Q_Q(KOnlineJobOutbox); + Q_Q(KOnlineJobOutboxView); auto transferForm = new kOnlineTransferForm(q); transferForm->setOnlineJob(job); q->connect(transferForm, &QDialog::rejected, transferForm, &QObject::deleteLater); - q->connect(transferForm, &kOnlineTransferForm::acceptedForSave, q, &KOnlineJobOutbox::slotOnlineJobSave); - q->connect(transferForm, &kOnlineTransferForm::acceptedForSend, q, static_cast(&KOnlineJobOutbox::slotOnlineJobSend)); + q->connect(transferForm, &kOnlineTransferForm::acceptedForSave, q, &KOnlineJobOutboxView::slotOnlineJobSave); + q->connect(transferForm, &kOnlineTransferForm::acceptedForSend, q, static_cast(&KOnlineJobOutboxView::slotOnlineJobSend)); q->connect(transferForm, &QDialog::accepted, transferForm, &QObject::deleteLater); transferForm->show(); } - KOnlineJobOutbox *q_ptr; - std::unique_ptr ui; + KOnlineJobOutboxView *q_ptr; + std::unique_ptr ui; /** * This member holds the load state of page */ bool m_needLoad; QMap* m_onlinePlugins; + onlineJobModel *m_onlineJobModel; MyMoneyAccount m_currentAccount; }; -KOnlineJobOutbox::KOnlineJobOutbox(QWidget *parent) : - KMyMoneyViewBase(*new KOnlineJobOutboxPrivate(this), parent) +KOnlineJobOutboxView::KOnlineJobOutboxView(QWidget *parent) : + KMyMoneyViewBase(*new KOnlineJobOutboxViewPrivate(this), parent) { - connect(pActions[eMenu::Action::LogOnlineJob], &QAction::triggered, this, static_cast(&KOnlineJobOutbox::slotOnlineJobLog)); - connect(pActions[eMenu::Action::AccountCreditTransfer], &QAction::triggered, this, &KOnlineJobOutbox::slotNewCreditTransfer); + connect(pActions[eMenu::Action::LogOnlineJob], &QAction::triggered, this, static_cast(&KOnlineJobOutboxView::slotOnlineJobLog)); + connect(pActions[eMenu::Action::AccountCreditTransfer], &QAction::triggered, this, &KOnlineJobOutboxView::slotNewCreditTransfer); } -KOnlineJobOutbox::~KOnlineJobOutbox() +KOnlineJobOutboxView::~KOnlineJobOutboxView() { } -void KOnlineJobOutbox::updateButtonState() const +void KOnlineJobOutboxView::updateButtonState() const { - Q_D(const KOnlineJobOutbox); + Q_D(const KOnlineJobOutboxView); const QModelIndexList indexes = d->ui->m_onlineJobView->selectionModel()->selectedRows(); const int selectedItems = indexes.count(); @@ -201,17 +216,17 @@ d->ui->m_buttonRemove->setEnabled(onlinejob_delete->isEnabled()); } -void KOnlineJobOutbox::updateNewCreditTransferButton() +void KOnlineJobOutboxView::updateNewCreditTransferButton() { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); auto action = pActions[eMenu::Action::AccountCreditTransfer]; Q_CHECK_PTR(action); d->ui->m_buttonNewCreditTransfer->setEnabled(action->isEnabled()); } -void KOnlineJobOutbox::slotRemoveJob() +void KOnlineJobOutboxView::slotRemoveJob() { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); QAbstractItemModel* model = d->ui->m_onlineJobView->model(); QModelIndexList indexes = d->ui->m_onlineJobView->selectionModel()->selectedRows(); @@ -221,9 +236,9 @@ } } -QStringList KOnlineJobOutbox::selectedOnlineJobs() const +QStringList KOnlineJobOutboxView::selectedOnlineJobs() const { - Q_D(const KOnlineJobOutbox); + Q_D(const KOnlineJobOutboxView); QModelIndexList indexes = d->ui->m_onlineJobView->selectionModel()->selectedRows(); if (indexes.isEmpty()) @@ -239,13 +254,7 @@ return list; } -void KOnlineJobOutbox::setOnlinePlugins(QMap& plugins) -{ - Q_D(KOnlineJobOutbox); - d->m_onlinePlugins = &plugins; -} - -void KOnlineJobOutbox::slotSelectByObject(const MyMoneyObject& obj, eView::Intent intent) +void KOnlineJobOutboxView::slotSelectByObject(const MyMoneyObject& obj, eView::Intent intent) { switch(intent) { case eView::Intent::UpdateActions: @@ -257,16 +266,29 @@ } } -void KOnlineJobOutbox::slotSendJobs() +void KOnlineJobOutboxView::slotSelectByVariant(const QVariantList& variant, eView::Intent intent) { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); + switch(intent) { + case eView::Intent::SetOnlinePlugins: + if (variant.count() == 1) + d->m_onlinePlugins = static_cast*>(variant.first().value()); + break; + default: + break; + } +} + +void KOnlineJobOutboxView::slotSendJobs() +{ + Q_D(KOnlineJobOutboxView); if (d->ui->m_onlineJobView->selectionModel()->hasSelection()) slotSendSelectedJobs(); else slotSendAllSendableJobs(); } -void KOnlineJobOutbox::slotSendAllSendableJobs() +void KOnlineJobOutboxView::slotSendAllSendableJobs() { QList validJobs; foreach (const onlineJob& job, MyMoneyFile::instance()->onlineJobList()) { @@ -279,9 +301,9 @@ // emit sendJobs(validJobs); } -void KOnlineJobOutbox::slotSendSelectedJobs() +void KOnlineJobOutboxView::slotSendSelectedJobs() { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); QModelIndexList indexes = d->ui->m_onlineJobView->selectionModel()->selectedRows(); if (indexes.isEmpty()) return; @@ -310,9 +332,9 @@ // emit sendJobs(validJobs); } -void KOnlineJobOutbox::slotEditJob() +void KOnlineJobOutboxView::slotEditJob() { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); QModelIndexList indexes = d->ui->m_onlineJobView->selectionModel()->selectedIndexes(); if (!indexes.isEmpty()) { QString jobId = d->ui->m_onlineJobView->model()->data(indexes.first(), onlineJobModel::OnlineJobId).toString(); @@ -322,17 +344,17 @@ } } -void KOnlineJobOutbox::slotEditJob(const QModelIndex &index) +void KOnlineJobOutboxView::slotEditJob(const QModelIndex &index) { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); auto jobId = d->ui->m_onlineJobView->model()->data(index, onlineJobModel::OnlineJobId).toString(); d->editJob(jobId); // emit editJob(jobId); } -void KOnlineJobOutbox::contextMenuEvent(QContextMenuEvent*) +void KOnlineJobOutboxView::contextMenuEvent(QContextMenuEvent*) { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); QModelIndexList indexes = d->ui->m_onlineJobView->selectionModel()->selectedIndexes(); if (!indexes.isEmpty()) { // onlineJob job = d->ui->m_onlineJobView->model()->data(indexes.first(), onlineJobModel::OnlineJobRole).value(); @@ -343,44 +365,53 @@ /** * Do not know why this is needed, but all other views in KMyMoney have it. */ -void KOnlineJobOutbox::showEvent(QShowEvent* event) +void KOnlineJobOutboxView::showEvent(QShowEvent* event) { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); if (d->m_needLoad) d->init(); emit customActionRequested(View::OnlineJobOutbox, eView::Action::AboutToShow); // don't forget base class implementation QWidget::showEvent(event); } -void KOnlineJobOutbox::executeCustomAction(eView::Action action) +void KOnlineJobOutboxView::executeCustomAction(eView::Action action) { + Q_D(KOnlineJobOutboxView); switch(action) { case eView::Action::SetDefaultFocus: { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); QTimer::singleShot(0, d->ui->m_onlineJobView, SLOT(setFocus())); } break; + case eView::Action::InitializeAfterFileOpen: + d->onlineJobsModel()->load(); + break; + + case eView::Action::CleanupBeforeFileClose: + d->onlineJobsModel()->unload(); + break; + default: break; } } -void KOnlineJobOutbox::updateActions(const MyMoneyObject& obj) +void KOnlineJobOutboxView::updateActions(const MyMoneyObject& obj) { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); if (typeid(obj) != typeid(MyMoneyAccount) && (obj.id().isEmpty() && d->m_currentAccount.id().isEmpty())) // do not disable actions that were already disabled))) return; const auto& acc = static_cast(obj); d->m_currentAccount = acc; } -void KOnlineJobOutbox::slotOnlineJobSave(onlineJob job) +void KOnlineJobOutboxView::slotOnlineJobSave(onlineJob job) { MyMoneyFileTransaction fileTransaction; if (job.id().isEmpty()) @@ -391,7 +422,7 @@ } /** @todo when onlineJob queue is used, continue here */ -void KOnlineJobOutbox::slotOnlineJobSend(onlineJob job) +void KOnlineJobOutboxView::slotOnlineJobSend(onlineJob job) { MyMoneyFileTransaction fileTransaction; if (job.id().isEmpty()) @@ -405,9 +436,9 @@ slotOnlineJobSend(jobList); } -void KOnlineJobOutbox::slotOnlineJobSend(QList jobs) +void KOnlineJobOutboxView::slotOnlineJobSend(QList jobs) { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); MyMoneyFile *const kmmFile = MyMoneyFile::instance(); QMultiMap jobsByPlugin; @@ -467,13 +498,13 @@ } } -void KOnlineJobOutbox::slotOnlineJobLog() +void KOnlineJobOutboxView::slotOnlineJobLog() { QStringList jobIds = this->selectedOnlineJobs(); slotOnlineJobLog(jobIds); } -void KOnlineJobOutbox::slotOnlineJobLog(const QStringList& onlineJobIds) +void KOnlineJobOutboxView::slotOnlineJobLog(const QStringList& onlineJobIds) { onlineJobMessagesView *const dialog = new onlineJobMessagesView(); onlineJobMessagesModel *const model = new onlineJobMessagesModel(dialog); @@ -484,16 +515,16 @@ // Note: Objects are not deleted here, Qt's parent-child system has to do that. } -void KOnlineJobOutbox::slotNewCreditTransfer() +void KOnlineJobOutboxView::slotNewCreditTransfer() { - Q_D(KOnlineJobOutbox); + Q_D(KOnlineJobOutboxView); auto *transferForm = new kOnlineTransferForm(this); if (!d->m_currentAccount.id().isEmpty()) { transferForm->setCurrentAccount(d->m_currentAccount.id()); } connect(transferForm, &QDialog::rejected, transferForm, &QObject::deleteLater); - connect(transferForm, &kOnlineTransferForm::acceptedForSave, this, &KOnlineJobOutbox::slotOnlineJobSave); - connect(transferForm, &kOnlineTransferForm::acceptedForSend, this, static_cast(&KOnlineJobOutbox::slotOnlineJobSend)); + connect(transferForm, &kOnlineTransferForm::acceptedForSave, this, &KOnlineJobOutboxView::slotOnlineJobSave); + connect(transferForm, &kOnlineTransferForm::acceptedForSend, this, static_cast(&KOnlineJobOutboxView::slotOnlineJobSend)); connect(transferForm, &QDialog::accepted, transferForm, &QObject::deleteLater); transferForm->show(); } diff --git a/kmymoney/views/konlinejoboutbox.ui b/kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.ui rename from kmymoney/views/konlinejoboutbox.ui rename to kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.ui --- a/kmymoney/views/konlinejoboutbox.ui +++ b/kmymoney/plugins/views/onlinejoboutbox/konlinejoboutboxview.ui @@ -1,7 +1,7 @@ - KOnlineJobOutbox - + KOnlineJobOutboxView + 0 diff --git a/kmymoney/dialogs/konlinetransferform.h b/kmymoney/plugins/views/onlinejoboutbox/konlinetransferform.h rename from kmymoney/dialogs/konlinetransferform.h rename to kmymoney/plugins/views/onlinejoboutbox/konlinetransferform.h diff --git a/kmymoney/dialogs/konlinetransferform.cpp b/kmymoney/plugins/views/onlinejoboutbox/konlinetransferform.cpp rename from kmymoney/dialogs/konlinetransferform.cpp rename to kmymoney/plugins/views/onlinejoboutbox/konlinetransferform.cpp diff --git a/kmymoney/dialogs/konlinetransferform.ui b/kmymoney/plugins/views/onlinejoboutbox/konlinetransferform.ui rename from kmymoney/dialogs/konlinetransferform.ui rename to kmymoney/plugins/views/onlinejoboutbox/konlinetransferform.ui diff --git a/kmymoney/models/onlinejobmessagesmodel.h b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmessagesmodel.h rename from kmymoney/models/onlinejobmessagesmodel.h rename to kmymoney/plugins/views/onlinejoboutbox/onlinejobmessagesmodel.h diff --git a/kmymoney/models/onlinejobmessagesmodel.cpp b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmessagesmodel.cpp rename from kmymoney/models/onlinejobmessagesmodel.cpp rename to kmymoney/plugins/views/onlinejoboutbox/onlinejobmessagesmodel.cpp diff --git a/kmymoney/models/onlinejobmodel.h b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.h rename from kmymoney/models/onlinejobmodel.h rename to kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.h --- a/kmymoney/models/onlinejobmodel.h +++ b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.h @@ -46,6 +46,10 @@ ColValue }; + /** Only @ref Models should be able to construct this class */ + explicit onlineJobModel(QObject *parent = nullptr); + friend class Models; + int rowCount(const QModelIndex & parent = QModelIndex()) const; int columnCount(const QModelIndex & parent = QModelIndex()) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; @@ -68,11 +72,6 @@ void load(); void unload(); -protected: - /** Only @ref Models should be able to construct this class */ - explicit onlineJobModel(QObject *parent = 0); - friend class Models; - private: QStringList m_jobIdList; diff --git a/kmymoney/models/onlinejobmodel.cpp b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.cpp rename from kmymoney/models/onlinejobmodel.cpp rename to kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.cpp diff --git a/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.h b/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.h new file mode 100644 --- /dev/null +++ b/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.h @@ -0,0 +1,47 @@ +/*************************************************************************** + onlinejoboutboxview.h + ------------------- + copyright : (C) 2018 by Łukasz Wojniłowicz + email : lukasz.wojnilowicz@gmail.com + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef ONLINEJOBOUTBOXVIEW_H +#define ONLINEJOBOUTBOXVIEW_H + +// ---------------------------------------------------------------------------- +// KDE Includes + +// ---------------------------------------------------------------------------- +// QT Includes + +// Project Includes + +#include "kmymoneyplugin.h" + +class KOnlineJobOutboxView; + +class OnlineJobOutboxView : public KMyMoneyPlugin::Plugin +{ + Q_OBJECT + +public: + explicit OnlineJobOutboxView(QObject *parent, const QVariantList &args); + ~OnlineJobOutboxView() final; + + void plug() final; + void unplug() final; + +private: + KOnlineJobOutboxView* m_view; +}; + +#endif diff --git a/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.cpp b/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.cpp new file mode 100644 --- /dev/null +++ b/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.cpp @@ -0,0 +1,63 @@ +/*************************************************************************** + onlinejoboutboxview.cpp + ------------------- + + copyright : (C) 2018 by Łukasz Wojniłowicz + email : lukasz.wojnilowicz@gmail.com + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "onlinejoboutboxview.h" + +// ---------------------------------------------------------------------------- +// QT Includes + +// ---------------------------------------------------------------------------- +// KDE Includes + +#include +#include + +// ---------------------------------------------------------------------------- +// Project Includes + +#include "viewinterface.h" +#include "konlinejoboutboxview.h" + +OnlineJobOutboxView::OnlineJobOutboxView(QObject *parent, const QVariantList &args) : + KMyMoneyPlugin::Plugin(parent, "onlinejoboutboxview"/*must be the same as X-KDE-PluginInfo-Name*/), + m_view(nullptr) +{ + Q_UNUSED(args) + setComponentName("onlinejoboutboxview", i18n("Reports view")); + // For information, announce that we have been loaded. + qDebug("Plugins: onlinejoboutboxview loaded"); +} + +OnlineJobOutboxView::~OnlineJobOutboxView() +{ + qDebug("Plugins: onlinejoboutboxview unloaded"); +} + +void OnlineJobOutboxView::plug() +{ + m_view = new KOnlineJobOutboxView; + viewInterface()->addView(m_view, i18n("Outbox"), View::OnlineJobOutbox); +} + +void OnlineJobOutboxView::unplug() +{ + viewInterface()->removeView(View::OnlineJobOutbox); +} + +K_PLUGIN_FACTORY_WITH_JSON(OnlineJobOutboxViewFactory, "onlinejoboutboxview.json", registerPlugin();) + +#include "onlinejoboutboxview.moc" diff --git a/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.json.in b/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.json.in new file mode 100644 --- /dev/null +++ b/kmymoney/plugins/views/onlinejoboutbox/onlinejoboutboxview.json.in @@ -0,0 +1,21 @@ +{ + "KPlugin": { + "Authors": [ + { + "Email": "christian-david@web.de", + "Name": "Christian Dávid" + } + ], + "Description": "Adds online job outbox view to KMyMoney", + "EnabledByDefault": true, + "Icon": "online-banking", + "Id": "onlinejoboutboxview", + "License": "GPL", + "Name": "Online job outbox view", + "ServiceTypes": [ + "KMyMoney/Plugin" + ], + "Version": "@PROJECT_VERSION@@PROJECT_VERSION_SUFFIX@", + "Website": "https://kmymoney.org/plugins.html" + } +} diff --git a/kmymoney/views/CMakeLists.txt b/kmymoney/views/CMakeLists.txt --- a/kmymoney/views/CMakeLists.txt +++ b/kmymoney/views/CMakeLists.txt @@ -1,7 +1,7 @@ set(viewbase_SOURCES kmymoneyviewbase.cpp ) - + add_library(viewbase STATIC ${viewbase_SOURCES}) target_link_libraries(viewbase PUBLIC KF5::TextWidgets) @@ -23,7 +23,6 @@ kscheduledview.cpp kscheduletreeitem.cpp ktagsview.cpp - konlinejoboutbox.cpp kpayeeidentifierview.cpp payeeidentifierselectiondelegate.cpp kmymoneywebpage.cpp @@ -53,12 +52,11 @@ kpayeesview.ui kscheduledview.ui ktagsview.ui - konlinejoboutbox.ui kpayeeidentifierview.ui ) if(ENABLE_UNFINISHEDFEATURES) - list(APPEND libviews_a_UI + list(APPEND libviews_a_UI simpleledgerview.ui ledgerview.ui ledgerviewpage.ui diff --git a/kmymoney/views/kaccountsview.h b/kmymoney/views/kaccountsview.h --- a/kmymoney/views/kaccountsview.h +++ b/kmymoney/views/kaccountsview.h @@ -54,12 +54,6 @@ void refresh(); void updateActions(const MyMoneyObject &obj); - /** - * Gets access to plugins found in KMyMoneyApp - * @param plugins - */ - void setOnlinePlugins(QMap& plugins); - public Q_SLOTS: void slotNetWorthChanged(const MyMoneyMoney &); void slotShowAccountMenu(const MyMoneyAccount& acc); diff --git a/kmymoney/views/kaccountsview.cpp b/kmymoney/views/kaccountsview.cpp --- a/kmymoney/views/kaccountsview.cpp +++ b/kmymoney/views/kaccountsview.cpp @@ -238,12 +238,6 @@ } -void KAccountsView::setOnlinePlugins(QMap& plugins) -{ - Q_D(KAccountsView); - d->m_onlinePlugins = &plugins; -} - /** * The view is notified that an unused income expense account has been hidden. */ @@ -290,6 +284,12 @@ if (variant.count() == 1 && d->m_proxyModel) slotNetWorthChanged(variant.first().value()); break; + + case eView::Intent::SetOnlinePlugins: + if (variant.count() == 1) + d->m_onlinePlugins = static_cast*>(variant.first().value()); + break; + default: break; } diff --git a/kmymoney/views/kmymoneyview.cpp b/kmymoney/views/kmymoneyview.cpp --- a/kmymoney/views/kmymoneyview.cpp +++ b/kmymoney/views/kmymoneyview.cpp @@ -80,7 +80,6 @@ #include "kgloballedgerview.h" #include "kinvestmentview.h" #include "kbudgetview.h" -#include "konlinejoboutbox.h" #include "kmymoney.h" #include "models.h" #include "accountsmodel.h" @@ -154,7 +153,6 @@ viewBases[View::Ledgers] = new KGlobalLedgerView; viewBases[View::Investments] = new KInvestmentView; viewBases[View::Budget] = new KBudgetView; - viewBases[View::OnlineJobOutbox] = new KOnlineJobOutbox; #ifdef ENABLE_UNFINISHEDFEATURES viewBases[View::NewLedgers] = new SimpleLedgerView; #endif @@ -178,7 +176,6 @@ {View::Ledgers, i18n("Ledgers"), Icon::ViewLedgers}, {View::Investments, i18n("Investments"), Icon::ViewInvestment}, {View::Budget, i18n("Budgets"), Icon::ViewBudgets}, - {View::OnlineJobOutbox, i18n("Outbox"), Icon::ViewOutbox}, #ifdef ENABLE_UNFINISHEDFEATURES {View::NewLedgers, i18n("New ledger"), Icon::DocumentProperties}, #endif @@ -268,6 +265,9 @@ void KMyMoneyView::slotFileOpened() { + if (viewBases.contains(View::OnlineJobOutbox)) + viewBases[View::OnlineJobOutbox]->executeCustomAction(eView::Action::InitializeAfterFileOpen); + #ifdef ENABLE_UNFINISHEDFEATURES static_cast(viewBases[View::NewLedgers])->openFavoriteLedgers(); #endif @@ -279,6 +279,10 @@ if (viewBases.contains(View::Reports)) viewBases[View::Reports]->executeCustomAction(eView::Action::CleanupBeforeFileClose); + + if (viewBases.contains(View::OnlineJobOutbox)) + viewBases[View::OnlineJobOutbox]->executeCustomAction(eView::Action::CleanupBeforeFileClose); + #ifdef ENABLE_UNFINISHEDFEATURES static_cast(viewBases[View::NewLedgers])->closeLedgers(); #endif @@ -432,13 +436,11 @@ void KMyMoneyView::setOnlinePlugins(QMap& plugins) { - static_cast(viewBases[View::Accounts])->setOnlinePlugins(plugins); - if (viewBases.contains(View::OnlineJobOutbox)) { - if (plugins.isEmpty()) - removeView(View::OnlineJobOutbox); - else - static_cast(viewBases[View::OnlineJobOutbox])->setOnlinePlugins(plugins); - } + if (viewBases.contains(View::Accounts)) + viewBases[View::Accounts]->slotSelectByVariant(QVariantList {QVariant::fromValue(static_cast(&plugins))}, eView::Intent::SetOnlinePlugins); + + if (viewBases.contains(View::OnlineJobOutbox)) + viewBases[View::OnlineJobOutbox]->slotSelectByVariant(QVariantList {QVariant::fromValue(static_cast(&plugins))}, eView::Intent::SetOnlinePlugins); } void KMyMoneyView::setStoragePlugins(QMap& plugins) @@ -457,18 +459,19 @@ for (auto i = (int)idView; i < (int)View::None; ++i) { if (viewFrames.contains((View)i)) { viewFrames[idView] = m_model->insertPage(viewFrames[(View)i],view, name); - viewBases[idView] = view; - connect(viewBases[idView], &KMyMoneyViewBase::selectByObject, this, &KMyMoneyView::slotSelectByObject); - connect(viewBases[idView], &KMyMoneyViewBase::selectByVariant, this, &KMyMoneyView::slotSelectByVariant); - connect(viewBases[idView], &KMyMoneyViewBase::customActionRequested, this, &KMyMoneyView::slotCustomActionRequested); isViewInserted = true; break; } } if (!isViewInserted) viewFrames[idView] = m_model->addPage(view, name); + viewBases[idView] = view; + connect(viewBases[idView], &KMyMoneyViewBase::selectByObject, this, &KMyMoneyView::slotSelectByObject); + connect(viewBases[idView], &KMyMoneyViewBase::selectByVariant, this, &KMyMoneyView::slotSelectByVariant); + connect(viewBases[idView], &KMyMoneyViewBase::customActionRequested, this, &KMyMoneyView::slotCustomActionRequested); + auto icon = Icon::ViewForecast; switch (idView) { case View::Reports: diff --git a/kmymoney/views/viewenums.h b/kmymoney/views/viewenums.h --- a/kmymoney/views/viewenums.h +++ b/kmymoney/views/viewenums.h @@ -50,7 +50,8 @@ ReportProgress, ReportProgressMessage, SelectRegisterTransactions, - AccountReconciled + AccountReconciled, + SetOnlinePlugins }; enum class Action { @@ -63,7 +64,8 @@ ClosePayeeIdentifierSource, EditInstitution, EditSchedule, - CleanupBeforeFileClose + CleanupBeforeFileClose, + InitializeAfterFileOpen }; }