/** * * @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 #include #include #include // Lts #include // Qt #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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 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(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 &items) { MyComboBox::clear(); int idx = 0; for (const auto &item : items) insertNumberedItem(idx++, item); if (MyComboBox::count() > 0) setCurrentIndex(0); } // void insertItems( const QVector & items ) T currentValue() const { return static_cast(currentData().toInt()); } int currentValueAsInt() const { return currentData().toInt(); } bool setCurrent(const T &newCurrentValue) { QVariant newCurVar(static_cast(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 class EnumComboBox class SymbolModificationWidget::Internal { public: QPointer 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 *m_cbContext_MIL2525D; EnumComboBox *m_cbIdentity_MIL2525D; EnumComboBox *m_cbSymbolSet_MIL2525D; EnumComboBox *m_cbStatus_MIL2525D; EnumComboBox *m_cbHQTFDummy_MIL2525D; EnumComboBox *m_cbAmplifierGroup_MIL2525D; EnumComboBox *m_cbAmplifierDescriptor_MIL2525D; EnumComboBox *m_cbSector1Modifier_MIL2525D; EnumComboBox *m_cbSector2Modifier_MIL2525D; EnumComboBox *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(widget); m_internal->m_cbContext_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::contexts()); connect(m_internal->m_cbContext_MIL2525D , static_cast(&QComboBox::currentIndexChanged) , this , &SymbolModificationWidget::onContextChanged); // Identity m_internal->m_cbIdentity_MIL2525D = new EnumComboBox(widget); m_internal->m_cbIdentity_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::identities()); connect(m_internal->m_cbIdentity_MIL2525D , static_cast(&QComboBox::currentIndexChanged) , this , &SymbolModificationWidget::onIdentityChanged); // Status m_internal->m_cbStatus_MIL2525D = new EnumComboBox(widget); m_internal->m_cbStatus_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::statuss()); connect(m_internal->m_cbStatus_MIL2525D , static_cast(&QComboBox::currentIndexChanged) , this , &SymbolModificationWidget::onStatusChanged); // HQTFDummy m_internal->m_cbHQTFDummy_MIL2525D = new EnumComboBox(widget); m_internal->m_cbHQTFDummy_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::hQTFDummy()); connect(m_internal->m_cbHQTFDummy_MIL2525D , static_cast(&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(widget); m_internal->m_cbAmplifierGroup_MIL2525D->insertItems(AdvancedSymbology::SidcDefinitions::amplifierGroups()); connect(m_internal->m_cbAmplifierGroup_MIL2525D , static_cast(&QComboBox::currentIndexChanged) , this , &SymbolModificationWidget::onAmplifierGroupChanged, Qt::DirectConnection); // as soon as possible!!! // AmplifierDescriptor m_internal->m_cbAmplifierDescriptor_MIL2525D = new EnumComboBox(widget); // to fill->use slot of primary ComboBox: onAmplifierGroupChanged(); connect(m_internal->m_cbAmplifierDescriptor_MIL2525D , static_cast(&QComboBox::currentIndexChanged) , this , &SymbolModificationWidget::onAmplifierDesriptorChanged); // Sector1Modifier m_internal->m_cbSector1Modifier_MIL2525D = new EnumComboBox(widget); connect(m_internal->m_cbSector1Modifier_MIL2525D , static_cast(&QComboBox::currentIndexChanged) , this , &SymbolModificationWidget::onSector1ModifierChanged); // Sector2Modifier m_internal->m_cbSector2Modifier_MIL2525D = new EnumComboBox(widget); connect(m_internal->m_cbSector2Modifier_MIL2525D , static_cast(&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(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(&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(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbSizeHQ_APP6 , static_cast(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbSizeTF_APP6 , static_cast(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbSizeFDHQ_APP6, static_cast(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbSizeFDTF_APP6, static_cast(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbSizeFD_APP6 , static_cast(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbMobility_APP6, static_cast(&QComboBox::activated), this, &SymbolModificationWidget::onChangeApp6SizeMobility); connect(m_internal->m_cbStatus_APP6, static_cast(&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(&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(&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 &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(SymbologyTypeStackIndex::APP6)); break; case SymbologyType::APP6D : case SymbologyType::MIL2525C : case SymbologyType::MIL2525D : m_internal->m_tabSidcEdit->setCurrentIndex(static_cast(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 SymbolModificationWidget::fieldAttributes() { return m_internal->m_fieldTableModel->fieldAttrMap(); } // const QMap SymbolModificationWidget::fieldAttributes() bool SymbolModificationWidget::setFieldAttributes(const QMap &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 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 &lifierGroup = 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 &items = AdvancedSymbology::SidcDefinitions::echelonBrigadeAndBelows(); for (const auto &item : items) m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, QString(AdvancedSymbology::SidcDefinitions::toString(item)), static_cast(item)); } break; case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Echelon_DivisionAndAbove: { const QVector &items = AdvancedSymbology::SidcDefinitions::echelonDivisionAndAboves(); for (const auto &item : items) m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast(item)); } break; case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Mobility_OnLand: { const QVector &items = AdvancedSymbology::SidcDefinitions::mobilityOnLands(); for (const auto &item : items) m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast(item)); } break; case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Mobility_OnWater: { const QVector &items = AdvancedSymbology::SidcDefinitions::mobilityOnWaters(); for (const auto &item : items) m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast(item)); } break; case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Mobility_OnSnow: { const QVector &items = AdvancedSymbology::SidcDefinitions::mobilityOnSnows(); for (const auto &item : items) m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast(item)); } break; case AdvancedSymbology::SidcDefinitions::AmplifierGroup::Naval_TowedArry: { const QVector &items = AdvancedSymbology::SidcDefinitions::navalTowedArrays(); for (const auto &item : items) m_internal->m_cbAmplifierDescriptor_MIL2525D->insertNumberedItem(idx++, AdvancedSymbology::SidcDefinitions::toString(item), static_cast(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(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