Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F4325112
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
16 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/trunk/dlgpreferences.cpp b/trunk/dlgpreferences.cpp
index 05ad703..085c310 100644
--- a/trunk/dlgpreferences.cpp
+++ b/trunk/dlgpreferences.cpp
@@ -1,122 +1,200 @@
#include "dlgpreferences.h"
#include "ui_dlgpreferences.h"
#include <QString>
#include <QStringList>
#include <QListIterator>
#include <QModelIndexList>
+#include <QFileDialog>
+#include <QMessageBox>
#include <QDebug>
+/*******************************************************************************
+ * Public
+ ******************************************************************************/
+
DlgPreferences::DlgPreferences(Settings *p_sets, QWidget *p_parent) :
QDialog(p_parent), ui(new Ui::DlgPreferences)
{
ui->setupUi(this);
this->p_settings=p_sets;
// Load current values
this->LoadPreferences();
}
DlgPreferences::~DlgPreferences() {
delete ui;
}
+/*******************************************************************************
+ * Private slots
+ ******************************************************************************/
+
void DlgPreferences::on_BtnCancel_clicked() {
this->reject();
}
void DlgPreferences::on_ListReportLocations_clicked(const QModelIndex &index) {
if(!index.isValid()) {
// No valid row selected, disable some buttons
this->ui->BtnEditReportLoc->setEnabled(false);
this->ui->BtnRemoveReportLoc->setEnabled(false);
this->ui->BtnMoveReportLocUp->setEnabled(false);
this->ui->BtnMoveReportLocDown->setEnabled(false);
return;
}
if(this->ui->ListReportLocations->count()==1) {
// Only one item left, disable up/down buttons
this->ui->BtnEditReportLoc->setEnabled(true);
this->ui->BtnRemoveReportLoc->setEnabled(true);
this->ui->BtnMoveReportLocUp->setEnabled(false);
this->ui->BtnMoveReportLocDown->setEnabled(false);
return;
}
if(index.row()==0) {
// First row selected, disable up button
this->ui->BtnEditReportLoc->setEnabled(true);
this->ui->BtnRemoveReportLoc->setEnabled(true);
this->ui->BtnMoveReportLocUp->setEnabled(false);
this->ui->BtnMoveReportLocDown->setEnabled(true);
return;
}
if(index.row()==(this->ui->ListReportLocations->count()-1)) {
// Last row selected, disable down button
this->ui->BtnEditReportLoc->setEnabled(true);
this->ui->BtnRemoveReportLoc->setEnabled(true);
this->ui->BtnMoveReportLocUp->setEnabled(true);
this->ui->BtnMoveReportLocDown->setEnabled(false);
return;
}
// Any other valid row selected, enable up/down buttons
this->ui->BtnEditReportLoc->setEnabled(true);
this->ui->BtnRemoveReportLoc->setEnabled(true);
this->ui->BtnMoveReportLocUp->setEnabled(true);
this->ui->BtnMoveReportLocDown->setEnabled(true);
}
-void DlgPreferences::LoadPreferences() {
-
- // Populate report location list
- QStringList report_dirs=this->p_settings->GetReportTemplateDirs();
- QListIterator<QString> it_report_dirs(report_dirs);
- if(!report_dirs.isEmpty()) {
- while(it_report_dirs.hasNext()) {
- this->ui->ListReportLocations->addItem(it_report_dirs.next());
- }
- this->ui->ListReportLocations->setCurrentRow(0);
- this->ui->BtnEditReportLoc->setEnabled(true);
- this->ui->BtnRemoveReportLoc->setEnabled(true);
- this->ui->BtnMoveReportLocDown->setEnabled(true);
- }
-}
-
void DlgPreferences::on_BtnAddReportLoc_clicked() {
- // TODO
+ QString new_loc=QFileDialog::getExistingDirectory(this,
+ tr("Select new report "
+ "directory"));
+ if(!new_loc.isEmpty()) {
+ this->ui->ListReportLocations->addItem(new_loc);
+ }
}
void DlgPreferences::on_BtnEditReportLoc_clicked() {
- // TODO
+ QModelIndex cur_item=this->ui->ListReportLocations->currentIndex();
+ if(!cur_item.isValid()) return;
+
+ // Get selected item
+ QListWidgetItem *p_item=this->ui->ListReportLocations->item(cur_item.row());
+
+ // Let user select new directory
+ QString new_loc=QFileDialog::getExistingDirectory(this,
+ tr("Edit report directory"),
+ p_item->text());
+ if(!new_loc.isEmpty()) {
+ p_item->setText(new_loc);
+ }
}
void DlgPreferences::on_BtnRemoveReportLoc_clicked() {
QModelIndex cur_item=this->ui->ListReportLocations->currentIndex();
if(!cur_item.isValid()) return;
QListWidgetItem *p_item=
this->ui->ListReportLocations->takeItem(cur_item.row());
delete p_item;
// Update buttons
this->on_ListReportLocations_clicked(
this->ui->ListReportLocations->currentIndex());
}
void DlgPreferences::on_BtnMoveReportLocUp_clicked() {
QModelIndex cur_item=this->ui->ListReportLocations->currentIndex();
if(!cur_item.isValid() || cur_item.row()==0) return;
- // TODO: takeItem/insertItem
+
+ // Move selected item up
+ QListWidgetItem *p_item=
+ this->ui->ListReportLocations->takeItem(cur_item.row());
+ this->ui->ListReportLocations->insertItem(cur_item.row()-1,p_item);
+
+ // Reselect moved item and update buttons
+ this->ui->ListReportLocations->setCurrentItem(p_item);
+ this->on_ListReportLocations_clicked(
+ this->ui->ListReportLocations->currentIndex());
}
void DlgPreferences::on_BtnMoveReportLocDown_clicked() {
- // TODO: takeItem/insertItem
+ QModelIndex cur_item=this->ui->ListReportLocations->currentIndex();
+ if(!cur_item.isValid() ||
+ cur_item.row()==(this->ui->ListReportLocations->count()-1))
+ {
+ return;
+ }
+
+ // Move selected item up
+ QListWidgetItem *p_item=
+ this->ui->ListReportLocations->takeItem(cur_item.row());
+ this->ui->ListReportLocations->insertItem(cur_item.row()+1,p_item);
+
+ // Reselect moved item and update buttons
+ this->ui->ListReportLocations->setCurrentItem(p_item);
+ this->on_ListReportLocations_clicked(
+ this->ui->ListReportLocations->currentIndex());
}
void DlgPreferences::on_BtnReset_clicked() {
- // TODO
+ if(QMessageBox::warning(this,
+ tr("Reset default settings"),
+ tr("Are you sure to reset all settings to their defaults?"),
+ QMessageBox::No,
+ QMessageBox::Yes)==QMessageBox::Yes)
+ {
+ this->p_settings->Reset();
+ }
+}
+
+void DlgPreferences::on_BtnOk_clicked() {
+ this->SavePreferences();
+ this->accept();
+}
+
+/*******************************************************************************
+ * Private
+ ******************************************************************************/
+
+void DlgPreferences::LoadPreferences() {
+
+ // Populate report location list
+ this->ui->ListReportLocations->clear();
+ QStringList report_dirs=this->p_settings->GetReportTemplateDirs();
+ QListIterator<QString> it_report_dirs(report_dirs);
+ if(!report_dirs.isEmpty()) {
+ while(it_report_dirs.hasNext()) {
+ this->ui->ListReportLocations->addItem(it_report_dirs.next());
+ }
+ this->ui->ListReportLocations->setCurrentRow(0);
+ this->ui->BtnEditReportLoc->setEnabled(true);
+ this->ui->BtnRemoveReportLoc->setEnabled(true);
+ this->ui->BtnMoveReportLocDown->setEnabled(true);
+ }
+}
+
+void DlgPreferences::SavePreferences() {
+
+ // Save report location list
+ QStringList report_dirs;
+ for(int i=0;i<this->ui->ListReportLocations->count();i++) {
+ report_dirs.append(this->ui->ListReportLocations->item(i)->text());
+ }
+ this->p_settings->SetReportTemplateDirs(report_dirs);
}
diff --git a/trunk/dlgpreferences.h b/trunk/dlgpreferences.h
index 93c5199..60c52eb 100644
--- a/trunk/dlgpreferences.h
+++ b/trunk/dlgpreferences.h
@@ -1,37 +1,40 @@
#ifndef DLGPREFERENCES_H
#define DLGPREFERENCES_H
#include <QDialog>
#include <QModelIndex>
#include "settings.h"
namespace Ui {
class DlgPreferences;
}
class DlgPreferences : public QDialog {
Q_OBJECT
public:
explicit DlgPreferences(Settings *p_sets, QWidget *p_parent=0);
~DlgPreferences();
private slots:
void on_BtnCancel_clicked();
void on_ListReportLocations_clicked(const QModelIndex &index);
void on_BtnAddReportLoc_clicked();
void on_BtnEditReportLoc_clicked();
void on_BtnRemoveReportLoc_clicked();
void on_BtnMoveReportLocUp_clicked();
void on_BtnMoveReportLocDown_clicked();
void on_BtnReset_clicked();
+ void on_BtnOk_clicked();
+
private:
Ui::DlgPreferences *ui;
Settings *p_settings;
void LoadPreferences();
+ void SavePreferences();
};
#endif // DLGPREFERENCES_H
diff --git a/trunk/settings.cpp b/trunk/settings.cpp
index 12dee0d..47245b0 100644
--- a/trunk/settings.cpp
+++ b/trunk/settings.cpp
@@ -1,122 +1,137 @@
/*******************************************************************************
* fred Copyright (c) 2011-2013 by Gillen Daniel <gillen.dan@pinguin.lu> *
* *
* Forensic Registry EDitor (fred) is a cross-platform M$ registry hive editor *
* with special feautures useful during forensic analysis. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the Free *
* Software Foundation, either version 3 of the License, or (at your option) *
* any later version. *
* *
* This program is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
* more details. *
* *
* You should have received a copy of the GNU General Public License along with *
* this program. If not, see <http://www.gnu.org/licenses/>. *
*******************************************************************************/
#include "settings.h"
#include <QDir>
#ifndef FRED_REPORT_TEMPLATE_DIR
#ifndef __MINGW32__
#define SYSTEM_REPORT_TEMPLATE_DIR "/usr/share/fred/report_templates"
#else
#define SYSTEM_REPORT_TEMPLATE_DIR ".\\report_templates\\"
#endif
#endif
#define APP_ORGANIZATION "pinguin.lu"
#define APP_NAME "fred"
+/*******************************************************************************
+ * Public
+ ******************************************************************************/
+
Settings::Settings(QObject *p_parent) : QObject(p_parent) {
// Init vars
this->p_settings=NULL;
this->initialized=false;
this->user_settings_dir=QDir::homePath()
.append(QDir::separator()).append(".fred");
this->user_report_template_dir=QString(this->user_settings_dir)
.append(QDir::separator())
.append("report_templates");
// Make sure config dirs exist
if(!QDir(this->user_settings_dir).exists()) {
// User config dir does not exists, try to create it
if(!QDir().mkpath(this->user_settings_dir)) {
// TODO: Maybe warn user
return;
}
}
if(!QDir(this->user_report_template_dir).exists()) {
// Create config dir sub folder for report templates
if(!QDir().mkpath(this->user_report_template_dir)) {
// TODO: Maybe warn user
return;
}
}
// Create / open settings
#ifndef __MINGW32__
// On any Unix-like OS, settings should be saved in the .fred folder
this->p_settings=new QSettings(QString(this->user_settings_dir)
.append(QDir::separator())
.append("fred.conf"),
QSettings::NativeFormat,
this);
#else
// On Windows, it can be stored inside registry
this->p_settings=new QSettings(QSettings::NativeFormat,
QSettings::UserScope,
APP_ORGANIZATION,
APP_NAME,
this);
#endif
if(this->p_settings->status()!=QSettings::NoError ||
!this->p_settings->isWritable())
{
return;
}
this->initialized=true;
}
+void Settings::Reset() {
+
+}
+
+void Settings::SetReportTemplateDirs(QStringList &dirs) {
+ this->p_settings->setValue("ReportTemplateDirs",dirs);
+}
+
QStringList Settings::GetReportTemplateDirs() {
- return QStringList()<<SYSTEM_REPORT_TEMPLATE_DIR
- <<this->user_report_template_dir;
+ if(!this->initialized) return QStringList();
+ return this->p_settings->value("ReportTemplateDirs",
+ QStringList()<<SYSTEM_REPORT_TEMPLATE_DIR
+ <<this->user_report_template_dir
+ ).toStringList();
}
void Settings::SaveWindowGeometry(QString window_name, QByteArray geometry) {
if(!this->initialized) return;
this->p_settings->setValue(QString("WindowGeometry_%1").arg(window_name),
geometry);
}
QByteArray Settings::GetWindowGeometry(QString window_name) {
if(!this->initialized) return QByteArray();
return this->p_settings->value(QString("WindowGeometry_%1")
.arg(window_name)).toByteArray();
}
void Settings::AddRecentFile(QString file) {
// Get recent files
QStringList recent_files=this->GetRecentFiles();
if(recent_files.contains(file)) {
// File already exists in recent list. Simply move it to top
recent_files.move(recent_files.indexOf(file),0);
} else {
// We only save 5 files at max
if(recent_files.count()==5) recent_files.removeLast();
recent_files.prepend(file);
}
this->p_settings->setValue("RecentFiles",recent_files);
}
QStringList Settings::GetRecentFiles() {
return this->p_settings->value("RecentFiles").toStringList();
}
diff --git a/trunk/settings.h b/trunk/settings.h
index 732e88c..4d65a7a 100644
--- a/trunk/settings.h
+++ b/trunk/settings.h
@@ -1,54 +1,57 @@
/*******************************************************************************
* fred Copyright (c) 2011-2013 by Gillen Daniel <gillen.dan@pinguin.lu> *
* *
* Forensic Registry EDitor (fred) is a cross-platform M$ registry hive editor *
* with special feautures useful during forensic analysis. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the Free *
* Software Foundation, either version 3 of the License, or (at your option) *
* any later version. *
* *
* This program is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
* more details. *
* *
* You should have received a copy of the GNU General Public License along with *
* this program. If not, see <http://www.gnu.org/licenses/>. *
*******************************************************************************/
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QObject>
#include <QSettings>
#include <QString>
#include <QStringList>
#include <QByteArray>
class Settings : public QObject {
Q_OBJECT
public:
explicit Settings(QObject *p_parent=0);
+ void Reset();
+
+ void SetReportTemplateDirs(QStringList &dirs);
QStringList GetReportTemplateDirs();
void SetSaveWindowGeometryStatus(bool save);
bool GetSaveWindowGeometryStatus();
void SaveWindowGeometry(QString window_name, QByteArray geometry);
QByteArray GetWindowGeometry(QString window_name);
void SetRecentFileDepth(int depth);
int GetRecentFileDepth();
void AddRecentFile(QString file);
QStringList GetRecentFiles();
private:
QSettings *p_settings;
bool initialized;
QString user_settings_dir;
QString user_report_template_dir;
};
#endif // SETTINGS_H
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, Dec 25, 4:07 AM (39 m, 34 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1176970
Default Alt Text
(16 KB)
Attached To
Mode
rFRED fred
Attached
Detach File
Event Timeline
Log In to Comment