Diffstat (limited to 'noncore/todayplugins/stockticker/stocktickerlib') (more/less context) (ignore whitespace changes)
3 files changed, 326 insertions, 300 deletions
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp index d740b6f..915233a 100644 --- a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp +++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.cpp @@ -112,25 +112,25 @@ StocktickerPluginConfig::StocktickerPluginConfig( QWidget *parent, const char* QWhatsThis::add(variationCheck, tr("Toggles daily variation of price field")); volumeCheck= new QCheckBox ( "Volume", this ); volumeCheck->setChecked( cfg.readBoolEntry("volumeCheck",1)); layout->addMultiCellWidget( volumeCheck , 5, 5, 1, 1); QWhatsThis::add(volumeCheck, tr("Toggles volume of trading field")); timerDelaySpin = new QSpinBox( this, "timer spin" ); QWhatsThis::add( timerDelaySpin , tr( "How often stocks prices should be looked up. In minutes" ) ); timerDelaySpin->setMaxValue( 60); cfg.setGroup("Timer"); - timerDelaySpin->setValue( cfg.readNumEntry("Delay",0)); + timerDelaySpin->setValue( cfg.readNumEntry("Delay",15)); layout->addMultiCellWidget( timerDelaySpin , 6, 6, 0, 0); QLabel *label2; label2 = new QLabel(this); label2->setText( tr("Minutes between lookups.")); label2->setMaximumHeight(60); layout->addMultiCellWidget( label2, 6, 6, 1, 2); scrollSpeed = new QSpinBox( this, "Scrollspin" ); QWhatsThis::add( timerDelaySpin , tr( "Speed of scrolling action, in milliseconds" ) ); scrollSpeed->setMaxValue( 1000); scrollSpeed->setSteps(50,50); diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h index 2b67a8b..10f9678 100644 --- a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h +++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerconfig.h @@ -19,25 +19,25 @@ #include <qwidget.h> #include <opie/todayconfigwidget.h> #include <qstring.h> class QLineEdit; class QCheckBox; class QPushButton; class QCheckBox; class QSpinBox; class StocktickerPluginConfig : public TodayConfigWidget { -//Q_OBJECT + Q_OBJECT public: StocktickerPluginConfig( QWidget *parent, const char *name ); ~StocktickerPluginConfig(); QString text() const; void writeConfig(); private: QLineEdit* LineEdit1; QCheckBox *timeCheck, *dateCheck, *symbolCheck, *nameCheck, *currentPriceCheck, *lastPriceCheck, *openPriceCheck, *minPriceCheck, *maxPriceCheck, *variationCheck, *volumeCheck; QPushButton *lookupButton; QSpinBox *timerDelaySpin, *scrollSpeed, *scrollLength; private slots: void doLookup(); diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp index c3ca52d..fedc79c 100644 --- a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp +++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp @@ -1,301 +1,327 @@ -/* - * stocktickerpluginwidget.cpp - * - * copyright : (c) 2002 by L.J. Potter - * email : llornkcor@handhelds.org - * - */ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include <qlayout.h> - -#include <qpe/config.h> - -#include <opie/oticker.h> - -extern "C" { -#include "libstocks/stocks.h" -} - -#include <pthread.h> - -#include "stocktickerpluginwidget.h" - -QString output; -OTicker *stocktickerTicker; + /* + * stocktickerpluginwidget.cpp + * + * copyright : (c) 2002 by L.J. Potter + * email : llornkcor@handhelds.org + * + */ + /*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + + #include <qlayout.h> + + #include <qpe/config.h> + + #include <opie/oticker.h> + + extern "C" { + #include "libstocks/stocks.h" + } + + #include <pthread.h> + + #include "stocktickerpluginwidget.h" + + QString output; + OTicker *stocktickerTicker; + QCString stock_liste; + bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck; + bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck; + bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck; void getStocks(char *blah) { -// stocktickerTicker->setText( "Downloading stock data."); - stock *stocks_quotes=NULL; - stock *stocks_tmp; - QCString stock_liste = blah; - ::free ( blah ); - // char *stock_liste = (char *)blah->latin1(); - qDebug("%s", stock_liste.data() ); - QString tempString; - output = ""; - - libstocks_return_code error; - - Config cfg( "stockticker"); - cfg.setGroup( "Fields" ); - bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck; - bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck; - bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck; - - dotimeCheck=dodateCheck=dosymbolCheck=donameCheck= docurrentPriceCheck=dolastPriceCheck=doopenPriceCheck=dominPriceCheck=domaxPriceCheck=dovariationCheck=dovolumeCheck=false; - - dotimeCheck=cfg.readBoolEntry("timeCheck",1); - dodateCheck=cfg.readBoolEntry("dateCheck",1); - dosymbolCheck=cfg.readBoolEntry("symbolCheck",1); - donameCheck=cfg.readBoolEntry("nameCheck",1); - docurrentPriceCheck=cfg.readBoolEntry("currentPriceCheck",1); - dolastPriceCheck=cfg.readBoolEntry("lastPriceCheck",1); - doopenPriceCheck=cfg.readBoolEntry("openPriceCheck",1); - dominPriceCheck=cfg.readBoolEntry("minPriceCheck",1); - domaxPriceCheck=cfg.readBoolEntry("maxPriceCheck",1); - dovariationCheck=cfg.readBoolEntry("variationCheck",1); - dovolumeCheck=cfg.readBoolEntry("volumeCheck",1); - -// DefProxy(); - { - char *proxy; - libstocks_return_code error; - - /* Proxy support */ - /* Checks for "http_proxy" environment variable */ - proxy = getenv("http_proxy"); - if(proxy) { - /* printf("proxy set\n"); */ - error = set_proxy(proxy); - if (error) { - printf("Proxy error (%d)\n", error); - QString tempString; - tempString.sprintf("Proxy error (%d)\n", error); - output = tempString; - return; -// exit(1); - } - } - } -// char *stock_liste = (char *)blah; - /* Get the stocks and process errors */ - error = get_stocks( stock_liste.data(), &stocks_quotes); - - if (error) { - printf("Error in getting stocks (%d)\n", error); - tempString.sprintf("Error in getting stocks (%d)\n", error); - output =tempString; - return; -// exit(1); - } - - stocks_tmp = stocks_quotes; - - /* Displays the stocks */ - while(stocks_tmp!=0){ - - if (stocks_tmp->Time) { -// printf("%s ", stocks_tmp->Time); - tempString.sprintf("| %s ", stocks_tmp->Time); - tempString.replace(QRegExp("\""),""); - if( dotimeCheck) - output +=tempString; - } - if (stocks_tmp->Date) { -// printf("%s ", stocks_tmp->Date); - tempString.sprintf("| %s ", stocks_tmp->Date); - tempString.replace(QRegExp("\""),""); - if(dodateCheck) - output +=tempString; - } -// printf("\n"); - -// printf("----------------------------------------\n"); - - if ( strlen(stocks_tmp->Symbol) > 20 ) { -// printf("| Symbol | %.20s |\n",stocks_tmp->Symbol); - tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol); - if(dosymbolCheck) - output +=tempString; - } - else { -// printf("| Symbol | %-20s |\n",stocks_tmp->Symbol); - tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol); - if(dosymbolCheck) - output +=tempString; - } - - if (stocks_tmp->Name) { - if ( strlen(stocks_tmp->Name) > 20 ) { -// printf("| Name %.20s |\n",stocks_tmp->Name); - tempString.sprintf("| Name %s ",stocks_tmp->Name); - tempString.stripWhiteSpace(); - if(donameCheck) - output +=tempString; - } else { -// printf("| Name | %-20s |\n",stocks_tmp->Name); - tempString.sprintf("| Name %s ",stocks_tmp->Name); - tempString.stripWhiteSpace(); - if(donameCheck) - output +=tempString; - } - } - else { -// printf("| Name | |\n"); - tempString.sprintf("| Name | |"); - if(donameCheck) - output +=tempString; - } - -// printf("| Price | %-7.2f |\n", stocks_tmp->CurrentPrice); - tempString.sprintf("| Price %-7.2f ", stocks_tmp->CurrentPrice); - if(docurrentPriceCheck) - output +=tempString; - -// printf("| Yesterday | %-7.2f |\n",stocks_tmp->LastPrice); - tempString.sprintf("| Yesterday %-7.2f ",stocks_tmp->LastPrice); - if(dolastPriceCheck) - output +=tempString; - -// printf("| Open | %-7.2f |\n",stocks_tmp->OpenPrice); - tempString.sprintf("| Open %-7.2f ",stocks_tmp->OpenPrice); - if(doopenPriceCheck) - output +=tempString; - -// printf("| Min | %-7.2f |\n", stocks_tmp->MinPrice); - tempString.sprintf("| Min %-7.2f ", stocks_tmp->MinPrice); - if(dominPriceCheck) - output +=tempString; - -// printf("| Max | %-7.2f |\n",stocks_tmp->MaxPrice); - tempString.sprintf("| Max %-7.2f ",stocks_tmp->MaxPrice); - if(domaxPriceCheck) - output +=tempString; - -// printf("| Var | %-6.2f (%5.2f %%) |\n", stocks_tmp->Variation, stocks_tmp->Pourcentage); - tempString.sprintf("| Var %-6.2f (%5.2f %%) ", stocks_tmp->Variation, stocks_tmp->Pourcentage); - if(dovariationCheck) - output +=tempString; - -// printf("| Volume | %-9d |\n", stocks_tmp->Volume); - tempString.sprintf("| Volume %-9d ", stocks_tmp->Volume); - if(dovolumeCheck) - output +=tempString; - -// printf("----------------------------------------\n\n"); - tempString.sprintf("||==++==|"); - output +=tempString; - - /* Simple function which help to browse in the stocks list */ - stocks_tmp = next_stock(stocks_tmp); - } - - /* frees stocks */ - free_stocks(stocks_quotes); - stocktickerTicker->setText( output.latin1() ); - -} - -StockTickerPluginWidget::StockTickerPluginWidget( QWidget *parent, const char* name) - : QWidget(parent, name ) { - init(); - startTimer(1000); - - stocktickerTicker->setTextFormat(Qt::RichText); -// checkConnection(); -} - -StockTickerPluginWidget::~StockTickerPluginWidget() { -} - -void StockTickerPluginWidget::init() { - - QHBoxLayout* layout = new QHBoxLayout( this ); - stocktickerTicker = new OTicker(this); -// stocktickerTicker->setMinimumHeight(15); - connect( stocktickerTicker, SIGNAL( mousePressed()), this, SLOT( checkConnection() )); - layout->addWidget( stocktickerTicker); - wasError = true; -} - -void StockTickerPluginWidget::doStocks() { - Config cfg( "stockticker"); - cfg.setGroup( "Symbols" ); - symbollist=""; - symbollist = cfg.readEntry("Symbols", ""); - symbollist.replace(QRegExp(" "),"+");//seperated by + - - cfg.setGroup("Timer"); - stocktickerTicker->setUpdateTime( cfg.readNumEntry("ScrollSpeed",50)); - stocktickerTicker->setScrollLength( cfg.readNumEntry("ScrollLength",10)); - - if (!symbollist.isEmpty()) { - pthread_t thread1; - char *blah = ::strdup(symbollist.latin1()); - pthread_create(&thread1,NULL, (void * (*)(void *))getStocks, (void *) blah); - } -} - -void StockTickerPluginWidget::timerEvent( QTimerEvent *e ) { - killTimer(e->timerId()); - checkConnection(); -} - -void StockTickerPluginWidget::checkConnection() { -// qDebug("checking connection"); -// Sock = new QSocket( this ); - -// if( wasError) -// stocktickerTicker->setText("Checking connection"); - -// if(Sock->state() == QSocket::Idle) { -// Sock->connectToHost("finance.yahoo.com", 80); -// connect( Sock, SIGNAL( error(int) ), SLOT(socketError(int)) ); -// connect( Sock, SIGNAL( hostFound() ), SLOT(isConnected()) ); -// } else { -// qDebug("State is not Idle"); - isConnected(); -// } -} - -void StockTickerPluginWidget::isConnected() { -// qDebug("We connect, so ok to grab stocks"); - doStocks(); - - Config cfg( "stockticker"); - cfg.setGroup("Timer"); - timerDelay= cfg.readNumEntry("Delay",0); - if(timerDelay > 0) - startTimer(timerDelay*60000); - qDebug("timer set for %d",(timerDelay*60000)/60000); - wasError = false; - -// Sock->close(); -} - -void StockTickerPluginWidget::socketError(int errcode) { - switch(errcode) { - case QSocket::ErrConnectionRefused: - output = tr("Connection refused."); - break; - case QSocket::ErrHostNotFound: - output = tr("Could not find server."); - break; - case QSocket::ErrSocketRead : - output = tr("Socket read error."); - break; - }; - stocktickerTicker->setText( output ); - wasError = true; -// Sock->close(); - -} + // stocktickerTicker->setText( "Downloading stock data."); + stock *stocks_quotes=NULL; + stock *stocks_tmp; + stock_liste = blah; + ::free ( blah ); + // char *stock_liste = (char *)blah->latin1(); + // qDebug("%s", stock_liste.data() ); + output = ""; + QString tempString; + libstocks_return_code error; + +// Config cfg( "stockticker"); +// cfg.setGroup( "Fields" ); +// bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck; +// bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck; +// bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck; + + dotimeCheck=dodateCheck=dosymbolCheck=donameCheck= docurrentPriceCheck=dolastPriceCheck=doopenPriceCheck=dominPriceCheck=domaxPriceCheck=dovariationCheck=dovolumeCheck=false; + + dotimeCheck=1; + dodateCheck=1; + dosymbolCheck=1; + donameCheck=1; + docurrentPriceCheck=1; + dolastPriceCheck=1; + doopenPriceCheck=1; + dominPriceCheck=1; + domaxPriceCheck=1; + dovariationCheck=1; + dovolumeCheck=1; + +// dotimeCheck=cfg.readBoolEntry("timeCheck",1); +// dodateCheck=cfg.readBoolEntry("dateCheck",1); +// dosymbolCheck=cfg.readBoolEntry("symbolCheck",1); +// donameCheck=cfg.readBoolEntry("nameCheck",1); +// docurrentPriceCheck=cfg.readBoolEntry("currentPriceCheck",1); +// dolastPriceCheck=cfg.readBoolEntry("lastPriceCheck",1); +// doopenPriceCheck=cfg.readBoolEntry("openPriceCheck",1); +// dominPriceCheck=cfg.readBoolEntry("minPriceCheck",1); +// domaxPriceCheck=cfg.readBoolEntry("maxPriceCheck",1); +// dovariationCheck=cfg.readBoolEntry("variationCheck",1); +// dovolumeCheck=cfg.readBoolEntry("volumeCheck",1); + + // DefProxy(); + // { + char *proxy; + // libstocks_return_code error; + + /* Proxy support */ + /* Checks for "http_proxy" environment variable */ + proxy = getenv("http_proxy"); + if(proxy) { + /* printf("proxy set\n"); */ + error = set_proxy(proxy); + if (error) { +// printf("Proxy error (%d)\n", error); +// QString tempString2; +// tempString2.sprintf("Proxy error (%d)\n", error); +// output = tempString2; + // delete tempString2; + return; + // exit(1); + } + } + ::free(proxy); + // } + /* Get the stocks and process errors */ + error = get_stocks( stock_liste.data(), &stocks_quotes); + + if (error) { + printf("Error in getting stocks (%d)\n", error); + tempString.sprintf("Error in getting stocks (%d)\n", error); + output =tempString; + return; + } + + stocks_tmp = stocks_quotes; + + /* Displays the stocks */ + while(stocks_tmp!=0){ + + if (stocks_tmp->Time) { + // printf("%s ", stocks_tmp->Time); + tempString.sprintf("| %s ", stocks_tmp->Time); + tempString.replace(QRegExp("\""),""); + if( dotimeCheck) + output +=tempString; + } + if (stocks_tmp->Date) { + // printf("%s ", stocks_tmp->Date); + tempString.sprintf("| %s ", stocks_tmp->Date); + tempString.replace(QRegExp("\""),""); + if(dodateCheck) + output +=tempString; + } + // printf("\n"); + + // printf("----------------------------------------\n"); + + if ( strlen(stocks_tmp->Symbol) > 20 ) { + // printf("| Symbol | %.20s |\n",stocks_tmp->Symbol); + tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol); + if(dosymbolCheck) + output +=tempString; + } + else { + // printf("| Symbol | %-20s |\n",stocks_tmp->Symbol); + tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol); + if(dosymbolCheck) + output +=tempString; + } + + if (stocks_tmp->Name) { + if ( strlen(stocks_tmp->Name) > 20 ) { + // printf("| Name %.20s |\n",stocks_tmp->Name); + tempString.sprintf("| Name %s ",stocks_tmp->Name); + tempString.stripWhiteSpace(); + if(donameCheck) + output +=tempString; + } else { + // printf("| Name | %-20s |\n",stocks_tmp->Name); + tempString.sprintf("| Name %s ",stocks_tmp->Name); + tempString.stripWhiteSpace(); + if(donameCheck) + output +=tempString; + } + } + else { + // printf("| Name | |\n"); + tempString.sprintf("| Name | |"); + if(donameCheck) + output +=tempString; + } + + // printf("| Price | %-7.2f |\n", stocks_tmp->CurrentPrice); + tempString.sprintf("| Price %-7.2f ", stocks_tmp->CurrentPrice); + if(docurrentPriceCheck) + output +=tempString; + + // printf("| Yesterday | %-7.2f |\n",stocks_tmp->LastPrice); + tempString.sprintf("| Yesterday %-7.2f ",stocks_tmp->LastPrice); + if(dolastPriceCheck) + output +=tempString; + + // printf("| Open | %-7.2f |\n",stocks_tmp->OpenPrice); + tempString.sprintf("| Open %-7.2f ",stocks_tmp->OpenPrice); + if(doopenPriceCheck) + output +=tempString; + + // printf("| Min | %-7.2f |\n", stocks_tmp->MinPrice); + tempString.sprintf("| Min %-7.2f ", stocks_tmp->MinPrice); + if(dominPriceCheck) + output +=tempString; + + // printf("| Max | %-7.2f |\n",stocks_tmp->MaxPrice); + tempString.sprintf("| Max %-7.2f ",stocks_tmp->MaxPrice); + if(domaxPriceCheck) + output +=tempString; + + // printf("| Var | %-6.2f (%5.2f %%) |\n", stocks_tmp->Variation, stocks_tmp->Pourcentage); + tempString.sprintf("| Var %-6.2f (%5.2f %%) ", stocks_tmp->Variation, stocks_tmp->Pourcentage); + if(dovariationCheck) + output +=tempString; + + // printf("| Volume | %-9d |\n", stocks_tmp->Volume); + tempString.sprintf("| Volume %-9d ", stocks_tmp->Volume); + if(dovolumeCheck) + output +=tempString; + + // printf("----------------------------------------\n\n"); + tempString.sprintf("||==++==|"); + output +=tempString; + + /* Simple function which help to browse in the stocks list */ + stocks_tmp = next_stock(stocks_tmp); + } + + stocktickerTicker->setText( output.latin1() ); + + /* frees stocks */ + free_stocks(stocks_quotes); + free_stocks(stocks_tmp); + + stock_liste=""; + //delete stock_liste; + tempString=""; + output=""; + } + + StockTickerPluginWidget::StockTickerPluginWidget( QWidget *parent, const char* name) + : QWidget(parent, name ) { + init(); + startTimer(1000); + + stocktickerTicker->setTextFormat(Qt::RichText); + // checkConnection(); + } + + StockTickerPluginWidget::~StockTickerPluginWidget() { + } + + void StockTickerPluginWidget::init() { + + QHBoxLayout* layout = new QHBoxLayout( this ); + stocktickerTicker = new OTicker(this); + // stocktickerTicker->setMinimumHeight(15); + connect( stocktickerTicker, SIGNAL( mousePressed()), this, SLOT( checkConnection() )); + layout->addWidget( stocktickerTicker); + wasError = true; + } + + void StockTickerPluginWidget::doStocks() { + Config cfg( "stockticker"); + cfg.setGroup( "Symbols" ); + symbollist=""; + symbollist = cfg.readEntry("Symbols", ""); + symbollist.replace(QRegExp(" "),"+");//seperated by + + + cfg.setGroup("Timer"); + stocktickerTicker->setUpdateTime( cfg.readNumEntry("ScrollSpeed",50)); + stocktickerTicker->setScrollLength( cfg.readNumEntry("ScrollLength",10)); + + if (!symbollist.isEmpty()) { + pthread_t thread1; + char *blah = ::strdup(symbollist.latin1()); + pthread_create( &thread1, NULL, (void * (*)(void *))getStocks, (void *) blah); + pthread_detach( thread1); + + //::free((void*)thread1); + //getStocks(blah); + } + } + + void StockTickerPluginWidget::timerEvent( QTimerEvent *e ) { + killTimer(e->timerId()); + checkConnection(); + } + + void StockTickerPluginWidget::checkConnection() { + // qDebug("checking connection"); + // Sock = new QSocket( this ); + + // if( wasError) + // stocktickerTicker->setText("Checking connection"); + + // if(Sock->state() == QSocket::Idle) { + // Sock->connectToHost("finance.yahoo.com", 80); + // connect( Sock, SIGNAL( error(int) ), SLOT(socketError(int)) ); + // connect( Sock, SIGNAL( hostFound() ), SLOT(isConnected()) ); + // } else { + // qDebug("State is not Idle"); + isConnected(); + // } + } + + void StockTickerPluginWidget::isConnected() { + // qDebug("We connect, so ok to grab stocks"); + if(this->isVisible()) + doStocks(); + + Config cfg( "stockticker"); + cfg.setGroup("Timer"); + timerDelay= cfg.readNumEntry("Delay",0); + if(timerDelay > 0) + startTimer(timerDelay*60000); + // qDebug("timer set for %d",(timerDelay*60000)/60000); + wasError = false; + + // Sock->close(); + } + + void StockTickerPluginWidget::socketError(int errcode) { + switch(errcode) { + case QSocket::ErrConnectionRefused: + output = tr("Connection refused."); + break; + case QSocket::ErrHostNotFound: + output = tr("Could not find server."); + break; + case QSocket::ErrSocketRead : + output = tr("Socket read error."); + break; + }; + stocktickerTicker->setText( output ); + wasError = true; + // Sock->close(); + + } |