mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 14:55:36 +08:00
Ref T306, use settings for flightplan and view directories
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
#include <Qt>
|
||||
|
||||
class QDropEvent;
|
||||
class QWidget;
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user