Skip to content

Commit

Permalink
Changes some default paths
Browse files Browse the repository at this point in the history
There are three paths we are interested in:

1) "next to" the app (next to the exe on Window, beside the .app on macOS)
2) place to store user data (file dialog defaults)
3) place to find plugins and other internal support files

This fixes (1) for macOS so it can find the global shift file.  It does this by setting the current directory on startup and using it to look for things.  So on the Mac it get set to beside the .app, on Windows it stays next to the exe.

This commit also changes dialogs to use the user's documents directory as the default for (2) by using QStandardPaths.

 (3) wasn't changed.
  • Loading branch information
asmaloney committed Nov 16, 2016
1 parent 7364049 commit 6952a5e
Show file tree
Hide file tree
Showing 17 changed files with 89 additions and 38 deletions.
16 changes: 8 additions & 8 deletions ccViewer/main.cpp
Expand Up @@ -137,20 +137,20 @@ int main(int argc, char *argv[])
VLDEnable();
#endif

QDir workingDir = QCoreApplication::applicationDirPath();

#ifdef Q_OS_MAC
// This makes sure that our "working directory" is not within the application bundle
QDir appDir = QCoreApplication::applicationDirPath();

if ( appDir.dirName() == "MacOS" )
if ( workingDir.dirName() == "MacOS" )
{
appDir.cdUp();
appDir.cdUp();
appDir.cdUp();

QDir::setCurrent( appDir.absolutePath() );
workingDir.cdUp();
workingDir.cdUp();
workingDir.cdUp();
}
#endif

QDir::setCurrent( workingDir.absolutePath() );

if (!QGLFormat::hasOpenGL())
{
QMessageBox::critical(0, "Error", "This application needs OpenGL to run!");
Expand Down
32 changes: 32 additions & 0 deletions libs/qCC_db/ccFileUtils.h
@@ -0,0 +1,32 @@
#ifndef CCFILEUTILS_H
#define CCFILEUTILS_H
//##########################################################################
//# #
//# CLOUDCOMPARE #
//# #
//# This program is free software; you can redistribute it and/or modify #
//# it under the terms of the GNU General Public License as published by #
//# the Free Software Foundation; version 2 or later of the License. #
//# #
//# This program is distributed in the hope that it will be useful, #
//# but WITHOUT ANY WARRANTY; without even the implied warranty of #
//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
//# GNU General Public License for more details. #
//# #
//# COPYRIGHT: CloudCompare project #
//# #
//##########################################################################

#include <QStandardPaths>
#include <QString>

namespace ccFileUtils
{
//! Shortcut for getting the documents location path
inline QString defaultDocPath()
{
// note that according to the docs the QStandardPaths::DocumentsLocation path is never empty
return QStandardPaths::standardLocations( QStandardPaths::DocumentsLocation ).first();
}
}
#endif
8 changes: 5 additions & 3 deletions libs/qCC_io/ccShiftAndScaleCloudDlg.cpp
Expand Up @@ -25,8 +25,10 @@
#include "ccGlobalShiftManager.h"

//Qt
#include <QPushButton>
#include <QDebug>
#include <QDir>
#include <QFile>
#include <QPushButton>
#include <QTextStream>
#include <QStringList>

Expand Down Expand Up @@ -151,9 +153,9 @@ void ccShiftAndScaleCloudDlg::displayMoreInfo()
}

bool ccShiftAndScaleCloudDlg::addFileInfo()
{
{
//try to load the 'global_shift_list.txt" file
return loadInfoFromFile(QApplication::applicationDirPath() + QString("/")+ s_defaultGlobalShiftListFilename);
return loadInfoFromFile(QDir::currentPath() + QString("/")+ s_defaultGlobalShiftListFilename);
}

bool ccShiftAndScaleCloudDlg::loadInfoFromFile(QString filename)
Expand Down
4 changes: 3 additions & 1 deletion plugins/qCSVMatrixIO/CSVMatrixOpenDialog.cpp
Expand Up @@ -15,6 +15,8 @@
//# #
//##########################################################################

#include "ccFileUtils.h"

#include "CSVMatrixOpenDialog.h"

//Qt
Expand All @@ -33,7 +35,7 @@ CSVMatrixOpenDialog::CSVMatrixOpenDialog(QWidget* parent/*=0*/)
//persistent settings
QSettings settings;
settings.beginGroup("LoadFile");
QString currentPath = settings.value("currentPath",QApplication::applicationDirPath()).toString();
QString currentPath = settings.value("currentPath",ccFileUtils::defaultDocPath()).toString();

textureFilenameLineEdit->setText(currentPath);
}
Expand Down
5 changes: 3 additions & 2 deletions plugins/qFacets/qFacets.cpp
Expand Up @@ -35,6 +35,7 @@
#include <QMessageBox>

//qCC_db
#include <ccFileUtils.h>
#include <ccHObjectCaster.h>
#include <ccProgressDialog.h>
#include <ccScalarField.h>
Expand Down Expand Up @@ -683,7 +684,7 @@ void qFacets::exportFacets()
//persistent settings (default export path)
QSettings settings;
settings.beginGroup("qFacets");
QString facetsSavePath = settings.value("exportPath", QApplication::applicationDirPath()).toString();
QString facetsSavePath = settings.value("exportPath", ccFileUtils::defaultDocPath()).toString();
fDlg.destinationPathLineEdit->setText(facetsSavePath + QString("/facets.shp"));

if (!fDlg.exec())
Expand Down Expand Up @@ -1041,7 +1042,7 @@ void qFacets::exportFacetsInfo()
//persistent settings (default export path)
QSettings settings;
settings.beginGroup("qFacets");
QString facetsSavePath = settings.value("exportPath", QApplication::applicationDirPath()).toString();
QString facetsSavePath = settings.value("exportPath", ccFileUtils::defaultDocPath()).toString();
fDlg.destinationPathLineEdit->setText(facetsSavePath + QString("/facets.csv"));

if (!fDlg.exec())
Expand Down
5 changes: 3 additions & 2 deletions plugins/qM3C2/qM3C2Dialog.cpp
Expand Up @@ -21,6 +21,7 @@
#include "../ccMainAppInterface.h"

//qCC_db
#include <ccFileUtils.h>
#include <ccPointCloud.h>

//Qt
Expand Down Expand Up @@ -430,7 +431,7 @@ void qM3C2Dialog::loadParamsFromFile()
QString filename;
{
QSettings settings("qM3C2");
QString currentPath = settings.value("currentPath", QApplication::applicationDirPath()).toString();
QString currentPath = settings.value("currentPath", ccFileUtils::defaultDocPath()).toString();

filename = QFileDialog::getOpenFileName(this, "Load M3C2 parameters", currentPath, "*.txt");
if (filename.isEmpty())
Expand Down Expand Up @@ -461,7 +462,7 @@ void qM3C2Dialog::saveParamsToFile()
QString filename;
{
QSettings settings("qM3C2");
QString currentPath = settings.value("currentPath", QApplication::applicationDirPath()).toString();
QString currentPath = settings.value("currentPath", ccFileUtils::defaultDocPath()).toString();

filename = QFileDialog::getSaveFileName(this, "Save M3C2 parameters", currentPath + QString("/m3c2_params.txt"), "*.txt");
if (filename.isEmpty())
Expand Down
5 changes: 3 additions & 2 deletions plugins/qSRA/distanceMapGenerationDlg.cpp
Expand Up @@ -35,6 +35,7 @@
#include <ccRenderToFileDlg.h>

//qCC_db
#include <ccFileUtils.h>
#include <ccPointCloud.h>
#include <ccPlane.h>
#include <ccScalarField.h>
Expand Down Expand Up @@ -1241,7 +1242,7 @@ void DistanceMapGenerationDlg::exportMapAsGrid()
//persistent settings (default export path)
QSettings settings;
settings.beginGroup("qSRA");
QString path = settings.value("exportPath",QApplication::applicationDirPath()).toString();
QString path = settings.value("exportPath", ccFileUtils::defaultDocPath()).toString();

QString filter("Grid file (*.csv)");

Expand Down Expand Up @@ -1402,7 +1403,7 @@ void DistanceMapGenerationDlg::loadOverlaySymbols()
//persistent settings (default import path)
QSettings settings;
settings.beginGroup("qSRA");
QString path = settings.value("importPath", QApplication::applicationDirPath()).toString();
QString path = settings.value("importPath", ccFileUtils::defaultDocPath()).toString();

QString filter("Symbols (*.txt)");

Expand Down
6 changes: 4 additions & 2 deletions plugins/qSRA/dxfProfilesExportDlg.cpp
Expand Up @@ -15,6 +15,8 @@
//# #
//##########################################################################

#include "ccFileUtils.h"

#include "dxfProfilesExportDlg.h"

//Qt
Expand Down Expand Up @@ -43,8 +45,8 @@ void DxfProfilesExportDlg::initFromPersistentSettings()
QSettings settings;
settings.beginGroup("DxfProfilesExportDialog");

const QString defaultVertProfile( QApplication::applicationDirPath() + "/vert_profiles.dxf" );
const QString defaultHorizProfile( QApplication::applicationDirPath() + "/horiz_profiles.dxf" );
const QString defaultVertProfile( ccFileUtils::defaultDocPath() + "/vert_profiles.dxf" );
const QString defaultHorizProfile( ccFileUtils::defaultDocPath() + "/horiz_profiles.dxf" );

//read parameters
bool vertEnabled = settings.value("vertExportGroup", true).toBool();
Expand Down
3 changes: 2 additions & 1 deletion plugins/qSRA/qSRA.cpp
Expand Up @@ -32,6 +32,7 @@
#include <QMainWindow>

//qCC_db
#include <ccFileUtils.h>
#include <ccHObjectCaster.h>
#include <ccPointCloud.h>
#include <ccProgressDialog.h>
Expand Down Expand Up @@ -154,7 +155,7 @@ void qSRA::loadProfile() const
//persistent settings (default import path)
QSettings settings;
settings.beginGroup("qSRA");
QString path = settings.value("importPath",QApplication::applicationDirPath()).toString();
QString path = settings.value("importPath", ccFileUtils::defaultDocPath()).toString();

ProfileImportDlg piDlg(m_app->getMainWindow());
piDlg.setDefaultFilename(path);
Expand Down
2 changes: 1 addition & 1 deletion qCC/bin_other/global_shift_list_template.txt
Expand Up @@ -6,7 +6,7 @@
// loading a file with big coordinates).
//
// All values are separated by a semicolon character (;):
// name; shift(X); shif(Y); shif(Z); scale;
// name; shift(X); shift(Y); shift(Z); scale;
//
// Example:
//
Expand Down
3 changes: 2 additions & 1 deletion qCC/ccApplyTransformationDlg.cpp
Expand Up @@ -24,6 +24,7 @@
#include "ui_dipDirTransformationDlg.h"

//qCC_db
#include <ccFileUtils.h>
#include <ccNormalVectors.h>

//Qt
Expand Down Expand Up @@ -255,7 +256,7 @@ void ccApplyTransformationDlg::loadFromASCIIFile()
//persistent settings
QSettings settings;
settings.beginGroup(ccPS::LoadFile());
QString currentPath = settings.value(ccPS::CurrentPath(),QApplication::applicationDirPath()).toString();
QString currentPath = settings.value(ccPS::CurrentPath(), ccFileUtils::defaultDocPath()).toString();

QString inputFilename = QFileDialog::getOpenFileName(this, "Select input file", currentPath, "*.txt");
if (inputFilename.isEmpty())
Expand Down
5 changes: 3 additions & 2 deletions qCC/ccColorScaleEditorDlg.cpp
Expand Up @@ -25,6 +25,7 @@

//qCC_db
#include <ccColorScalesManager.h>
#include <ccFileUtils.h>
#include <ccScalarField.h>
#include <ccPointCloud.h>

Expand Down Expand Up @@ -792,7 +793,7 @@ void ccColorScaleEditorDialog::exportCurrentScale()
//persistent settings
QSettings settings;
settings.beginGroup(ccPS::SaveFile());
QString currentPath = settings.value(ccPS::CurrentPath(),QApplication::applicationDirPath()).toString();
QString currentPath = settings.value(ccPS::CurrentPath(), ccFileUtils::defaultDocPath()).toString();

//ask for a filename
QString filename = QFileDialog::getSaveFileName(this,"Select output file",currentPath,"*.xml");
Expand All @@ -818,7 +819,7 @@ void ccColorScaleEditorDialog::importScale()
//persistent settings
QSettings settings;
settings.beginGroup(ccPS::LoadFile());
QString currentPath = settings.value(ccPS::CurrentPath(),QApplication::applicationDirPath()).toString();
QString currentPath = settings.value(ccPS::CurrentPath(), ccFileUtils::defaultDocPath()).toString();

//ask for a filename
QString filename = QFileDialog::getOpenFileName(this,"Select color scale file",currentPath,"*.xml");
Expand Down
4 changes: 2 additions & 2 deletions qCC/ccCommandLineParser.cpp
Expand Up @@ -396,7 +396,7 @@ ccCommandLineParser::EntityDesc::EntityDesc(QString filename, int _indexInFile/*
if (filename.isNull())
{
basename = "unknown";
path = QApplication::applicationDirPath();
path = QDir::currentPath();
}
else
{
Expand Down Expand Up @@ -2245,7 +2245,7 @@ bool ccCommandLineParser::commandCrossSection(QStringList& arguments, QDialog* p
if (fromFiles)
{
assert(false);
outputDir = QDir(QCoreApplication::applicationDirPath());
outputDir = QDir::current();
}
else
{
Expand Down
6 changes: 4 additions & 2 deletions qCC/ccHistogramWindow.cpp
Expand Up @@ -24,6 +24,8 @@

//qCC_db
#include <ccColorScalesManager.h>
#include <ccFileUtils.h>

//qCC_io
#include <ImageFileFilter.h>

Expand Down Expand Up @@ -977,7 +979,7 @@ void ccHistogramWindowDlg::onExportToCSV()
//persistent settings
QSettings settings;
settings.beginGroup(ccPS::SaveFile());
QString currentPath = settings.value(ccPS::CurrentPath(), QApplication::applicationDirPath()).toString();
QString currentPath = settings.value(ccPS::CurrentPath(), ccFileUtils::defaultDocPath()).toString();

currentPath += QString("/") + m_win->windowTitle() + ".csv";

Expand Down Expand Up @@ -1008,7 +1010,7 @@ void ccHistogramWindowDlg::onExportToImage()
//persistent settings
QSettings settings;
settings.beginGroup(ccPS::SaveFile());
QString currentPath = settings.value(ccPS::CurrentPath(), QApplication::applicationDirPath()).toString();
QString currentPath = settings.value(ccPS::CurrentPath(), ccFileUtils::defaultDocPath()).toString();

QString outputFilename = ImageFileFilter::GetSaveFilename("Select output file",
m_win->windowTitle(),
Expand Down
7 changes: 4 additions & 3 deletions qCC/ccRasterizeTool.cpp
Expand Up @@ -24,6 +24,7 @@
#include "ccIsolines.h"

//qCC_db
#include <ccFileUtils.h>
#include <ccGenericPointCloud.h>
#include <ccPointCloud.h>
#include <ccScalarField.h>
Expand Down Expand Up @@ -944,7 +945,7 @@ void ccRasterizeTool::generateRaster() const
{
QSettings settings;
settings.beginGroup(ccPS::HeightGridGeneration());
QString imageSavePath = settings.value("savePathImage", QApplication::applicationDirPath()).toString();
QString imageSavePath = settings.value("savePathImage", ccFileUtils::defaultDocPath()).toString();
outputFilename = QFileDialog::getSaveFileName( const_cast<ccRasterizeTool*>(this),
"Save height grid raster",
imageSavePath + QString("/raster.tif"),
Expand Down Expand Up @@ -1882,7 +1883,7 @@ void ccRasterizeTool::generateImage() const
{
QSettings settings;
settings.beginGroup(ccPS::HeightGridGeneration());
QString imageSavePath = settings.value("savePathImage", QApplication::applicationDirPath()).toString();
QString imageSavePath = settings.value("savePathImage", ccFileUtils::defaultDocPath()).toString();

QString outputFilename = ImageFileFilter::GetSaveFilename( "Save raster image",
"raster_image",
Expand Down Expand Up @@ -1919,7 +1920,7 @@ void ccRasterizeTool::generateASCIIMatrix() const

QSettings settings;
settings.beginGroup(ccPS::HeightGridGeneration());
QString asciiGridSavePath = settings.value("savePathASCIIGrid", QApplication::applicationDirPath()).toString();
QString asciiGridSavePath = settings.value("savePathASCIIGrid", ccFileUtils::defaultDocPath()).toString();

//open file saving dialog
QString filter("ASCII file (*.txt)");
Expand Down
5 changes: 4 additions & 1 deletion qCC/db_tree/matrixDisplayDlg.cpp
Expand Up @@ -23,6 +23,9 @@
//qCC_gl
#include <ccGuiParameters.h>

// qCC_db
#include "ccFileUtils.h"

//Qt
#include <QFileDialog>
#include <QSettings>
Expand Down Expand Up @@ -106,7 +109,7 @@ void MatrixDisplayDlg::exportToASCII()
//persistent settings
QSettings settings;
settings.beginGroup(ccPS::LoadFile()); //use the same folder as the load one
QString currentPath = settings.value(ccPS::CurrentPath(),QApplication::applicationDirPath()).toString();
QString currentPath = settings.value(ccPS::CurrentPath(), ccFileUtils::defaultDocPath()).toString();

QString outputFilename = QFileDialog::getSaveFileName(this, "Select output file", currentPath, "*.mat.txt");
if (outputFilename.isEmpty())
Expand Down

0 comments on commit 6952a5e

Please sign in to comment.