Skip to content

Commit

Permalink
feat: better file dialog behavior during and between runs
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-adam committed May 31, 2021
1 parent 4907d2d commit 63bbb1d
Show file tree
Hide file tree
Showing 14 changed files with 175 additions and 73 deletions.
3 changes: 0 additions & 3 deletions src/hobbits-core/settingsdata.cpp
Expand Up @@ -156,9 +156,6 @@ void SettingsData::initialize()

m_privateSettings.insert(SettingsManager::WINDOW_SIZE_KEY, QSize(640, 480));
m_privateSettings.insert(SettingsManager::WINDOW_POSITION_KEY, QPoint(100, 100));
m_privateSettings.insert(SettingsManager::LAST_BATCH_PATH_KEY, QDir::homePath());
m_privateSettings.insert(SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY, QDir::homePath());
m_privateSettings.insert(SettingsManager::LAST_CONTAINER_PATH_KEY, QDir::homePath());

m_pluginLoaderSettings.insert(SettingsManager::PLUGIN_PATH_KEY, HobbitsCoreConfig::PLUGINS_DEFAULT_PATH);
m_pluginLoaderSettings.insert(SettingsManager::PLUGIN_BLACKLIST_KEY, QStringList({}));
Expand Down
5 changes: 2 additions & 3 deletions src/hobbits-core/settingsmanager.cpp
Expand Up @@ -23,9 +23,8 @@ const QString SettingsManager::DISPLAY_DISPLAY_ORDER_KEY = "Display Display Orde
const QString SettingsManager::WINDOW_SIZE_KEY = "window_size";
const QString SettingsManager::WINDOW_POSITION_KEY = "window_position";
const QString SettingsManager::WINDOW_STATE_KEY = "window_state";
const QString SettingsManager::LAST_BATCH_PATH_KEY = "last_batch_path";
const QString SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY = "last_import_export_path";
const QString SettingsManager::LAST_CONTAINER_PATH_KEY = "last_container_path";
const QString SettingsManager::LAST_BATCH_KEY = "last_batch";
const QString SettingsManager::LAST_IMPORT_EXPORT_KEY = "last_import_export";
const QString SettingsManager::PLUGINS_RUNNING_KEY = "plugins_running";
const QString SettingsManager::PYTHON_HOME_KEY = "python_home_dir";

Expand Down
5 changes: 2 additions & 3 deletions src/hobbits-core/settingsmanager.h
Expand Up @@ -75,9 +75,8 @@ class HOBBITSCORESHARED_EXPORT SettingsManager
static const QString OPERATOR_DISPLAY_ORDER_KEY;
static const QString ANALYZER_DISPLAY_ORDER_KEY;
static const QString DISPLAY_DISPLAY_ORDER_KEY;
static const QString LAST_BATCH_PATH_KEY;
static const QString LAST_IMPORT_EXPORT_PATH_KEY;
static const QString LAST_CONTAINER_PATH_KEY;
static const QString LAST_BATCH_KEY;
static const QString LAST_IMPORT_EXPORT_KEY;
static const QString PLUGINS_RUNNING_KEY;
static const QString PYTHON_HOME_KEY;
};
Expand Down
25 changes: 13 additions & 12 deletions src/hobbits-gui/mainwindow.cpp
Expand Up @@ -23,6 +23,7 @@
#include "abstractparametereditor.h"
#include "parametereditordialog.h"
#include "batcheditor.h"
#include "widgetssettings.h"

#include "pythonpluginconfig.h"
#include "simpleparametereditor.h"
Expand Down Expand Up @@ -713,16 +714,19 @@ void MainWindow::on_pb_analyze_clicked()

void MainWindow::on_action_Apply_Batch_triggered()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("Apply Batch"),
SettingsManager::getPrivateSetting(SettingsManager::LAST_BATCH_PATH_KEY).toString(),
tr("Hobbits Batch Files (*.hobbits_batch)"));
if (fileName.isEmpty()) {
return;
QString fileName = WidgetsSettings::getFile(
this,
tr("Apply Batch"),
QDir::homePath(),
tr("Hobbits Batch Files (*.hbat)"),
QFileDialog::AcceptOpen,
QFileDialog::ExistingFile,
SettingsManager::LAST_BATCH_KEY
);

if (!fileName.isEmpty()) {
applyBatchFile(fileName);
}

applyBatchFile(fileName);
}

void MainWindow::on_action_Save_Batch_triggered()
Expand Down Expand Up @@ -756,9 +760,6 @@ void MainWindow::on_action_Save_Batch_triggered()
void MainWindow::applyBatchFile(QString fileName)
{
QFile file(fileName);
SettingsManager::setPrivateSetting(
SettingsManager::LAST_BATCH_PATH_KEY,
QFileInfo(file).dir().path());

if (!file.open(QIODevice::ReadOnly)) {
warningMessage(QString("Could not open hobbits batch file '%1'").arg(fileName));
Expand Down
Expand Up @@ -2,6 +2,8 @@
#include "parametereditorfileselect.h"
#include "settingsmanager.h"

static const QString LAST_BIT_CONTAINER_IMPORT_EXPORT = "last_bit_container_import_export";

BitContainerData::BitContainerData()
{
QList<ParameterDelegate::ParameterInfo> infos = {
Expand All @@ -21,7 +23,11 @@ BitContainerData::BitContainerData()
[](QSharedPointer<ParameterDelegate> delegate, QSize size) {
Q_UNUSED(size)
Q_UNUSED(delegate)
return new ParameterEditorFileSelect(QFileDialog::AcceptOpen);
return new ParameterEditorFileSelect(
QFileDialog::AcceptOpen,
"filename",
"Select Bit Container File",
LAST_BIT_CONTAINER_IMPORT_EXPORT);
});

m_exportDelegate = ParameterDelegate::create(
Expand All @@ -37,7 +43,11 @@ BitContainerData::BitContainerData()
[](QSharedPointer<ParameterDelegate> delegate, QSize size) {
Q_UNUSED(size)
Q_UNUSED(delegate)
return new ParameterEditorFileSelect(QFileDialog::AcceptSave);
return new ParameterEditorFileSelect(
QFileDialog::AcceptSave,
"filename",
"Save Bit Container File",
LAST_BIT_CONTAINER_IMPORT_EXPORT);
});
}

Expand Down Expand Up @@ -81,7 +91,6 @@ QSharedPointer<ParameterDelegate> BitContainerData::exportParameterDelegate()
return m_exportDelegate;
}

static const QString LAST_BIT_CONTAINER_IMPORT_EXPORT = "last_bit_container_import_export";

QSharedPointer<ImportResult> BitContainerData::importBits(const Parameters &parameters,
QSharedPointer<PluginActionProgress> progress)
Expand All @@ -99,9 +108,6 @@ QSharedPointer<ImportResult> BitContainerData::importBits(const Parameters &para
if (!file.open(QIODevice::ReadOnly)) {
return ImportResult::error(QString("Failed to open file for import: '%1'").arg(fileName));
}
SettingsManager::setPrivateSetting(
LAST_BIT_CONTAINER_IMPORT_EXPORT,
QFileInfo(file).dir().path());

QDataStream stream(&file);
QSharedPointer<BitContainer> container = BitContainer::deserialize(stream);
Expand Down Expand Up @@ -132,9 +138,6 @@ QSharedPointer<ExportResult> BitContainerData::exportBits(QSharedPointer<const B
if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
return ExportResult::error(QString("Failed to open export bit file: '%1'").arg(fileName));
}
SettingsManager::setPrivateSetting(
SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY,
QFileInfo(file).dir().path());

QDataStream stream(&file);
container->serialize(stream);
Expand Down
6 changes: 0 additions & 6 deletions src/hobbits-plugins/importerexporters/FileData/filedata.cpp
Expand Up @@ -102,9 +102,6 @@ QSharedPointer<ImportResult> FileData::importBits(const Parameters &parameters,
if (!file.open(QIODevice::ReadOnly)) {
return ImportResult::error(QString("Failed to open file for import: '%1'").arg(fileName));
}
SettingsManager::setPrivateSetting(
SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY,
QFileInfo(file).dir().path());

QSharedPointer<BitContainer> container = BitContainer::create(&file);
container->setName(QFileInfo(file).fileName());
Expand All @@ -126,9 +123,6 @@ QSharedPointer<ExportResult> FileData::exportBits(QSharedPointer<const BitContai
if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
return ExportResult::error(QString("Failed to open export bit file: '%1'").arg(fileName));
}
SettingsManager::setPrivateSetting(
SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY,
QFileInfo(file).dir().path());

container->bits()->writeTo(&file);
file.close();
Expand Down
5 changes: 0 additions & 5 deletions src/hobbits-plugins/importerexporters/HexString/hexstring.cpp
Expand Up @@ -103,8 +103,6 @@ QSharedPointer<ImportResult> HexString::importBits(const Parameters &parameters,
Q_UNUSED(progress)
QSharedPointer<BitContainer> container;

auto importer = QSharedPointer<HexStringImportForm>(new HexStringImportForm());

if (parameters.contains("filename")) {
QString fileName = parameters.value("filename").toString();
return HexStringImportForm::importFromFile(fileName);
Expand Down Expand Up @@ -139,9 +137,6 @@ QSharedPointer<ExportResult> HexString::exportBits(QSharedPointer<const BitConta
if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
ExportResult::error(QString("Failed to open export file: '%1'").arg(fileName));
}
SettingsManager::setPrivateSetting(
SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY,
QFileInfo(file).dir().path());

qint64 byteLen = container->bits()->sizeInBytes();
qint64 offset = 0;
Expand Down
@@ -1,5 +1,6 @@
#include "hexstringimportform.h"
#include "settingsmanager.h"
#include "widgetssettings.h"
#include "ui_hexstringimportform.h"
#include <QFileDialog>
#include <QMessageBox>
Expand Down Expand Up @@ -133,14 +134,19 @@ QSharedPointer<ImportResult> HexStringImportForm::importFromHexString(QString he
}

void HexStringImportForm::on_pb_selectFile_pressed()
{
m_fileName = QFileDialog::getOpenFileName(
this,
tr("Import Hex String File"),
SettingsManager::getPrivateSetting(SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY).toString(),
tr("All Files (*)"));

if (!m_fileName.isEmpty()) {
{
QString fileName = WidgetsSettings::getFile(
this,
tr("Import Hex String File"),
QDir::homePath(),
tr("All Files (*)"),
QFileDialog::AcceptOpen,
QFileDialog::ExistingFile,
SettingsManager::LAST_IMPORT_EXPORT_KEY
);

if (!fileName.isEmpty()) {
m_fileName = fileName;
emit accepted();
}
}
Expand Down
41 changes: 22 additions & 19 deletions src/hobbits-widgets/batcheditor.cpp
@@ -1,6 +1,7 @@
#include "batcheditor.h"
#include "ui_batcheditor.h"
#include "plugintreemodel.h"
#include "widgetssettings.h"
#include <QFileDialog>
#include <QMessageBox>

Expand Down Expand Up @@ -37,24 +38,24 @@ void BatchEditor::on_action_saveBatchAs_triggered()
{
auto batch = m_editScene->getBatch();

QString fileName = QFileDialog::getSaveFileName(
this,
tr("Save Batch"),
SettingsManager::getPrivateSetting(
SettingsManager::LAST_BATCH_PATH_KEY).toString(),
tr("Hobbits Batch Files (*.hobbits_batch)"));
QString fileName = WidgetsSettings::getFile(
this,
tr("Save Batch As"),
QDir::homePath(),
tr("Hobbits Batch Files (*.hbat)"),
QFileDialog::AcceptSave,
QFileDialog::AnyFile,
SettingsManager::LAST_BATCH_KEY
);

if (fileName.isEmpty()) {
return;
}
if (!fileName.endsWith(".hobbits_batch")) {
fileName += ".hobbits_batch";
if (!fileName.endsWith(".hbat")) {
fileName += ".hbat";
}

QFile file(fileName);
SettingsManager::setPrivateSetting(
SettingsManager::LAST_BATCH_PATH_KEY,
QFileInfo(file).dir().path());

if (!file.open(QIODevice::WriteOnly)) {
QMessageBox::warning(this, "Cannot Save Batch", QString("Could not open file '%1' for writing").arg(fileName));
Expand All @@ -67,19 +68,21 @@ void BatchEditor::on_action_saveBatchAs_triggered()

void BatchEditor::on_action_openBatch_triggered()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("Apply Batch"),
SettingsManager::getPrivateSetting(SettingsManager::LAST_BATCH_PATH_KEY).toString(),
tr("Hobbits Batch Files (*.hobbits_batch)"));
QString fileName = WidgetsSettings::getFile(
this,
tr("Open Batch"),
QDir::homePath(),
tr("Hobbits Batch Files (*.hbat)"),
QFileDialog::AcceptOpen,
QFileDialog::ExistingFile,
SettingsManager::LAST_BATCH_KEY
);

if (fileName.isEmpty()) {
return;
}

QFile file(fileName);
SettingsManager::setPrivateSetting(
SettingsManager::LAST_BATCH_PATH_KEY,
QFileInfo(file).dir().path());

if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, "Cannot Open Batch", QString("Could not open file '%1'").arg(fileName));
Expand Down
2 changes: 2 additions & 0 deletions src/hobbits-widgets/parametereditordialog.cpp
Expand Up @@ -21,6 +21,8 @@ ParameterEditorDialog::ParameterEditorDialog(

setWindowTitle(m_editor->title());

this->resize(m_editor->size());

ui->mainLayout->insertWidget(0, m_editor);

if (m_editor->isStandaloneDialog()) {
Expand Down
36 changes: 32 additions & 4 deletions src/hobbits-widgets/parametereditorfileselect.cpp
@@ -1,19 +1,19 @@
#include "parametereditorfileselect.h"
#include "settingsmanager.h"
#include "widgetssettings.h"
#include <QVBoxLayout>

ParameterEditorFileSelect::ParameterEditorFileSelect(
QFileDialog::AcceptMode acceptMode,
QString fileKey,
QString editorTitle) :
QString editorTitle,
QString stateKey) :
m_fileKey(fileKey),
m_editorTitle(editorTitle)
{
m_fileDialog = new QFileDialog(
nullptr,
tr(""),
SettingsManager::getPrivateSetting(SettingsManager::LAST_IMPORT_EXPORT_PATH_KEY).toString(),
tr("All Files (*)"));
tr(""));
m_fileDialog->setOption(QFileDialog::DontUseNativeDialog);
m_fileDialog->setWindowFlags(Qt::Widget);
m_fileDialog->setVisible(true);
Expand All @@ -22,16 +22,44 @@ ParameterEditorFileSelect::ParameterEditorFileSelect(
QVBoxLayout *layout = new QVBoxLayout();
layout->setContentsMargins(0, 0, 0, 0);

if (stateKey.isNull()) {
stateKey = SettingsManager::LAST_IMPORT_EXPORT_KEY;
}

QString dirKey = WidgetsSettings::dialogDirKey(stateKey);
QString sizeKey = WidgetsSettings::dialogRectKey(stateKey);

QVariant lastDir = SettingsManager::getPrivateSetting(dirKey);
if (lastDir.isValid() && lastDir.canConvert<QString>()) {
m_fileDialog->setDirectory(lastDir.toString());
}

QVariant lastSize = SettingsManager::getPrivateSetting(sizeKey);
if (lastSize.isValid() && lastSize.canConvert<QSize>()) {
m_fileDialog->resize(lastSize.toSize());
}

resize(m_fileDialog->size());

layout->addWidget(m_fileDialog);

this->setLayout(layout);

connect(m_fileDialog, SIGNAL(accepted()), this, SIGNAL(accepted()));
connect(m_fileDialog, SIGNAL(rejected()), this, SIGNAL(rejected()));

connect(m_fileDialog, &QDialog::finished, [this, dirKey, sizeKey](int result) {
auto path = m_fileDialog->directory().path().toStdString();
auto saveBytes = this->m_fileDialog->saveState().toStdString();

SettingsManager::setPrivateSetting(dirKey, m_fileDialog->directory().path());
SettingsManager::setPrivateSetting(sizeKey, m_fileDialog->size());
});
}

ParameterEditorFileSelect::~ParameterEditorFileSelect()
{

}

QString ParameterEditorFileSelect::title()
Expand Down
3 changes: 2 additions & 1 deletion src/hobbits-widgets/parametereditorfileselect.h
Expand Up @@ -14,7 +14,8 @@ class HOBBITSWIDGETSSHARED_EXPORT ParameterEditorFileSelect : public AbstractPar
ParameterEditorFileSelect(
QFileDialog::AcceptMode acceptMode,
QString fileKey = "filename",
QString editorTitle = "Select File");
QString editorTitle = "Select File",
QString stateKey = QString());
~ParameterEditorFileSelect() override;

QString title() override;
Expand Down

0 comments on commit 63bbb1d

Please sign in to comment.