Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
#
# $Id$
# $HeadURL$
# $Author$
#
# CMakeLists.txt fuer ProjectSettingsEditor
#
SET (settingsEditor_SRCS
function_keys_edit.cpp
function_keys_edit.h
main.cpp
main_window.cpp
main_window.h
templates.qrc
)
SET (settingsEditor_UICS
function_keys_edit.ui
main_window.ui
)
QT5_ADD_RESOURCES(settingsEditor_SRCS templates.qrc)
NGL_WRAP_UI(settingsEditor_SRCS ${settingsEditor_UICS})
NGL_ADD_TOOL_ICON(settingsEditor_SRCS)
NGL_ADD_EXECUTABLE(ProjectSettingsEditor TOOLSSV TOOLSWS NO_TRANSLATION ${settingsEditor_SRCS} ${settingsEditor_UICS})
NGL_TARGET_LINK_LIBRARIES(ProjectSettingsEditor
LtsCommandLineParser
LtsPluginLoader
StylePluginInterface
Qt5::Core
Qt5::Widgets
NGLLogger
nglapplication
nglwidgets
)
IF (NOT BUILD_RPM)
NGL_INSTALL_TARGET(ProjectSettingsEditor)
# NGL_INSTALL(TOOLS FILES log4cxx_projectSettingsEditor.props DESTINATION "bin") < file missing
ENDIF()
+67
View File
@@ -0,0 +1,67 @@
/**
* @RDE_HEADER@
*
* Helper for editing FunctionKeys
*
* $Id$
* $HeadURL$
* $Author$
*/
#include "function_keys_edit.h"
#include "ui_function_keys_edit.h"
#include <QKeySequence>
#include <QTableWidgetItem>
namespace SettingsEditor
{
FunctionKeysEdit::FunctionKeysEdit(QWidget *parent) :
QWidget(parent),
m_ui(new Ui::FunctionKeysEdit)
{
m_ui->setupUi(this);
// Initialize table
m_ui->twKeysEdit->setRowCount(Qt::Key_F12 - Qt::Key_F5 + 1);
m_ui->twKeysEdit->resizeColumnToContents(0);
for (int i = Qt::Key_F5; i <= Qt::Key_F12; ++i)
{
QTableWidgetItem *item = new QTableWidgetItem(QKeySequence(i).toString());
item->setFlags(Qt::NoItemFlags);
m_ui->twKeysEdit->setItem((i - Qt::Key_F5), 0, item);
item = new QTableWidgetItem(QString());
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);
m_ui->twKeysEdit->setItem((i - Qt::Key_F5), 1, item);
}
}
FunctionKeysEdit::~FunctionKeysEdit()
{
delete m_ui;
}
void FunctionKeysEdit::setValue(const QVariant &value)
{
const QVariantMap map = value.toMap();
for (auto it = map.cbegin(); it != map.cend(); ++it)
m_ui->twKeysEdit->item(it.key().toInt() - Qt::Key_F5, 1)->setText(it.value().toString());
}
QVariant FunctionKeysEdit::value() const
{
QVariantMap map;
for (int i = Qt::Key_F5; i <= Qt::Key_F12; ++i)
{
const auto item = m_ui->twKeysEdit->item((i - Qt::Key_F5), 1);
if (!item->text().isEmpty())
map.insert(QString::number(i), item->text());
}
return map;
}
}
+41
View File
@@ -0,0 +1,41 @@
/**
* @RDE_HEADER@
*
* Helper for editing FunctionKeys
*
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QVariant>
#include <QWidget>
namespace Ui
{
class FunctionKeysEdit;
}
namespace SettingsEditor
{
// --------------------------------------------------------------------------------
// | Class FunctionKeysEdit |
// --------------------------------------------------------------------------------
class FunctionKeysEdit : public QWidget
{
Q_OBJECT
public:
explicit FunctionKeysEdit(QWidget *parent = nullptr);
~FunctionKeysEdit();
void setValue(const QVariant &value);
QVariant value() const;
private:
Ui::FunctionKeysEdit *m_ui;
};
}
+59
View File
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FunctionKeysEdit</class>
<widget class="QWidget" name="FunctionKeysEdit">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>754</width>
<height>440</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTableWidget" name="twKeysEdit">
<property name="columnCount">
<number>2</number>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Key</string>
</property>
</column>
<column>
<property name="text">
<string>Function Identifier</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+46
View File
@@ -0,0 +1,46 @@
/**
* @RDE_HEADER@
* Settings Editor -> creating and editing existing default settings
* $Id$
* $HeadURL$
* $Author$
*/
#include "main_window.h"
#include <LtsCommandLineParser/LtsCommandLineParser.h>
#include <NGLLogger/INGLLogger.h>
#include <nglapplication/nglapplication.h>
#include <LtsPluginManager/lts_plugin_loader.h>
#include <PluginInterfaces/style_plugin_interface.h>
int main(int argc, char *argv[])
{
NGLApplication app(argc, argv);
app.createLogger("SettingsEditor", "log4cxx_settingsEditor.props");
NGL::INGLLogger &logger = app.baseLogger();
QCoreApplication::setApplicationName(QLatin1String("Settings Editor"));
QCoreApplication::setOrganizationName(QLatin1String("RME"));
LtsPluginManager::LtsPluginLoader::getInstance()->loadPlugins(LtsPluginManager::PluginType::STYLE,
nullptr,
{QStringLiteral("rde.light")}); // load style plugin
int retval = 0;
STARTUP_LOG(logger);
{
QScopedPointer<SettingsEditor::MainWindow> mw(new SettingsEditor::MainWindow);
mw->setWindowTitle(QLatin1String("ProjectSettingsEditor"));
mw->show();
app.setQuitOnLastWindowClosed(true);
retval = app.exec();
SHUTDOWN_LOG(logger);
}
return retval;
}
+404
View File
@@ -0,0 +1,404 @@
/**
* @RDE_HEADER@
*
* MainWindow for settings editor
*
* $Id$
* $HeadURL$
* $Author$
*/
#include "main_window.h"
#include "ui_main_window.h"
#include <NGLLogger/INGLLogger.h>
#include <QAction>
#include <QFile>
#include <QFileDialog>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QMenu>
#include <QMessageBox>
namespace SettingsEditor
{
MainWindow::MainWindow(QWidget *parent)
: NGLMainWindow(parent)
, m_ui(new Ui::MainWindow)
{
m_ui->setupUi(this);
enableTextEdit(false);
QMenu *fileMenu = m_menu[QLatin1String("File")];
fileMenu->addSeparator();
QAction *action;
action = new QAction(tr("Load Settings"), this);
action->setShortcut(QKeySequence(tr("Ctrl+l")));
connect(action, &QAction::triggered, this, &MainWindow::onLoadFromExport);
fileMenu->addAction(action);
action = new QAction(tr("Save Settings"), this);
action->setShortcut(QKeySequence(tr("Ctrl+s")));
connect(action, &QAction::triggered, this, &MainWindow::onSaveSettings);
fileMenu->addAction(action);
action = new QAction(tr("Export Settings"), this);
action->setShortcut(QKeySequence(tr("Ctrl+e")));
connect(action, &QAction::triggered, this, &MainWindow::onExportSettings);
fileMenu->addAction(action);
action = new QAction(tr("Load Default"), this);
action->setShortcut(QKeySequence(tr("Ctrl+d")));
connect(action, &QAction::triggered, this, &MainWindow::onLoadPresetFromTemplate);
fileMenu->addAction(action);
onLoadPresetFromTemplate();
m_ui->twPath->expandAll();
connect(m_ui->twPath, &QTreeWidget::currentItemChanged, this, &MainWindow::oncurrentItemChanged);
}
MainWindow::~MainWindow()
{
delete m_ui;
}
void MainWindow::oncurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if (previous)
{
if (previous->parent())
{
QPair<SettingType, QVariant> value = m_data.value(craftKey(previous->parent()->text(0), previous->text(0)));
switch (value.first)
{
case StringList:
value.second = QVariant(m_ui->teValueEdit->toPlainText().split(QRegularExpression{QStringLiteral(R"-((\r\n?|\n))-")}));
break;
case FunctionKeys:
value.second = QVariant(m_ui->functionKeysEdit->value());
break;
case Json:
case String:
value.second = QVariant(m_ui->teValueEdit->toPlainText());
break;
case Boolean:
value.second = m_ui->cbBoolValue->isChecked();
break;
}
const QString key(craftKey(previous->parent()->text(0), previous->text(0)));
if (m_data[key] != value)
{
setWindowModified(true);
m_data[key] = value;
}
}
}
if (current)
{
if (current->parent())
{
const auto it = m_data.constFind(craftKey(current->parent()->text(0), current->text(0)));
const QVariant &val = it.value().second;
switch (it.value().first)
{
case StringList:
enableTextEdit();
m_ui->teValueEdit->setPlainText(val.toStringList().join(QLatin1Char('\n')));
break;
case Json:
enableTextEdit();
m_ui->teValueEdit->setPlainText(val.toString());
break;
case String:
enableTextEdit();
m_ui->teValueEdit->setPlainText(val.toString());
break;
case FunctionKeys:
enableFunctionKeyEdit();
m_ui->functionKeysEdit->setValue(val);
break;
case Boolean:
enableBoolEdit();
m_ui->cbBoolValue->setChecked(val.toBool());
break;
}
}
else
enableTextEdit(false);
}
else
enableTextEdit(false);
}
void MainWindow::onSaveSettings()
{
if (saveSettings(m_settingsFileName))
setWindowModified(false);
}
void MainWindow::onExportSettings()
{
// save current data in edit field
oncurrentItemChanged(m_ui->twPath->currentItem(), m_ui->twPath->currentItem());
const QString filename = QFileDialog::getSaveFileName(this,
tr("Save File"),
QStringLiteral("project_settings.json"),
tr("Project Settings files (*.json)"));
saveSettings(filename);
}
bool MainWindow::saveSettings(const QString &filename)
{
if (filename.isEmpty())
return false;
QFile f(filename);
if (!f.open(QIODevice::WriteOnly))
{
QMessageBox::warning(this, tr("Error writing file"),
tr("Could not write file '%1', error: %2").arg(filename, f.errorString()));
return false;
}
QJsonObject obj;
for (int t = 0; t < m_ui->twPath->topLevelItemCount(); ++t)
{
QJsonObject tlObj;
const QTreeWidgetItem *tlItem = m_ui->twPath->topLevelItem(t);
for (int g = 0; g < tlItem->childCount(); ++g)
{
QJsonObject groupObj;
const QTreeWidgetItem *groupItem = tlItem->child(g);
const QString groupName = groupItem->text(0);
for (int i = 0; i < groupItem->childCount(); ++i)
{
const QTreeWidgetItem *item = groupItem->child(i);
const QString itemName = item->text(0);
const QString key = craftKey(groupName, itemName);
const QString type = typeToString(m_data[craftKey(groupName, itemName)].first);
QJsonValue val;
switch (m_data[craftKey(groupName, itemName)].first)
{
case String:
val = m_data[key].second.toString();
break;
case FunctionKeys:
val = m_data[key].second.toString();
break;
case Json:
val = QJsonDocument::fromJson(m_data[key].second.toByteArray()).object();
break;
case StringList:
{
QJsonArray arr;
const QStringList sl = m_data[key].second.toStringList();
for (const QString &s : sl)
arr.append(s);
val = arr;
break;
}
case Boolean:
val = m_data[key].second.toBool();
break;
}
groupObj[itemName] = QJsonObject{{QStringLiteral("Default"), val}, {QStringLiteral("Type"), type}};
}
tlObj[groupName] = groupObj;
}
obj[tlItem->text(0)] = tlObj;
}
QJsonDocument doc(obj);
f.write(doc.toJson());
f.close();
return true;
}
void MainWindow::onLoadFromExport()
{
const QString filename = QFileDialog::getOpenFileName(this,
tr("Load File"),
QString(),
tr("Project Settings files (*.json)"));
if (filename.isEmpty())
return;
QFile input(filename);
if (!input.open(QIODevice::ReadOnly))
return;
if (loadSettings(filename))
{
m_settingsFileName = filename;
setWindowTitle(filename + QStringLiteral("[*]"));
}
}
void MainWindow::onLoadPresetFromTemplate()
{
loadSettings(QStringLiteral(":/project_settings.json"));
}
bool MainWindow::loadSettings(const QString &filename)
{
DEBUG_LOG(m_logger) << "Loading settings from " << filename;
QFile f(filename);
if (!f.open(QIODevice::ReadOnly))
{
QMessageBox::warning(this, tr("Error reading file"),
tr("Could not read file '%1', error: %2").arg(filename, f.errorString()));
return false;
}
bool firstLoad = m_data.isEmpty();
QJsonParseError jErr;
const QByteArray ba = f.readAll();
const QJsonObject settings = QJsonDocument::fromJson(ba, &jErr).object();
if (jErr.error != QJsonParseError::NoError)
{
if (jErr.offset >= 0)
{
QByteArray code = ba.mid(jErr.offset - 40, 80);
QMessageBox::warning(this, tr("Json parser error"),
tr("%1 (fragment: '%2')").arg(jErr.errorString(), QString::fromUtf8(code)));
}
else
{
QMessageBox::warning(this, tr("Json parser error"),
jErr.errorString());
}
return false;
}
const QStringList &settingsKeys = settings.keys();
for (const auto &setting : settingsKeys)
{
QTreeWidgetItem *settingTreeItem = firstLoad ? new QTreeWidgetItem(m_ui->twPath, QStringList(setting)) : nullptr; // only build tree on first load
const QJsonObject groups = settings.value(setting).toObject();
const QStringList &groupKeys = groups.keys();
for (const auto &group : groupKeys)
{
QTreeWidgetItem *groupTreeItem = firstLoad ? new QTreeWidgetItem(settingTreeItem, QStringList(group)) : nullptr; // only build tree on first load
const QStringList &itemKeys = groups[group].toObject().keys();
for (const auto &key : itemKeys)
{
if (groupTreeItem)
groupTreeItem->addChild(new QTreeWidgetItem(QStringList(key)));
const QJsonObject obj = groups[group].toObject()[key].toObject();
const auto strType = obj[QStringLiteral("Type")].toString();
const auto type = stringToType(strType);
const QJsonValue jVal =obj[QStringLiteral("Default")];
QVariant val;
switch (type)
{
case Json:
val = QJsonDocument(jVal.toObject()).toJson();
break;
case StringList:
{
const QJsonArray arr = jVal.toArray();
QStringList sl;
sl.reserve(arr.size());
for (const auto &ele : arr)
sl.push_back(ele.toString());
val = sl;
break;
}
case FunctionKeys:
val = jVal.toVariant();
break;
case String:
val = jVal.toString();
break;
case Boolean:
val = jVal.toBool();
break;
}
m_data.insert(craftKey(group, key), qMakePair(type, val));
}
}
}
// load new data into edit field
oncurrentItemChanged(m_ui->twPath->currentItem(), nullptr); // nullptr -> prevent saving existing data
return true;
}
void MainWindow::enableTextEdit(bool enabled)
{
m_ui->stackedWidget->setCurrentIndex(0);
m_ui->teValueEdit->setEnabled(enabled);
}
void MainWindow::enableFunctionKeyEdit()
{
m_ui->stackedWidget->setCurrentIndex(2);
}
void MainWindow::enableBoolEdit()
{
m_ui->stackedWidget->setCurrentIndex(1);
}
void MainWindow::setVersionView()
{
}
QString MainWindow::craftKey(const QString &group, const QString &key)
{
return group + QLatin1Char('.') + key;
}
QString MainWindow::typeToString(SettingType t)
{
switch (t)
{
case String:
return QStringLiteral("String");
case StringList:
return QStringLiteral("StringList");
case Json:
return QStringLiteral("Json");
case FunctionKeys:
return QStringLiteral("FunctionKeys");
case Boolean:
return QStringLiteral("Boolean");
}
Q_ASSERT(false);
return QStringLiteral("Unknown (%1)").arg(t);
}
MainWindow::SettingType MainWindow::stringToType(const QString &s)
{
if (s == typeToString(String))
return String;
if (s == typeToString(StringList))
return StringList;
if (s == typeToString(Json))
return Json;
if (s == typeToString(FunctionKeys))
return FunctionKeys;
if (s == typeToString(Boolean))
return Boolean;
Q_ASSERT(false);
return String;
}
}
+71
View File
@@ -0,0 +1,71 @@
/**
* @RDE_HEADER@
*
* MainWindow for settings editor
*
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <nglwidgets/nglmainwindow.h>
#include <QMap>
#include <QPair>
#include <QTreeWidgetItem>
#include <QString>
#include <QVariant>
namespace Ui
{
class MainWindow;
}
namespace SettingsEditor
{
// --------------------------------------------------------------------------------
// | Class MainWindow |
// --------------------------------------------------------------------------------
class MainWindow : public NGLMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void oncurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void onSaveSettings();
void onExportSettings();
void onLoadFromExport();
void onLoadPresetFromTemplate();
private:
bool saveSettings(const QString &filename);
bool loadSettings(const QString &filename);
enum SettingType
{
String = 1,
StringList = 2,
Json = 3,
FunctionKeys = 4,
Boolean = 5,
};
void enableTextEdit(bool enabled = true);
void enableFunctionKeyEdit();
void enableBoolEdit();
void setVersionView();
static QString craftKey(const QString &group, const QString &key);
static QString typeToString(SettingType t);
static SettingType stringToType(const QString &s);
QMap<QString, QPair<SettingType, QVariant>> m_data;
QString m_settingsFileName;
Ui::MainWindow *m_ui;
};
}
+174
View File
@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>500</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QTreeWidget" name="twPath">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="columnCount">
<number>1</number>
</property>
<attribute name="headerVisible">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Path</string>
</property>
</column>
</widget>
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="pgTextEdit">
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QTextEdit" name="teValueEdit"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="pgBoolean">
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QCheckBox" name="cbBoolValue">
<property name="text">
<string>Active</string>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="pgFunctionKeys">
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="SettingsEditor::FunctionKeysEdit" name="functionKeysEdit" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>SettingsEditor::FunctionKeysEdit</class>
<extends>QWidget</extends>
<header>function_keys_edit.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>twPath</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
+741
View File
@@ -0,0 +1,741 @@
{
"DefaultOperatorSettings": {
"AesFilter": {
"Context": {
"Default": {
"1": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"2": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"3": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"4": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"5": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"6": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"7": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
},
"8": {
"activated": true,
"afterglow": 10000,
"created": true,
"limitOnChargeTypes": false,
"limitOnParties": false,
"prepared": true,
"showDetails": true
}
},
"Type": "Json"
}
},
"FunctionBars": {
"Functions": {
"Default": [
],
"Type": "StringList"
}
},
"FunctionKeys": {
"Functions": {
"Default": "",
"Type": "FunctionKeys"
}
},
"SymbolFilter": {
"Context": {
"Default": {
"SymbolTeamAppearances": [
{
"id": 0,
"isVisible": true,
"showDesignator": true,
"showTacticalIdentifier": true
},
{
"id": 1,
"isVisible": true,
"showDesignator": true,
"showTacticalIdentifier": true
},
{
"id": 2,
"isVisible": true,
"showDesignator": true,
"showTacticalIdentifier": true
},
{
"id": 3,
"isVisible": true,
"showDesignator": true,
"showTacticalIdentifier": true
},
{
"id": 4,
"isVisible": true,
"showDesignator": true,
"showTacticalIdentifier": true
}
],
"bitErrorVisibility": 0,
"colExpCollapsed": [
],
"colExpHidden": [
],
"hiddenTypeFilter": [
],
"hitLineDisplayLength": 10000,
"manipulationVisibility": 0,
"movementTrackLengthMSec": 600000,
"positionOutOfDateVisibility": 0,
"simulatedPositionVisibility": 3,
"symbolFireEventFlashing": 10000,
"symbolScale": 1,
"symbolTransparency": 0,
"unitSymbolPosition": 0
},
"Type": "Json"
}
}
},
"ProjectSettings": {
"Functionalities": {
"IdentifierList": {
"Default": [
"ParticipantStatus:ProtectionLevel",
"ParticipantStatus:PersonalProtection",
"ParticipantStatus:CheatingCheck",
"ParticipantStatus:HgrSearchMode",
"Exercises:CanBeLinked",
"Exercises:HasHlaInterface"
],
"Type": "StringList"
}
},
"Office": {
"Type": {
"Default": "LibreOffice",
"Type": "String"
}
},
"MgrsSquaresOffsets": {
"xOffset": {
"Default": "0",
"Type": "String"
},
"yOffset": {
"Default": "0",
"Type": "String"
}
},
"SituationMap": {
"SettingsJson": {
"Default": {
},
"Type": "Json"
},
"enableNavigateBelowGround": {
"Default": false,
"Type": "Boolean"
},
"enableBaseSurfaceOpacity": {
"Default": false,
"Type": "Boolean"
},
"enableDamageVisualizationAtBuilding2Map": {
"Default": false,
"Type": "Boolean"
},
"enableAssetsInResourceMode": {
"Default": true,
"Type": "Boolean"
},
"enableTrainingAreaBorder": {
"Default": true,
"Type": "Boolean"
},
"enableEtsSymbols": {
"Default": true,
"Type": "Boolean"
},
"enable3dMap": {
"Default": true,
"Type": "Boolean"
}
},
"aes": {
"enableAirSupport": {
"Default": true,
"Type": "Boolean"
},
"enableBiologicalContamination": {
"Default": true,
"Type": "Boolean"
},
"enableChemicalContamination": {
"Default": true,
"Type": "Boolean"
},
"enableBorderlines": {
"Default": true,
"Type": "Boolean"
},
"enableChargeAdministration": {
"Default": true,
"Type": "Boolean"
},
"enableRocket": {
"Default": false,
"Type": "Boolean"
},
"enableDangerAreas": {
"Default": true,
"Type": "Boolean"
},
"enableAreaExplosionArtillery": {
"Default": true,
"Type": "Boolean"
},
"enableAreaExplosionMortar": {
"Default": true,
"Type": "Boolean"
},
"enableSingleExplosionArtillery": {
"Default": true,
"Type": "Boolean"
},
"enableCentralExplosionArtillery": {
"Default": false,
"Type": "Boolean"
},
"enableSingleExplosionMortar": {
"Default": true,
"Type": "Boolean"
},
"enableExplosionCluster": {
"Default": true,
"Type": "Boolean"
},
"enableFunctionalAreas": {
"Default": true,
"Type": "Boolean"
},
"enableMineAreas": {
"Default": true,
"Type": "Boolean"
},
"enableMineAreasResetDusMines": {
"Default": true,
"Type": "Boolean"
},
"enableDusSingleMine": {
"Default": false,
"Type": "Boolean",
"Comment": "DusEinzelMinenSimulator, AHTC"
},
"enableMineCorridors": {
"Default": true,
"Type": "Boolean"
},
"enableMineSingleVirtual": {
"Default": true,
"Type": "Boolean"
},
"enableNuclearContaminations": {
"Default": true,
"Type": "Boolean"
},
"enableTechnicalAreas": {
"Default": true,
"Type": "Boolean"
},
"enableTechnicalAreasSound": {
"Default": false,
"Type": "Boolean"
},
"enableGuezDusMines": {
"Default": true,
"Type": "Boolean"
},
"enableGasPipes": {
"Default": true,
"Type": "Boolean"
},
"enableChargeEffect": {
"Default": true,
"Type": "Boolean"
}
},
"alm": {
"enableEmergencyCalls": {
"Default": false,
"Type": "Boolean"
}
},
"avm": {
"recording": {
"Default": false,
"Type": "Boolean"
},
"enableAudioVideoManagement": {
"Default": true,
"Type": "Boolean"
},
"enableVideoImport": {
"Default": true,
"Type": "Boolean"
},
"enableAudioVideoPlaybacks": {
"Default": true,
"Type": "Boolean"
},
"enableCombatNetRadioEdit": {
"Default": true,
"Type": "Boolean"
},
"enableCombatNetRadioFrequencyPlanningEdit": {
"Default": true,
"Type": "Boolean"
},
"enableElectronicWarfareMeasures": {
"Default": true,
"Type": "Boolean"
},
"enableMobileVideoSystem": {
"Default": true,
"Type": "Boolean"
},
"mvsRDesktopIP": {
"Default": "",
"Type": "String"
},
"mvsUser": {
"Default": "",
"Type": "String"
},
"mvsPassword": {
"Default": "",
"Type": "String"
},
"hfRanges": {
"Default": { "Ranges" : [
{ "min" : 2000000, "max" : 29975000 }
] },
"Type": "Json"
},
"uhfRanges": {
"Default": { "Ranges" : [
{ "min" : 225000, "max" : 249975 },
{ "min" : 300000, "max" : 399975 }
] },
"Type": "Json"
}
},
"bld": {
"enableGuiDestroyRooms": {
"Default": true,
"Type": "Boolean"
},
"useExactPositioning": {
"Default": true,
"Type": "Boolean"
},
"egcuUsesOnlyOneRelay": {
"Default": false,
"Type": "Boolean"
},
"enableSoundZones": {
"Default": false,
"Type": "Boolean"
},
"enableFloorParticipantCount": {
"Default": false,
"Type": "Boolean"
}
},
"cod": {
"enableCodificationTables": {
"Default": true,
"Type": "Boolean"
},
"enableShowCodificationTableBLUFOR": {
"Default": true,
"Type": "Boolean"
},
"enableShowCodificationTableOPFOR": {
"Default": true,
"Type": "Boolean"
}
},
"dat": {
"enableDatabaseAdministrationTools": {
"Default": true,
"Type": "Boolean"
}
},
"esm": {
"enableEffectShowManagement": {
"Default": true,
"Type": "Boolean"
}
},
"evl": {
"enableEvaluationsElements": {
"Default": true,
"Type": "Boolean"
},
"enableEvaluations": {
"Default": true,
"Type": "Boolean"
}
},
"exm": {
"enableEditPhases": {
"Default": true,
"Type": "Boolean"
},
"enableExerciseTerminatedToStopped": {
"Default": false,
"Type": "Boolean"
}
},
"flt": {
"enableAES_FilterEdit": {
"Default": true,
"Type": "Boolean"
},
"enableBuildingComponentFilterEdit": {
"Default": false,
"Type": "Boolean"
}
},
"gim": {
"enableIED_Pairing": {
"Default": true,
"Type": "Boolean"
}
},
"gna": {
"enableGuezNasat": {
"Default": false,
"Type": "Boolean"
},
"midasRDesktopIP": {
"Default": "",
"Type": "String"
},
"midasUser": {
"Default": "",
"Type": "String"
},
"midasPassword": {
"Default": "",
"Type": "String"
}
},
"ism": {
"enableResPlanDialog": {
"Default": true,
"Type": "Boolean"
},
"enableOverviewDialog": {
"Default": true,
"Type": "Boolean"
},
"enableAssetListDialog": {
"Default": true,
"Type": "Boolean"
},
"enableMpListDialog": {
"Default": true,
"Type": "Boolean"
},
"enableBuildingListDialog": {
"Default": true,
"Type": "Boolean"
},
"enableMpMapSelectionDialog": {
"Default": true,
"Type": "Boolean"
},
"enableApproachingPointsDialog": {
"Default": true,
"Type": "Boolean"
},
"enableOverviewMountedPointDialog": {
"Default": false,
"Type": "Boolean"
},
"enableSetRecordingDialog": {
"Default": true,
"Type": "Boolean"
}
},
"mdm": {
"enableShowMeteoDataStations": {
"Default": true,
"Type": "Boolean"
},
"enableEditStaticMeteoData": {
"Default": true,
"Type": "Boolean"
}
},
"msg": {
"enableMessages": {
"Default": true,
"Type": "Boolean"
}
},
"obd": {
"ocPdfDownloadFolderId": {
"Default": "25",
"Type": "String"
}
},
"opm": {
"enableShutdownWorkstations": {
"Default": true,
"Type": "Boolean"
}
},
"ore": {
"enableOnlineReports": {
"Default": true,
"Type": "Boolean"
}
},
"pdm": {
"EquipmentLanguages": {
"Default": "1,2,3,4,5,6",
"Type": "String"
},
"SystemLanguages": {
"Default": "de_DE, en_GB, en_US",
"Type": "String"
}
},
"ppm": {
"enableSupportParticipantsOrganise": {
"Default": true,
"Type": "Boolean"
},
"enableSupportParticipantsEdit": {
"Default": true,
"Type": "Boolean"
},
"enableMSDL_ImExport": {
"Default": true,
"Type": "Boolean"
},
"enableHlaForceIdentifier": {
"Default": false,
"Type": "Boolean"
},
"hasVulnerabilityStateLightDamage": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateMediumDamage": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateHeavyDamage": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateMobilityKill": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateVisibleMobilityKill": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateWeaponSystemDamage": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateVisibleWeaponSystemDamage": {
"Default": true,
"Type": "Boolean"
},
"hasVulnerabilityStateTemporarySeverance": {
"Default": true,
"Type": "Boolean"
}
},
"pws": {
"enableProjection": {
"Default": true,
"Type": "Boolean"
}
},
"smo": {
"nagios": {
"Default": "http://tgvmmon02.guez.live/GUEZ/check_mk/login.py?_origtarget=/GUEZ/check_mk/index.py&_username=ctc&_password=ctc11de&_login=1",
"Type": "String"
},
"sps": {
"Default": "http://ecvmssm01.guez.live/startseite.html",
"Type": "String"
},
"enableSps": {
"Default": false,
"Type": "Boolean"
},
"enableEquipmentErrorRegistration": {
"Default": true,
"Type": "Boolean"
},
"enableHandgrenadeAndMineSearchShow": {
"Default": true,
"Type": "Boolean"
},
"enableEGCUMonitor": {
"Default": true,
"Type": "Boolean"
},
"enableFaultMessage": {
"Default": false,
"Type": "Boolean"
}
},
"rep": {
"enableReports": {
"Default": true,
"Type": "Boolean"
},
"enableAddUnitPowerReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddParticipantDistanceReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddNBCReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddFiringsReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddMineAreaReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddChargeResupplyReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddChargeAdministrationReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddVehicleRepairReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddAirSupportReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddBuildingDamageReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddExplosiveDeviceReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddDecontaminationReport": {
"Default": true,
"Type": "Boolean"
},
"enableAddSanitationMaterialReport": {
"Default": false,
"Type": "Boolean"
},
"enableAddTreatmentReport": {
"Default": false,
"Type": "Boolean"
},
"enableAddMedevacNineLinerReport": {
"Default": false,
"Type": "Boolean"
}
},
"tln": {
"showEffectSimulationEvents": {
"Default": true,
"Type": "Boolean"
},
"showEnterLeaveEvents": {
"Default": true,
"Type": "Boolean"
},
"enableListEvents": {
"Default": false,
"Type": "Boolean"
}
},
"pre": {
"disableTopics": {
"Default": [],
"Type": "StringList"
}
}
}
}
+5
View File
@@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>project_settings.json</file>
</qresource>
</RCC>