1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-13 20:48:42 +01:00
LibrePilot/ground/src/plugins/coreplugin/uavconfiginfo.cpp

187 lines
5.3 KiB
C++
Raw Normal View History

/**
******************************************************************************
*
* @file uavconfiginfo.cpp
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup CorePlugin Core Plugin
* @{
* @brief The Core GCS plugin
*****************************************************************************/
/*
* 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; either version 3 of the License, or
* (at your option) any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "uavconfiginfo.h"
#include <QMessageBox>
#define VERSION_DEFAULT "0.0.0"
#define TEXT_MINOR_LOSS_OF_CONFIGURATION tr( \
" Some of the configured features might not be supported \
by your version of the plugin. You might want to upgrade the plugin.")
#define TEXT_MISSING_CONFIGURATION tr( \
" Some configuration is missing in the imported config and will be replaced \
by default settings. It's probably an old config.")
#define TEXT_MAJOR_LOSS_OF_CONFIGURATION tr( \
" Major features can't be imported \
by your version of the plugin. You should upgrade the plugin to import these settings.")
#define TEXT_NOT_COMPATIBLE tr( \
" The imported settings are not compatible with this plugin and won't be imported!")
using namespace Core;
UAVConfigInfo::UAVConfigInfo(QSettings *qs, QObject *parent) :
QObject(parent),
m_version(VERSION_DEFAULT)
{
qs->beginGroup("configInfo");
m_version = UAVConfigVersion( qs->value("version", VERSION_DEFAULT ).toString());
qs->endGroup();
}
UAVConfigInfo::UAVConfigInfo(UAVConfigVersion version, QString nameOfConfigurable, QObject *parent) :
QObject(parent),
m_version(version),
m_nameOfConfigurable(nameOfConfigurable)
{
}
void UAVConfigInfo::save(QSettings *qs)
{
qs->beginGroup("configInfo");
qs->setValue("version", m_version.toString());
qs->endGroup();
}
bool UAVConfigInfo::askToAbort(int compat, QString message)
{
QMessageBox msgBox;
msgBox.setInformativeText(tr("Do you want to continue the import?"));
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
int result;
switch(compat){
case FullyCompatible:
return false;
case MinorLossOfConfiguration:
msgBox.setText(tr("INFO: ") + message + TEXT_MINOR_LOSS_OF_CONFIGURATION);
msgBox.setDefaultButton(QMessageBox::Ok);
result = msgBox.exec();
break;
case MissingConfiguration:
msgBox.setText(tr("WARNING: ") + message + TEXT_MISSING_CONFIGURATION);
msgBox.setDefaultButton(QMessageBox::Ok);
result = msgBox.exec();
break;
case MajorLossOfConfiguration:
msgBox.setText(tr("ERROR: ") + message + TEXT_MAJOR_LOSS_OF_CONFIGURATION);
msgBox.setDefaultButton(QMessageBox::Cancel);
result = msgBox.exec();
break;
case NotCompatible:
msgBox.setText("ERROR: " + message + TEXT_NOT_COMPATIBLE);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
return true;
default:
msgBox.setText("INTERNAL ERROR: " + message + tr("Unknown compatibility level: " + compat));
}
if ( result == QMessageBox::Ok )
return false;
else
return true;
}
void UAVConfigInfo::notifyAbort(QString message)
{
QMessageBox msgBox;
msgBox.setText(message);
msgBox.exec();
}
int UAVConfigInfo::checkCompatibilityWith(UAVConfigVersion programVersion)
{
if ( m_version.majorNr != programVersion.majorNr )
return NotCompatible;
if ( m_version.minorNr < programVersion.minorNr )
return MissingConfiguration;
if ( m_version.minorNr > programVersion.minorNr )
return MajorLossOfConfiguration;
if ( m_version.patchNr > programVersion.patchNr )
return MinorLossOfConfiguration;
return FullyCompatible;
}
bool UAVConfigInfo::standardVersionHandlingIsNotOK(UAVConfigVersion programVersion)
{
return askToAbort(
checkCompatibilityWith(programVersion),
"("+m_nameOfConfigurable+")");
}
UAVConfigVersion::UAVConfigVersion(int majorNum, int minorNum, int patchNum)
:majorNr(majorNum)
,minorNr(minorNum)
,patchNr(patchNum)
{
}
UAVConfigVersion::UAVConfigVersion(QString versionString)
{
int begin;
int end = 0;
begin = end;
end = versionString.indexOf(".", begin);
majorNr = versionString.mid(begin, end-begin).toInt();
begin = end+1;
end = versionString.indexOf(".", begin);
minorNr = versionString.mid(begin, end-begin).toInt();
begin = end+1;
patchNr = versionString.mid(begin).toInt();
}
QString UAVConfigVersion::toString() const
{
return QString("%1.%2.%3").arg(majorNr).arg(minorNr).arg(patchNr);
}
bool UAVConfigVersion::operator==(const UAVConfigVersion &other)
{
return toString() == other.toString();
}
/**
* @}
* @}
*/