Files
gcs-nf/App/ToolsUI/tools_Index3/tools_Index3.cpp
T
2021-05-22 14:34:09 +08:00

422 lines
8.9 KiB
C++

#include "tools_Index3.h"
#include "ui_tools_Index3.h"
QString STR2HTML(QByteArray &str)
{
QString msg;
msg.append(str);
msg.replace("&","&");
msg.replace(">",">");
msg.replace("<","&lt;");
msg.replace("\"","&quot;");
msg.replace("\'","&#39;");
msg.replace(" ","&nbsp;");
//msg.replace("\n","<br />");
msg.replace("\t","&nbsp;&nbsp;&nbsp;&nbsp;");
return msg;
}
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QString msgstr;
switch (type) {
case QtDebugMsg:
msgstr = QString::asprintf(">> Debug: %s \r\n", qPrintable(msg));
break;
case QtInfoMsg:
msgstr = QString::asprintf(">> Info: %s \r\n", qPrintable(msg));
break;
case QtWarningMsg:
msgstr = QString::asprintf(">> Warning: %s \r\n", qPrintable(msg));
break;
case QtCriticalMsg:
msgstr = QString::asprintf(">> Critical: %s \r\n", qPrintable(msg));
break;
case QtFatalMsg:
msgstr = QString::asprintf(">> Fatal: %s \r\n", qPrintable(msg));
break;
}
}
Tools_Index3::Tools_Index3(QWidget *parent) :
ToolsWidget(parent),
ui(new Ui::Tools_Index3)
{
ui->setupUi(this);
/*
//load qss
QFile file(":/qss/Setting.qss");
file.open(QFile::ReadOnly);
QTextStream filetext(&file);
QString stylesheet = filetext.readAll();
this->setStyleSheet(stylesheet);
file.close();
*/
timer = new QTimer();
timer->setInterval(1000);
connect(timer,&QTimer::timeout,
this,&Tools_Index3::timerout);
//log_te = ui->plainTextEdit;
//qInstallMessageHandler(myMessageOutput);
ui->comboBox_EndType->addItem("CRLF","\r\n");
ui->comboBox_EndType->addItem("LF","\n");
ui->comboBox_EndType->addItem("CR","\r");
ui->comboBox_EndType->setCurrentIndex(1);
int w = 150;
int h = 50;
ui->pushButton_clear->setFixedSize(w,h);
ui->pushButton_ClearWindow->setFixedSize(w,h);
ui->pushButton_Save->setFixedSize(w,h);
ui->pushButton_send->setFixedSize(w,h);
ui->comboBox_EndType->setFixedSize(w,h);
ui->lineEdit->setFixedHeight(h);
}
Tools_Index3::~Tools_Index3()
{
delete ui;
}
void Tools_Index3::resizeEvent(QResizeEvent *event)
{
//Q_UNUSED(event)
update();
}
void Tools_Index3::keyPressEvent(QKeyEvent *event) //键盘按下事件
{
switch(event->key())
{
case Qt::Key_Return:
{
QString msg;
msg = ui->lineEdit->text();
Transmit(msg);
}break;
case Qt::Key_Up:
{
if(History.size() > 0)
{
if(HistoryCount > 0)
{
HistoryCount --;
}
QString msg;
msg = History.at(HistoryCount);
ui->lineEdit->setText(msg);
}
}break;
case Qt::Key_Down:
{
if(History.size() > 0)
{
if(HistoryCount < History.size())
{
HistoryCount ++;
}
if(HistoryCount >= History.size())
{
QString msg = "";
ui->lineEdit->setText(msg);
return;
}
QString msg;
msg = History.at(HistoryCount);
ui->lineEdit->setText(msg);
}
}break;
}
}
void Tools_Index3::timerout()
{
if(msgdata.size() > 0)
{
ui->textBrowser->append(msgdata);
msgdata.clear();
timer->stop();
}
}
void Tools_Index3::wheelEvent(QWheelEvent *event) //键盘按下事件
{
/*
if(ui->lineEdit->)
{
if(event->angleDelta().y() > 0)
{
if(History.size() > 0)
{
if(HistoryCount > 0)
{
HistoryCount -= qAbs(event->angleDelta().y()/120);
}
QString msg;
msg = History.at(HistoryCount);
ui->lineEdit->setText(msg);
}
}
else if(event->angleDelta().y() < 0)
{
if(History.size() > 0)
{
if(HistoryCount < History.size())
{
HistoryCount += qAbs(event->angleDelta().y()/120);
}
if(HistoryCount >= History.size())
{
QString msg = "";
ui->lineEdit->setText(msg);
return;
}
QString msg;
msg = History.at(HistoryCount);
ui->lineEdit->setText(msg);
}
}
}
*/
}
void Tools_Index3::Recieve(QString msg)
{
msgdata.append(msg);
while (!msgdata.isEmpty()) {
if(!msgdata.contains("\n"))
{
return;
}
bool newline = false;
int idx = msgdata.indexOf('\n');
if (idx == -1) {
// Read the whole incoming buffer
idx = msgdata.size();
} else {
newline = true;
}
QByteArray fragment = msgdata.mid(0, idx);
msgdata.remove(0, idx + (newline ? 1 : 0));
QByteArray str;
if((QDateTime::currentMSecsSinceEpoch() - last) > 5000)
{
str.clear();
QString time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz");
str.append("<font color=\"#B452CD\">");
str.append(time);
str.append("</font>");
str.append("<font color=\"#00FF00\"> &lt;&lt; </font>");
ui->textBrowser->append(str);
str.clear();
}
last = QDateTime::currentMSecsSinceEpoch();
str.append("<font color=\"#00FFFF\">");
str.append(STR2HTML(fragment));
//str.append(fragment);
str.append("</font>");
/*
str.append(fragment);
*/
bool flag = false;
QScrollBar *bar = ui->textBrowser->verticalScrollBar();
if(bar)
{
if(!bar->isHidden())
{
if(bar->value() >= (bar->maximum() - 10))
{
flag = true;
}
else
{
flag = false;
}
}
else
{
flag = false;
}
}
ui->textBrowser->append(str);
if(flag)
{
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser->setTextCursor(cursor);
}
}
}
void Tools_Index3::Transmit(QString msg)
{
if(ui->lineEdit->text().isEmpty())
{
return;
}
History.append(msg);
HistoryCount = History.size();
msg.append(EndChar);
//清除时间间隔,保证每次发送出去返回肯定带时间
last = 0;
QString time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz");
QString str;
str.append("<font color=\"#B452CD\">");
str.append(time);
str.append("</font>");
str.append("<font color=\"#FF0000\"> >> </font>");
//ui->textBrowser->append(str);
//str.clear();
str.append("<font color=\"#FFFF00\">");
str.append(msg);
str.append("</font>");
ui->textBrowser->append(str);
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser->setTextCursor(cursor);
ui->lineEdit->clear();
emit Terminal_Transmit(msg);
/*
QString s;
s.append("nihhh\tok\t\t\tuu\tooo\r\n");
s.append("nihhh\tok\tuu\tooo\n");
s.append("nihhh\tok\tuu\tooo\n");
s.append("nihhh ok uu ooo\n");
s.append("nihhh\tok\tuu\tooo");
s.append("nihhh\tok\tuu\tooo\n");
Recieve(s);
*/
}
void Tools_Index3::on_pushButton_clear_clicked()
{
ui->lineEdit->clear();
}
void Tools_Index3::on_pushButton_send_clicked()
{
QString msg;
msg = ui->lineEdit->text();
Transmit(msg);
}
void Tools_Index3::on_comboBox_EndType_currentIndexChanged(int index)
{
EndChar.clear();
EndChar.append(ui->comboBox_EndType->currentData().toString());
}
void Tools_Index3::on_pushButton_ClearWindow_clicked()
{
ui->textBrowser->clear();
}
void Tools_Index3::on_pushButton_Save_clicked()
{
if(ui->textBrowser->toPlainText().size() > 0)
{
QFileDialog *dlg = new QFileDialog();
QString fileName = dlg->getSaveFileName(this, tr("Selete Path of File..."),
"./Tlog/",
tr("terminal file (*.terminal)"));
if(!fileName.isEmpty())
{
QFile *log_file = nullptr;
log_file = new QFile(fileName);
if(log_file->open(QIODevice::WriteOnly))
{
log_file->write(ui->textBrowser->toPlainText().toUtf8());
log_file->close();
}
}
}
else
{
//emit sho
}
}