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 }