#include #include "configdialog.h" #include "helpwindow.h" #include "mainwindow.h" #include "highlighter.h" #include "ruleset-parser/parser.h" #include "ruleset-parser/rule.h" #include "rule-editor.h" #include #include "mainwindow.moc" /* * See http://doc.trolltech.com/4.3/mainwindows-application.html * Recent files : http://doc.trolltech.com/4.3/mainwindows-recentfiles.html */ LMLEditMainWindow::LMLEditMainWindow(QWidget *parent) : QMainWindow(parent) { ui = new Ui::MainWindow(); ui->setupUi(this); connectSlots(); ruleEdit = new RuleEditor(); connect(ruleEdit,SIGNAL(accepted()),this,SLOT(ruleModified())); } void LMLEditMainWindow::connectSlots() { connect(ui->addRuleAct, SIGNAL(triggered()), this, SLOT(addRule())); connect(ui->openRulesetAct, SIGNAL(triggered()), this, SLOT(openRuleset())); connect(ui->rulesView,SIGNAL(itemActivated(QListWidgetItem *)),this,SLOT(editRule(QListWidgetItem*))); connect(ui->settingsAct, SIGNAL(triggered()), this, SLOT(showConfig())); connect(ui->helpAct, SIGNAL(triggered()), this, SLOT(showHelp())); connect(ui->aboutAct, SIGNAL(triggered()), this, SLOT(about())); connect(ui->aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); } void LMLEditMainWindow::addRule() { ruleEdit->clear(); ruleEdit->setIndex(-1); // -1 means we will create a new entry. See ruleModified() ruleEdit->show(); } void LMLEditMainWindow::editRule(QListWidgetItem * item) { Rule * rule; ruleEdit->clear(); ruleEdit->setIndex( ui->rulesView->row(item) ); rule = rulesList.at(ui->rulesView->row(item)); Q_ASSERT(rule != NULL); ruleEdit->setRule( rule ); ruleEdit->show(); } void LMLEditMainWindow::openRuleset() { // if (maybeSave()) { QString fileName = QFileDialog::getOpenFileName(this,tr("Open Ruleset"),"",tr("Ruleset files (*.rules)")); if (!fileName.isEmpty()) openRulesetFile(fileName); // } } void LMLEditMainWindow::showConfig() { QDialog * configDlg = getConfigDialog(); if (configDlg->exec()) { // apply new configuration } } /** \brief Add or edit rule */ void LMLEditMainWindow::ruleModified() { QListWidgetItem * it; Rule * rule = NULL, * old_rule = NULL; QString str = ruleEdit->regex(); int rule_index = ruleEdit->index(); rule = (Rule*)(*ruleEdit); if (rule != NULL) { if (rule_index == -1) { it = new QListWidgetItem(str,ui->rulesView); rulesList.append(rule); Q_ASSERT(rulesList.size() == ui->rulesView->count()); it->setToolTip("tooltip"); } else { it = ui->rulesView->item(rule_index); if (it != NULL) { it->setData(Qt::DisplayRole,ruleEdit->regex()); old_rule = rulesList.at(rule_index); Q_ASSERT(old_rule != NULL); rulesList.replace(rule_index,rule); delete old_rule; } else { qCritical("Edited rule index %d is not valid !",rule_index); delete rule; } } } } void LMLEditMainWindow::showHelp() { show_helpwindow(); } void LMLEditMainWindow::about() { QMessageBox::about(this, tr("About Application"), tr("lmledit, a regular expression editor for " "Prelude-IDS
" "(C) 2007,2008 Pierre Chifflier (chifflier AT inl.fr)")); } void LMLEditMainWindow::closeEvent (QCloseEvent * event) { ruleEdit->close(); } void LMLEditMainWindow::openRulesetFile(const QString &fileName) { QApplication::setOverrideCursor(Qt::WaitCursor); RulesetParser parser(fileName); QApplication::restoreOverrideCursor(); if (!parser.isValid()) { QMessageBox::warning(this, tr("Application"), tr("Could not load ruleset file: %1") .arg(fileName) ); return; } if (parser.rulesNumber() == 0) { statusBar()->showMessage(tr("Empty ruleset (loading failed ?)"), 4000); return; } QApplication::setOverrideCursor(Qt::WaitCursor); rulesList = parser.rules(); // rebuild rules view ui->rulesView->clear(); for (int i = 0; i < rulesList.size(); ++i) { Rule * rule = rulesList.at(i); QListWidgetItem * it = new QListWidgetItem(rule->buffer(),ui->rulesView); } setCurrentRulesetFile(fileName); /* int index = chooser.getSelected(); const Rule * rule = parser[index]; if (rule) { regexEditor->setText(rule->regex()); const QStringList list = rule->logSamples(); for (int i=0; iappend(list.at(i)); } QList options = rule->options(); optionsTable->clearContents(); optionsTable->setRowCount(options.size()+1); for (int i=0; igetOption( options.at(i) ).toAscii() ); QTableWidgetItem *newItem = new QTableWidgetItem(options.at(i)); optionsTable->setItem(i,0,newItem); newItem = new QTableWidgetItem(rule->getOption(options.at(i))); optionsTable->setItem(i,1,newItem); } optionsTable->show(); QApplication::restoreOverrideCursor(); } else { QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Application"), tr("Selection returned invalid index: %1") .arg(index) ); } */ // XXX TODO keep current rules QApplication::restoreOverrideCursor(); //setCurrentRegexFile(fileName); statusBar()->showMessage(tr("Ruleset loaded"), 2000); } void LMLEditMainWindow::setCurrentRulesetFile(const QString &fileName) { curRuleSet = fileName; //textEdit->document()->setModified(false); setWindowModified(false); QString shownName; if (curRuleSet.isEmpty()) shownName = "untitled"; else shownName = strippedName(curRuleSet); setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("lmledit"))); } QString LMLEditMainWindow::strippedName(const QString &fullFileName) { return QFileInfo(fullFileName).fileName(); }