DbViewer: can launch with a directory argument to set current workspace for convenience.

This commit is contained in:
matlabbe
2018-02-19 16:37:17 -05:00
parent 6cdb2a48fd
commit 5c04ce257b

View File

@@ -690,91 +690,103 @@ bool DatabaseViewer::openDatabase(const QString & path)
UDEBUG("Open database \"%s\"", path.toStdString().c_str());
if(QFile::exists(path))
{
std::string driverType = "sqlite3";
dbDriver_ = DBDriver::create();
if(!dbDriver_->openConnection(path.toStdString()))
if(QFileInfo(path).isFile())
{
ui_->actionClose_database->setEnabled(false);
ui_->actionOpen_database->setEnabled(true);
delete dbDriver_;
dbDriver_ = 0;
QMessageBox::warning(this, "Database error", tr("Can't open database \"%1\"").arg(path));
std::string driverType = "sqlite3";
dbDriver_ = DBDriver::create();
if(!dbDriver_->openConnection(path.toStdString()))
{
ui_->actionClose_database->setEnabled(false);
ui_->actionOpen_database->setEnabled(true);
delete dbDriver_;
dbDriver_ = 0;
QMessageBox::warning(this, "Database error", tr("Can't open database \"%1\"").arg(path));
}
else
{
ui_->actionClose_database->setEnabled(true);
ui_->actionOpen_database->setEnabled(false);
pathDatabase_ = UDirectory::getDir(path.toStdString()).c_str();
if(pathDatabase_.isEmpty() || pathDatabase_.compare(".") == 0)
{
pathDatabase_ = QDir::currentPath();
}
databaseFileName_ = UFile::getName(path.toStdString());
ui_->graphViewer->setWorkingDirectory(pathDatabase_);
// look if there are saved parameters
ParametersMap parameters = dbDriver_->getLastParameters();
if(parameters.size())
{
const ParametersMap & currentParameters = ui_->parameters_toolbox->getParameters();
ParametersMap differentParameters;
for(ParametersMap::iterator iter=parameters.begin(); iter!=parameters.end(); ++iter)
{
ParametersMap::const_iterator jter = currentParameters.find(iter->first);
if(jter!=currentParameters.end() &&
ui_->parameters_toolbox->getParameterWidget(QString(iter->first.c_str())) != 0 &&
iter->second.compare(jter->second) != 0 &&
iter->first.compare(Parameters::kRtabmapWorkingDirectory()) != 0)
{
bool different = true;
if(Parameters::getType(iter->first).compare("double") ==0 ||
Parameters::getType(iter->first).compare("float") == 0)
{
if(uStr2Double(iter->second) == uStr2Double(jter->second))
{
different = false;
}
}
if(different)
{
differentParameters.insert(*iter);
QString msg = tr("Parameter \"%1\": database=\"%2\" Preferences=\"%3\"")
.arg(iter->first.c_str())
.arg(iter->second.c_str())
.arg(jter->second.c_str());
UWARN(msg.toStdString().c_str());
}
}
}
if(differentParameters.size())
{
int r = QMessageBox::question(this,
tr("Update parameters..."),
tr("The database is using %1 different parameter(s) than "
"those currently set in Core parameters panel. Do you want "
"to use database's parameters?").arg(differentParameters.size()),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::Yes);
if(r == QMessageBox::Yes)
{
QStringList str;
for(rtabmap::ParametersMap::const_iterator iter = differentParameters.begin(); iter!=differentParameters.end(); ++iter)
{
ui_->parameters_toolbox->updateParameter(iter->first, iter->second);
str.push_back(iter->first.c_str());
}
notifyParametersChanged(str);
}
}
}
updateIds();
return true;
}
}
else
else // directory
{
ui_->actionClose_database->setEnabled(true);
ui_->actionOpen_database->setEnabled(false);
pathDatabase_ = UDirectory::getDir(path.toStdString()).c_str();
pathDatabase_ = path;
if(pathDatabase_.isEmpty() || pathDatabase_.compare(".") == 0)
{
pathDatabase_ = QDir::currentPath();
}
databaseFileName_ = UFile::getName(path.toStdString());
ui_->graphViewer->setWorkingDirectory(pathDatabase_);
// look if there are saved parameters
ParametersMap parameters = dbDriver_->getLastParameters();
if(parameters.size())
{
const ParametersMap & currentParameters = ui_->parameters_toolbox->getParameters();
ParametersMap differentParameters;
for(ParametersMap::iterator iter=parameters.begin(); iter!=parameters.end(); ++iter)
{
ParametersMap::const_iterator jter = currentParameters.find(iter->first);
if(jter!=currentParameters.end() &&
ui_->parameters_toolbox->getParameterWidget(QString(iter->first.c_str())) != 0 &&
iter->second.compare(jter->second) != 0 &&
iter->first.compare(Parameters::kRtabmapWorkingDirectory()) != 0)
{
bool different = true;
if(Parameters::getType(iter->first).compare("double") ==0 ||
Parameters::getType(iter->first).compare("float") == 0)
{
if(uStr2Double(iter->second) == uStr2Double(jter->second))
{
different = false;
}
}
if(different)
{
differentParameters.insert(*iter);
QString msg = tr("Parameter \"%1\": database=\"%2\" Preferences=\"%3\"")
.arg(iter->first.c_str())
.arg(iter->second.c_str())
.arg(jter->second.c_str());
UWARN(msg.toStdString().c_str());
}
}
}
if(differentParameters.size())
{
int r = QMessageBox::question(this,
tr("Update parameters..."),
tr("The database is using %1 different parameter(s) than "
"those currently set in Core parameters panel. Do you want "
"to use database's parameters?").arg(differentParameters.size()),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::Yes);
if(r == QMessageBox::Yes)
{
QStringList str;
for(rtabmap::ParametersMap::const_iterator iter = differentParameters.begin(); iter!=differentParameters.end(); ++iter)
{
ui_->parameters_toolbox->updateParameter(iter->first, iter->second);
str.push_back(iter->first.c_str());
}
notifyParametersChanged(str);
}
}
}
updateIds();
return true;
}
}
else