diff --git a/mainwindow.cpp b/mainwindow.cpp index b55498b..7582c3c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1425,6 +1425,31 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, mw->show(); }); + auto localMessageAction = new QAction(QString("Store Message..."), ui->tableWidgetCalls); + connect(localMessageAction, &QAction::triggered, this, [this](){ + QString selectedCall = callsignSelected(); + if(selectedCall.isEmpty()){ + return; + } + + auto m = new MessageReplyDialog(this); + m->setWindowTitle("Message"); + m->setLabel(QString("Store this message locally for %1:").arg(selectedCall)); + if(m->exec() != QMessageBox::Accepted){ + return; + } + + CommandDetail d = {}; + d.cmd = " MSG"; + d.to = selectedCall; + d.from = m_config.my_callsign(); + d.relayPath = d.from; + d.text = m->textValue(); + d.utcTimestamp = DriftingDateTime::currentDateTimeUtc(); + + addCommandToStorage("STORE", d); + }); + ui->tableWidgetCalls->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->tableWidgetCalls->horizontalHeader(), &QHeaderView::customContextMenuRequested, this, [this](QPoint const &point){ QMenu * menu = new QMenu(ui->tableWidgetCalls); @@ -1435,7 +1460,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, }); ui->tableWidgetCalls->setContextMenuPolicy(Qt::CustomContextMenu); - connect(ui->tableWidgetCalls, &QTableWidget::customContextMenuRequested, this, [this, logAction, historyAction, clearAction4, clearActionAll, addStation, removeStation](QPoint const &point){ + connect(ui->tableWidgetCalls, &QTableWidget::customContextMenuRequested, this, [this, logAction, historyAction, localMessageAction, clearAction4, clearActionAll, addStation, removeStation](QPoint const &point){ QMenu * menu = new QMenu(ui->tableWidgetCalls); ui->tableWidgetRXAll->selectionModel()->clearSelection(); @@ -1462,6 +1487,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, menu->addAction(historyAction); historyAction->setDisabled(missingCallsign || isAllCall || isGroupCall || !hasMessageHistory(selectedCall)); + menu->addAction(localMessageAction); + localMessageAction->setDisabled(missingCallsign || isAllCall || isGroupCall); + menu->addSeparator(); auto savedMenu = menu->addMenu("Saved messages..."); @@ -10054,7 +10082,7 @@ void MainWindow::processCommandActivity() { qDebug() << "storing message to" << to << ":" << text; - addCommandToInboxStorage("STORE", cd); + addCommandToStorage("STORE", cd); // we haven't replaced the from with the relay path, so we have to use it for the ack if there is one reply = QString("%1 ACK").arg(calls.length() > 1 ? d.relayPath : d.from); @@ -10378,10 +10406,10 @@ int MainWindow::addCommandToMyInbox(CommandDetail d){ m_rxInboxCountCache[d.from] = m_rxInboxCountCache.value(d.from, 0) + 1; // add it to my unread inbox - return addCommandToInboxStorage("UNREAD", d); + return addCommandToStorage("UNREAD", d); } -int MainWindow::addCommandToInboxStorage(QString type, CommandDetail d){ +int MainWindow::addCommandToStorage(QString type, CommandDetail d){ // inbox: auto inbox = Inbox(inboxPath()); if(!inbox.open()){ diff --git a/mainwindow.h b/mainwindow.h index 6759119..88f7b05 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -954,7 +954,7 @@ private: void refreshInboxCounts(); bool hasMessageHistory(QString call); int addCommandToMyInbox(CommandDetail d); - int addCommandToInboxStorage(QString type, CommandDetail d); + int addCommandToStorage(QString type, CommandDetail d); int getNextMessageIdForCallsign(QString callsign); QStringList parseRelayPathCallsigns(QString from, QString text); void processAlertReplyForCommand(CommandDetail d, QString from, QString cmd);