diff --git a/Configuration.cpp b/Configuration.cpp index 6ecc7b9..47c444a 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -591,6 +591,7 @@ private: QStringList my_groups_; QStringList auto_whitelist_; QStringList auto_blacklist_; + QString eot_; QString my_info_; QString cq_; QString reply_; @@ -986,6 +987,10 @@ QSet Configuration::auto_blacklist() const { return QSet::fromList(m_->auto_blacklist_); } +QString Configuration::eot() const { + return m_->eot_; +} + QString Configuration::my_info() const { auto info = m_->my_info_; @@ -1375,6 +1380,7 @@ void Configuration::impl::initialize_models () ui_->groups_line_edit->setText(my_groups_.join(", ")); ui_->auto_whitelist_line_edit->setText(auto_whitelist_.join(", ")); ui_->auto_blacklist_line_edit->setText(auto_blacklist_.join(", ")); + ui_->eot_line_edit->setText(eot_.trimmed().left(2)); ui_->info_message_line_edit->setText (my_info_.toUpper()); ui_->cq_message_line_edit->setText(cq_.toUpper()); ui_->reply_message_line_edit->setText (reply_.toUpper()); @@ -1524,6 +1530,7 @@ void Configuration::impl::read_settings () auto_blacklist_ = settings_->value("AutoBlacklist", QStringList{}).toStringList(); callsign_aging_ = settings_->value ("CallsignAging", 0).toInt (); activity_aging_ = settings_->value ("ActivityAging", 2).toInt (); + eot_ = settings_->value("EOTCharacter", QString{"\u2662"}).toString().trimmed().left(2); my_info_ = settings_->value("MyInfo", QString {}).toString(); cq_ = settings_->value("CQMessage", QString {"CQCQCQ "}).toString(); reply_ = settings_->value("Reply", QString {"HW CPY?"}).toString(); @@ -1785,6 +1792,7 @@ void Configuration::impl::write_settings () settings_->setValue ("MyGroups", my_groups_); settings_->setValue ("AutoWhitelist", auto_whitelist_); settings_->setValue ("AutoBlacklist", auto_blacklist_); + settings_->setValue ("EOTCharacter", eot_); settings_->setValue ("MyInfo", my_info_); settings_->setValue ("CQMessage", cq_); settings_->setValue ("Reply", reply_); @@ -2376,6 +2384,7 @@ void Configuration::impl::accept () auto_blacklist_ = splitCalls(ui_->auto_blacklist_line_edit->text().toUpper().trimmed()); cq_ = ui_->cq_message_line_edit->text().toUpper(); reply_ = ui_->reply_message_line_edit->text().toUpper(); + eot_ = ui_->eot_line_edit->text().trimmed().left(2); my_info_ = ui_->info_message_line_edit->text().toUpper(); callsign_aging_ = ui_->callsign_aging_spin_box->value(); activity_aging_ = ui_->activity_aging_spin_box->value(); diff --git a/Configuration.hpp b/Configuration.hpp index e971a87..4174aee 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -104,6 +104,7 @@ public: QSet auto_blacklist() const; int activity_aging() const; int callsign_aging() const; + QString eot() const; QString my_info () const; QString cq_message () const; QString reply_message () const; diff --git a/Configuration.ui b/Configuration.ui index 153e7ac..bf8cf6d 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -63,7 +63,7 @@ 0 0 738 - 448 + 453 @@ -277,9 +277,9 @@ 0 - 0 - 726 - 631 + -297 + 724 + 750 @@ -748,6 +748,32 @@ text message. + + + + Characters + + + + + + End of Transmission Character: + + + + + + + + + + 2 + + + + + + @@ -925,8 +951,8 @@ text message. 0 0 - 285 - 397 + 718 + 435 @@ -1346,8 +1372,8 @@ a few, particularly some Kenwood rigs, require it). 0 0 - 257 - 427 + 237 + 467 @@ -1774,8 +1800,8 @@ radio interface behave as expected. 0 0 - 267 - 302 + 760 + 502 @@ -2087,8 +2113,8 @@ both here. 0 0 - 572 - 498 + 746 + 525 @@ -2550,8 +2576,8 @@ for assessing propagation and system performance. 0 0 - 498 - 321 + 760 + 502 @@ -3128,8 +3154,8 @@ QListView::item:hover { 0 0 - 280 - 201 + 738 + 378 @@ -3383,8 +3409,8 @@ QListView::item:hover { 0 0 - 236 - 258 + 233 + 253 @@ -3587,8 +3613,8 @@ QListView::item:hover { 0 0 - 288 - 96 + 277 + 93 @@ -4196,12 +4222,12 @@ soundcard changes - - - - - + + + + + diff --git a/artwork/icon_1024.svg b/artwork/icon_1024.svg index 4d51363..f8b1109 100644 --- a/artwork/icon_1024.svg +++ b/artwork/icon_1024.svg @@ -15,9 +15,9 @@ viewBox="0 0 270.93333 270.93334" version="1.1" id="svg16" - inkscape:export-filename="/home/jordan/bitmap.png" - inkscape:export-xdpi="300.06662" - inkscape:export-ydpi="300.06662" + inkscape:export-filename="/home/jordan/jtsdk/src/wsjtx/artwork/js8call_icon.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" inkscape:version="0.92.3 (2405546, 2018-03-11)" sodipodi:docname="icon_1024.svg"> + inkscape:pagecheckerboard="true" + showguides="false" /> @@ -71,25 +72,91 @@ - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/icon_128.svg b/artwork/icon_128.svg index 595e0c4..b3d3fa1 100644 --- a/artwork/icon_128.svg +++ b/artwork/icon_128.svg @@ -15,11 +15,11 @@ viewBox="0 0 33.866666 33.866667" version="1.1" id="svg16" - inkscape:export-filename="/home/jordan/bitmap.png" - inkscape:export-xdpi="300.06662" - inkscape:export-ydpi="300.06662" + inkscape:export-filename="/home/jordan/jtsdk/src/wsjtx/artwork/js8call_icon.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" inkscape:version="0.92.3 (2405546, 2018-03-11)" - sodipodi:docname="icon_1024.svg"> + sodipodi:docname="icon_128.svg"> + inkscape:pagecheckerboard="true" + showguides="false" /> @@ -70,26 +71,96 @@ transform="translate(0,-263.13332)"> - - + transform="matrix(1.5635065,0,0,1.5635065,-28.822499,6.8392367)"> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/installer_logo.svg b/artwork/installer_logo.svg index c688c42..cad2349 100644 --- a/artwork/installer_logo.svg +++ b/artwork/installer_logo.svg @@ -16,7 +16,10 @@ version="1.1" id="svg16" inkscape:version="0.92.3 (2405546, 2018-03-11)" - sodipodi:docname="icon_1024.svg"> + sodipodi:docname="installer_logo.svg" + inkscape:export-filename="/home/jordan/jtsdk/src/wsjtx/artwork/installer_logo.svg.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> image/svg+xml - + @@ -66,27 +69,98 @@ id="layer1" transform="translate(0,-26.06665)"> - - + transform="matrix(0.97656252,0,0,0.97656252,2.6458332,3.7859373)" + id="layer1-7" + inkscape:label="Layer 1"> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/installer_logo.svg.png b/artwork/installer_logo.svg.png index 938b619..49a51c9 100644 Binary files a/artwork/installer_logo.svg.png and b/artwork/installer_logo.svg.png differ diff --git a/artwork/js8call_icon.png b/artwork/js8call_icon.png index dc6c3c9..3a2e7a3 100644 Binary files a/artwork/js8call_icon.png and b/artwork/js8call_icon.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_128x128.png b/icons/Darwin/JS8Call.iconset/icon_128x128.png index b71340b..a7411d9 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_128x128.png and b/icons/Darwin/JS8Call.iconset/icon_128x128.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_128x128@2x.png b/icons/Darwin/JS8Call.iconset/icon_128x128@2x.png index 266c0b5..7d8a21b 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_128x128@2x.png and b/icons/Darwin/JS8Call.iconset/icon_128x128@2x.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_16x16.png b/icons/Darwin/JS8Call.iconset/icon_16x16.png index 30266f1..176243b 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_16x16.png and b/icons/Darwin/JS8Call.iconset/icon_16x16.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_16x16@2x.png b/icons/Darwin/JS8Call.iconset/icon_16x16@2x.png index 8b115f3..ed4f1f0 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_16x16@2x.png and b/icons/Darwin/JS8Call.iconset/icon_16x16@2x.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_256x256.png b/icons/Darwin/JS8Call.iconset/icon_256x256.png index 266c0b5..7d8a21b 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_256x256.png and b/icons/Darwin/JS8Call.iconset/icon_256x256.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_256x256@2x.png b/icons/Darwin/JS8Call.iconset/icon_256x256@2x.png index 5f84215..0cc11b0 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_256x256@2x.png and b/icons/Darwin/JS8Call.iconset/icon_256x256@2x.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_32x32.png b/icons/Darwin/JS8Call.iconset/icon_32x32.png index 8b115f3..ed4f1f0 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_32x32.png and b/icons/Darwin/JS8Call.iconset/icon_32x32.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_32x32@2x.png b/icons/Darwin/JS8Call.iconset/icon_32x32@2x.png index 8d8c59c..e1f4991 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_32x32@2x.png and b/icons/Darwin/JS8Call.iconset/icon_32x32@2x.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_512x512.png b/icons/Darwin/JS8Call.iconset/icon_512x512.png index 5f84215..0cc11b0 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_512x512.png and b/icons/Darwin/JS8Call.iconset/icon_512x512.png differ diff --git a/icons/Darwin/JS8Call.iconset/icon_512x512@2x.png b/icons/Darwin/JS8Call.iconset/icon_512x512@2x.png index f4e4eec..3a2e7a3 100644 Binary files a/icons/Darwin/JS8Call.iconset/icon_512x512@2x.png and b/icons/Darwin/JS8Call.iconset/icon_512x512@2x.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_128x128.png b/icons/Darwin/wsjt.iconset/icon_128x128.png index b71340b..a7411d9 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_128x128.png and b/icons/Darwin/wsjt.iconset/icon_128x128.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_128x128@2x.png b/icons/Darwin/wsjt.iconset/icon_128x128@2x.png index 266c0b5..7d8a21b 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_128x128@2x.png and b/icons/Darwin/wsjt.iconset/icon_128x128@2x.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_16x16.png b/icons/Darwin/wsjt.iconset/icon_16x16.png index 30266f1..176243b 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_16x16.png and b/icons/Darwin/wsjt.iconset/icon_16x16.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_16x16@2x.png b/icons/Darwin/wsjt.iconset/icon_16x16@2x.png index 8b115f3..ed4f1f0 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_16x16@2x.png and b/icons/Darwin/wsjt.iconset/icon_16x16@2x.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_256x256.png b/icons/Darwin/wsjt.iconset/icon_256x256.png index 266c0b5..7d8a21b 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_256x256.png and b/icons/Darwin/wsjt.iconset/icon_256x256.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_256x256@2x.png b/icons/Darwin/wsjt.iconset/icon_256x256@2x.png index 5f84215..0cc11b0 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_256x256@2x.png and b/icons/Darwin/wsjt.iconset/icon_256x256@2x.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_32x32.png b/icons/Darwin/wsjt.iconset/icon_32x32.png index 8b115f3..ed4f1f0 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_32x32.png and b/icons/Darwin/wsjt.iconset/icon_32x32.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_32x32@2x.png b/icons/Darwin/wsjt.iconset/icon_32x32@2x.png index 8d8c59c..e1f4991 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_32x32@2x.png and b/icons/Darwin/wsjt.iconset/icon_32x32@2x.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_512x512.png b/icons/Darwin/wsjt.iconset/icon_512x512.png index 5f84215..0cc11b0 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_512x512.png and b/icons/Darwin/wsjt.iconset/icon_512x512.png differ diff --git a/icons/Darwin/wsjt.iconset/icon_512x512@2x.png b/icons/Darwin/wsjt.iconset/icon_512x512@2x.png index f4e4eec..3a2e7a3 100644 Binary files a/icons/Darwin/wsjt.iconset/icon_512x512@2x.png and b/icons/Darwin/wsjt.iconset/icon_512x512@2x.png differ diff --git a/icons/Unix/js8call_icon.png b/icons/Unix/js8call_icon.png index b71340b..a7411d9 100644 Binary files a/icons/Unix/js8call_icon.png and b/icons/Unix/js8call_icon.png differ diff --git a/icons/windows-icons/installer_logo.bmp b/icons/windows-icons/installer_logo.bmp index abfd7df..c1122df 100644 Binary files a/icons/windows-icons/installer_logo.bmp and b/icons/windows-icons/installer_logo.bmp differ diff --git a/icons/windows-icons/js8call.ico b/icons/windows-icons/js8call.ico index ee2b60d..b9147ff 100644 Binary files a/icons/windows-icons/js8call.ico and b/icons/windows-icons/js8call.ico differ diff --git a/mainwindow.cpp b/mainwindow.cpp index 06d4893..7703930 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1829,19 +1829,21 @@ void MainWindow::initializeDummyData(){ cmd.utcTimestamp = dt; addCommandToMyInbox(cmd); - displayTextForFreq("KN4CRD: @ALLCALL? \u2301 ", 42, DriftingDateTime::currentDateTimeUtc().addSecs(-315), true, true, true); - displayTextForFreq("J1Y: KN4CRD SNR -05 \u2301 ", 42, DriftingDateTime::currentDateTimeUtc().addSecs(-300), false, true, true); - displayTextForFreq("HELLO BRAVE NEW WORLD \u2301 ", 42, DriftingDateTime::currentDateTimeUtc().addSecs(-300), false, true, true); + QString eot = m_config.eot(); + + displayTextForFreq(QString("KN4CRD: @ALLCALL? %1 ").arg(eot), 42, DriftingDateTime::currentDateTimeUtc().addSecs(-315), true, true, true); + displayTextForFreq(QString("J1Y: KN4CRD SNR -05 %1 ").arg(eot), 42, DriftingDateTime::currentDateTimeUtc().addSecs(-300), false, true, true); + displayTextForFreq(QString("HELLO BRAVE NEW WORLD %1 ").arg(eot), 42, DriftingDateTime::currentDateTimeUtc().addSecs(-300), false, true, true); auto now = DriftingDateTime::currentDateTimeUtc(); - displayTextForFreq("KN4CRD: JY1 ACK -12 \u2301 ", 780, now, false, true, true); - displayTextForFreq("KN4CRD: JY1 ACK -12 \u2301 ", 780, now, false, true, true); // should be hidden (duplicate) - displayTextForFreq("OH8STN: JY1 ACK -12 \u2301 ", 780, now, false, true, true); + displayTextForFreq(QString("KN4CRD: JY1 ACK -12 %1 ").arg(eot), 780, now, false, true, true); + displayTextForFreq(QString("KN4CRD: JY1 ACK -12 %1 ").arg(eot), 780, now, false, true, true); // should be hidden (duplicate) + displayTextForFreq(QString("OH8STN: JY1 ACK -12 %1 ").arg(eot), 780, now, false, true, true); - displayTextForFreq("KN4CRD: JY1 ACK -10 \u2301 ", 800, now, false, true, true); - displayTextForFreq("KN4CRD: JY1 ACK -12 \u2301 ", 780, now.addSecs(120), false, true, true); + displayTextForFreq(QString("KN4CRD: JY1 ACK -10 %1 ").arg(eot), 800, now, false, true, true); + displayTextForFreq(QString("KN4CRD: JY1 ACK -12 %1 ").arg(eot), 780, now.addSecs(120), false, true, true); - displayTextForFreq("HELLO\\nBRAVE\\nNEW\\nWORLD \u2301 ", 1500, now, false, true, true); + displayTextForFreq(QString("HELLO\\nBRAVE\\nNEW\\nWORLD %1 ").arg(eot), 1500, now, false, true, true); displayActivity(true); } @@ -5920,7 +5922,7 @@ int MainWindow::writeMessageTextToUI(QDateTime date, QString text, int freq, boo c.clearSelection(); c.movePosition(QTextCursor::EndOfBlock, QTextCursor::MoveAnchor); - if(!blockText.contains("\u2301")){ + if(!blockText.contains(m_config.eot())){ found = true; } } @@ -6150,7 +6152,7 @@ QString MainWindow::createMessageTransmitQueue(QString const& text, bool reset){ // TODO: jsherer - parse outgoing message so we can add it to the inbox as an outgoing message auto joined = Varicode::rstrip(lines.join("")); - displayTextForFreq(QString("%1 \u2301 ").arg(joined), freq, DriftingDateTime::currentDateTimeUtc(), true, true, true); + 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... resetAutomaticIntervalTransmissions(false, false); @@ -8167,8 +8169,7 @@ void MainWindow::on_tableWidgetRXAll_cellDoubleClicked(int row, int col){ isLast = (d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast; if(isLast){ - // can also use \u0004 \u2666 \u2404 - activityText = QString("%1 \u2301 ").arg(Varicode::rstrip(activityText)); + activityText = QString("%1 %2 ").arg(Varicode::rstrip(activityText)).arg(m_config.eot()); } } if(!activityText.isEmpty()){ @@ -9753,8 +9754,7 @@ void MainWindow::processRxActivity() { // if we're the last message, let's display our EOT character if (isLast) { - // can also use \u0004 \u2666 \u2404 - d.text = QString("%1 \u2301 ").arg(Varicode::rstrip(d.text)); + d.text = QString("%1 %2 ").arg(Varicode::rstrip(d.text).arg(m_config.eot())); } // log it to the display! @@ -10132,8 +10132,8 @@ void MainWindow::processCommandActivity() { QString text = textList.join(" "); bool isLast = (d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast; if (isLast) { - // can also use \u0004 \u2666 \u2404 - text = QString("%1 \u2301 ").arg(Varicode::rstrip(text)); + // append the eot character to the text + text = QString("%1 %2 ").arg(Varicode::rstrip(text)).arg(m_config.eot()); } // log the text to directed txt log @@ -11210,8 +11210,8 @@ void MainWindow::displayBandActivity() { } if ((item.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast) { - // can also use \u0004 \u2666 \u2404 - item.text = QString("%1 \u2301 ").arg(Varicode::rstrip(item.text)); + // append the eot character to the text + item.text = QString("%1 %2 ").arg(Varicode::rstrip(item.text)).arg(m_config.eot()); } text.append(item.text); snr = item.snr; @@ -11251,7 +11251,7 @@ void MainWindow::displayBandActivity() { int colWidth = ui->tableWidgetRXAll->columnWidth(3); auto textItem = new QTableWidgetItem(joined); auto html = QString("%1").arg(joined.toHtmlEscaped()); - html = html.replace("\u2301", "\u2301

"); + html = html.replace(m_config.eot(), m_config.eot() + "

"); html = html.replace(QRegularExpression("([<]br[/][>])+$"), ""); textItem->setToolTip(html);