static std::error_code loadEncodedRules(ExecState& exec, const String& rules, Vector<ContentExtensionRule>& ruleList)
{
    VM& vm = exec.vm();
    auto scope = DECLARE_THROW_SCOPE(vm);

    // FIXME: JSONParse should require callbacks instead of an ExecState.
    const JSValue decodedRules = JSONParse(&exec, rules);

    if (scope.exception() || !decodedRules)
        return ContentExtensionError::JSONInvalid;

    if (!decodedRules.isObject())
        return ContentExtensionError::JSONTopLevelStructureNotAnObject;

    const JSObject* topLevelObject = decodedRules.toObject(&exec);
    if (!topLevelObject || scope.exception())
        return ContentExtensionError::JSONTopLevelStructureNotAnObject;
    
    if (!isJSArray(topLevelObject))
        return ContentExtensionError::JSONTopLevelStructureNotAnArray;

    const JSArray* topLevelArray = jsCast<const JSArray*>(topLevelObject);

    Vector<ContentExtensionRule> localRuleList;

    unsigned length = topLevelArray->length();
    const unsigned maxRuleCount = 50000;
    if (length > maxRuleCount)
        return ContentExtensionError::JSONTooManyRules;
    for (unsigned i = 0; i < length; ++i) {
        const JSValue value = topLevelArray->getIndex(&exec, i);
        if (scope.exception() || !value)
            return ContentExtensionError::JSONInvalidObjectInTopLevelArray;

        const JSObject* ruleObject = value.toObject(&exec);
        if (!ruleObject || scope.exception())
            return ContentExtensionError::JSONInvalidRule;

        auto error = loadRule(exec, *ruleObject, localRuleList);
        if (error)
            return error;
    }

    ruleList = WTFMove(localRuleList);
    return { };
}
RuleWidget::RuleWidget(QString fileName)
	: QWidget()
{
	ui.setupUi(this);
	ui.rulesTabs->setCurrentIndex(0);

    filePath=fileName;

    setProperty("FileName",filePath);
    setProperty("GroupType","Rule");

    QSettings loadRule(fileName,QSettings::IniFormat);
    loadRule.beginGroup("JLRuleGroup");
	groupName=loadRule.value("Name","Unknown").toString();
    ui.limitRowsValue->setValue(loadRule.value("LogRowsCount",20).toInt());
	ui.ruleBeep->setChecked(loadRule.value("BeepOnDone",false).toBool());
	ui.notes->setPlainText(loadRule.value("Notes","").toString());
    loadRule.endGroup();

    ordersCancelTime=QTime(1,0,0,0);
    setAttribute(Qt::WA_DeleteOnClose,true);

	updateStyleSheets();

	ui.rulesNoMessage->setVisible(true);
	ui.rulesTabs->setVisible(false);

    rulesModel=new RulesModel(groupName);
	connect(rulesModel,SIGNAL(writeLog(QString)),this,SLOT(writeLog(QString)));
	rulesModel->setParent(this);
	ui.rulesTable->setModel(rulesModel);
    mainWindow.setColumnResizeMode(ui.rulesTable,0,QHeaderView::ResizeToContents);
    mainWindow.setColumnResizeMode(ui.rulesTable,1,QHeaderView::Stretch);

    connect(rulesModel,SIGNAL(ruleDone()),this,SLOT(ruleDone()));

	connect(ui.rulesTable->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),this,SLOT(checkValidRulesButtons()));
	ui.rulesTable->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui.rulesTable, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(rulesMenuRequested(const QPoint&)));

	rulesEnableDisableMenu=new QMenu;
	rulesEnableDisableMenu->addAction("Enable Selected");
	connect(rulesEnableDisableMenu->actions().last(),SIGNAL(triggered(bool)),this,SLOT(ruleEnableSelected()));
	rulesEnableDisableMenu->addAction("Disable Selected");
	connect(rulesEnableDisableMenu->actions().last(),SIGNAL(triggered(bool)),this,SLOT(ruleDisableSelected()));
	rulesEnableDisableMenu->addSeparator();
	rulesEnableDisableMenu->addAction("Enable All");
    connect(rulesEnableDisableMenu->actions().last(),SIGNAL(triggered(bool)),this,SLOT(ruleEnableAll()));
	rulesEnableDisableMenu->addAction("Disable All");
    connect(rulesEnableDisableMenu->actions().last(),SIGNAL(triggered(bool)),this,SLOT(ruleDisableAll()));
	ui.ruleEnableDisable->setMenu(rulesEnableDisableMenu);
	connect(rulesEnableDisableMenu,SIGNAL(aboutToShow()),this,SLOT(ruleDisableEnableMenuFix()));

	languageChanged();

    setWindowTitle(groupName);

    QStringList rulesList=loadRule.childGroups();
    Q_FOREACH(QString group, rulesList)
    {
        if(!group.startsWith("Rule_"))continue;
        RuleHolder holder=RuleScriptParser::readHolderFromSettings(loadRule,group);
        if(holder.isValid())rulesModel->addRule(holder);
    }

	saveRulesData();

	checkValidRulesButtons();

	mainWindow.fixTableViews(this);
}
Exemple #3
0
Scanner::Scanner (QString n, DBIndex *i) : QTabDialog (0, 0, FALSE)
{
  chartIndex = i;
  scannerName = n;
  
  QString s = "Qtstalker Scanner";
  s.append(": ");
  s.append(scannerName);
  setCaption (s);

  QWidget *w = new QWidget(this);
  
  QVBoxLayout *vbox = new QVBoxLayout(w);
  vbox->setMargin(5);
  vbox->setSpacing(5);
  
  QHGroupBox *gbox = new QHGroupBox(tr("Symbol Selection"), w);  
  vbox->addWidget(gbox);

  allSymbols = new QCheckBox(tr("All symbols"), gbox);
  connect(allSymbols, SIGNAL(toggled(bool)), this, SLOT(allSymbolsToggled(bool)));

  fileButton = new QPushButton(tr("0 Symbols"), gbox);
  connect(fileButton, SIGNAL(clicked()), this, SLOT(getSymbols()));

  basePath = new QComboBox(gbox);
  basePath->insertItem(tr("Chart"), -1);
  basePath->insertItem(tr("Group"), -1);

  QGridLayout *grid = new QGridLayout(vbox, 1, 2);
  grid->setColStretch(1, 1);

  QLabel *label = new QLabel(tr("Bar Length"), w);
  grid->addWidget(label, 0, 0);

  BarData bd(scannerName);
  period = new QComboBox(w);
  bd.getBarLengthList(barLengthList);
  period->insertStringList(barLengthList, -1);
  period->setCurrentText("Daily");
  grid->addWidget(period, 0, 1);

  label = new QLabel(tr("Bars"), w);
  grid->addWidget(label, 1, 0);

  bars = new QSpinBox(1, 99999999, 1, w);
  bars->setValue(100);
  grid->addWidget(bars, 1, 1);
  
  list = new FormulaEdit(w, FormulaEdit::Logic);
  vbox->addWidget(list);
  
  setDefaultButton(tr("&Scan"));
  connect(this, SIGNAL(defaultButtonPressed()), this, SLOT(scan()));
  
  setApplyButton(tr("&Apply"));  
  connect(this, SIGNAL(applyButtonPressed()), this, SLOT(saveRule()));
  
  setCancelButton(tr("&Cancel"));  
  connect(this, SIGNAL(cancelButtonPressed()), this, SLOT(exitDialog()));
  
  setOkButton(QString::null);  
  
  setHelpButton();
  QObject::connect(this, SIGNAL(helpButtonPressed()), this, SLOT(slotHelp()));
  
  addTab(w, tr("Parms"));

  loadRule();
}
Transformer::Transformer(string configFilename, bool showRules)
{
  // load configuration file
  cerr << "Loading configuration file: ";
  loadConfig(configFilename);
  cerr << "done" << endl;

  string line;

  // import binary rules
  if (rules2Filename.length() > 0)
  {
    cerr << "Loading binary rules: ";
    if (baseDir != "") rules2Filename = baseDir + "/" + rules2Filename;
    ifstream rules2File(rules2Filename.c_str());
    if (!rules2File) printError("binary rules file `" + rules2Filename + "' could not be found");
    
    ruleCount = 0;
    while (getline(rules2File, line))
    {
      if (line[0] != '%')
      {
	loadRule(line, 2);
	if (ruleCount % 10000 == 0) cerr << '.';    // progress meter
      }
    }
    cerr << ' ' << ruleCount << " binary rules loaded" << endl;
    rules2File.close();

    useRules2 = true;  // enable binary rules
  }

  // import 3+-ary rules
  if (rules3plusFilename.length() > 0)
  {
    cerr << "Loading 3+-ary rules: ";
    if (baseDir != "") rules3plusFilename = baseDir + "/" + rules3plusFilename;
    ifstream rules3plusFile(rules3plusFilename.c_str());
    if (!rules3plusFile) printError("3+-ary rules file `" + rules3plusFilename + "' could not be found");

    ruleCount = 0;
    while (getline(rules3plusFile, line))
    {
      if (line[0] != '%')
      {
	loadRule(line, 3);
	if (ruleCount % 10000 == 0) cerr << '.';    // progress meter
      }
    }
    cerr << ' ' << ruleCount << " 3+-ary rules loaded" << endl;
    rules3plusFile.close();

    useRules3plus = true;  // enable 3+-ary rules
  }
 
  if (showRules)
  {
    cout << "[BINARY RULES]" << endl;
    printRules(2);
    cout << endl;

    cout << "[3+-ARY RULES]" << endl;
    printRules(3);
    cout << endl;
  }
}