diff --git a/TransmitTextEdit.cpp b/TransmitTextEdit.cpp index 7cfa8c4..34bbc5a 100644 --- a/TransmitTextEdit.cpp +++ b/TransmitTextEdit.cpp @@ -95,6 +95,9 @@ TransmitTextEdit::TransmitTextEdit(QWidget *parent): } void TransmitTextEdit::setCharsSent(int n){ + // never can send more than the document length + n = qMin(n, document()->characterCount()); + // update sent display auto c = textCursor(); c.movePosition(QTextCursor::Start); diff --git a/mainwindow.cpp b/mainwindow.cpp index c8c8c2f..a84d561 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -5899,6 +5899,8 @@ void MainWindow::displayTextForFreq(QString text, int freq, QDateTime date, bool freq = highFreq; } + qDebug() << "existing block?" << block << freq; + if(isNewLine){ m_rxFrameBlockNumbers.remove(freq); m_rxFrameBlockNumbers.remove(lowFreq); @@ -5909,7 +5911,7 @@ void MainWindow::displayTextForFreq(QString text, int freq, QDateTime date, bool block = writeMessageTextToUI(date, text.replace("\\n", "\n"), freq, isTx, block); // never cache tx or last lines - if(isTx || isLast) { + if(/*isTx || */isLast) { // reset the cache so we're always progressing forward m_rxFrameBlockNumbers.clear(); } else { @@ -5936,7 +5938,7 @@ void MainWindow::writeNoticeTextToUI(QDateTime date, QString text){ ui->textEditRX->verticalScrollBar()->setValue(ui->textEditRX->verticalScrollBar()->maximum()); } -int MainWindow::writeMessageTextToUI(QDateTime date, QString text, int freq, bool bold, int block){ +int MainWindow::writeMessageTextToUI(QDateTime date, QString text, int freq, bool isTx, int block){ auto c = ui->textEditRX->textCursor(); // find an existing block (that does not contain an EOT marker) @@ -5973,20 +5975,17 @@ int MainWindow::writeMessageTextToUI(QDateTime date, QString text, int freq, boo } } - if(found && !bold){ + if(found){ c.clearSelection(); c.insertText(text); } else { text = text.toHtmlEscaped(); text = text.replace(" ", "  "); - if(bold){ - text = QString("%1").arg(text); - } c.insertBlock(); - c.insertHtml(QString("%1 - (%2) - %3").arg(date.time().toString()).arg(freq).arg(text)); + c.insertHtml(QString("%1 - (%2) - %3").arg(date.time().toString()).arg(freq).arg(text)); } - if(bold){ + if(isTx){ c.block().setUserState(STATE_TX); highlightBlock(c.block(), m_config.tx_text_font(), m_config.color_tx_foreground(), QColor(Qt::transparent)); } else { @@ -6182,17 +6181,7 @@ QString MainWindow::createMessageTransmitQueue(QString const& text, bool reset){ m_txFrameQueue.append(frames); m_txFrameCount += frames.length(); -#if 1 - int freq = currentFreqOffset(); - qDebug() << "creating message for freq" << freq; - - // TODO: jsherer - parse outgoing message so we can add it to the inbox as an outgoing message - // TODO: jsherer - move this outside of create message transmit queue - auto joined = Varicode::rstrip(lines.join("")); - - //displayTextForFreq(QString("%1 %2 ").arg(joined).arg(m_config.eot()), freq, DriftingDateTime::currentDateTimeUtc(), true, true, true); - // if we're transmitting a message to be displayed, we should bump the repeat buttons... #if JS8HB_RESET_HB_TIMER_ON_TX resetAutomaticIntervalTransmissions(false, false); @@ -6201,12 +6190,11 @@ QString MainWindow::createMessageTransmitQueue(QString const& text, bool reset){ #endif // keep track of the last message text sent + auto joined = lines.join(""); + m_lastTxMessage += joined; return joined; -#else - return Varicode::rstrip(lines.join("")); -#endif } void MainWindow::restoreMessage(){ @@ -6266,60 +6254,7 @@ void MainWindow::on_nextFreeTextMsg_currentTextChanged (QString const& text) void MainWindow::on_extFreeTextMsgEdit_currentTextChanged (QString const& text) { -#if 0 - QString x; - QString::const_iterator i; - for(i = text.constBegin(); i != text.constEnd(); i++){ - auto ch = (*i).toUpper().toLatin1(); - if(ch == 10 || (32 <= ch && ch <= 126)){ - // newline or printable 7-bit ascii - x += ch; - } - } - if(x != text){ - int pos = ui->extFreeTextMsgEdit->textCursor().position(); - int maxpos = x.size(); - - int sent = ui->extFreeTextMsgEdit->charsSent(); - ui->extFreeTextMsgEdit->setPlainText(x); - ui->extFreeTextMsgEdit->setCharsSent(sent); - - // set cursor position - QTextCursor c = ui->extFreeTextMsgEdit->textCursor(); - c.setPosition(pos < maxpos ? pos : maxpos, QTextCursor::MoveAnchor); - - // highlight the block with our fonts - highlightBlock(c.block(), m_config.compose_text_font(), m_config.color_compose_foreground(), QColor(Qt::transparent)); - - ui->extFreeTextMsgEdit->setTextCursor(c); - } -#endif - -#if 0 - auto x = text; - - // only highlight if dirty - if(x != m_txTextDirtyLastText){ - // highlight the edited block with our fonts - QTextCursor c = ui->extFreeTextMsgEdit->textCursor(); - ui->extFreeTextMsgEdit->blockSignals(true); - { - int pos = ui->extFreeTextMsgEdit->textCursor().position(); - int maxpos = x.size(); - - // set cursor position - QTextCursor c = ui->extFreeTextMsgEdit->textCursor(); - c.setPosition(pos < maxpos ? pos : maxpos, QTextCursor::MoveAnchor); - - // highlight the block with our fonts - highlightBlock(c.block(), m_config.compose_text_font(), m_config.color_compose_foreground(), QColor(Qt::transparent)); - - ui->extFreeTextMsgEdit->setTextCursor(c); - } - ui->extFreeTextMsgEdit->blockSignals(false); - } -#endif - + // keep track of dirty flags m_txTextDirty = text != m_txTextDirtyLastText; m_txTextDirtyLastText = text; @@ -6377,6 +6312,7 @@ bool MainWindow::prepareNextMessageFrame() m_txFrameQueue.clear(); m_txFrameCount = 0; auto newText = appendMessage(unsent); + qDebug () << "unsent replaced to" << "\n" << newText; ui->extFreeTextMsgEdit->replaceUnsentText(newText); ui->extFreeTextMsgEdit->setClean(); } @@ -6410,7 +6346,12 @@ bool MainWindow::prepareNextMessageFrame() // display the frame... auto freq = currentFreqOffset(); - displayTextForFreq(QString("%1 %2 ").arg(dt.message()).arg(m_txFrameQueue.isEmpty() ? m_config.eot(): ""), freq, DriftingDateTime::currentDateTimeUtc(), true, false, false); + if(m_txFrameQueue.isEmpty()){ + displayTextForFreq(QString("%1 %2 ").arg(dt.message()).arg(m_config.eot()), freq, DriftingDateTime::currentDateTimeUtc(), true, false, true); + } else { + bool newLine = m_txFrameCountSent == 1; + displayTextForFreq(dt.message(), freq, DriftingDateTime::currentDateTimeUtc(), true, newLine, false); + } ui->nextFreeTextMsg->setText(frame); m_i3bit = bits; diff --git a/mainwindow.h b/mainwindow.h index d265407..8bf560e 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -146,7 +146,7 @@ public slots: void createAllcallTableRows(QTableWidget *table, const QString &selectedCall); void displayTextForFreq(QString text, int freq, QDateTime date, bool isTx, bool isNewLine, bool isLast); void writeNoticeTextToUI(QDateTime date, QString text); - int writeMessageTextToUI(QDateTime date, QString text, int freq, bool bold, int block=-1); + int writeMessageTextToUI(QDateTime date, QString text, int freq, bool isTx, int block=-1); bool isMessageQueuedForTransmit(); void prependMessageText(QString text); void addMessageText(QString text, bool clear=false, bool selectFirstPlaceholder=false);