File indexing completed on 2025-04-20 04:37:41
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 d->quotesWidget->setGHNSSourceEditable(true); 0084 0085 QDockWidget *profilesWidget = new QDockWidget(i18n("Profiles"), this); 0086 profilesWidget->setObjectName("profilesDockWidget"); 0087 profilesWidget->setWidget(d->quotesWidget->profilesWidget()); 0088 addDockWidget(Qt::LeftDockWidgetArea, profilesWidget); 0089 0090 QDockWidget *profileDetailsWidget = new QDockWidget(i18n("Profile details"), this); 0091 profileDetailsWidget->setObjectName("profileDetailsDockWidget"); 0092 profileDetailsWidget->setWidget(d->quotesWidget->profileDetailsWidget()); 0093 addDockWidget(Qt::RightDockWidgetArea, profileDetailsWidget); 0094 0095 QDockWidget *onlineQuotesWidget = new QDockWidget(i18n("Online quotes"), this); 0096 onlineQuotesWidget->setObjectName("onlineQuotesDockWidget"); 0097 onlineQuotesWidget->setWidget(d->quotesWidget->onlineQuotesWidget()); 0098 addDockWidget(Qt::LeftDockWidgetArea, onlineQuotesWidget); 0099 0100 QDockWidget *debugWidget = new QDockWidget(i18n("Debug"), this); 0101 debugWidget->setObjectName("debugDockWidget"); 0102 debugWidget->setWidget(d->quotesWidget->debugWidget()); 0103 addDockWidget(Qt::LeftDockWidgetArea, debugWidget); 0104 0105 QDockWidget *quoteDetailsWidget = new QDockWidget(i18n("Quote details"), this); 0106 quoteDetailsWidget->setObjectName("quoteDetailsDockWidget"); 0107 quoteDetailsWidget->setWidget(d->quotesWidget->quoteDetailsWidget()); 0108 addDockWidget(Qt::RightDockWidgetArea, quoteDetailsWidget); 0109 0110 connect(&AlkOnlineQuotesProfileManager::instance(), SIGNAL(updateAvailable(QString,QString)), 0111 this, SLOT(slotUpdateAvailable(QString,QString))); 0112 0113 manager.setWebPageEnabled(true); 0114 QDockWidget *browserWidget = new QDockWidget(i18n("Browser"), this); 0115 browserWidget->setObjectName("browserDockWidget"); 0116 AlkWebPage *webPage = manager.webPage(); 0117 0118 QHBoxLayout *hLayout = new QHBoxLayout; 0119 #if defined(BUILD_WITH_WEBKIT) || defined(BUILD_WITH_WEBENGINE) 0120 // setup url line 0121 d->urlLine = new QLineEdit; 0122 connect(d->urlLine, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished())); 0123 hLayout->addWidget(d->urlLine); 0124 0125 // setup language box 0126 QComboBox *box = new QComboBox; 0127 QList<QLocale> allLocales = QLocale::matchingLocales( 0128 QLocale::AnyLanguage, 0129 QLocale::AnyScript, 0130 QLocale::AnyCountry); 0131 0132 QStringList languages; 0133 for (const QLocale &locale : allLocales) { 0134 languages.append(locale.uiLanguages()); 0135 } 0136 languages.sort(); 0137 box->addItems(languages); 0138 d->quotesWidget->setAcceptLanguage(box->currentText()); 0139 connect(box, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotLanguageChanged(QString))); 0140 hLayout->addWidget(box); 0141 0142 webPage->setWebInspectorEnabled(true); 0143 connect(webPage, SIGNAL(urlChanged(QUrl)), this, SLOT(slotUrlChanged(QUrl))); 0144 #endif 0145 // setup browser window 0146 QVBoxLayout *layout = new QVBoxLayout; 0147 layout->addLayout(hLayout); 0148 layout->addWidget(webPage->widget()); 0149 QWidget *group = new QWidget; 0150 group->setLayout(layout); 0151 browserWidget->setWidget(group); 0152 addDockWidget(Qt::RightDockWidgetArea, browserWidget); 0153 0154 setCentralWidget(nullptr); 0155 0156 readPositionSettings(); 0157 } 0158 0159 MainWindow::~MainWindow() 0160 { 0161 delete d; 0162 } 0163 0164 void MainWindow::slotUpdateAvailable(const QString &profile, const QString &name) 0165 { 0166 QString s = statusBar()->currentMessage(); 0167 if (!s.isEmpty()) 0168 s += " - "; 0169 s += i18n("Update for '%1' available in profile '%2'", name, profile); 0170 statusBar()->showMessage(s); 0171 } 0172 0173 void MainWindow::closeEvent(QCloseEvent *event) 0174 { 0175 writePositionSettings(); 0176 QMainWindow::closeEvent(event); 0177 }