diff --git a/mainwindow.cpp b/mainwindow.cpp index 706f367..2567630 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -6756,11 +6756,53 @@ void MainWindow::buildEditMenu(QMenu *menu, QTextEdit *edit){ connect(paste, &QAction::triggered, edit, &QTextEdit::paste); } +QMap MainWindow::buildMacroValues(){ + QMap values = { + {"", m_config.my_callsign()}, + {"", m_config.my_grid().left(4)}, + {"", m_config.my_grid().left(12)}, + {"", m_config.my_station()}, + {"", m_config.my_qth()}, + {"", m_config.cq_message()}, + {"", m_config.reply_message()}, + }; + + auto selectedCall = callsignSelected(); + if(m_callActivity.contains(selectedCall)){ + auto cd = m_callActivity[selectedCall]; + + values[""] = selectedCall; + + if(cd.snr > -31){ + values[""] = Varicode::formatSNR(cd.snr); + } + } + + return values; +} + +QString MainWindow::replaceMacros(QString const &text, QMap values, bool prune){ + QString output = QString(text); + + foreach(auto key, values.keys()){ + output = output.replace(key, values[key]); + } + + if(prune){ + output = output.replace(QRegularExpression("[<](?:[^>]+)[>]"), ""); + } + + return output; +} + void MainWindow::buildSavedMessagesMenu(QMenu *menu){ + auto values = buildMacroValues(); + foreach(QString macro, m_config.macros()->stringList()){ - QAction *action = menu->addAction(macro); + QAction *action = menu->addAction(replaceMacros(macro, values, false)); connect(action, &QAction::triggered, this, [this, macro](){ - addMessageText(macro); + auto values = buildMacroValues(); + addMessageText(replaceMacros(macro, values, true)); if(m_config.transmit_directed()) toggleTx(true); }); diff --git a/mainwindow.h b/mainwindow.h index 07aa3e4..4015beb 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -277,6 +277,8 @@ private slots: void buildBandActivitySortByMenu(QMenu * menu); void buildCallActivitySortByMenu(QMenu * menu); void buildQueryMenu(QMenu *, QString callsign); + QMap buildMacroValues(); + QString replaceMacros(QString const &text, QMap values, bool prune); void buildSavedMessagesMenu(QMenu *menu); void buildRelayMenu(QMenu *menu); QAction* buildRelayAction(QString call);