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

@@ -7,23 +7,22 @@
* contained in the LICENSE file. * contained in the LICENSE file.
*/ */
#include "blackgui/components/dbmappingcomponent.h"
#include "blackgui/components/dbstashcomponent.h"
#include "blackgui/views/aircraftmodelview.h"
#include "blackgui/views/viewbase.h"
#include "blackgui/guiapplication.h"
#include "blackgui/models/aircraftmodellistmodel.h"
#include "blackcore/db/databasewriter.h" #include "blackcore/db/databasewriter.h"
#include "blackcore/db/databaseutils.h" #include "blackcore/db/databaseutils.h"
#include "blackcore/application.h" #include "blackcore/application.h"
#include "blackcore/webdataservices.h" #include "blackcore/webdataservices.h"
#include "blackgui/components/dbmappingcomponent.h"
#include "blackgui/components/dbstashcomponent.h"
#include "blackgui/guiapplication.h"
#include "blackgui/models/aircraftmodellistmodel.h"
#include "blackgui/views/aircraftmodelview.h"
#include "blackgui/views/viewbase.h"
#include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/livery.h"
#include "blackmisc/logcategory.h"
#include "blackmisc/logcategorylist.h"
#include "blackmisc/sequence.h"
#include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/distributorlist.h" #include "blackmisc/simulation/distributorlist.h"
#include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/livery.h"
#include "blackmisc/logcategorylist.h"
#include "blackmisc/sequence.h"
#include "blackmisc/verify.h" #include "blackmisc/verify.h"
#include "dbstashcomponent.h" #include "dbstashcomponent.h"
#include "ui_dbstashcomponent.h" #include "ui_dbstashcomponent.h"
@@ -78,6 +77,7 @@ namespace BlackGui
ui->tvp_StashAircraftModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows); ui->tvp_StashAircraftModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
ui->tvp_StashAircraftModels->setHighlightModelStrings(true); ui->tvp_StashAircraftModels->setHighlightModelStrings(true);
ui->tvp_StashAircraftModels->setHighlightModelStringsColor(Qt::red); ui->tvp_StashAircraftModels->setHighlightModelStringsColor(Qt::red);
ui->tvp_StashAircraftModels->setSettingsDirectoryIndex(CDirectories::IndexDirLastModelStashJsonOrDefault);
this->enableButtonRow(); this->enableButtonRow();
connect(sApp->getWebDataServices()->getDatabaseWriter(), &CDatabaseWriter::publishedModels, this, &CDbStashComponent::onPublishedModelsResponse, Qt::QueuedConnection); connect(sApp->getWebDataServices()->getDatabaseWriter(), &CDatabaseWriter::publishedModels, this, &CDbStashComponent::onPublishedModelsResponse, Qt::QueuedConnection);

View File

@@ -7,25 +7,25 @@
* contained in the LICENSE file. * contained in the LICENSE file.
*/ */
#include "blackcore/context/contextnetwork.h"
#include "blackcore/context/contextownaircraft.h"
#include "blackcore/context/contextsimulator.h"
#include "blackcore/webdataservices.h"
#include "blackgui/uppercasevalidator.h" #include "blackgui/uppercasevalidator.h"
#include "blackgui/components/flightplancomponent.h" #include "blackgui/components/flightplancomponent.h"
#include "blackgui/components/selcalcodeselector.h" #include "blackgui/components/selcalcodeselector.h"
#include "blackgui/guiapplication.h" #include "blackgui/guiapplication.h"
#include "blackcore/context/contextnetwork.h"
#include "blackcore/context/contextownaircraft.h"
#include "blackcore/context/contextsimulator.h"
#include "blackcore/webdataservices.h"
#include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/airportlist.h" #include "blackmisc/aviation/airportlist.h"
#include "blackmisc/aviation/altitude.h" #include "blackmisc/aviation/altitude.h"
#include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/callsign.h"
#include "blackmisc/pq/pqstring.h"
#include "blackmisc/pq/speed.h"
#include "blackmisc/pq/units.h"
#include "blackmisc/logcategory.h" #include "blackmisc/logcategory.h"
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include "blackconfig/buildconfig.h" #include "blackconfig/buildconfig.h"
#include "blackmisc/network/user.h" #include "blackmisc/network/user.h"
#include "blackmisc/pq/pqstring.h"
#include "blackmisc/pq/speed.h"
#include "blackmisc/pq/units.h"
#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/simulation/simulatedaircraft.h"
#include "blackmisc/directoryutils.h" #include "blackmisc/directoryutils.h"
#include "blackmisc/statusmessage.h" #include "blackmisc/statusmessage.h"
@@ -43,6 +43,7 @@
#include <QTabBar> #include <QTabBar>
#include <QCompleter> #include <QCompleter>
#include <QStringBuilder> #include <QStringBuilder>
#include <QPointer>
#include <Qt> #include <Qt>
using namespace BlackMisc; using namespace BlackMisc;
@@ -502,6 +503,7 @@ namespace BlackGui
{ {
const CFlightPlan fp = variant.value<CFlightPlan>(); const CFlightPlan fp = variant.value<CFlightPlan>();
this->fillWithFlightPlanData(fp); this->fillWithFlightPlanData(fp);
this->updateDirectorySettings(fileName);
} }
else else
{ {
@@ -539,6 +541,7 @@ namespace BlackGui
if (ok) if (ok)
{ {
m = CStatusMessage(this, CStatusMessage::SeverityInfo, "Written " + fileName, true); m = CStatusMessage(this, CStatusMessage::SeverityInfo, "Written " + fileName, true);
this->updateDirectorySettings(fileName);
} }
else else
{ {
@@ -551,8 +554,8 @@ namespace BlackGui
void CFlightPlanComponent::setSelcalInOwnAircraft() void CFlightPlanComponent::setSelcalInOwnAircraft()
{ {
if (!sGui->getIContextOwnAircraft()) return; if (!sGui || !sGui->getIContextOwnAircraft()) { return; }
if (!ui->frp_SelcalCode->hasValidCode()) return; if (!ui->frp_SelcalCode->hasValidCode()) { return; }
sGui->getIContextOwnAircraft()->updateSelcal(ui->frp_SelcalCode->getSelcal(), flightPlanIdentifier()); sGui->getIContextOwnAircraft()->updateSelcal(ui->frp_SelcalCode->getSelcal(), flightPlanIdentifier());
} }
@@ -802,6 +805,16 @@ namespace BlackGui
} }
} }
void CFlightPlanComponent::updateDirectorySettings(const QString &fileOrDirectory)
{
if (fileOrDirectory.isEmpty()) { return; }
CDirectories swiftDirs = m_directories.get();
swiftDirs.setFlightPlanDirectory(CDirectories::fileNameToDirectory(fileOrDirectory));
CStatusMessage saveMsg = m_directories.setAndSave(swiftDirs);
CLogMessage::preformatted(saveMsg);
}
void CFlightPlanComponent::initCompleters() void CFlightPlanComponent::initCompleters()
{ {
if (!sGui || !sGui->hasWebDataServices()) { return; } if (!sGui || !sGui->hasWebDataServices()) { return; }
@@ -818,7 +831,7 @@ namespace BlackGui
QString CFlightPlanComponent::getDefaultFilename(bool load) QString CFlightPlanComponent::getDefaultFilename(bool load)
{ {
// some logic to find a useful default name // some logic to find a useful default name
const QString dir = CDirectoryUtils::documentationDirectory(); const QString dir = m_directories.get().getFlightPlanDirectoryOrDefault();
if (load) { return CFileUtils::appendFilePaths(dir, CFileUtils::jsonWildcardAppendix()); } if (load) { return CFileUtils::appendFilePaths(dir, CFileUtils::jsonWildcardAppendix()); }
// Save file path // Save file path

View File

@@ -19,6 +19,8 @@
#include "blackmisc/aviation/flightplan.h" #include "blackmisc/aviation/flightplan.h"
#include "blackmisc/network/data/lastserver.h" #include "blackmisc/network/data/lastserver.h"
#include "blackmisc/network/user.h" #include "blackmisc/network/user.h"
#include "blackmisc/directories.h"
#include "blackmisc/settingscache.h"
#include "blackmisc/datacache.h" #include "blackmisc/datacache.h"
#include "blackmisc/identifier.h" #include "blackmisc/identifier.h"
#include "blackmisc/statusmessagelist.h" #include "blackmisc/statusmessagelist.h"
@@ -65,6 +67,7 @@ namespace BlackGui
BlackMisc::Aviation::CFlightPlan m_sentFlightPlan; //!< My flight plan BlackMisc::Aviation::CFlightPlan m_sentFlightPlan; //!< My flight plan
BlackMisc::Simulation::CAircraftModel m_model; //!< currently used model BlackMisc::Simulation::CAircraftModel m_model; //!< currently used model
BlackMisc::CIdentifier m_identifier { "FlightPlanComponent", this }; //!< Flightplan identifier BlackMisc::CIdentifier m_identifier { "FlightPlanComponent", this }; //!< Flightplan identifier
BlackMisc::CSetting<BlackMisc::Settings::TDirectorySettings> m_directories { this }; //!< the swift directories
BlackMisc::CDataReadOnly<BlackMisc::Simulation::Data::TLastModel> m_lastAircraftModel { this }; //!< recently used aircraft model BlackMisc::CDataReadOnly<BlackMisc::Simulation::Data::TLastModel> m_lastAircraftModel { this }; //!< recently used aircraft model
BlackMisc::CDataReadOnly<BlackMisc::Network::Data::TLastServer> m_lastServer { this }; //!< recently used server (VATSIM, other) BlackMisc::CDataReadOnly<BlackMisc::Network::Data::TLastServer> m_lastServer { this }; //!< recently used server (VATSIM, other)
@@ -171,6 +174,9 @@ namespace BlackGui
//! Guess some FP values/setting //! Guess some FP values/setting
void anticipateValues(); void anticipateValues();
//! Update the diretcory settings
void updateDirectorySettings(const QString &fileOrDirectory);
}; };
} // ns } // ns
} // ns } // ns

View File

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

View File

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

View File

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

View File

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