示例#1
0
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)));
}
示例#2
0
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;
}
示例#4
0
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;
}
示例#5
0
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);
  }

}
示例#7
0
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"));
    }
}
示例#10
0
void
Widget::message (QString d)
{
  emit signalMessage(d);
}
示例#11
0
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;
}