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