1
0
Fork 0
x64dbg/src/gui/Src/Gui/YaraRuleSelectionDialog.cpp

77 lines
2.2 KiB
C++

#include "YaraRuleSelectionDialog.h"
#include "ui_YaraRuleSelectionDialog.h"
#include <QMessageBox>
#include <QDir>
#include <QFileDialog>
#include <QDirIterator>
#include "Imports.h"
YaraRuleSelectionDialog::YaraRuleSelectionDialog(QWidget* parent, const QString & title) :
QDialog(parent),
ui(new Ui::YaraRuleSelectionDialog)
{
ui->setupUi(this);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint | Qt::MSWindowsFixedSizeDialogHint);
setFixedSize(this->size()); //fixed size
setWindowTitle(title);
char setting[MAX_SETTING_SIZE] = "";
if(BridgeSettingGet("Misc", "YaraRulesDirectory", setting))
{
rulesDirectory = QString(setting);
enumRulesDirectory();
}
}
YaraRuleSelectionDialog::~YaraRuleSelectionDialog()
{
delete ui;
}
QString YaraRuleSelectionDialog::getSelectedFile()
{
return selectedFile;
}
void YaraRuleSelectionDialog::on_buttonDirectory_clicked()
{
QString dir = QFileDialog::getExistingDirectory(this, "Select Yara Rules Directory...");
if(!dir.length())
return;
rulesDirectory = QDir::toNativeSeparators(dir);
BridgeSettingSet("Misc", "YaraRulesDirectory", dir.toUtf8().constData());
enumRulesDirectory();
}
void YaraRuleSelectionDialog::on_buttonFile_clicked()
{
QString file = QFileDialog::getOpenFileName(this, "Select Yara Rule...", rulesDirectory);
if(!file.length())
return;
selectedFile = QDir::toNativeSeparators(file);
this->accept();
}
void YaraRuleSelectionDialog::on_buttonSelect_clicked()
{
if(!ui->listRules->selectedItems().size()) //no selection
return;
int selectedIndex = ui->listRules->row(ui->listRules->selectedItems().at(0));
selectedFile = ruleFiles.at(selectedIndex).first;
this->accept();
}
void YaraRuleSelectionDialog::enumRulesDirectory()
{
ruleFiles.clear();
ui->listRules->clear();
QDirIterator it(rulesDirectory, QDir::Files, QDirIterator::Subdirectories);
while(it.hasNext())
{
it.next();
ruleFiles.append(QPair<QString, QString>(QDir::toNativeSeparators(it.filePath()), it.fileName()));
ui->listRules->addItem(it.fileName());
}
ui->listRules->setCurrentRow(0);
}