29 #include "../../common/BoostUtils.h" 30 #include "../../common/StringUtils.h" 31 #include "../../common/SystemApplicationSettings.h" 32 #include "../../common/UserApplicationSettings.h" 33 #include "../../core/utils/Platform.h" 34 #include "../../dataaccess/datasource/DataSourceInfo.h" 35 #include "../../dataaccess/datasource/DataSourceInfoManager.h" 36 #include "../../dataaccess/serialization/xml/Serializer.h" 37 #include "../../maptools/AbstractLayer.h" 38 #include "../../core/plugin/PluginManager.h" 39 #include "../../maptools/serialization/xml/Layer.h" 40 #include "../../xml/AbstractWriter.h" 41 #include "../../xml/AbstractWriterFactory.h" 42 #include "../../xml/Reader.h" 43 #include "../../xml/ReaderFactory.h" 44 #include "../../Version.h" 57 #include <boost/property_tree/ptree.hpp> 58 #include <boost/property_tree/json_parser.hpp> 59 #include <boost/algorithm/string/replace.hpp> 60 #include <boost/filesystem.hpp> 61 #include <boost/format.hpp> 68 #include <QTextStream> 69 #include <QApplication> 71 #include <QMainWindow> 72 #include <QMessageBox> 74 #include <QDesktopWidget> 78 QSettings user_settings(QSettings::IniFormat,
80 QApplication::instance()->organizationName(),
81 QApplication::instance()->applicationName());
84 user_settings.remove(
"plugins/enabled");
86 user_settings.beginGroup(
"plugins");
87 user_settings.remove(
"loaded");
88 user_settings.remove(
"unloaded");
90 user_settings.beginWriteArray(
"loaded");
93 std::vector<te::core::PluginInfo> loaded =
96 for(std::size_t i = 0; i != loaded.size(); ++i)
98 user_settings.setArrayIndex(aidx++);
100 user_settings.setValue(
"name", loaded[i].name.c_str());
103 user_settings.endArray();
107 std::vector<te::core::PluginInfo> unloaded =
110 user_settings.beginWriteArray(
"unloaded");
114 for(std::size_t i = 0; i != unloaded.size(); ++i)
116 user_settings.setArrayIndex(unloadedidx++);
118 user_settings.setValue(
"name", unloaded[i].name.c_str());
121 std::vector<te::core::PluginInfo> broken =
124 for(std::size_t i = 0; i != broken.size(); ++i)
126 user_settings.setArrayIndex(unloadedidx++);
128 user_settings.setValue(
"name", broken[i].name.c_str());
131 user_settings.endArray();
133 user_settings.endGroup();
138 QSettings usettings(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
140 QString fileName = usettings.value(
"data_sources/data_file").toString();
142 if(fileName.isNull())
148 usettings.setValue(
"data_sources/data_file", QVariant(fileName));
151 QFileInfo info(fileName);
153 QDir
d = info.absoluteDir();
168 sett.beginGroup(bar->objectName());
170 sett.setValue(
"name", bar->objectName());
172 sett.beginWriteArray(
"Actions");
174 QList<QAction*> acts = bar->actions();
176 for(
int i=0; i<acts.size(); i++)
178 sett.setArrayIndex(i);
179 sett.setValue(
"action", acts.at(i)->objectName());
189 std::vector<QToolBar*> bars = appController->
getToolBars();
190 std::vector<QToolBar*>::const_iterator it;
191 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
193 sett.beginGroup(
"toolbars");
195 for (it = bars.begin(); it != bars.end(); ++it)
199 sett.remove(bar->objectName());
209 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
211 sett.beginGroup(
"toolbars");
220 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
222 sett.beginGroup(
"toolbars");
223 sett.remove(bar->objectName());
229 std::vector<QToolBar*> bars;
231 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
233 sett.beginGroup(
"toolbars");
234 QStringList lst = sett.childGroups();
236 QStringList::iterator it;
238 for(it=lst.begin(); it != lst.end(); ++it)
244 QString grName = sett.value(
"name").toString();
246 int size = sett.beginReadArray(
"Actions");
248 QToolBar* toolbar =
new QToolBar(barsParent);
249 toolbar->setObjectName(grName);
250 toolbar->setWindowTitle(grName);
252 for(
int i=0; i<size; i++)
254 sett.setArrayIndex(i);
255 QString act = sett.value(
"action").toString();
259 toolbar->addSeparator();
266 toolbar->addAction(a);
273 bars.push_back(toolbar);
283 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
285 sett.beginGroup(
"mainWindow");
286 sett.setValue(
"geometry", mainWindow->saveGeometry());
287 sett.setValue(
"windowState", mainWindow->saveState());
293 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
295 sett.beginGroup(
"mainWindow");
296 mainWindow->restoreGeometry(sett.value(
"geometry").toByteArray());
297 mainWindow->restoreState(sett.value(
"windowState").toByteArray());
323 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
325 sett.setValue(
"projects/last datasource used", dsType);
337 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
339 return sett.value(
"projects/last datasource used").toString();
357 QString result(windowTitle);
361 if(result.at(result.count()-1) !=
'*')
366 if(result.at(result.count()-1) ==
'*')
367 result.remove((result.count()-1), 1);
375 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
376 QString hexColor = sett.value(
"display/defaultDisplayColor").toString();
378 defaultColor.setNamedColor(hexColor);
379 if(!defaultColor.isValid())
387 QString sty(
"alternate-background-color: ");
388 sty +=
"rgb(" + QString::number(secondaryColor.red()) +
", " + QString::number(secondaryColor.green());
389 sty +=
", " + QString::number(secondaryColor.blue()) +
")";
390 sty +=
";background-color: rgb(" + QString::number(primaryColor.red()) +
", " + QString::number(primaryColor.green());
391 sty +=
", " + QString::number(primaryColor.blue()) +
");";
398 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
401 pColor.setNamedColor(sett.value(
"table/primaryColor").toString());
403 sColor.setNamedColor(sett.value(
"table/secondaryColor").toString());
405 if(!pColor.isValid())
407 if(!sColor.isValid())
415 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
416 bool isChecked = sett.value(
"table/tableAlternateColors").toBool();
423 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
425 sett.beginGroup(
"toolbars");
426 QStringList lst = sett.childGroups();
427 QStringList::iterator it;
429 for(it=lst.begin(); it!=lst.end(); ++it)
431 int size = sett.beginReadArray(*it+
"/Actions");
433 for(
int i=0; i<size; i++)
435 sett.setArrayIndex(i);
437 QString v = sett.value(
"action").toString();
439 if (!v.isNull() && v.compare(act->objectName()) == 0)
441 QToolBar* bar = appController->
getToolBar(*it);
456 std::vector<std::string> res;
460 filters <<
"*.teplg.json";
464 QFileInfoList files = d.entryInfoList(filters, QDir::Files);
466 foreach(QFileInfo
file, files)
468 res.push_back(file.absoluteFilePath().toUtf8().data());
476 std::vector<std::string> res;
481 if (pluginsPath ==
"")
485 boost::property_tree::ptree pt;
486 boost::property_tree::json_parser::read_json(pluginsPath, pt);
488 for(boost::property_tree::ptree::value_type &v: pt.get_child(
"plugins"))
490 res.push_back(v.second.get<std::string>(
"plugin"));
498 std::vector<std::string> res;
499 std::vector<std::string>::const_iterator it;
501 for(it=plgFiles.begin(); it!=plgFiles.end(); ++it)
503 boost::property_tree::ptree
p;
504 boost::property_tree::read_xml(*it, p, boost::property_tree::xml_parser::trim_whitespace);
506 res.push_back(p.get<std::string>(
"PluginInfo.Name"));
514 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
516 return sett.value(
"configuration/generation").toString();
521 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
523 sett.setValue(
"configuration/generation", dateTime);
528 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
530 QFileInfo info(sett.fileName());
532 return info.absolutePath();
537 QFileInfo info(fileName);
542 info.dir().remove(info.fileName());
544 std::string olderFile = appSett.
getValue(
"Application.UserSettingsFile.<xmlattr>.xlink:href");
546 appSett.
setValue(
"Application.UserSettingsFile.<xmlattr>.xlink:href", fileName.toUtf8().data());
550 info.setFile(olderFile.c_str());
551 info.dir().remove(info.fileName());
554 info.setFile(fileName);
558 #if BOOST_VERSION > 105600 559 boost::property_tree::xml_writer_settings<std::string> settings(
'\t', 1);
561 boost::property_tree::xml_writer_settings<char> settings(
'\t', 1);
563 boost::property_tree::write_xml(fileName.toUtf8().data(), usrSett.
getAllSettings(), std::locale(), settings);
566 usrSett.
load(fileName.toUtf8().data());
600 QString fileName = qApp->applicationDirPath() +
"/../.generated";
603 if (!f.open(QFile::ReadOnly | QFile::Text))
607 QString s = in.readAll();
616 QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
618 QString widthMMStr = sett.value(
"display/screenWidthMM").toString();
619 QString heightMMStr = sett.value(
"display/screenHeightMM").toString();
621 int widthMM = widthMMStr.toInt();
622 int heightMM = heightMMStr.toInt();
624 QRect screenRect = QApplication::desktop()->screenGeometry();
625 int width = screenRect.width();
626 int height = screenRect.height();
628 dpiX = (double)width/((
double)widthMM/25.4);
629 dpiY = (double)height/((
double)heightMM/25.4);
634 bool isLower =
false;
636 std::vector<std::string> vecVersion1;
637 std::vector<std::string> vecVersion2;
642 if (vecVersion1.size() < vecVersion2.size())
644 for (
size_t i = vecVersion1.size(); i < vecVersion2.size(); ++i)
646 vecVersion1.push_back(
"0");
649 else if (vecVersion2.size() < vecVersion1.size())
651 for (
size_t i = vecVersion2.size(); i < vecVersion1.size(); ++i)
653 vecVersion2.push_back(
"0");
657 for (
unsigned int i = 0; i < vecVersion1.size(); ++i)
659 int sub1 = atoi(vecVersion1[i].c_str());
660 int sub2 = atoi(vecVersion2[i].c_str());
677 if (versions.empty())
680 std::string version = versions[0];
681 for (
auto i : versions)
692 std::string userDir = appController->
getUserDataDir().toUtf8().data();
694 boost::filesystem::path folderP(userDir);
695 std::string folder = folderP.filename().string();
697 std::vector<std::string> tokens;
700 std::string currentVersion = tokens[1];
702 std::string organizationFolder = userDir +
"/..";
704 std::string appName = appController->
getAppName().toUtf8().data();
706 boost::filesystem::path
p(organizationFolder);
708 boost::filesystem::directory_iterator it(p), l;
710 std::vector<std::string> appVersions;
711 for (boost::filesystem::directory_entry& entry : boost::make_iterator_range(it, l))
715 std::string t = entry.path().filename().string();
719 if ((tokens[0] == appName) && (tokens[1] != currentVersion))
721 appVersions.push_back(tokens[1]);
725 if (appVersions.empty())
730 std::string lastVersion = organizationFolder +
"/" + appName +
"-" + upperVersion;
TEQTAFEXPORT void RemoveToolBarFromSettings(QToolBar *bar)
Removes a tool bar from the settings.
TEQTAFEXPORT QColor GetDefaultDisplayColorFromSettings()
TEQTAFEXPORT std::vector< std::string > GetPluginsFiles()
TEQTAFEXPORT void AddActionToCustomToolbars(te::qt::af::ApplicationController *appController, QAction *act)
Check QSettings for existance of act and adds it if necessary.
An exception class for the TerraLib Application Framework.
TEQTAFEXPORT void SaveDataSourcesFile(te::qt::af::ApplicationController *appController)
Saves data sources file.
A singleton for managing application settings applied to a single user.
TEQTAFEXPORT void SetDateTime(const QString &dateTime)
The base API for TerraLib applications.
std::vector< PluginInfo > getBrokenPlugins() const
Return the list of plugins that could not be loaded.
TEQTAFEXPORT QString UnsavedStar(const QString windowTitle, bool isUnsaved)
Unsaved star.
void setValue(const std::string &key, const std::string &value)
It stores the value according to the key.
TEQTAFEXPORT void SaveLastDatasourceOnSettings(const QString &dsType)
TEQTAFEXPORT void UpdateUserSettings()
Reads and return a te::qt::af::Project from the file.
const QString & getUserDataDir() const
TEQTAFEXPORT void SaveState(QMainWindow *mainWindow)
TEQTAFEXPORT void UpdateToolBarsInTheSettings(te::qt::af::ApplicationController *appController)
Update plugins file.
TEQTAFEXPORT bool GetAlternateRowColorsFromSettings()
TEQTAFEXPORT void AddToolBarToSettings(QToolBar *bar)
Update settings with a new tool bar.
QToolBar * getToolBar(const QString &id) const
Return the toolbar identified by id or NULL if none is found.
std::string GetUpperVersion(const std::vector< std::string > &versions)
const QString & getAppName() const
Returns the application name.
void Tokenize(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters=" ")
It tokenizes a given string with a delimiter of your own choice.
static PluginManager & instance()
Access the singleton.
std::vector< PluginInfo > getUnloadedPlugins() const
Return the list of plugins that were not loaded.
TEQTAFEXPORT void UpdateUserSettingsFile(const QString &fileName, const bool &removeOlder=true)
Changes the user settings file location.
const QString & getAppPluginsPath() const
Returns the plugins file path of application.
static UserApplicationSettings & getInstance()
It returns a reference to the singleton instance.
TEQTAFEXPORT QString GetDefaultConfigFileOutputDir()
Returns the default path for output of configuration file.
TEQTAFEXPORT QString GetStyleSheetFromColors(QColor primaryColor, QColor secondaryColor)
TEQTAFEXPORT bool IsLowerVersion(const std::string &version1, const std::string &version2)
It compares two strings in the context of sistem version.
A singleton for managing application settings applied to the whole system (all users).
static te::dt::DateTime d(2010, 8, 9, 15, 58, 39)
TEDATAACCESSEXPORT void Save(const std::string &fileName)
TEQTAFEXPORT void GetDPIValuesFromSettings(int &dpiX, int &dpiY)
Load setted dpi X and Y. If there is no configuration to load, it fills dpiX and dpiY with -1...
TEQTAFEXPORT void RestoreState(QMainWindow *mainWindow)
TEQTAFEXPORT QString GetGenerationDate()
Writes the configuration file. It updates the application settings.
TEQTAFEXPORT QString GetDateTime()
#define TERRALIB_APPLICATION_DATASOURCE_FILE_NAME
The default name for the application file containing the list of data sources.
void AddToolbarAndActions(QToolBar *bar, QSettings &sett)
TEQTAFEXPORT QString GetStyleSheetFromSettings()
Utility routines for the TerraLib Application Framework module.
QAction * findAction(const QString &id) const
Returns the action identified by id or NULL if there's not an action identified by id...
void load(const std::string &fileName)
It tries to find a default config file based on system macros and default condigurations.
TECOREEXPORT std::string FindInTerraLibPath(const std::string &path)
Returns the path relative to a directory or file in the context of TerraLib.
TEQTAFEXPORT std::string GetLastFormerVersionPath(te::qt::af::ApplicationController *appController)
std::vector< QToolBar * > getToolBars() const
Return the list of registered toolbars.
const boost::property_tree::ptree & getAllSettings() const
It return a reading reference to the internal settings.
std::string getValue(const std::string &key)
It returns the value for a given key or empty.
TEQTAFEXPORT std::vector< std::string > GetPluginsNames(const std::vector< std::string > &plgFiles)
The base API for controllers of TerraLib applications.
std::vector< PluginInfo > getLoadedPlugins() const
Return the list of plugins that are loaded.
TEQTAFEXPORT std::vector< QToolBar * > ReadToolBarsFromSettings(te::qt::af::ApplicationController *appController, QWidget *barsParent=0)
Returns a vector of tool bars registered in the QSettings.
TEQTAFEXPORT QString GetLastDatasourceFromSettings()
file(WRITE ${CMAKE_BINARY_DIR}/config_qhelp.cmake"configure_file (${TERRALIB_ABSOLUTE_ROOT_DIR}/doc/qhelp/help.qhcp.in ${CMAKE_BINARY_DIR}/share/terraview/help/help.qhcp @ONLY)") add_custom_command(OUTPUT del_dir COMMAND $
TEQTAFEXPORT std::vector< std::string > GetDefaultPluginsNames(te::qt::af::ApplicationController *appController)