Warning, file /office/alkimia/tools/onlinequoteseditor/mainwindow.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2018 Ralf Habacker ralf.habacker @freenet.de
0003 
0004     This file is part of libalkimia.
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "mainwindow.h"
0010 #include "ui_mainwindow.h"
0011 
0012 #include "alkonlinequotesprofile.h"
0013 #include "alkonlinequotesprofilemanager.h"
0014 #include "alkonlinequoteswidget.h"
0015 #include "alkwebpage.h"
0016 
0017 #include <QComboBox>
0018 #include <QDockWidget>
0019 #include <QLineEdit>
0020 #include <QUrl>
0021 
0022 class MainWindow::Private
0023 {
0024 public:
0025     Private()
0026         : urlLine(nullptr)
0027         , quotesWidget(nullptr)
0028     {
0029     }
0030 
0031     ~Private()
0032     {
0033         delete quotesWidget;
0034     }
0035     QLineEdit *urlLine;
0036     AlkOnlineQuotesWidget *quotesWidget;
0037     Ui::MainWindow ui;
0038 };
0039 
0040 void MainWindow::slotUrlChanged(const QUrl &url)
0041 {
0042 #if defined(BUILD_WITH_WEBKIT) || defined(BUILD_WITH_WEBENGINE)
0043     d->urlLine->setText(url.toString());
0044 #else
0045     Q_UNUSED(url)
0046 #endif
0047 }
0048 
0049 void MainWindow::slotEditingFinished()
0050 {
0051     AlkOnlineQuotesProfileManager::instance().webPage()->load(QUrl(d->urlLine->text()), d->quotesWidget->acceptLanguage());
0052 }
0053 
0054 void MainWindow::slotLanguageChanged(const QString &text)
0055 {
0056     d->quotesWidget->setAcceptLanguage(text);
0057     if (!d->urlLine->text().isEmpty())
0058         slotEditingFinished();
0059 }
0060 
0061 MainWindow::MainWindow(QWidget *parent)
0062     : QMainWindow(parent)
0063     , ApplicationSettings(this, false)
0064     , d(new Private)
0065 {
0066     AlkOnlineQuotesProfileManager &manager = AlkOnlineQuotesProfileManager::instance();
0067 
0068     manager.addProfile(new AlkOnlineQuotesProfile("no-config-file", AlkOnlineQuotesProfile::Type::None));
0069 #if QT_VERSION < QT_VERSION_CHECK(5,0,0)
0070     manager.addProfile(new AlkOnlineQuotesProfile("alkimia4", AlkOnlineQuotesProfile::Type::Alkimia4, "alkimia-quotes.knsrc"));
0071     manager.addProfile(new AlkOnlineQuotesProfile("skrooge4", AlkOnlineQuotesProfile::Type::Skrooge4, "skrooge-quotes.knsrc"));
0072     manager.addProfile(new AlkOnlineQuotesProfile("kmymoney4", AlkOnlineQuotesProfile::Type::KMyMoney4, "kmymoney-quotes.knsrc"));
0073 #else
0074     manager.addProfile(new AlkOnlineQuotesProfile("alkimia5", AlkOnlineQuotesProfile::Type::Alkimia5, "alkimia-quotes.knsrc"));
0075     manager.addProfile(new AlkOnlineQuotesProfile("skrooge5", AlkOnlineQuotesProfile::Type::Skrooge5, "skrooge-quotes.knsrc"));
0076     manager.addProfile(new AlkOnlineQuotesProfile("kmymoney5", AlkOnlineQuotesProfile::Type::KMyMoney5, "kmymoney-quotes.knsrc"));
0077 #endif
0078 #ifdef ENABLE_FINANCEQUOTE
0079     manager.addProfile(new AlkOnlineQuotesProfile("Finance::Quote", AlkOnlineQuotesProfile::Type::Script));
0080 #endif
0081     d->ui.setupUi(this);
0082     d->quotesWidget = new AlkOnlineQuotesWidget(true, true);
0083 
0084     QDockWidget *profilesWidget = new QDockWidget(i18n("Profiles"), this);
0085     profilesWidget->setObjectName("profilesDockWidget");
0086     profilesWidget->setWidget(d->quotesWidget->profilesWidget());
0087     addDockWidget(Qt::LeftDockWidgetArea, profilesWidget);
0088 
0089     QDockWidget *profileDetailsWidget = new QDockWidget(i18n("Profile details"), this);
0090     profileDetailsWidget->setObjectName("profileDetailsDockWidget");
0091     profileDetailsWidget->setWidget(d->quotesWidget->profileDetailsWidget());
0092     addDockWidget(Qt::RightDockWidgetArea, profileDetailsWidget);
0093 
0094     QDockWidget *onlineQuotesWidget = new QDockWidget(i18n("Online quotes"), this);
0095     onlineQuotesWidget->setObjectName("onlineQuotesDockWidget");
0096     onlineQuotesWidget->setWidget(d->quotesWidget->onlineQuotesWidget());
0097     addDockWidget(Qt::LeftDockWidgetArea, onlineQuotesWidget);
0098 
0099     QDockWidget *debugWidget = new QDockWidget(i18n("Debug"), this);
0100     debugWidget->setObjectName("debugDockWidget");
0101     debugWidget->setWidget(d->quotesWidget->debugWidget());
0102     addDockWidget(Qt::LeftDockWidgetArea, debugWidget);
0103 
0104     QDockWidget *quoteDetailsWidget = new QDockWidget(i18n("Quote details"), this);
0105     quoteDetailsWidget->setObjectName("quoteDetailsDockWidget");
0106     quoteDetailsWidget->setWidget(d->quotesWidget->quoteDetailsWidget());
0107     addDockWidget(Qt::RightDockWidgetArea, quoteDetailsWidget);
0108 
0109     connect(&AlkOnlineQuotesProfileManager::instance(), SIGNAL(updateAvailable(const QString &, const QString &)),
0110             this, SLOT(slotUpdateAvailable(const QString &, const QString &)));
0111 
0112     manager.setWebPageEnabled(true);
0113     QDockWidget *browserWidget = new QDockWidget(i18n("Browser"), this);
0114     browserWidget->setObjectName("browserDockWidget");
0115     AlkWebPage *webPage = manager.webPage();
0116 
0117     QHBoxLayout *hLayout = new QHBoxLayout;
0118 #if defined(BUILD_WITH_WEBKIT) || defined(BUILD_WITH_WEBENGINE)
0119     // setup url line
0120     d->urlLine = new QLineEdit;
0121     connect(d->urlLine, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished()));
0122     hLayout->addWidget(d->urlLine);
0123 
0124     // setup language box
0125     QComboBox *box = new QComboBox;
0126     QList<QLocale> allLocales = QLocale::matchingLocales(
0127             QLocale::AnyLanguage,
0128             QLocale::AnyScript,
0129             QLocale::AnyCountry);
0130 
0131     QStringList languages;
0132     foreach(const QLocale &locale, allLocales) {
0133         languages.append(locale.uiLanguages());
0134     }
0135     languages.sort();
0136     box->addItems(languages);
0137     d->quotesWidget->setAcceptLanguage(box->currentText());
0138     connect(box, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotLanguageChanged(QString)));
0139     hLayout->addWidget(box);
0140 
0141     webPage->setWebInspectorEnabled(true);
0142     connect(webPage, SIGNAL(urlChanged(QUrl)), this, SLOT(slotUrlChanged(QUrl)));
0143 #endif
0144     // setup browser window
0145     QVBoxLayout *layout = new QVBoxLayout;
0146     layout->addLayout(hLayout);
0147     layout->addWidget(webPage->widget());
0148     QWidget *group = new QWidget;
0149     group->setLayout(layout);
0150     browserWidget->setWidget(group);
0151     addDockWidget(Qt::RightDockWidgetArea, browserWidget);
0152 
0153     setCentralWidget(nullptr);
0154 
0155     readPositionSettings();
0156 }
0157 
0158 MainWindow::~MainWindow()
0159 {
0160     delete d;
0161 }
0162 
0163 void MainWindow::slotUpdateAvailable(const QString &profile, const QString &name)
0164 {
0165     QString s = statusBar()->currentMessage();
0166     if (!s.isEmpty())
0167         s += " - ";
0168     s += i18n("Update for '%1' available in profile '%2'", name, profile);
0169     statusBar()->showMessage(s);
0170 }
0171 
0172 void MainWindow::closeEvent(QCloseEvent *event)
0173 {
0174     writePositionSettings();
0175     QMainWindow::closeEvent(event);
0176 }