alkimia  8.0.2
alkonlinequoteswidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright 2004-2019 Thomas Baumgart tbaumgart@kde.org *
3  * *
4  * This file is part of libalkimia. *
5  * *
6  * libalkimia is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU General Public License *
8  * as published by the Free Software Foundation; either version 2.1 of *
9  * the License or (at your option) version 3 or any later version. *
10  * *
11  * libalkimia is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU General Public License *
17  * along with this program. If not, see <http://www.gnu.org/licenses/> *
18  ***************************************************************************/
19 
20 #include "alkonlinequoteswidget.h"
21 
22 #include "alkonlinequote.h"
23 #include "alkonlinequotesprofile.h"
25 #include "alkonlinequotesource.h"
26 #include "alkwebpage.h"
27 
28 #include <QRegExp>
29 #include <QCheckBox>
30 #include <QDesktopServices>
31 #include <QtDebug>
32 #include <QWebInspector>
33 
34 #include <KComponentData>
35 #include <KIcon>
36 #include <KIconLoader>
37 #include <KGuiItem>
38 #include <KMessageBox>
39 #include <knewstuff3/downloaddialog.h>
40 #include <knewstuff3/uploaddialog.h>
41 
42 #if QT_VERSION < QT_VERSION_CHECK(5,0,0)
43 #include <klocale.h>
44 static KLocale _locale("alkimia");
45 #define i18nc(context, text) ki18nc(context, text).toString(&_locale)
46 #define i18n(text) ki18n(text).toString(&_locale)
47 #define tr2i18n(text, context) ki18nc(context, text).toString(&_locale)
48 #endif
49 
50 #include <ui_alkonlinequoteswidget.h>
51 
52 class AlkOnlineQuotesWidget::Private : public QWidget, public Ui::AlkOnlineQuotesWidget
53 {
54  Q_OBJECT
55 public:
56  QString m_acceptLanguage;
57  QList<AlkOnlineQuoteSource> m_resetList;
59  bool m_quoteInEditing;
61  bool m_showProfiles;
62  bool m_showUpload;
63  QPixmap m_emptyIcon;
64  QPixmap m_inWorkIcon;
65  QPixmap m_okIcon;
66  QPixmap m_failIcon;
67  QPixmap m_unknownIcon;
68  QDialog *m_webPageDialog;
69 
70  Private(bool showProfiles, bool showUpload, QWidget *parent);
71  ~Private();
72 public slots:
77 
83  void slotNewEntry();
85  void slotLogStatus(const QString &s);
86  void slotLogError(const QString &s);
87  void slotLogFailed(const QString &id, const QString &symbol);
88  void slotLogQuote(const QString &id, const QString &symbol, const QDate &date, double price);
89  void slotEntryRenamed(QListWidgetItem *item);
90  void slotStartRename(QListWidgetItem *item);
91  void slotInstallEntries();
92  void slotUploadEntry();
93  void slotShowButton();
94 
95 public:
96  void loadProfiles();
97  void loadQuotesList(const bool updateResetList = false);
98  void clearIcons();
99  void initIcons();
100  void setupIcons(const AlkOnlineQuote::Errors &errors);
101  QString singleSymbol() const;
102  QStringList doubleSymbol() const;
103  QString expandedUrl() const;
104 };
105 
106 AlkOnlineQuotesWidget::Private::Private(bool showProfiles, bool showUpload, QWidget *parent)
107  : QWidget(parent)
108  , m_quoteInEditing(false)
109  , m_profile(nullptr)
110  , m_showProfiles(showProfiles)
111  , m_showUpload(showUpload)
112  , m_inWorkIcon(BarIcon("view-refresh"))
113  , m_okIcon(BarIcon("dialog-ok-apply"))
114  , m_failIcon(BarIcon("dialog-cancel"))
115  , m_webPageDialog(nullptr)
116 {
117  setupUi(parent);
118 
119  profilesGroupBox->setVisible(showProfiles);
120  profileDetailsBox->setVisible(showProfiles);
121  m_showButton->setVisible(!showProfiles && AlkOnlineQuotesProfileManager::instance().webPageEnabled());
122  m_ghnsSource->setEnabled(showProfiles);
123  m_uploadButton->setVisible(showUpload);
124  m_urlCheckLabel->setMinimumWidth(m_okIcon.width());
125 
126  loadProfiles();
127 
128  // TODO move to ui file
129  KGuiItem updateButtenItem(i18nc("Accepts the entered data and stores it", "&Accept"),
130  KIcon("dialog-ok"),
131  i18n("Accepts the entered data and stores it"),
132  i18n("Use this to accept the modified data."));
133  m_updateButton->setGuiItem(updateButtenItem);
134 
135  KGuiItem deleteButtenItem(i18n("&Delete"),
136  KIcon("edit-delete"),
137  i18n("Delete the selected source entry"),
138  i18n("Use this to delete the selected online source entry"));
139  m_deleteButton->setGuiItem(deleteButtenItem);
140 
141  KGuiItem checkButtonItem(i18nc("Check the selected source entry", "&Check Source"),
142  KIcon("document-edit-verify"),
143  i18n("Check the selected source entry"),
144  i18n("Use this to check the selected online source entry"));
145  m_checkButton->setGuiItem(checkButtonItem);
146 
147  KGuiItem showButtonItem(i18nc("Show the selected source entry in a web browser", "&Show page"),
148  KIcon("applications-internet"),
149  i18n("Show the selected source entry in a web browser"),
150  i18n("Use this to show the selected online source entry"));
151  m_showButton->setGuiItem(showButtonItem);
152 
153  KGuiItem newButtenItem(i18nc("Create a new source entry for online quotes", "&New..."),
154  KIcon("document-new"),
155  i18n("Create a new source entry for online quotes"),
156  i18n("Use this to create a new entry for online quotes"));
157  m_newButton->setGuiItem(newButtenItem);
158 
159  connect(m_newProfile, SIGNAL(clicked()), this, SLOT(slotNewProfile()));
160  connect(m_deleteProfile, SIGNAL(clicked()), this, SLOT(slotDeleteProfile()));
161  connect(m_profileList, SIGNAL(itemSelectionChanged()), this, SLOT(slotLoadProfile()));
162 
163  connect(m_updateButton, SIGNAL(clicked()), this, SLOT(slotUpdateEntry()));
164  connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNewEntry()));
165  connect(m_checkButton, SIGNAL(clicked()), this, SLOT(slotCheckEntry()));
166  connect(m_deleteButton, SIGNAL(clicked()), this, SLOT(slotDeleteEntry()));
167  connect(m_duplicateButton, SIGNAL(clicked()), this, SLOT(slotDuplicateEntry()));
168  connect(m_installButton, SIGNAL(clicked()), this, SLOT(slotInstallEntries()));
169  connect(m_uploadButton, SIGNAL(clicked()), this, SLOT(slotUploadEntry()));
170 
171  connect(m_quoteSourceList, SIGNAL(itemSelectionChanged()), this, SLOT(slotLoadWidgets()));
172  connect(m_quoteSourceList, SIGNAL(itemChanged(QListWidgetItem *)), this,
173  SLOT(slotEntryRenamed(QListWidgetItem *)));
174  connect(m_quoteSourceList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this,
175  SLOT(slotStartRename(QListWidgetItem *)));
176 
177  connect(m_editURL, SIGNAL(textChanged(QString)), this, SLOT(slotEntryChanged()));
178  connect(m_editSymbol, SIGNAL(textChanged(QString)), this, SLOT(slotEntryChanged()));
179  connect(m_editDate, SIGNAL(textChanged(QString)), this, SLOT(slotEntryChanged()));
180  connect(m_editDateFormat, SIGNAL(textChanged(QString)), this, SLOT(slotEntryChanged()));
181  connect(m_editPrice, SIGNAL(textChanged(QString)), this, SLOT(slotEntryChanged()));
182  connect(m_skipStripping, SIGNAL(toggled(bool)), this, SLOT(slotEntryChanged()));
183  connect(m_ghnsSource, SIGNAL(toggled(bool)), this, SLOT(slotEntryChanged()));
184  connect(m_showButton, SIGNAL(clicked()), this, SLOT(slotShowButton()));
185 
186  m_checkSymbol->setText("ORCL");
187  m_checkSymbol2->setText("BTC GBP");
188  m_updateButton->setEnabled(false);
189  slotLoadProfile();
190 }
191 
193 {
194  m_webPageDialog->deleteLater();
195 }
196 
198 {
200  if (list.isEmpty())
201  return;
202  foreach (AlkOnlineQuotesProfile *profile, list) {
203  QListWidgetItem *item = new QListWidgetItem(dynamic_cast<QListWidget *>(m_profileList));
204  item->setText(profile->name());
205  item->setFlags(item->flags() | Qt::ItemIsEditable);
206  }
207  m_profileList->setCurrentRow(0);
208  m_profile = AlkOnlineQuotesProfileManager::instance().profiles().first();
209  loadQuotesList();
210 }
211 
212 void AlkOnlineQuotesWidget::Private::loadQuotesList(const bool updateResetList)
213 {
214  m_quoteInEditing = false;
215  QStringList groups = m_profile->quoteSources();
216 
217  if (updateResetList) {
218  m_resetList.clear();
219  }
220  m_quoteSourceList->blockSignals(true);
221  m_quoteSourceList->clear();
222  QStringList::Iterator it;
223  for (it = groups.begin(); it != groups.end(); ++it) {
224  AlkOnlineQuoteSource source(*it, m_profile);
225  if (!source.isValid()) {
226  continue;
227  }
228 
229  QListWidgetItem *item = new QListWidgetItem(*it);
230  item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
231  m_quoteSourceList->addItem(item);
232  if (updateResetList) {
233  m_resetList += source;
234  }
235  }
236  m_quoteSourceList->sortItems();
237 
238  QListWidgetItem *item = nullptr;
239  if (!m_currentItem.name().isEmpty()) {
240  QList<QListWidgetItem*> items = m_quoteSourceList->findItems(m_currentItem.name(), Qt::MatchExactly);
241  if (items.size() > 0)
242  item = items.at(0);
243  if (item)
244  m_quoteSourceList->setCurrentItem(item);
245  }
246  if (!item) {
247  item = m_quoteSourceList->item(0);
248  if (item)
249  m_quoteSourceList->setCurrentItem(item);
250  }
251  m_quoteSourceList->blockSignals(false);
252  slotLoadWidgets();
253  slotEntryChanged();
254 }
255 
257 {
258  QListWidgetItem *item = new QListWidgetItem(dynamic_cast<QListWidget *>(m_profileList));
259  item->setText(QLatin1String("new profile"));
260  item->setFlags(item->flags() | Qt::ItemIsEditable);
261 }
262 
264 {
265  delete m_profileList->currentItem();
266 }
267 
269 {
270  slotLoadProfile();
271 }
272 
274 {
276  if (!m_showProfiles) {
278  if (list.isEmpty())
279  return;
280  m_profile = list.first();
281  loadQuotesList();
282  return;
283  }
284 
285  foreach (AlkOnlineQuotesProfile *profile, list) {
286  if (m_profileList->currentItem()->text() == profile->name()) {
287  m_profile = profile;
288  loadQuotesList();
289  m_installButton->setVisible(profile->hasGHNSSupport());
290  }
291  }
292 
293  bool visible = m_profile->type() != AlkOnlineQuotesProfile::Type::None;
294  m_configFilePath->setText(m_profile->kConfigFile());
295  m_configFilePath->setVisible(visible);
296  m_configLabel->setEnabled(visible);
297 
298  visible = m_profile->hasGHNSSupport();
299  m_GHNSConfigFilePath->setText(m_profile->hotNewStuffConfigFile());
300  m_GHNSConfigFilePath->setVisible(visible);
301  m_GHNSConfigLabel->setEnabled(visible);
302 
303  m_GHNSDataPath->setText(m_profile->hotNewStuffReadPath().join(" "));
304  m_GHNSDataPath->setVisible(visible);
305  m_GHNSDataLabel->setEnabled(visible);
306 }
307 
309 {
310  m_quoteInEditing = false;
311  QListWidgetItem *item = m_quoteSourceList->currentItem();
312 
313  m_editURL->setEnabled(item != nullptr);
314  m_editSymbol->setEnabled(item != nullptr);
315  m_editPrice->setEnabled(item != nullptr);
316  m_editDate->setEnabled(item != nullptr);
317  m_editDateFormat->setEnabled(item != nullptr);
318  m_skipStripping->setEnabled(item != nullptr);
319 
320  m_editURL->clear();
321  m_editSymbol->clear();
322  m_editPrice->clear();
323  m_editDate->clear();
324  m_editDateFormat->clear();
325 
326  if (item) {
327  m_currentItem = AlkOnlineQuoteSource(item->text(), m_profile);
328  m_editURL->setText(m_currentItem.url());
329  m_editSymbol->setText(m_currentItem.sym());
330  m_editPrice->setText(m_currentItem.price());
331  m_editDate->setText(m_currentItem.date());
332  m_editDateFormat->setText(m_currentItem.dateformat());
333  m_skipStripping->setChecked(m_currentItem.skipStripping());
334  m_ghnsSource->setChecked(m_currentItem.isGHNS());
335  }
336 
337  m_updateButton->setEnabled(false);
338 }
339 
341 {
342  clearIcons();
343  bool modified = m_editURL->text() != m_currentItem.url()
344  || m_editSymbol->text() != m_currentItem.sym()
345  || m_editDate->text() != m_currentItem.date()
346  || m_editDateFormat->text() != m_currentItem.dateformat()
347  || m_editPrice->text() != m_currentItem.price()
348  || m_skipStripping->isChecked() != m_currentItem.skipStripping()
349  || m_ghnsSource->isChecked() != m_currentItem.isGHNS();
350 
351  bool hasWriteSupport = m_profile->type() != AlkOnlineQuotesProfile::Type::None || m_profile->hasGHNSSupport();
352  bool noNewEntry = m_quoteSourceList->findItems(i18n("New Quote Source"), Qt::MatchExactly).count() == 0;
353  m_newButton->setEnabled(hasWriteSupport && noNewEntry);
354  m_duplicateButton->setEnabled(hasWriteSupport);
355  m_deleteButton->setEnabled(!m_currentItem.isReadOnly() && !m_currentItem.isGHNS());
356  m_uploadButton->setEnabled(m_profile->hasGHNSSupport() && m_currentItem.isGHNS());
357  m_updateButton->setEnabled(modified);
358  m_checkButton->setEnabled(!modified);
359  m_checkSymbol->setEnabled(!m_currentItem.url().contains("%2"));
360  m_checkSymbol2->setEnabled(m_currentItem.url().contains("%2"));
361 }
362 
364 {
365  QList<QListWidgetItem *> items = m_quoteSourceList->findItems(
366  m_currentItem.name(), Qt::MatchExactly);
367  if (items.isEmpty()) {
368  return;
369  }
370  QListWidgetItem *item = items.at(0);
371  if (!item) {
372  return;
373  }
374 
375  int ret = KMessageBox::warningContinueCancel(this,
376  i18n("Are you sure to delete this online quote ?"),
377  i18n("Delete online quote"),
378  KStandardGuiItem::cont(),
379  KStandardGuiItem::cancel(),
380  QString("DeletingOnlineQuote"));
381  if (ret == KMessageBox::Cancel) {
382  return;
383  }
384 
385  // keep this order to avoid deleting the wrong current item
386  m_currentItem.remove();
387  delete item;
388  slotEntryChanged();
389 }
390 
392 {
393  QList<QListWidgetItem *> items = m_quoteSourceList->findItems(
394  m_currentItem.name(), Qt::MatchExactly);
395  if (items.isEmpty()) {
396  return;
397  }
398  QListWidgetItem *item = items.at(0);
399  if (!item) {
400  return;
401  }
402 
403  AlkOnlineQuoteSource copy(m_currentItem);
404  copy.setName(copy.name() + i18n(".copy"));
405  copy.setGHNS(false);
406  copy.write();
407  m_currentItem = copy;
408  loadQuotesList();
409 }
410 
412 {
413  m_currentItem.setUrl(m_editURL->text());
414  m_currentItem.setSym(m_editSymbol->text());
415  m_currentItem.setDate(m_editDate->text());
416  m_currentItem.setDateformat(m_editDateFormat->text());
417  m_currentItem.setPrice(m_editPrice->text());
418  m_currentItem.setSkipStripping(m_skipStripping->isChecked());
419  m_currentItem.setGHNS(m_ghnsSource->isChecked());
420  m_currentItem.write();
421  m_checkButton->setEnabled(true);
422  slotEntryChanged();
423 }
424 
426 {
427  AlkOnlineQuoteSource newSource(i18n("New Quote Source"), m_profile);
428  newSource.write();
429  m_currentItem = newSource;
430  loadQuotesList();
431 }
432 
434 {
435  m_urlCheckLabel->setPixmap(m_emptyIcon);
436  m_dateCheckLabel->setPixmap(m_emptyIcon);
437  m_priceCheckLabel->setPixmap(m_emptyIcon);
438  m_symbolCheckLabel->setPixmap(m_emptyIcon);
439  m_dateFormatCheckLabel->setPixmap(m_emptyIcon);
440 }
441 
443 {
444  m_urlCheckLabel->setPixmap(m_inWorkIcon);
445  m_dateCheckLabel->setPixmap(m_inWorkIcon);
446  m_priceCheckLabel->setPixmap(m_inWorkIcon);
447  m_symbolCheckLabel->setPixmap(m_inWorkIcon);
448  m_dateFormatCheckLabel->setPixmap(m_inWorkIcon);
449 }
450 
452 {
453  clearIcons();
454  if (errors & AlkOnlineQuote::Errors::URL) {
455  m_urlCheckLabel->setPixmap(m_failIcon);
456  } else {
457  m_urlCheckLabel->setPixmap(m_okIcon);
458  m_symbolCheckLabel->setPixmap(errors & AlkOnlineQuote::Errors::Symbol ? m_failIcon : m_okIcon);
459  m_priceCheckLabel->setPixmap(errors & AlkOnlineQuote::Errors::Price ? m_failIcon : m_okIcon);
460  if (errors & AlkOnlineQuote::Errors::Date) {
461  m_dateCheckLabel->setPixmap(m_failIcon);
462  } else {
463  m_dateCheckLabel->setPixmap(m_okIcon);
464  m_dateFormatCheckLabel->setPixmap(
465  errors & AlkOnlineQuote::Errors::DateFormat ? m_failIcon : m_okIcon);
466  }
467  }
468 }
469 
471 {
472  AlkOnlineQuote quote(m_profile);
473  m_logWindow->setVisible(true);
474  m_logWindow->clear();
475  clearIcons();
476  quote.setAcceptLanguage(m_acceptLanguage);
477 
478  connect(&quote, SIGNAL(status(QString)), this, SLOT(slotLogStatus(QString)));
479  connect(&quote, SIGNAL(error(QString)), this, SLOT(slotLogError(QString)));
480  connect(&quote, SIGNAL(failed(QString,QString)), this, SLOT(slotLogFailed(QString,QString)));
481  connect(&quote, SIGNAL(quote(QString,QString,QDate,double)), this,
482  SLOT(slotLogQuote(QString,QString,QDate,double)));
483  initIcons();
484  if (m_currentItem.url().contains("%2")) {
485  quote.launch(m_checkSymbol2->text(), m_checkSymbol2->text(), m_currentItem.name());
486  } else {
487  quote.launch(m_checkSymbol->text(), m_checkSymbol->text(), m_currentItem.name());
488  }
489  setupIcons(quote.errors());
490 }
491 
493 {
494  m_logWindow->append(s);
495 }
496 
498 {
499  slotLogStatus(QString("<font color=\"red\"><b>") + s + QString("</b></font>"));
500 }
501 
502 void AlkOnlineQuotesWidget::Private::slotLogFailed(const QString &id, const QString &symbol)
503 {
504  slotLogStatus(QString("%1 %2").arg(id, symbol));
505 }
506 
507 void AlkOnlineQuotesWidget::Private::slotLogQuote(const QString &id, const QString &symbol,
508  const QDate &date, double price)
509 {
510  slotLogStatus(QString("<font color=\"green\">%1 %2 %3 %4</font>").arg(id, symbol,
511  date.toString()).arg(
512  price));
513 }
514 
516 {
517  m_quoteInEditing = true;
518  m_quoteSourceList->editItem(item);
519 }
520 
522 {
523  //if there is no current item selected, exit
524  if (m_quoteInEditing == false || !m_quoteSourceList->currentItem()
525  || item != m_quoteSourceList->currentItem()) {
526  return;
527  }
528 
529  m_quoteInEditing = false;
530  QString text = item->text();
531  int nameCount = 0;
532  for (int i = 0; i < m_quoteSourceList->count(); ++i) {
533  if (m_quoteSourceList->item(i)->text() == text) {
534  ++nameCount;
535  }
536  }
537 
538  // Make sure we get a non-empty and unique name
539  if (text.length() > 0 && nameCount == 1) {
540  m_currentItem.rename(text);
541  } else {
542  item->setText(m_currentItem.name());
543  }
544  m_quoteSourceList->sortItems();
545  m_newButton->setEnabled(m_quoteSourceList->findItems(i18n(
546  "New Quote Source"),
547  Qt::MatchExactly).count() == 0);
548 }
549 
551 {
552  QString configFile = m_profile->hotNewStuffConfigFile();
553 
554  QPointer<KNS3::DownloadDialog> dialog = new KNS3::DownloadDialog(configFile, this);
555  dialog->exec();
556  delete dialog;
557  loadQuotesList();
558 }
559 
561 {
562  QString configFile = m_profile->hotNewStuffConfigFile();
563 
564  QUrl url = QUrl::fromLocalFile(m_currentItem.ghnsWriteFileName());
565  qDebug() << "uploading file" << url;
566  QPointer<KNS3::UploadDialog> dialog = new KNS3::UploadDialog(configFile, this);
567  dialog->setUploadName(m_currentItem.name());
568  dialog->setUploadFile(url);
569  dialog->exec();
570  delete dialog;
571 }
572 
574 {
575  if (!m_webPageDialog) {
576  m_webPageDialog = new QDialog;
577  m_webPageDialog->setWindowTitle(i18n("Online Quote HTML Result Window"));
578  QVBoxLayout *layout = new QVBoxLayout;
580  webPage->setWebInspectorEnabled(true);
581  layout->addWidget(webPage);
582  m_webPageDialog->setLayout(layout);
583  }
584  m_webPageDialog->show();
585 }
586 
588 {
589  if (m_currentItem.url().contains("%2")) {
590  return m_currentItem.url().arg(m_checkSymbol2->text());
591  } else {
592  return m_currentItem.url().arg(m_checkSymbol->text());
593  }
594 }
595 
596 AlkOnlineQuotesWidget::AlkOnlineQuotesWidget(bool showProfiles, bool showUpload, QWidget *parent)
597  : QWidget(parent)
598  , d(new Private(showProfiles, showUpload, this))
599 {
600 }
601 
603 {
604  delete d;
605 }
606 
608 {
609  QFrame *frame = new QFrame;
610  frame->setLayout(d->profilesGroupBox->layout());
611  return frame;
612 }
613 
615 {
616  QFrame *frame = new QFrame;
617  frame->setLayout(d->profileDetailsBox->layout());
618  return frame;
619 }
620 
622 {
623  QFrame *frame = new QFrame;
624  frame->setLayout(d->onlineQuotesGroupBox->layout());
625  return frame;
626 }
627 
629 {
630  QFrame *frame = new QFrame;
631  frame->setLayout(d->detailsGroupBox->layout());
632  return frame;
633 }
634 
636 {
637  QFrame *frame = new QFrame;
638  frame->setLayout(d->debugGroupBox->layout());
639  return frame;
640 }
641 
643 {
644 }
645 
647 {
648 }
649 
651 {
652  QStringList::ConstIterator it;
653  QStringList groups = d->m_profile->quoteSources();
654 
655  // delete all currently defined entries
656  for (it = groups.constBegin(); it != groups.constEnd(); ++it) {
658  }
659 
660  // and write back the one's from the reset list
661  QList<AlkOnlineQuoteSource>::iterator itr;
662  for (itr = d->m_resetList.begin(); itr != d->m_resetList.end(); ++itr) {
663  (*itr).write();
664  }
665 
666  d->loadQuotesList();
667 }
668 
670 {
671  return d->m_acceptLanguage;
672 }
673 
675 {
676  d->m_acceptLanguage = text;
677 }
678 
679 #include "alkonlinequoteswidget.moc"
AlkOnlineQuotesWidget::Private::slotDeleteEntry
void slotDeleteEntry()
Definition: alkonlinequoteswidget.cpp:363
AlkOnlineQuotesWidget::Private::expandedUrl
QString expandedUrl() const
Definition: alkonlinequoteswidget.cpp:587
AlkOnlineQuotesWidget::AlkOnlineQuotesWidget
AlkOnlineQuotesWidget(bool showProfiles=false, bool showUpload=false, QWidget *parent=0)
Definition: alkonlinequoteswidget.cpp:596
AlkOnlineQuotesWidget::Private
Definition: alkonlinequoteswidget.cpp:52
AlkOnlineQuote::errors
const Errors & errors()
Definition: alkonlinequote.cpp:579
AlkOnlineQuotesWidget::Private::m_acceptLanguage
QString m_acceptLanguage
Definition: alkonlinequoteswidget.cpp:73
AlkOnlineQuotesWidget::Private::loadProfiles
void loadProfiles()
Definition: alkonlinequoteswidget.cpp:197
AlkOnlineQuotesWidget::onlineQuotesWidget
QWidget * onlineQuotesWidget()
Definition: alkonlinequoteswidget.cpp:621
AlkOnlineQuoteSource
Definition: alkonlinequotesource.h:35
AlkOnlineQuoteSource::setName
void setName(const QString &name)
Definition: alkonlinequotesource.cpp:284
AlkOnlineQuotesWidget::Private::slotUploadEntry
void slotUploadEntry()
Definition: alkonlinequoteswidget.cpp:560
AlkOnlineQuotesWidget::Private::slotNewProfile
void slotNewProfile()
Definition: alkonlinequoteswidget.cpp:256
AlkOnlineQuotesWidget::profilesWidget
QWidget * profilesWidget()
Definition: alkonlinequoteswidget.cpp:607
AlkOnlineQuotesWidget::Private::slotLogQuote
void slotLogQuote(const QString &id, const QString &symbol, const QDate &date, double price)
Definition: alkonlinequoteswidget.cpp:507
AlkOnlineQuotesWidget::Private::m_profile
AlkOnlineQuotesProfile * m_profile
Definition: alkonlinequoteswidget.cpp:77
alkonlinequoteswidget.h
AlkOnlineQuotesWidget::~AlkOnlineQuotesWidget
virtual ~AlkOnlineQuotesWidget()
Definition: alkonlinequoteswidget.cpp:602
AlkOnlineQuoteSource::isValid
bool isValid()
Definition: alkonlinequotesource.cpp:244
AlkOnlineQuotesWidget::Private::slotNewEntry
void slotNewEntry()
Definition: alkonlinequoteswidget.cpp:425
AlkOnlineQuotesWidget::Private::m_webPageDialog
QDialog * m_webPageDialog
Definition: alkonlinequoteswidget.cpp:85
AlkOnlineQuotesWidget::Private::slotDeleteProfile
void slotDeleteProfile()
Definition: alkonlinequoteswidget.cpp:263
AlkWebPage
Definition: alkwebpage.h:37
AlkOnlineQuotesWidget::profileDetailsWidget
QWidget * profileDetailsWidget()
Definition: alkonlinequoteswidget.cpp:614
AlkOnlineQuotesWidget::acceptLanguage
QString acceptLanguage() const
Definition: alkonlinequoteswidget.cpp:669
AlkOnlineQuotesWidget::Private::m_okIcon
QPixmap m_okIcon
Definition: alkonlinequoteswidget.cpp:82
AlkOnlineQuotesWidget::Private::singleSymbol
QString singleSymbol() const
AlkOnlineQuotesProfile
Definition: alkonlinequotesprofile.h:34
AlkOnlineQuotesProfile::quoteSources
const QStringList quoteSources()
Definition: alkonlinequotesprofile.cpp:382
AlkOnlineQuotesWidget::Private::~Private
~Private()
Definition: alkonlinequoteswidget.cpp:192
AlkWebPage::setWebInspectorEnabled
void setWebInspectorEnabled(bool enable)
Definition: alkwebpage.cpp:94
AlkOnlineQuotesWidget::readConfig
void readConfig()
Definition: alkonlinequoteswidget.cpp:642
AlkOnlineQuotesWidget::Private::initIcons
void initIcons()
Definition: alkonlinequoteswidget.cpp:442
AlkOnlineQuotesWidget::Private::m_failIcon
QPixmap m_failIcon
Definition: alkonlinequoteswidget.cpp:83
AlkOnlineQuotesProfileManager::instance
static AlkOnlineQuotesProfileManager & instance()
Definition: alkonlinequotesprofilemanager.cpp:102
AlkOnlineQuotesWidget::Private::m_unknownIcon
QPixmap m_unknownIcon
Definition: alkonlinequoteswidget.cpp:84
AlkOnlineQuotesWidget::Private::loadQuotesList
void loadQuotesList(const bool updateResetList=false)
Definition: alkonlinequoteswidget.cpp:212
AlkOnlineQuotesWidget::Private::m_emptyIcon
QPixmap m_emptyIcon
Definition: alkonlinequoteswidget.cpp:80
AlkOnlineQuotesWidget::setAcceptLanguage
void setAcceptLanguage(const QString &text)
Definition: alkonlinequoteswidget.cpp:674
AlkOnlineQuotesWidget::Private::clearIcons
void clearIcons()
Definition: alkonlinequoteswidget.cpp:433
AlkOnlineQuotesWidget::Private::setupIcons
void setupIcons(const AlkOnlineQuote::Errors &errors)
Definition: alkonlinequoteswidget.cpp:451
AlkOnlineQuotesProfile::Type::None
@ None
AlkOnlineQuoteSource::setGHNS
void setGHNS(bool state)
Definition: alkonlinequotesource.cpp:319
AlkOnlineQuotesWidget::Private::slotLogError
void slotLogError(const QString &s)
Definition: alkonlinequoteswidget.cpp:497
AlkOnlineQuote::Errors::URL
@ URL
Definition: alkonlinequote.h:64
AlkOnlineQuotesWidget::writeConfig
void writeConfig()
Definition: alkonlinequoteswidget.cpp:646
AlkOnlineQuotesWidget::Private::m_resetList
QList< AlkOnlineQuoteSource > m_resetList
Definition: alkonlinequoteswidget.cpp:74
AlkOnlineQuote::Errors::Price
@ Price
Definition: alkonlinequote.h:59
AlkOnlineQuotesWidget::debugWidget
QWidget * debugWidget()
Definition: alkonlinequoteswidget.cpp:635
AlkOnlineQuotesProfileList
QList< AlkOnlineQuotesProfile * > AlkOnlineQuotesProfileList
Definition: alkonlinequotesprofilemanager.h:28
AlkOnlineQuoteSource::remove
void remove()
Definition: alkonlinequotesource.cpp:391
AlkOnlineQuoteSource::write
bool write()
Definition: alkonlinequotesource.cpp:362
alkonlinequotesprofile.h
AlkOnlineQuotesWidget::Private::slotUpdateEntry
void slotUpdateEntry()
Definition: alkonlinequoteswidget.cpp:411
AlkOnlineQuotesWidget::Private::m_inWorkIcon
QPixmap m_inWorkIcon
Definition: alkonlinequoteswidget.cpp:81
AlkOnlineQuote::launch
bool launch(const QString &_symbol, const QString &_id, const QString &_source=QString())
Definition: alkonlinequote.cpp:566
AlkOnlineQuotesWidget::Private::slotInstallEntries
void slotInstallEntries()
Definition: alkonlinequoteswidget.cpp:550
AlkOnlineQuotesWidget::resetConfig
void resetConfig()
Definition: alkonlinequoteswidget.cpp:650
AlkOnlineQuotesWidget::quoteDetailsWidget
QWidget * quoteDetailsWidget()
Definition: alkonlinequoteswidget.cpp:628
AlkOnlineQuotesWidget::Private::Private
Private(bool showProfiles, bool showUpload, QWidget *parent)
Definition: alkonlinequoteswidget.cpp:106
AlkOnlineQuotesProfileManager::webPage
AlkWebPage * webPage()
Definition: alkonlinequotesprofilemanager.cpp:95
AlkOnlineQuotesProfile::hasGHNSSupport
bool hasGHNSSupport()
Definition: alkonlinequotesprofile.cpp:372
AlkOnlineQuotesProfile::name
QString name() const
Definition: alkonlinequotesprofile.cpp:310
AlkOnlineQuotesWidget::Private::slotStartRename
void slotStartRename(QListWidgetItem *item)
Definition: alkonlinequoteswidget.cpp:515
alkonlinequote.h
AlkOnlineQuotesWidget::Private::slotCheckEntry
void slotCheckEntry()
Definition: alkonlinequoteswidget.cpp:470
AlkOnlineQuotesWidget::Private::slotEntryChanged
void slotEntryChanged()
Definition: alkonlinequoteswidget.cpp:340
AlkOnlineQuotesWidget::Private::slotLoadProfile
void slotLoadProfile()
Definition: alkonlinequoteswidget.cpp:273
AlkOnlineQuotesWidget::Private::slotLogFailed
void slotLogFailed(const QString &id, const QString &symbol)
Definition: alkonlinequoteswidget.cpp:502
AlkOnlineQuoteSource::name
QString name() const
Definition: alkonlinequotesource.cpp:249
alkwebpage.h
AlkOnlineQuotesWidget::Private::m_showUpload
bool m_showUpload
Definition: alkonlinequoteswidget.cpp:79
AlkOnlineQuotesWidget::Private::m_showProfiles
bool m_showProfiles
Definition: alkonlinequoteswidget.cpp:78
alkonlinequotesprofilemanager.h
AlkOnlineQuotesWidget::Private::m_quoteInEditing
bool m_quoteInEditing
Definition: alkonlinequoteswidget.cpp:76
AlkOnlineQuotesWidget::Private::m_currentItem
AlkOnlineQuoteSource m_currentItem
Definition: alkonlinequoteswidget.cpp:75
AlkOnlineQuote::Errors::DateFormat
@ DateFormat
Definition: alkonlinequote.h:58
AlkOnlineQuotesWidget::Private::doubleSymbol
QStringList doubleSymbol() const
AlkOnlineQuotesWidget::Private::slotLogStatus
void slotLogStatus(const QString &s)
Definition: alkonlinequoteswidget.cpp:492
AlkOnlineQuotesWidget::d
Private *const d
Definition: alkonlinequoteswidget.h:51
AlkOnlineQuotesProfileManager::profiles
AlkOnlineQuotesProfileList profiles()
Definition: alkonlinequotesprofilemanager.cpp:71
AlkOnlineQuotesWidget::Private::slotLoadWidgets
void slotLoadWidgets()
Definition: alkonlinequoteswidget.cpp:308
AlkOnlineQuotesWidget::Private::slotEntryRenamed
void slotEntryRenamed(QListWidgetItem *item)
Definition: alkonlinequoteswidget.cpp:521
AlkOnlineQuotesWidget::Private::slotSelectProfile
void slotSelectProfile()
Definition: alkonlinequoteswidget.cpp:268
AlkOnlineQuote
Definition: alkonlinequote.h:37
AlkOnlineQuote::Errors
Definition: alkonlinequote.h:51
AlkOnlineQuote::Errors::Symbol
@ Symbol
Definition: alkonlinequote.h:62
alkonlinequotesource.h
AlkOnlineQuotesWidget::Private::slotDuplicateEntry
void slotDuplicateEntry()
Definition: alkonlinequoteswidget.cpp:391
AlkOnlineQuotesWidget::Private::slotShowButton
void slotShowButton()
Definition: alkonlinequoteswidget.cpp:573
AlkOnlineQuote::setAcceptLanguage
void setAcceptLanguage(const QString &language)
Definition: alkonlinequote.cpp:561
AlkOnlineQuote::Errors::Date
@ Date
Definition: alkonlinequote.h:57