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); }
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; } }