diff --git a/AGWCode.cpp b/AGWCode.cpp index 10bed29..9539b07 100644 --- a/AGWCode.cpp +++ b/AGWCode.cpp @@ -22,6 +22,8 @@ extern QColor outputText; extern QColor EchoText; extern QColor WarningText; +extern QColor newTabText; + extern QTabWidget *tabWidget; extern QWidget * mythis; @@ -1039,7 +1041,9 @@ void on_AGW_C_frame(AGWUser * AGW, struct AGWHeader * Frame, byte * Msg) else if (TermMode == Tabbed) { tabWidget->setTabText(i, CallFrom); + tabWidget->tabBar()->setTabTextColor(i, newTabText); } + else if (TermMode == Single) mythis->setWindowTitle(Title); diff --git a/QtTermTCP.cpp b/QtTermTCP.cpp index a9aebbd..b029b7e 100644 --- a/QtTermTCP.cpp +++ b/QtTermTCP.cpp @@ -1,6 +1,6 @@ // Qt Version of BPQTermTCP -#define VersionString "0.0.0.63" +#define VersionString "0.0.0.66" // .12 Save font weight // .13 Display incomplete lines (ie without CR) @@ -69,7 +69,9 @@ // .61 Add VARA Init Script Feb 2023 // .62 Fix running AGW in single session mode Feb 2023 // .63 Fix handling split monitor frame (no fe in buffer) Apr 2023 - +// .64 Add Clear Screen command to context menu Apr 2023 +// .65 Fixes for 63 port version of BPQ May 2023 +// .66 Colour Tab of incoming calls June 2023 #define _CRT_SECURE_NO_WARNINGS @@ -150,6 +152,9 @@ QColor WarningText = qRgb(255, 0, 0); QColor inputBackground = qRgb(255, 255, 0); QColor inputText = qRgb(0, 0, 255); +QColor newTabText = qRgb(255, 0, 0); // Red +QColor oldTabText = qRgb(0, 0, 0); // Black + // There is something odd about this. It doesn't match BPQTERMTCP though it looks the same @@ -373,7 +378,7 @@ QAction *MonSup; QAction *MonNodes; QAction *MonUI; QAction *MonColour; -QAction *MonPort[33]; +QAction *MonPort[65]; QAction *actChatMode; QAction *actAutoTeletext; QAction *actBells; @@ -971,6 +976,17 @@ Ui_ListenSession * newWindow(QObject * parent, int Type, const char * Label) } + if (Type == Mon) + { + // Monitor Only + + Sess->monWindow->setContextMenuPolicy(Qt::CustomContextMenu); + + mythis->connect(Sess->monWindow, SIGNAL(customContextMenuRequested(const QPoint&)), + parent, SLOT(showContextMenuMOnly(const QPoint &))); + + } + if (Type == (Term | Mon)) { // Combined Term and Mon. Add Custom Menu to set Mon/Term Split with Right Click @@ -1611,6 +1627,15 @@ void QtTermTCP::setSplit() eventFilter(Parent, &event); } + +void QtTermTCP::ClearScreen() +{ + QAction * sender = static_cast(QObject::sender()); + QTextEdit * window = static_cast(sender->parentWidget()); + window->clear(); +} + + void QtTermTCP::showContextMenuMT(const QPoint &pt) // Term Window { // Monitor and Terminal (Term Half) @@ -1624,14 +1649,37 @@ void QtTermTCP::showContextMenuMT(const QPoint &pt) // Term Window QAction * actSplit = new QAction("Set Monitor/Output Split", sender); QAction * actVDMode = new QAction("Toggle Viewdata Mode", sender); + QAction * actClear = new QAction("Clear Screen Buffer", sender); menu->addAction(actSplit); menu->addAction(actVDMode); + menu->addAction(actClear); splitY = pt.y() + termX; connect(actSplit, SIGNAL(triggered()), this, SLOT(setSplit())); connect(actVDMode, SIGNAL(triggered()), this, SLOT(setVDMode())); + connect(actClear, SIGNAL(triggered()), this, SLOT(ClearScreen())); + + menu->exec(sender->mapToGlobal(pt)); + delete menu; +} + +void QtTermTCP::showContextMenuMOnly(const QPoint &pt) +{ + // Monitor only + + QTextEdit* sender = static_cast(QObject::sender()); + + QMenu *menu = sender->createStandardContextMenu(); + + QString style = "QMenu {border-radius:15px; background-color: white;margin: 2px; border: 1px solid rgb(58, 80, 116); color: rgb(58, 80, 116);}QMenu::separator {height: 2px;background: rgb(58, 80, 116);margin-left: 10px;margin-right: 5px;}"; + menu->setStyleSheet(style); + + QAction * actClear = new QAction("Clear Screen Buffer", sender); + + menu->addAction(actClear); + connect(actClear, SIGNAL(triggered()), this, SLOT(ClearScreen())); menu->exec(sender->mapToGlobal(pt)); delete menu; @@ -1651,10 +1699,14 @@ void QtTermTCP::showContextMenuT(const QPoint &pt) // Term Window QAction * actVDMode = new QAction("Toggle Viewdata Mode", sender); + QAction * actClear = new QAction("Clear Screen Buffer", sender); menu->addAction(actVDMode); + menu->addAction(actClear); connect(actVDMode, SIGNAL(triggered()), this, SLOT(setVDMode())); + connect(actClear, SIGNAL(triggered()), this, SLOT(ClearScreen())); + menu->exec(sender->mapToGlobal(pt)); delete menu; } @@ -1694,12 +1746,15 @@ void QtTermTCP::showContextMenuM(const QPoint &pt) // Mon Window menu->setStyleSheet(style); QAction * actSplit = new QAction("Set Monitor/Output Split", sender); + QAction * actClear = new QAction("Clear Screen Buffer", sender); menu->addAction(actSplit); + menu->addAction(actClear); splitY = pt.y(); connect(actSplit, SIGNAL(triggered()), this, SLOT(setSplit())); + connect(actClear, SIGNAL(triggered()), this, SLOT(ClearScreen())); menu->exec(sender->mapToGlobal(pt)); delete menu; @@ -1778,6 +1833,8 @@ void QtTermTCP::tabSelected(int Current) ActiveSession = Sess; + tabWidget->tabBar()->setTabTextColor(tabWidget->currentIndex(), oldTabText); + if (Sess->clientSocket || Sess->AGWSession || Sess->KISSSession || Sess->KISSMode) { connectMenu->setEnabled(false); @@ -2220,15 +2277,14 @@ void QtTermTCP::menuChecked() else { // look for port entry - - for (int i = 0; i < MAXPORTS; i++) + for (int i = 0; i < MAXPORTS + 1; i++) { if (Act == MonPort[i]) { unsigned long long mmask; - if (i == 0) // BBS Mon - use bit 32 - mmask = 1ll << 32; + if (i == 0) // BBS Mon - use bit 63 (Port 64) + mmask = 1ll << 63; else mmask = 1ll << (i - 1); @@ -2647,6 +2703,19 @@ extern "C" void WritetoOutputWindowEx(Ui_ListenSession * Sess, unsigned char * B myBeep(); } + // if tabbed and not active tab set tab label red + + if (TermMode == Tabbed) + { + if (Sess->monWindow != termWindow) // Not if Monitor + { + if (ActiveSession != Sess) + { + tabWidget->tabBar()->setTabTextColor(Sess->Tab, newTabText); + } + } + } + LastWrite = NOW; // Mustn't mess with original buffer @@ -3992,7 +4061,9 @@ void QtTermTCP::onNewConnection() else if (TermMode == Tabbed) { tabWidget->setTabText(i, datas.data()); + tabWidget->tabBar()->setTabTextColor(i, newTabText); } + else if (TermMode == Single) this->setWindowTitle(Title); @@ -4861,7 +4932,10 @@ void QtTermTCP::VARAreadyRead() if (TermMode == MDI) Sess->setWindowTitle(Title); else if (TermMode == Tabbed) + { tabWidget->setTabText(Sess->Tab, CallFrom); + tabWidget->tabBar()->setTabTextColor(Sess->Tab, newTabText); + } else if (TermMode == Single) mythis->setWindowTitle(Title); @@ -6139,6 +6213,7 @@ extern "C" Ui_ListenSession * ax25IncommingConnect(TAX25Port * AX25Sess) else if (TermMode == Tabbed) { tabWidget->setTabText(i, AX25Sess->corrcall); + tabWidget->tabBar()->setTabTextColor(i, newTabText); } else if (TermMode == Single) mythis->setWindowTitle(Title); @@ -6517,7 +6592,7 @@ void DecodeTeleText(Ui_ListenSession * Sess, char * page) // interpret data, for now, line by line - while (c = *(ptr++)) + while ((c = *(ptr++))) { char ch = c; diff --git a/QtTermTCP.h b/QtTermTCP.h index 0ec6b4d..89e1524 100644 --- a/QtTermTCP.h +++ b/QtTermTCP.h @@ -30,7 +30,7 @@ #include #define MAXHOSTS 16 -#define MAXPORTS 32 +#define MAXPORTS 64 QT_BEGIN_NAMESPACE class QComboBox; @@ -161,8 +161,10 @@ private slots: void onTEselectionChanged(); void onLEselectionChanged(); void setSplit(); + void ClearScreen(); void setVDMode(); void showContextMenuMT(const QPoint & pt); + void showContextMenuMOnly(const QPoint & pt); void onNewConnection(); void onSocketStateChanged(QAbstractSocket::SocketState socketState); void updateWindowMenu(); diff --git a/QtTermTCP.ini b/QtTermTCP.ini index b6675f7..9d58bbb 100644 --- a/QtTermTCP.ini +++ b/QtTermTCP.ini @@ -1,12 +1,12 @@ [General] -HostParams0=192.168.1.44|8011|g8bpq|password|5 1 1 0 1 0 0 1\r|Pogo4 -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xfc\0\0\0\x33\0\0\x4\b\0\0\x2\xea\0\0\0\xfc\0\0\0\x33\0\0\x4\b\0\0\x2\xea\0\0\0\0\0\0\0\0\x5\0\0\0\0\xfc\0\0\0\x33\0\0\x4\b\0\0\x2\xea) +HostParams0=nottm.g8bpq.net|8011|gm8bpq|password|5 1 1 0 1 0 0 1\r|Pogo4 +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xea\0\0\0\xaf\0\0\x3\xf6\0\0\x3h\0\0\0\xea\0\0\0\xaf\0\0\x3\xf6\0\0\x3h\0\0\0\0\0\0\0\0\a\x80\0\0\0\xea\0\0\0\xaf\0\0\x3\xf6\0\0\x3h) HostParams1=192.168.1.63|8011|john|password||Pogo2 -windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\r\0\0\x2\x8a\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x3\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) -HostParams2=127.0.0.1|8011|john|password|1 1 1 0 1 0 0 1\r| -HostParams3=|0|||| -HostParams4=|0|||| -HostParams5=|0|||| +windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\r\0\0\x2\x8c\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x3\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +HostParams2=127.0.0.1|8011|gm8bpq|password|c000000100000000 1 1 0 1 0 0 1\r| +HostParams3=192.168.1.131|8011|john|password|1 1 1 0 1 0 0 1\r|Slack +HostParams4=127.0.0.1|8021|john|password|c000000100000006 1 1 0 1 0 0 1\r|LinBPQ +HostParams5=192.168.1.18|8011|john|password|c00000010000002e 1 1 0 1 0 0 1\r| HostParams6=|0|||| HostParams7=|0|||| HostParams8=|0|||| @@ -27,8 +27,8 @@ ConnectBeep=1 CurrentHost=0 YAPPPath= listenPort=8015 -listenEnable=0 -listenCText= +listenEnable=1 +listenCText=[PMS-2.3-C]\rHello>\r convUTF8=0 PTT=None PTTBAUD=0 @@ -43,16 +43,16 @@ HamLibPort=4532 HamLibHost=127.0.0.1 FLRigPort=12345 FLRigHost=127.0.0.1 -AGWEnable=1 +AGWEnable=0 AGWMonEnable=1 -AGWTermCall=GM8BPQ +AGWTermCall=G8BPQ AGWBeaconDest= AGWBeaconPath= AGWBeaconInterval=0 AGWBeaconPorts= AGWBeaconText= AGWHost=127.0.0.1 -AGWPort=8888 +AGWPort=8001 AGWPaclen=80 AGWToCalls=G8BPQ-2, SWITCH, KISSEnable=0 diff --git a/QtTermTCP.pro.bak b/QtTermTCP.pro.bak deleted file mode 100644 index d07cc3d..0000000 --- a/QtTermTCP.pro.bak +++ /dev/null @@ -1,38 +0,0 @@ - -QT += core gui -QT += network -QT += widgets - - -TARGET = QtTermTCP -TEMPLATE = app - -# The following define makes your compiler emit warnings if you use -# any feature of Qt which as been marked as deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. - -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if you use deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050000 # disables all the APIs deprecated before Qt 6.0.0 - - -SOURCES += main.cpp\ - QtTermTCP.cpp\ - TermTCPCommon.cpp\ - TabDialog.cpp - -HEADERS += QtTermTCP.h\ - TabDialog.h - -FORMS += QtTermTCP.ui\ - ListenPort.ui - -RESOURCES += QtTermTCP.qrc - -RC_ICONS = QtTermTCP.ico - -QMAKE_LFLAGS += -no-pie diff --git a/debug/moc_predefs.h b/debug/moc_predefs.h deleted file mode 100644 index 8247e15..0000000 --- a/debug/moc_predefs.h +++ /dev/null @@ -1,12 +0,0 @@ -#define _MSC_EXTENSIONS -#define _INTEGRAL_MAX_BITS 64 -#define _MSC_VER 1916 -#define _MSC_FULL_VER 191627043 -#define _MSC_BUILD 0 -#define _WIN32 -#define _M_IX86 600 -#define _M_IX86_FP 2 -#define _CPPRTTI -#define _DEBUG -#define _MT -#define _DLL diff --git a/release/moc_predefs.h b/release/moc_predefs.h deleted file mode 100644 index 4c9c0c7..0000000 --- a/release/moc_predefs.h +++ /dev/null @@ -1,11 +0,0 @@ -#define _MSC_EXTENSIONS -#define _INTEGRAL_MAX_BITS 64 -#define _MSC_VER 1916 -#define _MSC_FULL_VER 191627043 -#define _MSC_BUILD 0 -#define _WIN32 -#define _M_IX86 600 -#define _M_IX86_FP 2 -#define _CPPRTTI -#define _MT -#define _DLL