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.
*/
#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/databaseutils.h"
#include "blackcore/application.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/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 "dbstashcomponent.h"
#include "ui_dbstashcomponent.h"
@@ -78,6 +77,7 @@ namespace BlackGui
ui->tvp_StashAircraftModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
ui->tvp_StashAircraftModels->setHighlightModelStrings(true);
ui->tvp_StashAircraftModels->setHighlightModelStringsColor(Qt::red);
ui->tvp_StashAircraftModels->setSettingsDirectoryIndex(CDirectories::IndexDirLastModelStashJsonOrDefault);
this->enableButtonRow();
connect(sApp->getWebDataServices()->getDatabaseWriter(), &CDatabaseWriter::publishedModels, this, &CDbStashComponent::onPublishedModelsResponse, Qt::QueuedConnection);

View File

@@ -7,25 +7,25 @@
* 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/components/flightplancomponent.h"
#include "blackgui/components/selcalcodeselector.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/airportlist.h"
#include "blackmisc/aviation/altitude.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/logmessage.h"
#include "blackconfig/buildconfig.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/directoryutils.h"
#include "blackmisc/statusmessage.h"
@@ -43,6 +43,7 @@
#include <QTabBar>
#include <QCompleter>
#include <QStringBuilder>
#include <QPointer>
#include <Qt>
using namespace BlackMisc;
@@ -502,6 +503,7 @@ namespace BlackGui
{
const CFlightPlan fp = variant.value<CFlightPlan>();
this->fillWithFlightPlanData(fp);
this->updateDirectorySettings(fileName);
}
else
{
@@ -539,6 +541,7 @@ namespace BlackGui
if (ok)
{
m = CStatusMessage(this, CStatusMessage::SeverityInfo, "Written " + fileName, true);
this->updateDirectorySettings(fileName);
}
else
{
@@ -551,8 +554,8 @@ namespace BlackGui
void CFlightPlanComponent::setSelcalInOwnAircraft()
{
if (!sGui->getIContextOwnAircraft()) return;
if (!ui->frp_SelcalCode->hasValidCode()) return;
if (!sGui || !sGui->getIContextOwnAircraft()) { return; }
if (!ui->frp_SelcalCode->hasValidCode()) { return; }
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()
{
if (!sGui || !sGui->hasWebDataServices()) { return; }
@@ -818,7 +831,7 @@ namespace BlackGui
QString CFlightPlanComponent::getDefaultFilename(bool load)
{
// 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()); }
// Save file path

View File

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

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: