Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/SymbologyGui/symbol_modification_widget.cpp
T
2026-08-13 18:33:10 +02:00

1299 lines
55 KiB
C++
Executable File

/**
*
* @RDE_HEADER@
* symbol_modification_wdiget for sidc configuration
* $Id$
* $HeadURL$
* $Author$
* Created by Karwat, SLSE, 2017-09-07
*/
#include "symbol_modification_widget.h"
#include "field_table_model.h"
#include <Map/party_id_to_color_functor.h>
#include <Symbology/symbol_dictionary.h>
#include <Symbology/sidc_definitions.h>
#include <Symbology/sidc_builder.h>
// Lts
#include <LtsWidgets/lts_combo_box.h>
// Qt
#include <QtCore/QAbstractItemModel>
#include <QtCore/QPointer>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QColorDialog>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QToolButton>
#include <QtWidgets/QTableView>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QHeaderView>
namespace AdvancedSymbology
{
namespace Gui
{
class SidcWithIcon : public QWidget
{
public:
explicit SidcWithIcon(QWidget *parent = nullptr) : QWidget(parent)
{
QHBoxLayout *layout = new QHBoxLayout(this);
// layout->setContentsMargins(0,0,0,0);
// layout->setSpacing(0);
m_lbImage = new QLabel(this);
// m_lbImage->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
// m_lbImage->setMaximumSize(QSize(100,100));
layout->addWidget(m_lbImage);
m_lbText = new QLabel(this);
// m_lbText->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
// m_lbImage->setMaximumSize(QSize(100,100));
layout->addWidget(m_lbText);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
// setMaximumHeight(100);
// setMaximumWidth(300);
} // SidcWithIcon(QWidget* parent = nullptr)
void setImage(const QImage &img) { m_lbImage->setPixmap(QPixmap::fromImage(img).scaledToHeight(100)); }
void setText(const QString &text) { m_lbText->setText(text); }
private:
QLabel *m_lbImage;
QLabel *m_lbText;
}; // SidcWithIcon
//---------------------------------
// EnumComboBox
//---------------------------------
using MyComboBox = LtsWidgets::LtsComboBox;
template <typename T> class EnumComboBox : public MyComboBox
{
public:
explicit EnumComboBox(QWidget *parent = nullptr) : MyComboBox(parent) {;}
void insertNumberedItem(int idx, T value)
{
insertNumberedItem(idx, AdvancedSymbology::SidcDefinitions::toPixmap(value), AdvancedSymbology::SidcDefinitions::toString(value), static_cast<int>(value));
} // void insertNumberedItem( int idx, T value )
void insertNumberedItem(int idx, const QString &text, int value)
{
MyComboBox::insertItem(idx, QStringLiteral("%1 %2").arg(value).arg(text), value);
} // void insertNumberedItem( int idx, const QString & text, int value )
void insertNumberedItem(int idx, const QPixmap & pixmap, const QString &text, int value)
{
MyComboBox::insertItem(idx, pixmap, QStringLiteral("%1 %2").arg(value).arg(text), value);
} // void insertNumberedItem( int idx, const QString & text, int value )
void insertItems(const QVector<T> &items)
{
MyComboBox::clear();
int idx = 0;
for (const auto &item : items)
insertNumberedItem(idx++, item);
if (MyComboBox::count() > 0)
setCurrentIndex(0);
} // void insertItems( const QVector<T> & items )
T currentValue() const { return static_cast<T>(currentData().toInt()); }
int currentValueAsInt() const { return currentData().toInt(); }
bool setCurrent(const T &newCurrentValue)
{
QVariant newCurVar(static_cast<int>(newCurrentValue));
MyComboBox::setCurrentIndex(findData(newCurVar));
return true;
} // bool setCurrent( const T & newCurrentValue )
signals:
void changed(T newValue);
protected Q_SLOTS:
void onCurrentIndexChanged(int) { emit changed(currentValue()); }
}; // template <typename T> class EnumComboBox
class SymbolModificationWidget::Internal
{
public:
QPointer<SituationMap::Map> m_map;
AdvancedSymbology::SidcDefinitions m_sidcDefinitions;
AdvancedSymbology::SidcBuilder m_sidcBuilder;
AdvancedSymbology::SymbolDictionary &m_dict;
AdvancedSymbology::SymbologyType m_symbologyType;
bool m_isParticipant;
QString m_originalSidc;
QString m_lastModifiedSidc;
QString m_baseSymbolCode;
QString m_modifiedSidc;
QTabWidget *m_tabWidget;
QStackedWidget *m_tabSidcEdit;
QWidget *m_tabFieldEdit;
QWidget *m_tabPreview;
EnumComboBox<AdvancedSymbology::SidcDefinitions::Context> *m_cbContext_MIL2525D;
EnumComboBox<AdvancedSymbology::SidcDefinitions::Identity> *m_cbIdentity_MIL2525D;
EnumComboBox<AdvancedSymbology::SidcDefinitions::SymbolSet> *m_cbSymbolSet_MIL2525D;
EnumComboBox<AdvancedSymbology::SidcDefinitions::Status> *m_cbStatus_MIL2525D;
EnumComboBox<AdvancedSymbology::SidcDefinitions::HQTFDummy> *m_cbHQTFDummy_MIL2525D;
EnumComboBox<AdvancedSymbology::SidcDefinitions::AmplifierGroup> *m_cbAmplifierGroup_MIL2525D;
EnumComboBox<int> *m_cbAmplifierDescriptor_MIL2525D;
EnumComboBox<unsigned int> *m_cbSector1Modifier_MIL2525D;
EnumComboBox<unsigned int> *m_cbSector2Modifier_MIL2525D;
EnumComboBox<AdvancedSymbology::SidcDefinitions::Identity> *m_cbIdentity_APP6;
MyComboBox *m_cbSize_APP6;
MyComboBox *m_cbSizeHQ_APP6;
MyComboBox *m_cbSizeTF_APP6;
MyComboBox *m_cbSizeFDHQ_APP6;
MyComboBox *m_cbSizeFDTF_APP6;
MyComboBox *m_cbSizeFD_APP6;
MyComboBox *m_cbMobility_APP6;
MyComboBox *m_cbStatus_APP6;
MyComboBox *m_cbOrderOfBattle_APP6;
MyComboBox *m_cbFieldTitle;
QLineEdit *m_leFieldValue;
QTableView *m_fieldTable;
FieldTableModel *m_fieldTableModel;
explicit Internal(SituationMap::Map *map, SymbolDictionary &symbolDictionary)
: m_map(map)
, m_sidcDefinitions((map) ? & map->symbolDictionary() : & symbolDictionary)
, m_sidcBuilder((map) ? & map->symbolDictionary() : & symbolDictionary)
, m_dict(symbolDictionary)
, m_symbologyType(AdvancedSymbology::SymbologyType::None)
, m_isParticipant(false)
, m_originalSidc()
, m_lastModifiedSidc()
, m_baseSymbolCode()
, m_modifiedSidc()
, m_tabWidget(nullptr)
, m_tabSidcEdit(nullptr)
, m_tabFieldEdit(nullptr)
, m_tabPreview(nullptr)
, m_cbContext_MIL2525D(nullptr)
, m_cbIdentity_MIL2525D(nullptr)
, m_cbSymbolSet_MIL2525D(nullptr)
, m_cbStatus_MIL2525D(nullptr)
, m_cbHQTFDummy_MIL2525D(nullptr)
, m_cbAmplifierGroup_MIL2525D(nullptr)
, m_cbAmplifierDescriptor_MIL2525D(nullptr)
, m_cbSector1Modifier_MIL2525D(nullptr)
, m_cbSector2Modifier_MIL2525D(nullptr)
, m_cbIdentity_APP6(nullptr)
, m_cbSize_APP6(nullptr)
, m_cbSizeHQ_APP6(nullptr)
, m_cbSizeTF_APP6(nullptr)
, m_cbSizeFDHQ_APP6(nullptr)
, m_cbSizeFDTF_APP6(nullptr)
, m_cbSizeFD_APP6(nullptr)
, m_cbMobility_APP6(nullptr)
, m_cbStatus_APP6(nullptr)
, m_cbOrderOfBattle_APP6(nullptr)
, m_cbFieldTitle(nullptr)
, m_leFieldValue(nullptr)
, m_fieldTable(nullptr)
, m_fieldTableModel(nullptr)
{
} // explicit Internal()
~Internal() = default;
}; // SymbolModificationWidget::Internal
enum class SymbologyTypeStackIndex
{
APP6 = 0,
MIL2525D = 1
}; // SymbologyTypeStackIndex
//---------------------------------
// SymbolModificationWidget
//---------------------------------
SymbolModificationWidget::SymbolModificationWidget(SituationMap::Map *map, bool isParticipant, SymbolDictionary &symbolDictionary, QWidget *parent)
: QWidget(parent)
, m_internal(new Internal(map, symbolDictionary))
{
m_internal->m_isParticipant = isParticipant;
QVBoxLayout *layout = new QVBoxLayout(this);
QHBoxLayout *layoutCtrl = new QHBoxLayout();
m_internal->m_tabWidget = new QTabWidget(this);
m_internal->m_tabSidcEdit = new QStackedWidget(m_internal->m_tabWidget);
m_internal->m_tabFieldEdit = new QWidget(m_internal->m_tabWidget);
m_internal->m_tabPreview = new QWidget(m_internal->m_tabWidget);
m_internal->m_tabWidget->setTabsClosable(false);
m_internal->m_tabWidget->setMovable(false);
m_internal->m_tabWidget->setTabBarAutoHide(true);
m_internal->m_tabSidcEdit -> setObjectName(QStringLiteral("SymbolModificationWidgetSymbolSidcEdit"));
m_internal->m_tabFieldEdit-> setObjectName(QStringLiteral("SymbolModificationWidgetSymbolFieldEdit"));
m_internal->m_tabPreview -> setObjectName(QStringLiteral("SymbolModificationWidgetSymbolPreview"));
m_internal->m_tabSidcEdit -> setEnabled(false);
m_internal->m_tabFieldEdit -> setEnabled(false);
m_internal->m_tabPreview -> setEnabled(false);
m_internal->m_tabSidcEdit -> hide();
m_internal->m_tabFieldEdit -> hide();
m_internal->m_tabPreview -> hide();
layout->setContentsMargins(10, 10, 10, 10);
layout->addSpacing(10);
layout->addWidget(m_internal->m_tabWidget);
layout->addSpacing(10);
layout->addLayout(layoutCtrl);
// d->m_preview = new QVBoxLayout();
// d->m_preview->setObjectName(QLatin1String("previewCol"));
// layout->addLayout(d->m_preview, 0, 0);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
QWidget * sidcEditAPP6 = new QWidget(m_internal->m_tabSidcEdit);
QWidget * sidcEditMIL2525D = new QWidget(m_internal->m_tabSidcEdit);
m_internal->m_tabSidcEdit->addWidget(sidcEditAPP6); // SymbologyTypeStackIndex::APP6
m_internal->m_tabSidcEdit->addWidget(sidcEditMIL2525D); // SymbologyTypeStackIndex::MIL2525D
buildSidcModifierTab_APP6(sidcEditAPP6);
buildSidcModifierTab_MIL2525D( sidcEditMIL2525D );
buildFieldModifierTab(m_internal->m_tabFieldEdit);
buildPreview(m_internal->m_tabPreview);
} // SymbolModificationWidget::SymbolModificationWidget
void SymbolModificationWidget::retranslate()
{
// FIXME: UI Retranslation does not work with the entire Plan Editor, as there are no UIs ...
//translate(m_ui, tr("??"));
}
void SymbolModificationWidget::buildSidcModifierTab_MIL2525D(QWidget *widget)
{
QHBoxLayout *layout = new QHBoxLayout(widget);
QFormLayout *layoutEditLeft = new QFormLayout();
QFormLayout *layoutEditRight = new QFormLayout();
layout->addStretch(2);
layout->addLayout(layoutEditLeft);
layout->addStretch(2);
QFrame *separator = new QFrame(widget);
separator->setFrameStyle(QFrame::HLine | QFrame::Plain);
layout->addWidget(separator);
layout->addStretch(2);
layout->addLayout(layoutEditRight);
layout->addStretch(2);
// Context
m_internal->m_cbContext_MIL2525D = new EnumComboBox<AdvancedSymbology::SidcDefinitions::Context>(widget);
m_internal->m_cbContext_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::contexts());
connect(m_internal->m_cbContext_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onContextChanged);
// Identity
m_internal->m_cbIdentity_MIL2525D = new EnumComboBox<AdvancedSymbology::SidcDefinitions::Identity>(widget);
m_internal->m_cbIdentity_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::identities());
connect(m_internal->m_cbIdentity_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onIdentityChanged);
// Status
m_internal->m_cbStatus_MIL2525D = new EnumComboBox<AdvancedSymbology::SidcDefinitions::Status>(widget);
m_internal->m_cbStatus_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::statuss());
connect(m_internal->m_cbStatus_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onStatusChanged);
// HQTFDummy
m_internal->m_cbHQTFDummy_MIL2525D = new EnumComboBox<AdvancedSymbology::SidcDefinitions::HQTFDummy>(widget);
m_internal->m_cbHQTFDummy_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::hQTFDummy());
connect(m_internal->m_cbHQTFDummy_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onHQTFDummyChanged);
layoutEditLeft->setHorizontalSpacing(10);
layoutEditLeft->setLabelAlignment(Qt::AlignRight);
layoutEditLeft->addRow(tr("Context"), m_internal->m_cbContext_MIL2525D);
layoutEditLeft->addRow(tr("Identity"), m_internal->m_cbIdentity_MIL2525D);
layoutEditLeft->addRow(tr("Status"), m_internal->m_cbStatus_MIL2525D);
layoutEditLeft->addRow(tr("HqTfDummy"), m_internal->m_cbHQTFDummy_MIL2525D);
// AmplifierGroup
m_internal->m_cbAmplifierGroup_MIL2525D = new EnumComboBox<AdvancedSymbology::SidcDefinitions::AmplifierGroup>(widget);
m_internal->m_cbAmplifierGroup_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::amplifierGroups());
connect(m_internal->m_cbAmplifierGroup_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onAmplifierGroupChanged, Qt::DirectConnection); // as soon as possible!!!
// AmplifierDescriptor
m_internal->m_cbAmplifierDescriptor_MIL2525D = new EnumComboBox<int>(widget);
// to fill->use slot of primary ComboBox:
onAmplifierGroupChanged();
connect(m_internal->m_cbAmplifierDescriptor_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onAmplifierDesriptorChanged);
// Sector1Modifier
m_internal->m_cbSector1Modifier_MIL2525D = new EnumComboBox<unsigned int>(widget);
connect(m_internal->m_cbSector1Modifier_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onSector1ModifierChanged);
// Sector2Modifier
m_internal->m_cbSector2Modifier_MIL2525D = new EnumComboBox<unsigned int>(widget);
connect(m_internal->m_cbSector2Modifier_MIL2525D
, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged)
, this
, &SymbolModificationWidget::onSector2ModifierChanged);
layoutEditRight->setHorizontalSpacing(10);
layoutEditRight->setLabelAlignment(Qt::AlignRight);
layoutEditRight->addRow(tr("AmplifierGroup"), m_internal->m_cbAmplifierGroup_MIL2525D);
layoutEditRight->addRow(tr("AmplifierDescriptor"), m_internal->m_cbAmplifierDescriptor_MIL2525D);
separator = new QFrame(widget);
separator->setFrameStyle(QFrame::HLine | QFrame::Plain);
layoutEditRight->addRow(separator);
layoutEditRight->addRow( tr("Sector 1 Modifier"), m_internal->m_cbSector1Modifier_MIL2525D );
layoutEditRight->addRow( tr("Sector 2 Modifier"), m_internal->m_cbSector2Modifier_MIL2525D );
} // void SymbolModificationWidget::buildSidcModifierTab_MIL2525D( QWidget * widget )
void SymbolModificationWidget::buildSidcModifierTab_APP6(QWidget * widget)
{
QFormLayout *layout = new QFormLayout(widget);
// Identity
m_internal->m_cbIdentity_APP6 = new EnumComboBox<AdvancedSymbology::SidcDefinitions::Identity>(widget);
m_internal->m_cbIdentity_APP6->insertItems(AdvancedSymbology::SidcDefinitions::identities());
m_internal->m_cbStatus_APP6 = new MyComboBox(widget);
m_internal->m_cbOrderOfBattle_APP6 = new MyComboBox(widget);
m_internal->m_cbSize_APP6 = new MyComboBox(widget);
m_internal->m_cbSizeHQ_APP6 = new MyComboBox(widget);
m_internal->m_cbSizeTF_APP6 = new MyComboBox(widget);
m_internal->m_cbSizeFDHQ_APP6 = new MyComboBox(widget);
m_internal->m_cbSizeFDTF_APP6 = new MyComboBox(widget);
m_internal->m_cbSizeFD_APP6 = new MyComboBox(widget);
m_internal->m_cbMobility_APP6 = new MyComboBox(widget);
// Size/Mobility
// Zwei abhaengige ComboBoxen
m_internal->m_cbStatus_APP6->addItem(tr("Anticipated/Planned"), QVariant(QLatin1Char('A')));
m_internal->m_cbStatus_APP6->addItem(tr("Present") , QVariant(QLatin1Char('P')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("None") , QVariant(QLatin1Char('*')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Air OB") , QVariant(QLatin1Char('A')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Electronic OB") , QVariant(QLatin1Char('E')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Civilian OB") , QVariant(QLatin1Char('C')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Ground OB") , QVariant(QLatin1Char('G')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Maritime OB") , QVariant(QLatin1Char('M')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Strategic Force Related"), QVariant(QLatin1Char('S')));
m_internal->m_cbOrderOfBattle_APP6->addItem(tr("Control Markings") , QVariant(QLatin1Char('X')));
m_internal->m_cbSize_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbSize_APP6->addItem(tr("Team/Crew") , QStringLiteral("_A"));
m_internal->m_cbSize_APP6->addItem(tr("Squad") , QStringLiteral("_B"));
m_internal->m_cbSize_APP6->addItem(tr("Platoon") , QStringLiteral("_C"));
m_internal->m_cbSize_APP6->addItem(tr("Company") , QStringLiteral("_D"));
m_internal->m_cbSize_APP6->addItem(tr("Battalion") , QStringLiteral("_E"));
m_internal->m_cbSize_APP6->addItem(tr("Regiment/Group") , QStringLiteral("_F"));
m_internal->m_cbSize_APP6->addItem(tr("Brigade") , QStringLiteral("_H"));
m_internal->m_cbSize_APP6->addItem(tr("Division") , QStringLiteral("_I"));
m_internal->m_cbSize_APP6->addItem(tr("Corps/Mef") , QStringLiteral("_J"));
m_internal->m_cbSize_APP6->addItem(tr("Army") , QStringLiteral("_K"));
m_internal->m_cbSize_APP6->addItem(tr("Army Group/Front"), QStringLiteral("_L"));
m_internal->m_cbSize_APP6->addItem(tr("Region") , QStringLiteral("-M"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("Headquarters (HQ)"), QStringLiteral("A-"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Team/Crew") , QStringLiteral("AA"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Squad") , QStringLiteral("AB"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Section") , QStringLiteral("AC"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Platoon") , QStringLiteral("AD"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Company") , QStringLiteral("AE"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Battalion") , QStringLiteral("AF"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Regiment/Group"), QStringLiteral("AG"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Brigade") , QStringLiteral("AH"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Division") , QStringLiteral("AI"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Corp/MEF") , QStringLiteral("AJ"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Army") , QStringLiteral("AK"));
m_internal->m_cbSizeHQ_APP6->addItem(tr("HQ Region") , QStringLiteral("AM"));
m_internal->m_cbSizeTF_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbSizeTF_APP6->addItem(tr("Task Force (TF) HQ"), QStringLiteral("B-"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Team/Crew") , QStringLiteral("BA"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Squad") , QStringLiteral("BB"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Section") , QStringLiteral("BC"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Platoon") , QStringLiteral("BD"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Company") , QStringLiteral("BE"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Battalion") , QStringLiteral("BF"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Regiment/Group") , QStringLiteral("BG"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Brigade") , QStringLiteral("BH"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Division") , QStringLiteral("BI"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Corp/MEF") , QStringLiteral("BJ"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Army") , QStringLiteral("BK"));
m_internal->m_cbSizeTF_APP6->addItem(tr("TF Region") , QStringLiteral("BM"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("Feint Dummy (FD) HQ") , QStringLiteral("C-"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Team/Crew") , QStringLiteral("CA"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Squad") , QStringLiteral("CB"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Section") , QStringLiteral("CC"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Platoon)") , QStringLiteral("CD"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Company") , QStringLiteral("CE"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Battalion") , QStringLiteral("CF"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Regiment/Group"), QStringLiteral("CG"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Brigade") , QStringLiteral("CH"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Division") , QStringLiteral("CI"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Corp/MEF") , QStringLiteral("CJ"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Army") , QStringLiteral("CK"));
m_internal->m_cbSizeFDHQ_APP6->addItem(tr("FD HQ Region") , QStringLiteral("CM"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("Feint Dummy (FD/TF) HQ") , QStringLiteral("D-"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Team/Crew") , QStringLiteral("DA"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Squad") , QStringLiteral("DB"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Section") , QStringLiteral("DC"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Platoon)") , QStringLiteral("DD"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Company") , QStringLiteral("DE"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Battalion") , QStringLiteral("DF"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Regiment/Group"), QStringLiteral("DG"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Brigade") , QStringLiteral("DH"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Division") , QStringLiteral("DI"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Corp/MEF") , QStringLiteral("DJ"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Army") , QStringLiteral("DK"));
m_internal->m_cbSizeFDTF_APP6->addItem(tr("FD/TF HQ Region") , QStringLiteral("DM"));
m_internal->m_cbSizeFD_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbSizeFD_APP6->addItem(tr("Feint Dummy (FD)") , QStringLiteral("F-"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Team/Crew") , QStringLiteral("FA"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Squad") , QStringLiteral("FB"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Section") , QStringLiteral("FC"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Platoon)") , QStringLiteral("FD"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Company") , QStringLiteral("FE"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Battalion") , QStringLiteral("FF"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Regiment/Group"), QStringLiteral("FG"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Brigade") , QStringLiteral("FH"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Division") , QStringLiteral("FI"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Corp/MEF") , QStringLiteral("FJ"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Army") , QStringLiteral("FK"));
m_internal->m_cbSizeFD_APP6->addItem(tr("FD Region") , QStringLiteral("FM"));
m_internal->m_cbMobility_APP6->addItem(tr("None") , QStringLiteral("--"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Equipment") , QStringLiteral("M-"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Fixed Wing") , QStringLiteral("MF"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Helicopter") , QStringLiteral("MH"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Missile") , QStringLiteral("MM"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Wheeled / Limited Cross Country") , QStringLiteral("MO"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Cross Country") , QStringLiteral("MP"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Wheeled and Tracked Combination") , QStringLiteral("MR"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Towed") , QStringLiteral("MS"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Rail") , QStringLiteral("MT"));
m_internal->m_cbMobility_APP6->addItem(tr("Mobility Space") , QStringLiteral("S-"));
layout->addRow(tr("APP6 Affiliation") , m_internal->m_cbIdentity_APP6);
layout->addRow(tr("APP6 Size") , m_internal->m_cbSize_APP6);
layout->addRow(tr("APP6 Headquarters (HQ)") , m_internal->m_cbSizeHQ_APP6);
layout->addRow(tr("APP6 Task Force (TF) HQ") , m_internal->m_cbSizeTF_APP6);
layout->addRow(tr("APP6 Feint Dummy (FD) HQ") , m_internal->m_cbSizeFDHQ_APP6);
layout->addRow(tr("APP6 Feint Dummy (FD/TF) HQ"), m_internal->m_cbSizeFDTF_APP6);
layout->addRow(tr("APP6 Feint Dummy (FD)") , m_internal->m_cbSizeFD_APP6);
layout->addRow(tr("Mobility") , m_internal->m_cbMobility_APP6);
layout->addRow(tr("APP6 Status") , m_internal->m_cbStatus_APP6);
layout->addRow(tr("APP6 Order Of Battle") , m_internal->m_cbOrderOfBattle_APP6);
connect( m_internal->m_cbIdentity_APP6, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [this](int)
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
QChar code = QLatin1Char('*');
switch (m_internal->m_cbIdentity_APP6->currentValue())
{
case SidcDefinitions::Identity::Pending : code = QLatin1Char('P'); break;
case SidcDefinitions::Identity::Unknown : code = QLatin1Char('U'); break;
case SidcDefinitions::Identity::AssumedFriend : code = QLatin1Char('A'); break;
case SidcDefinitions::Identity::Friend : code = QLatin1Char('F'); break;
case SidcDefinitions::Identity::Neutral : code = QLatin1Char('N'); break;
case SidcDefinitions::Identity::SuspectJoker : code = QLatin1Char('S'); break;
case SidcDefinitions::Identity::HostileFaker : code = QLatin1Char('H'); break;
}
QString rawSidc = SidcCodec::decodeRawSidc(modifiedSidc());
rawSidc[1] = code;
m_internal->m_modifiedSidc = SidcCodec::encodeComplete(SymbologyType::APP6B, rawSidc);
emitChanged();
});
connect(m_internal->m_cbSize_APP6 , static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbSizeHQ_APP6 , static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbSizeTF_APP6 , static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbSizeFDHQ_APP6, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbSizeFDTF_APP6, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbSizeFD_APP6 , static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbMobility_APP6, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility);
connect(m_internal->m_cbStatus_APP6, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [this]()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
QChar code = m_internal->m_cbStatus_APP6->currentData().toChar();
QString rawSidc = SidcCodec::decodeRawSidc(modifiedSidc());
rawSidc[3] = code;
m_internal->m_modifiedSidc = SidcCodec::encodeComplete(SymbologyType::APP6B, rawSidc);
emitChanged();
});
connect(m_internal->m_cbOrderOfBattle_APP6, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [this]()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
QChar code = m_internal->m_cbOrderOfBattle_APP6->currentData().toChar();
QString rawSidc = SidcCodec::decodeRawSidc(modifiedSidc());
rawSidc[14] = code;
m_internal->m_modifiedSidc = SidcCodec::encodeComplete(SymbologyType::APP6B, rawSidc);
emitChanged();
});
} // void SymbolModificationWidget::buildSidcModifierTab_APP6(QWidget * widget)
void SymbolModificationWidget::buildFieldModifierTab(QWidget *widget)
{
QVBoxLayout *layout = new QVBoxLayout(widget);
QHBoxLayout *layoutFieldEdit = new QHBoxLayout();
m_internal->m_cbFieldTitle = new MyComboBox(widget);
m_internal->m_leFieldValue = new QLineEdit(widget);
QPushButton *pbAdd = new QPushButton( QIcon(QStringLiteral("icon:add.svg")), QString(), widget );
QPushButton *pbDel = new QPushButton( QIcon(QStringLiteral("icon:remove.svg")), QString(), widget );
layoutFieldEdit->addWidget(new QLabel(tr("Field"), widget));
layoutFieldEdit->addWidget(m_internal->m_cbFieldTitle, 2);
layoutFieldEdit->addWidget(new QLabel(tr("Value"), widget));
layoutFieldEdit->addWidget(m_internal->m_leFieldValue, 3);
layoutFieldEdit->addWidget(pbAdd);
layoutFieldEdit->addWidget(pbDel);
m_internal->m_fieldTableModel = new FieldTableModel(widget);
m_internal->m_fieldTable = new QTableView(widget);
m_internal->m_fieldTable->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
m_internal->m_fieldTable->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
m_internal->m_fieldTable->setModel(m_internal->m_fieldTableModel);
m_internal->m_fieldTable->setAlternatingRowColors(true);
m_internal->m_fieldTable->setShowGrid(false);
QHeaderView *header = m_internal->m_fieldTable->horizontalHeader();
header->setSectionResizeMode(0, QHeaderView::ResizeMode::Stretch);
header->setSectionResizeMode(1, QHeaderView::ResizeMode::Stretch);
layout->addLayout(layoutFieldEdit);
layout->addWidget(m_internal->m_fieldTable, 2);
connect(pbAdd, &QPushButton::clicked, this, &SymbolModificationWidget::onFieldAttributeAdd);
connect(pbDel, &QPushButton::clicked, this, &SymbolModificationWidget::onFieldAttributeRemove);
connect(m_internal->m_leFieldValue, &QLineEdit::returnPressed, this, [this]() { onFieldAttributeAdd(true); });
connect(m_internal->m_fieldTable, &QTableView::clicked, this, &SymbolModificationWidget::onFieldItemActived);
connect(m_internal->m_fieldTable, &QTableView::activated, this, &SymbolModificationWidget::onFieldItemActived);
connect(m_internal->m_cbFieldTitle, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated), this, &SymbolModificationWidget::onSetFieldTitle);
} // void SymbolModificationWidget::buildFieldModifierTab( QWidget * widget )
void SymbolModificationWidget::emitChanged()
{
emit changed();
} // void SymbolModificationWidget::emitChanged()
void SymbolModificationWidget::buildPreview(QWidget *widget)
{
delete m_previewTab;
m_previewTab = new PreviewTab(widget);
m_previewTab->lbBaseSymbolName->setAlignment(Qt::AlignCenter);
m_previewTab->lbSidcOutImg->setAlignment(Qt::AlignCenter);
m_previewTab->lbSidcInImg ->setAlignment(Qt::AlignCenter);
m_previewTab->layout->addWidget(m_previewTab->lbBaseSymbolName);
m_previewTab->layout->addLayout(m_previewTab->layoutPreview, 2);
m_previewTab->layout->addLayout(m_previewTab->layoutPreview);
m_previewTab->layoutPreview->setHorizontalSpacing(10);
m_previewTab->layoutPreview->setVerticalSpacing(10);
m_previewTab->layoutPreview->setLabelAlignment(Qt::AlignRight);
m_previewTab->layoutPreview->addRow(tr("Base Symbol Code"), m_previewTab->lbBaseSymbolId);
QFrame *separator = new QFrame(widget);
separator->setFrameStyle(QFrame::HLine | QFrame::Plain);
m_previewTab->layoutPreview->addRow(separator);
m_previewTab->layoutPreview->addRow(tr("Modified SIDC"), m_previewTab->lbSidcOutTxt);
m_previewTab->layoutPreview->addWidget(m_previewTab->lbSidcOutImg);
separator = new QFrame(widget);
separator->setFrameStyle(QFrame::HLine | QFrame::Plain);
m_previewTab->layoutPreview->addRow(separator);
m_previewTab->layoutPreview->addRow(tr("Original SIDC"), m_previewTab->lbSidcInTxt);
m_previewTab->layoutPreview->addWidget(m_previewTab->lbSidcInImg);
connect(this, &SymbolModificationWidget::changed,
this, &SymbolModificationWidget::updatePreviewTab);
} // void SymbolModificationWidget::buildPreview(QWidget * widget)
void SymbolModificationWidget::updatePreviewTab()
{
if (!m_previewTab)
return;
const QString &originalSidc = this->originalSidc();
const QString &modifiedSidc = this->modifiedSidc();
if (originalSidc.isEmpty())
return;
m_previewTab->lbBaseSymbolId ->setText(SidcCodec::decodeRawSidc(m_internal->m_baseSymbolCode));
m_previewTab->lbBaseSymbolName->setText(this->symbolName());
m_previewTab->lbSidcInTxt ->setText(SidcCodec::decodeRawSidc(originalSidc));
m_previewTab->lbSidcOutTxt->setText(SidcCodec::decodeRawSidc(modifiedSidc));
setSymbolPixmap(m_previewTab->lbSidcInImg, originalSidc);
if (originalSidc == modifiedSidc)
m_previewTab->lbSidcOutImg->setPixmap(QPixmap());
else
setSymbolPixmap(m_previewTab->lbSidcOutImg, modifiedSidc);
}
SymbolModificationWidget::~SymbolModificationWidget()
{
delete m_internal;
m_internal = nullptr;
}
static void fillUpComboBox(const AdvancedSymbology::SymbolDictionary &dict, const QString &baseSymbolCode, unsigned int sector, QComboBox *cb)
{
cb->clear();
cb->addItem(QIcon(), QStringLiteral("0 Not Applicable"), 0);
const QList<AdvancedSymbology::ModifierData> &modifierList = dict.symbolModifierList(baseSymbolCode, sector);
for (const auto &modifier : modifierList)
{
const QString &modName = QString::number(modifier.m_modifierValue) + QLatin1Char(' ') + modifier.m_modifierName;
cb->addItem(QIcon(modifier.m_modifierIcon), modName, modifier.m_modifierValue);
}
} // static void fillUpComboBox(const QString & baseSymbolCode, unsigned int sector, QComboBox * cb)
SymbologyType SymbolModificationWidget::symbologyType() const
{
return m_internal->m_symbologyType;
} // SymbologyType SymbolModificationWidget::symbologyType() const
bool SymbolModificationWidget::setSidc(const QString &sidc)
{
if (sidc.isEmpty())
return false;
const AdvancedSymbology::SymbolDictionary &dict = m_internal->m_dict;
if (!m_internal->m_sidcBuilder.setSidc(sidc))
{
m_internal->m_tabWidget->setEnabled(false);
return false;
}
m_internal->m_symbologyType = SidcCodec::decodeSymbologyType(sidc);
switch (m_internal->m_symbologyType)
{
case SymbologyType::None : return false;
case SymbologyType::APP6B : m_internal->m_tabSidcEdit->setCurrentIndex(static_cast<int>(SymbologyTypeStackIndex::APP6)); break;
case SymbologyType::APP6D :
case SymbologyType::MIL2525C :
case SymbologyType::MIL2525D : m_internal->m_tabSidcEdit->setCurrentIndex(static_cast<int>(SymbologyTypeStackIndex::MIL2525D)); break;
}
m_internal->m_tabWidget->setEnabled(true);
m_internal->m_originalSidc = m_internal->m_sidcBuilder.toSidc();
m_internal->m_lastModifiedSidc = m_internal->m_sidcBuilder.toSidc();
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
if (SidcCodec::isCivil(sidc))
{
m_internal->m_tabSidcEdit ->setEnabled(false);
m_internal->m_tabFieldEdit->setEnabled(false);
m_internal->m_tabPreview ->setEnabled(false);
m_internal->m_tabSidcEdit ->hide();
m_internal->m_tabFieldEdit->hide();
m_internal->m_tabPreview ->hide();
m_internal->m_tabWidget->removeTab(m_internal->m_tabWidget->indexOf(m_internal->m_tabSidcEdit));
m_internal->m_tabWidget->removeTab(m_internal->m_tabWidget->indexOf(m_internal->m_tabFieldEdit));
m_internal->m_tabWidget->removeTab(m_internal->m_tabWidget->indexOf(m_internal->m_tabPreview));
return false; // ToDo: implement buildParticipantTab and return true here
}
m_internal->m_tabWidget->addTab(m_internal->m_tabSidcEdit, tr("Sector A and B Attributes"));
m_internal->m_tabSidcEdit ->setEnabled(true);
m_internal->m_tabFieldEdit->setEnabled(true);
if (m_internal->m_isParticipant)
{
m_internal->m_tabWidget->removeTab(m_internal->m_tabWidget->indexOf(m_internal->m_tabFieldEdit));
m_internal->m_tabFieldEdit->setEnabled(false);
m_internal->m_tabFieldEdit->hide();
}
else
{
m_internal->m_tabWidget->addTab(m_internal->m_tabFieldEdit, tr("Field Modifier"));
m_internal->m_tabFieldEdit->setEnabled(true);
}
#ifdef LTS_DEBUG
m_internal->m_tabWidget->addTab(m_internal->m_tabPreview, tr("Preview"));
m_internal->m_tabPreview->setEnabled(true);
#endif
const QString &baseSymbolCode = AdvancedSymbology::SidcBuilderBase::concreteSidcToBaseSymbolCode(sidc);
const QString &baseSymbolKey = SidcCodec::decodeRawSidc(baseSymbolCode);
fillUpComboBox(dict, baseSymbolKey, 1, m_internal->m_cbSector1Modifier_MIL2525D);
fillUpComboBox(dict, baseSymbolKey, 2, m_internal->m_cbSector2Modifier_MIL2525D);
m_internal->m_cbSector1Modifier_MIL2525D->setEnabled((m_internal->m_cbSector1Modifier_MIL2525D->count() > 0));
m_internal->m_cbSector2Modifier_MIL2525D->setEnabled((m_internal->m_cbSector2Modifier_MIL2525D->count() > 0));
m_internal->m_baseSymbolCode = baseSymbolCode;
if (!analyze(m_internal->m_symbologyType,sidc))
return false;
const AdvancedSymbology::SymbolProperties &symbolProps = dict.symbolProperties(baseSymbolCode);
if (symbolProps.geometryType() != AdvancedSymbology::GeometryType::Point)
{
const QString &widgetName = m_internal->m_tabPreview->objectName();
m_internal->m_tabPreview->setStyleSheet(QLatin1String("QWidget#") + widgetName + QLatin1String(" { background-color: lightgrey }"));
}
else
m_internal->m_tabPreview->setStyleSheet(QString());
QStringList fieldKeys = dict.symbologyAttributeKeyList();
fieldKeys.sort();
m_internal->m_cbFieldTitle->clear();
for (const auto &fieldKey : qAsConst(fieldKeys))
m_internal->m_cbFieldTitle->addItem(fieldKey);
if (m_internal->m_tabWidget->isEnabled())
emitChanged();
return true;
} // bool SymbolModificationWidget::setSidc( const QString & sidc )
const QMap<QString, QVariant> SymbolModificationWidget::fieldAttributes()
{
return m_internal->m_fieldTableModel->fieldAttrMap();
} // const QMap<QString, QVariant> SymbolModificationWidget::fieldAttributes()
bool SymbolModificationWidget::setFieldAttributes(const QMap<QString, QVariant> &fieldAttrMap)
{
return m_internal->m_fieldTableModel->setFieldAttrMap(fieldAttrMap);
} // bool SymbolModificationWidget::setFieldAttributes(const QString & symbolFieldAttr)
bool SymbolModificationWidget::analyze(SymbologyType symbologyType, const QString &sidc)
{
if (!m_internal->m_tabWidget->isEnabled()) return false;
m_internal->m_lastModifiedSidc = modifiedSidc();
m_internal->m_sidcBuilder.setSidc(sidc);
switch (symbologyType)
{
case SymbologyType::None : break;
case SymbologyType::APP6B : break;
case SymbologyType::MIL2525C: break;
case SymbologyType::APP6D :
case SymbologyType::MIL2525D:
{
m_internal->m_cbContext_MIL2525D->setCurrent(m_internal->m_sidcBuilder.standardIdentity().context);
m_internal->m_cbIdentity_MIL2525D->setCurrent(m_internal->m_sidcBuilder.standardIdentity().identity);
m_internal->m_cbStatus_MIL2525D->setCurrent(m_internal->m_sidcBuilder.status());
m_internal->m_cbHQTFDummy_MIL2525D->setCurrent(m_internal->m_sidcBuilder.hqTfFd());
m_internal->m_cbAmplifierGroup_MIL2525D->setCurrent(m_internal->m_sidcBuilder.amplifierGroup());
int idxAmpDescr = m_internal->m_cbAmplifierDescriptor_MIL2525D->findData(m_internal->m_sidcBuilder.amplifier2ndDigit());
m_internal->m_cbAmplifierDescriptor_MIL2525D->setCurrentIndex(idxAmpDescr);
int idxMod1 = m_internal->m_cbSector1Modifier_MIL2525D->findData(m_internal->m_sidcBuilder.sectorModifier1Digit());
int idxMod2 = m_internal->m_cbSector2Modifier_MIL2525D->findData(m_internal->m_sidcBuilder.sectorModifier2Digit());
m_internal->m_cbSector1Modifier_MIL2525D->setCurrentIndex(idxMod1);
m_internal->m_cbSector2Modifier_MIL2525D->setCurrentIndex(idxMod2);
} break;
}
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged(); // to update previewIcon (sidcNew)
return true; // (m_internal->m_sidcDelta.toSidc() == sidc);
} // bool SymbolModificationWidget::setSidc( const QString & sidc )
QString SymbolModificationWidget::originalSidc() const { return m_internal->m_originalSidc; }
QString SymbolModificationWidget::modifiedSidc() const { return m_internal->m_modifiedSidc; }
QString SymbolModificationWidget::lastModifiedSidc() const { return m_internal->m_lastModifiedSidc; }
QString SymbolModificationWidget::symbolName() const
{
const QString &baseSymbolCode = AdvancedSymbology::SidcBuilderBase::concreteSidcToBaseSymbolCode(originalSidc());
const AdvancedSymbology::SymbolDictionary &dict = m_internal->m_dict;
const AdvancedSymbology::SymbolProperties &symbolProps = dict.symbolProperties(baseSymbolCode);
return symbolProps.name();
} // QString SymbolModificationWidget::symbolName() const
void SymbolModificationWidget::setSymbolPixmap(QLabel *label, const QString &sidc)
{
label->setPixmap(QPixmap()); // first clear pixmap on label
AdvancedSymbology::SymbolResultWatcher *symbolGuard = new AdvancedSymbology::SymbolResultWatcher(this);
QObject::connect(symbolGuard, &AdvancedSymbology::SymbolResultWatcher::resultReady, this, [label, symbolGuard]()
{
QSharedPointer<AdvancedSymbology::SymbolResult> symbolResult = symbolGuard->symbolResult();
if (symbolResult)
{
QPixmap symbolPixmap = QPixmap::fromImage(symbolResult->symbolImage().image());
if (symbolPixmap.width() > 200) symbolPixmap = symbolPixmap.scaledToWidth(200, Qt::TransformationMode::SmoothTransformation);
if (symbolPixmap.height() > 100) symbolPixmap = symbolPixmap.scaledToHeight(100, Qt::TransformationMode::SmoothTransformation);
label->setPixmap(symbolPixmap);
}
});
const AdvancedSymbology::SymbolDataToRender symDataToRender(sidc, 200);
symbolGuard->setSymbolResult(m_internal->m_dict.findImage(symDataToRender));
} // void SymbolModificationWidget::setSymbolPixmap( QLabel * label, const QString & sidc )
void SymbolModificationWidget::onRevert()
{
const QString &restoreSidc = originalSidc();
analyze(SidcCodec::decodeSymbologyType(restoreSidc),restoreSidc);
} // void SymbolModificationWidget::onRevert()
void SymbolModificationWidget::onContextChanged()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
AdvancedSymbology::SidcDefinitions::StandardIdentity si = m_internal->m_sidcBuilder.standardIdentity();
si.context = m_internal->m_cbContext_MIL2525D->currentValue();
m_internal->m_sidcBuilder.setStandardIdentity(si);
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onContextChanged()
void SymbolModificationWidget::onIdentityChanged()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
AdvancedSymbology::SidcDefinitions::StandardIdentity si = m_internal->m_sidcBuilder.standardIdentity();
si.identity = m_internal->m_cbIdentity_MIL2525D->currentValue();
m_internal->m_sidcBuilder.setStandardIdentity(si);
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onIdentityChanged()
void SymbolModificationWidget::onSymbolSetChanged()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
m_internal->m_sidcBuilder.setSymbolSet(m_internal->m_cbSymbolSet_MIL2525D->currentValue());
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onSymbolSetChanged()
void SymbolModificationWidget::onStatusChanged()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
m_internal->m_sidcBuilder.setStatus(m_internal->m_cbStatus_MIL2525D->currentValue());
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onStatusChanged()
void SymbolModificationWidget::onHQTFDummyChanged()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
m_internal->m_sidcBuilder.setHqTfFd(m_internal->m_cbHQTFDummy_MIL2525D->currentValue());
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onHQTFDummyChanged()
void SymbolModificationWidget::onAmplifierGroupChanged()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
const AdvancedSymbology::SidcDefinitions::AmplifierGroup &amplifierGroup = m_internal->m_cbAmplifierGroup_MIL2525D->currentValue();
// First, renew the secondary comboBox!!!
// Remember, this is of type QComboBox
m_internal->m_cbAmplifierDescriptor_MIL2525D->clear();
m_internal->m_cbAmplifierDescriptor_MIL2525D->blockSignals(true);
{
int idx = 0;
switch (amplifierGroup)
{
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Unknown: break;
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Echelon_BrigadeAndBelow:
{
const QVector<AdvancedSymbology::SidcDefinitions::EchelonBrigadeAndBelow> &items = AdvancedSymbology::SidcDefinitions::echelonBrigadeAndBelows();
for (const auto &item : items)
m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, QString(AdvancedSymbology::SidcDefinitions::toString(item)), static_cast<int>(item));
}
break;
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Echelon_DivisionAndAbove:
{
const QVector<AdvancedSymbology::SidcDefinitions::EchelonDivisionAndAbove> &items = AdvancedSymbology::SidcDefinitions::echelonDivisionAndAboves();
for (const auto &item : items)
m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast<int>(item));
}
break;
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Mobility_OnLand:
{
const QVector<AdvancedSymbology::SidcDefinitions::MobilityOnLand> &items = AdvancedSymbology::SidcDefinitions::mobilityOnLands();
for (const auto &item : items)
m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast<int>(item));
}
break;
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Mobility_OnWater:
{
const QVector<AdvancedSymbology::SidcDefinitions::MobilityOnWater> &items = AdvancedSymbology::SidcDefinitions::mobilityOnWaters();
for (const auto &item : items)
m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast<int>(item));
}
break;
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Mobility_OnSnow:
{
const QVector<AdvancedSymbology::SidcDefinitions::MobilityOnSnow> &items = AdvancedSymbology::SidcDefinitions::mobilityOnSnows();
for (const auto &item : items)
m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast<int>(item));
}
break;
case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Naval_TowedArry:
{
const QVector<AdvancedSymbology::SidcDefinitions::NavalTowedArray> &items = AdvancedSymbology::SidcDefinitions::navalTowedArrays();
for (const auto &item : items)
m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast<int>(item));
}
break;
} // switch
}
m_internal->m_cbAmplifierDescriptor_MIL2525D->blockSignals(false);
m_internal->m_sidcBuilder.setAmplifierGroup(amplifierGroup);
if (m_internal->m_cbAmplifierDescriptor_MIL2525D->count() > 0)
{
m_internal->m_cbAmplifierDescriptor_MIL2525D->setEnabled(true);
unsigned int ampDescr = m_internal->m_sidcBuilder.amplifier2ndDigit();
int index = m_internal->m_cbAmplifierDescriptor_MIL2525D->findData(ampDescr);
m_internal->m_cbAmplifierDescriptor_MIL2525D->setCurrentIndex(index);
}
else m_internal->m_cbAmplifierDescriptor_MIL2525D->setEnabled(false);
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onAmplifierGroupChanged()
void SymbolModificationWidget::onAmplifierDesriptorChanged(int index)
{
if (!m_internal->m_tabWidget->isEnabled()) return;
unsigned int ampDescr = m_internal->m_cbAmplifierDescriptor_MIL2525D->itemData(index).toUInt();
m_internal->m_sidcBuilder.setAmplifier2ndDigit(ampDescr);
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onAmplifierDesriptorChanged( int index )
void SymbolModificationWidget::onSector1ModifierChanged(int index)
{
if (!m_internal->m_tabWidget->isEnabled()) return;
unsigned int sectorModifier = m_internal->m_cbSector1Modifier_MIL2525D->itemData(index).toUInt();
m_internal->m_sidcBuilder.setSectorModifier1Digit(sectorModifier);
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onSector1ModifierChanged( int )
void SymbolModificationWidget::onSector2ModifierChanged(int index)
{
if (!m_internal->m_tabWidget->isEnabled()) return;
unsigned int sectorModifier = m_internal->m_cbSector2Modifier_MIL2525D->itemData(index).toUInt();
m_internal->m_sidcBuilder.setSectorModifier2Digit(sectorModifier);
m_internal->m_modifiedSidc = m_internal->m_sidcBuilder.toSidc();
emitChanged();
} // void SymbolModificationWidget::onSector2ModifierChanged( int )
void SymbolModificationWidget::onFieldAttributeAdd(bool)
{
if (!m_internal->m_tabWidget->isEnabled()) return;
const QString &value = m_internal->m_leFieldValue->text();
if (!value.isEmpty())
{
const QString &key = m_internal->m_cbFieldTitle->currentText();
m_internal->m_fieldTableModel->setFieldAttribute(key, value);
emitChanged();
}
else onFieldAttributeRemove(true);
} // void SymbolModificationWidget::onFieldAttributeAdd()
void SymbolModificationWidget::onFieldAttributeRemove(bool)
{
if (!m_internal->m_tabWidget->isEnabled()) return;
const AdvancedSymbology::SymbolDictionary &dict = m_internal->m_dict;
const QString &key = m_internal->m_cbFieldTitle->currentText();
if (dict.symbologyAttributeKeyList().contains(key))
{
m_internal->m_fieldTableModel->removeFieldAttrMap(key);
emitChanged();
}
} // void PlanEditor::SymbolModificationWidget::onFieldAttributeRemove()
void SymbolModificationWidget::onSetFieldTitle(const QString &fieldTitel)
{
const AdvancedSymbology::SymbolDictionary &dict = m_internal->m_dict;
if (dict.symbologyAttributeKeyList().contains(fieldTitel))
m_internal->m_leFieldValue->setText(m_internal->m_fieldTableModel->fieldAttribute(fieldTitel));
}// void SymbolModificationWidget::onSetFieldTitle(const QString &)
void SymbolModificationWidget::onFieldItemActived(const QModelIndex &index)
{
const AdvancedSymbology::SymbolDictionary &dict = m_internal->m_dict;
const QString key = m_internal->m_fieldTableModel->data(m_internal->m_fieldTableModel->index(index.row(), 0)).toString();
const QString val = m_internal->m_fieldTableModel->data(m_internal->m_fieldTableModel->index(index.row(), 1)).toString();
if (dict.symbologyAttributeKeyList().contains(key))
{
m_internal->m_leFieldValue->setText(val);
m_internal->m_cbFieldTitle->setCurrentText(key);
}
} // void SymbolModificationWidget::onFieldItemActived( const QModelIndex & index )
void SymbolModificationWidget::onChangeApp6SizeMobility()
{
if (!m_internal->m_tabWidget->isEnabled()) return;
m_internal->m_lastModifiedSidc = modifiedSidc();
MyComboBox * cb = qobject_cast<MyComboBox*>(sender());
if (cb)
{
QString rawSidc = SidcCodec::decodeRawSidc(modifiedSidc());
QString code = cb->currentData().toString();
rawSidc[10] = code[0];
rawSidc[11] = code[1];
m_internal->m_modifiedSidc = SidcCodec::encodeComplete(SymbologyType::APP6B, rawSidc);
if (cb != m_internal->m_cbSize_APP6) m_internal->m_cbSize_APP6->setCurrentIndex(0);
if (cb != m_internal->m_cbSizeHQ_APP6) m_internal->m_cbSizeHQ_APP6->setCurrentIndex(0);
if (cb != m_internal->m_cbSizeTF_APP6) m_internal->m_cbSizeTF_APP6->setCurrentIndex(0);
if (cb != m_internal->m_cbSizeFDHQ_APP6) m_internal->m_cbSizeFDHQ_APP6->setCurrentIndex(0);
if (cb != m_internal->m_cbSizeFDTF_APP6) m_internal->m_cbSizeFDTF_APP6->setCurrentIndex(0);
if (cb != m_internal->m_cbSizeFD_APP6) m_internal->m_cbSizeFD_APP6->setCurrentIndex(0);
if (cb != m_internal->m_cbMobility_APP6) m_internal->m_cbMobility_APP6->setCurrentIndex(0);
emitChanged();
}
} // void SymbolModificationWidget::onChangeApp6SizeMobility(int)
} // namespace Gui
} // namespace AdvancedSymbology