void PlotWidget::addPlot (QString plugin, int row, QString name) { PluginFactory fac; Plugin *plug = fac.load(plugin); if (! plug) return; PluginData pd; pd.command = QString("settings"); if (! plug->command(&pd)) return; Entity *settings = pd.settings; settings->setName(name); _settings.insert(name, settings); addPlotSettings(settings); QVariant *tset = settings->get(QString("row")); if (tset) tset->setValue(row); Plot *plot = new Plot(name, 0); plot->setMinimumHeight(30); _plots.insert(name, plot); _csplitter->insertWidget(row, plot); plot->setStartIndex(_cw->scrollBarValue()); // connect all we need here connect(plot, SIGNAL(signalResizeScrollBar(Plot *)), _cw, SLOT(resizeScrollBar(Plot *))); connect(this, SIGNAL(signalClear()), plot, SLOT(clear())); connect(this, SIGNAL(signalDraw()), plot, SLOT(updatePlot())); connect(this, SIGNAL(signalSetDates()), plot, SLOT(setDates())); connect(this, SIGNAL(signalBarLength(int)), plot, SLOT(setBarLength(int))); connect(this, SIGNAL(signalIndex(int)), plot, SLOT(setStartIndex(int))); connect(plot, SIGNAL(signalMessage(QString)), this, SIGNAL(signalMessage(QString))); connect(plot, SIGNAL(signalDeleteMarkers(QStringList)), this, SLOT(deleteMarkers(QStringList))); }
int MarkerSell::create (PluginData *pd) { if (! pd->data) return 0; Marker *sell = (Marker *) pd->data; pd->status = PlotStatus::_MOVE; sell->setSelected(TRUE); emit signalMessage(QObject::tr("Place Sell marker")); return 1; }
int MarkerRetracement::create (PluginData *pd) { if (! pd->data) return 0; Marker *m = (Marker *) pd->data; pd->status = PlotStatus::_CREATE_MOVE; m->setSelected(TRUE); emit signalMessage(tr("Select highest starting point...")); return 1; }
int MarkerTLine::create (PluginData *pd) { if (! pd->data) return 0; Marker *tline = (Marker *) pd->data; pd->status = PlotStatus::_CREATE_MOVE; tline->setSelected(TRUE); emit signalMessage(tr("Place TLine marker...")); return 1; }
void PlotWidget::addPlot (QString plugin, int row, QString name) { qWarning() << "PlotWidget::addPlot - " << name; IIndicatorPlugin *plug = dynamic_cast<IIndicatorPlugin*>(((PluginFactory*)PluginFactory::getPluginFactory())->loadPlugin(plugin)); if (! plug) return; Entity *settings = plug->querySettings(); settings->setName(name); _settings.insert(name, settings); addPlotSettings(settings); QVariant *tset = settings->get(QString("row")); if (tset) tset->setValue(row); Plot *plot = new Plot(name, 0); plot->setMinimumHeight(30); _plots.insert(name, plot); _csplitter->insertWidget(row, plot); plot->setStartIndex(_controlWidget->scrollBarValue()); // connect all we need here connect(plot, SIGNAL(signalResizePanScrollBar(Plot *)), _controlWidget, SLOT(resizePanScrollBar(Plot *))); connect(this, SIGNAL(signalClear()), plot, SLOT(clear())); connect(this, SIGNAL(signalDraw()), plot, SLOT(updatePlot())); connect(this, SIGNAL(signalSetDates()), plot, SLOT(setDates())); connect(this, SIGNAL(signalBarLength(int)), plot, SLOT(setBarLength(int))); connect(this, SIGNAL(signalIndex(int)), plot, SLOT(setStartIndex(int))); connect(plot, SIGNAL(signalMessage(QString)), this, SIGNAL(signalMessage(QString))); connect(plot, SIGNAL(signalDeleteMarkers(QStringList)), this, SLOT(deleteMarkers(QStringList))); connect(_controlWidget, SIGNAL(signalRange(int)), plot, SLOT(setPage(int))); }
void NetfondsHistoryDownload::download(QStringList symbols) { _stop = FALSE; QNetworkAccessManager manager; QEventLoop eventLoop; QProgressDialog progressDialog("Downloading...", "Cancel", 0, symbols.size()); connect(&progressDialog, SIGNAL(canceled()), this, SLOT(stop())); connect(&progressDialog, SIGNAL(canceled()), &eventLoop, SLOT(quit())); progressDialog.setWindowModality(Qt::ApplicationModal); progressDialog.show(); for (int loop = 0; (!_stop && loop < symbols.size()); loop++) { progressDialog.setValue(loop); QString symbol = symbols.at(loop); symbol = symbol.trimmed(); if (symbol.isEmpty()) continue; QString name; name = symbol; // get the url QString url; getUrl(symbol, url); QStringList mess; mess << url; mess << tr("Downloading") << symbol; emit signalMessage(mess.join(" ")); mess << "..."; progressDialog.setLabelText(QString("Downloading ").append(symbol).append("...")); // download the data QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(url))); connect(&progressDialog, SIGNAL(canceled()), &eventLoop, SLOT(quit())); QObject::connect(&manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit())); eventLoop.exec(); // parse the data and save quotes QByteArray ba = reply->readAll(); parseHistory(ba, symbol, name); } }
int QtTrader::loadPlugin (QString name) { if (name.isEmpty()) return 0; IGUIPlugin *pPlugin = 0; pPlugin = dynamic_cast<IGUIPlugin*>(((PluginFactory*)PluginFactory::getPluginFactory())->loadPlugin(name)); if(pPlugin){ Widget* pWidget = pPlugin->create(); // if the plugin returns a widget, set it to main window if(pWidget != NULL) { //remove old central Widget Widget *cw = (Widget *) centralWidget(); if (cw) { QToolBar *tb = cw->toolbar(); if (tb) { removeToolBar(cw->toolbar()); delete tb; } delete cw; } //And then set up the new one setCentralWidget(pWidget); connect(pWidget, SIGNAL(signalMessage(QString)), this, SLOT(statusMessage(QString))); connect(pWidget, SIGNAL(signalTitle(QString)), this, SLOT(setWindowTitle(QString))); QToolBar *pToolBar = pWidget->toolbar(); if (pToolBar){ addToolBar(pToolBar); } } } return 1; }
void NetfondsHistoryDownload::parseHistory(QByteArray &ba, QString &symbol, QString &name) { //quote_date,paper,exch,open,high,low,close,volume,value //20121101,OMXS30,Stockholm,1050.03,1064.08,1047.28,1062.51,0,0 QString ts(ba); QStringList ll = ts.split('\n'); Bars sym; sym.setExchange(QString("NETFONDS")); sym.setTicker(symbol); sym.setName(name); sym.setSymbolType(QString("Stock")); BarType bt; int line = 0; int loop = 1; // skip past first line for (; loop < ll.size()-2; loop++) { line++; ts = ll[loop].remove('"'); ts = ts.trimmed(); if (! ts.length()){ QStringList mess; mess << symbol << tr("Error!!"); emit signalMessage(mess.join(" ")); return; } QStringList l = ts.split(","); if (l.size() != 9) { QStringList mess; mess << symbol << ":" << tr("invalid # of fields, record skipped"); emit signalMessage(mess.join(" ")); return; } CBar *bar = new CBar; QDateTime dt = QDateTime::fromString(l.at(0).trimmed(), "yyyyMMdd"); if (! dt.isValid()) { delete bar; QStringList mess; mess << symbol << ":" << tr("invalid date") << l.at(0); emit signalMessage(mess.join(" ")); return; } else bar->setDate(dt); // verify open int pos = 3; bool ok; double t = l.at(pos).trimmed().toDouble(&ok); if (! ok) { delete bar; QStringList mess; mess << tr("Error, invalid open") << l.at(pos); emit signalMessage(mess.join(" ")); return; } else bar->set(bt.indexToString(BarType::_OPEN), t); // verify high pos = 4; t = l.at(pos).trimmed().toDouble(&ok); if (! ok) { delete bar; QStringList mess; mess << tr("Error, invalid high") << l.at(pos); emit signalMessage(mess.join(" ")); return; } else bar->set(bt.indexToString(BarType::_HIGH), t); // verify low pos = 5; t = l.at(pos).trimmed().toDouble(&ok); if (! ok) { delete bar; QStringList mess; mess << tr("Error, invalid low") << l.at(pos); emit signalMessage(mess.join(" ")); return; } else bar->set(bt.indexToString(BarType::_LOW), t); // verify close pos = 6; t = l.at(pos).trimmed().toDouble(&ok); if (! ok) { delete bar; QStringList mess; mess << tr("Error, invalid close") << l.at(pos); emit signalMessage(mess.join(" ")); return; } else bar->set(bt.indexToString(BarType::_CLOSE), t); // verify volume pos = 7; t = l.at(pos).trimmed().toDouble(&ok); if (! ok) { delete bar; QStringList mess; mess << tr("Error, invalid volume") << l.at(pos); emit signalMessage(mess.join(" ")); return; } else bar->set(bt.indexToString(BarType::_VOLUME), t); sym.setBar(sym.bars(), bar); } IDBPlugin *plug = dynamic_cast<IDBPlugin*>(((PluginFactory*)PluginFactory::getPluginFactory())->loadPlugin(QString("Database"))); if (! plug) { QStringList mess; mess << tr("Error, Database plugin missing"); emit signalMessage(mess.join(" ")); return; } if (!plug->init()) return; if (!plug->setBars(&sym)) return; }
void ProtocolController::onServerDataEvent(QByteArray &data) { const QByteArray seperator("\r\n"); if ( data.startsWith("MESSAGE:") ) { QByteArray preparedData = prepareRequest(data, QByteArrayLiteral("MESSAGE:")); if ( preparedData.size() > 0 ) { int seperatorIndex = preparedData.indexOf(seperator); QByteArray username = preparedData.left(seperatorIndex); QByteArray message = preparedData.mid(seperatorIndex + seperator.length()); signalMessage(username, message); } } else if ( data.startsWith("STARTUP:") ) { QByteArray preparedData = prepareRequest(data, QByteArrayLiteral("STARTUP:")); if ( preparedData.size() > 0 ) { int seperatorIndex = preparedData.indexOf(seperator); QByteArray username = preparedData.left(seperatorIndex); QByteArray publicKey = preparedData.mid(seperatorIndex + seperator.length()); signalStartup(username, publicKey); } } else if ( data.startsWith("ENCRYPT:") ) { QByteArray preparedData = prepareRequest(data, QByteArrayLiteral("ENCRYPT:")); if ( preparedData.size() > 0 ) { int seperatorIndex = preparedData.indexOf(seperator); QByteArray username = preparedData.left(seperatorIndex); QByteArray message = preparedData.mid(seperatorIndex + seperator.length()); signalEncrypt(username, message); } } else if ( data.startsWith("IDENTITY-CHECK:") ) { QByteArray encryptedRandomString = stripRequest(data, QByteArrayLiteral("IDENTITY-CHECK:")); if ( encryptedRandomString.size() > 0 ) { signalIdentityCheck(encryptedRandomString); } } else if ( data.startsWith("AUTHENTICATION-ACCEPTED") ) { emit signalAuthenticationSucceded(); } else if ( data.startsWith("NOTIFICATION:") ) { QByteArray notificationString = stripRequest(data, QByteArrayLiteral("NOTIFICATION:")); qDebug() << "Received notification: " << notificationString; if ( notificationString.startsWith("ONLINE") ) { int seperatorIndex = notificationString.indexOf(seperator); QByteArray username = notificationString.mid(seperatorIndex + seperator.length()); qDebug() << "User " << username << " is online"; emit signalUserOnline(username); } } else { qWarning() << "UNKNOWN ACTION"; signalError(QByteArrayLiteral("UNKNOWN ACTION")); } }
void Widget::message (QString d) { emit signalMessage(d); }
int MarkerRetracement::click (PluginData *pd) { if (! pd->data) return 0; Marker *m = (Marker *) pd->data; switch (pd->status) { case PlotStatus::_SELECTED: { switch (pd->button) { case Qt::LeftButton: { int grab = m->isGrabSelected(pd->point); if (grab) { pd->status = PlotStatus::_MOVE; if (grab == 2) pd->status = PlotStatus::_MOVE2; return 1; } if (! m->isSelected(pd->point)) { pd->status = PlotStatus::_NONE; m->setSelected(FALSE); Plot *tplot = (Plot *) m->plot(); tplot->unselectMarker(); m->plot()->replot(); return 1; } break; } case Qt::RightButton: { Plot *p = (Plot *) m->plot(); p->showMarkerMenu(); break; } default: break; } break; } case PlotStatus::_MOVE: case PlotStatus::_CREATE_MOVE: { switch (pd->button) { case Qt::LeftButton: if (pd->status == PlotStatus::_CREATE_MOVE) { pd->status = PlotStatus::_MOVE2; emit signalMessage(tr("Select lowest ending point...")); return 1; } pd->status = PlotStatus::_SELECTED; return 1; default: break; } break; } case PlotStatus::_MOVE2: { switch (pd->button) { case Qt::LeftButton: pd->status = PlotStatus::_SELECTED; return 1; default: break; } break; } default: // _None { switch (pd->button) { case Qt::LeftButton: { if (m->isSelected(pd->point)) { pd->status = PlotStatus::_SELECTED; m->setSelected(TRUE); Plot *tplot = (Plot *) m->plot(); tplot->selectMarker(m->ID()); m->plot()->replot(); return 1; } break; } default: break; } break; } } return 1; }