Ref T306, use settings for flightplan and view directories

This commit is contained in:
Klaus Basan
2018-08-25 14:17:44 +02:00
parent 4098cc843f
commit 722566453b
7 changed files with 73 additions and 61 deletions

View File

@@ -8,22 +8,23 @@
*/
#include "blackgui/filters/aircraftmodelfilterdialog.h"
#include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h"
#include "blackgui/menus/menuaction.h"
#include "blackgui/shortcut.h"
#include "blackgui/views/aircraftmodelview.h"
#include "blackgui/views/viewbase.h"
#include "blackgui/menus/menuaction.h"
#include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h"
#include "blackgui/shortcut.h"
#include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/distributorlist.h"
#include "blackmisc/simulation/simulatorinfolist.h"
#include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/aircrafticaocodelist.h"
#include "blackmisc/aviation/airlineicaocodelist.h"
#include "blackmisc/aviation/livery.h"
#include "blackmisc/aviation/liverylist.h"
#include "blackmisc/icons.h"
#include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/distributorlist.h"
#include "blackmisc/simulation/simulatorinfolist.h"
#include "blackmisc/directories.h"
#include "blackmisc/statusmessagelist.h"
#include "blackmisc/icons.h"
#include "blackmisc/variant.h"
#include <QAction>
@@ -49,6 +50,7 @@ namespace BlackGui
{
// default
this->standardInit(new CAircraftModelListModel(CAircraftModelListModel::OwnAircraftModelClient, this));
this->setSettingsDirectoryIndex(CDirectories::IndexDirLastModelJsonOrDefault);
// shortcut
QShortcut *stashShortcut = new QShortcut(CShortcut::keyStash(), this);

View File

@@ -30,7 +30,6 @@
#include <Qt>
class QDropEvent;
class QWidget;
namespace BlackMisc
{

View File

@@ -317,24 +317,21 @@ namespace BlackGui
void CViewBaseNonTemplate::rememberLastJsonDirectory(const QString &selectedFileOrDir)
{
if (selectedFileOrDir.isEmpty()) { return; }
const QFileInfo fi(selectedFileOrDir);
if ((fi.isDir() && fi.exists()) || (fi.isFile() && fi.exists()))
{
// existing dir
m_lastJsonDirectory = fi.absolutePath();
}
const QString dir = CDirectories::fileNameToDirectory(selectedFileOrDir);
QDir d(dir);
if (!d.exists()) { return; }
// existing dir
CDirectories directories = m_dirSettings.get();
directories.setPropertyByIndex(m_dirSettingsIndex, CVariant::fromValue(dir));
const CStatusMessage msg = m_dirSettings.setAndSave(directories);
CLogMessage::preformatted(msg);
}
QString CViewBaseNonTemplate::getRememberedLastJsonDirectory() const
{
if (!m_lastJsonDirectory.isEmpty()) { return m_lastJsonDirectory; }
QString dirCandidate = m_dirSettings.get();
const QFileInfo fi(dirCandidate);
if ((fi.isDir() && fi.exists()) || (fi.isFile() && fi.exists()))
{
return fi.absolutePath();
}
return QStringLiteral("");
const CDirectories directories = m_dirSettings.get();
return directories.propertyByIndex(m_dirSettingsIndex).toQString();
}
void CViewBaseNonTemplate::customMenu(CMenuActions &menuActions)
@@ -567,7 +564,7 @@ namespace BlackGui
}
// Save file path
const QString dir = m_dirSettings.get();
const QString dir = m_dirSettings.get().propertyByIndex(m_dirSettingsIndex).toQString();
QString name(m_saveFileName);
if (name.isEmpty())
{
@@ -1538,8 +1535,6 @@ namespace BlackGui
break;
}
this->rememberLastJsonDirectory(fileName);
try
{
const bool allowCacheFormat = this->allowCacheFileFormatJson();
@@ -1567,6 +1562,7 @@ namespace BlackGui
this->updateContainerMaybeAsync(container);
m = CStatusMessage(this, CStatusMessage::SeverityInfo, "Reading " + fileName + " completed", true);
this->jsonLoadedAndModelUpdated(container);
this->rememberLastJsonDirectory(fileName);
}
catch (const CJsonException &ex)
{
@@ -1598,16 +1594,9 @@ namespace BlackGui
if (fileName.isEmpty()) { return CStatusMessage(this, CStatusMessage::SeverityDebug, "Save canceled", true); }
const QString json(this->toJsonString()); // save as CVariant JSON
// keep directory for settings
const QFileInfo file(fileName);
const QDir fileDir(file.absoluteDir());
if (fileDir.exists())
{
m_dirSettings.setAndSave(fileDir.absolutePath());
}
// save file
const bool ok = CFileUtils::writeStringToFileInBackground(json, fileName);
if (ok) { this->rememberLastJsonDirectory(fileName); }
return ok ?
CStatusMessage(this, CStatusMessage::SeverityInfo, "Writing " + fileName + " in progress", true) :
CStatusMessage(this, CStatusMessage::SeverityError, "Writing " + fileName + " failed", true);

View File

@@ -16,14 +16,14 @@
#include "blackgui/models/modelfilter.h"
#include "blackgui/models/selectionmodel.h"
#include "blackgui/settings/guisettings.h"
#include "blackgui/settings/viewdirectorysettings.h"
#include "blackgui/menus/menuaction.h"
#include "blackgui/blackguiexport.h"
#include "blackmisc/namevariantpairlist.h"
#include "blackmisc/propertyindex.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/directories.h"
#include "blackmisc/statusmessage.h"
#include "blackmisc/variant.h"
#include "blackgui/blackguiexport.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/propertyindex.h"
#include <QAbstractItemView>
#include <QFlags>
@@ -287,6 +287,9 @@ namespace BlackGui
//! Workaround as of https://stackoverflow.com/q/3433664/356726
void setForceColumnsToMaxSize(bool force) { m_forceColumnsToMaxSize = force; }
//! Index of the directory we "remember"
void setSettingsDirectoryIndex(BlackMisc::CDirectories::ColumnIndex directoryIndex) { m_dirSettingsIndex = directoryIndex; }
signals:
//! Ask for new data from currently loaded data
void requestUpdate();
@@ -498,8 +501,8 @@ namespace BlackGui
CLoadIndicator *m_loadIndicator = nullptr; //!< load indicator if needed
QMap<MenuFlag, Menus::CMenuActions> m_menuFlagActions; //!< initialized actions
QString m_saveFileName; //!< save file name (JSON)
QString m_lastJsonDirectory; //!< remember last JSON directory
BlackMisc::CSetting<Settings::TViewDirectorySettings> m_dirSettings { this }; //!< directory for load/save
BlackMisc::CDirectories::ColumnIndex m_dirSettingsIndex = BlackMisc::CDirectories::IndexDirLastViewJsonOrDefault; //!< allows to set more specialized directories //!< remember last JSON directory, having this member allows to have specific dir
BlackMisc::CSetting<BlackMisc::Settings::TDirectorySettings> m_dirSettings { this }; //!< directory for load/save
BlackMisc::CSettingReadOnly<Settings::TGeneralGui> m_guiSettings { this, &CViewBaseNonTemplate::settingsChanged }; //!< general GUI settings
protected slots: