mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-08 12:30:20 +08:00
DbViewer: can launch with a directory argument to set current workspace for convenience.
This commit is contained in:
@@ -690,91 +690,103 @@ bool DatabaseViewer::openDatabase(const QString & path)
|
|||||||
UDEBUG("Open database \"%s\"", path.toStdString().c_str());
|
UDEBUG("Open database \"%s\"", path.toStdString().c_str());
|
||||||
if(QFile::exists(path))
|
if(QFile::exists(path))
|
||||||
{
|
{
|
||||||
std::string driverType = "sqlite3";
|
if(QFileInfo(path).isFile())
|
||||||
|
|
||||||
dbDriver_ = DBDriver::create();
|
|
||||||
|
|
||||||
if(!dbDriver_->openConnection(path.toStdString()))
|
|
||||||
{
|
{
|
||||||
ui_->actionClose_database->setEnabled(false);
|
std::string driverType = "sqlite3";
|
||||||
ui_->actionOpen_database->setEnabled(true);
|
|
||||||
delete dbDriver_;
|
dbDriver_ = DBDriver::create();
|
||||||
dbDriver_ = 0;
|
|
||||||
QMessageBox::warning(this, "Database error", tr("Can't open database \"%1\"").arg(path));
|
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);
|
pathDatabase_ = path;
|
||||||
ui_->actionOpen_database->setEnabled(false);
|
|
||||||
|
|
||||||
pathDatabase_ = UDirectory::getDir(path.toStdString()).c_str();
|
|
||||||
if(pathDatabase_.isEmpty() || pathDatabase_.compare(".") == 0)
|
if(pathDatabase_.isEmpty() || pathDatabase_.compare(".") == 0)
|
||||||
{
|
{
|
||||||
pathDatabase_ = QDir::currentPath();
|
pathDatabase_ = QDir::currentPath();
|
||||||
}
|
}
|
||||||
databaseFileName_ = UFile::getName(path.toStdString());
|
|
||||||
ui_->graphViewer->setWorkingDirectory(pathDatabase_);
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user