lanpaper/LanPaper.cpp

149 lines
3.8 KiB
C++
Raw Normal View History

#include "LanPaper.h"
LanPaper::LanPaper(QWidget *parent) :
QMainWindow(parent),server(new Server(this))
{
setupUi(this);
this->server->listen(QHostAddress(Config::getSrcIP()),QString(Config::getSrcPort()).toInt() );
//install message key filter
this->pTEMessage->installEventFilter(this);
this->installEventFilter(this);
this->trayIco=new TrayIco(this);
connect(this->actionAbout,SIGNAL(triggered()),this,SLOT(aboutClick()) );
QScrollBar* scrollBar=this->pTEChatText->verticalScrollBar();
scrollBar->setTracking(true);
}
void LanPaper::addChatContentToThereSide(const QString& content)
{
QTime time=QTime::currentTime();
QString displayTime=QString("%1:%2:%3").arg(time.hour()).arg(time.minute()).arg(time.second());
this->pTEChatText->appendPlainText(displayTime+":There");
this->pTEChatText->appendPlainText(content);
this->pTEChatText->appendPlainText(" ");
if(this->isHidden()||this->isMinimized()||!this->isWindowsActivated())
{
this->trayIco->setFlash(true);
}
this->scrollToBottom();
}
QString LanPaper::getMessage()
{
return this->pTEMessage->toPlainText();
}
void LanPaper::on_pBTSendMessage_clicked()
{
QString text=this->pTEMessage->toPlainText();
if(text.trimmed()=="")
{
QMessageBox::information(this,"warning","no empty message allowed.");
return;
}
this->addChatContentToMeSide(text);
this->client=new Client(this);
connect(this->client,SIGNAL(connectionSuccess(bool)),this,SLOT(clientSuccess(bool)) );
this->client->sendMessage(text);
this->pBTSendMessage->setEnabled(false);
}
void LanPaper::addChatContentToMeSide(const QString& content)
{
QTime time=QTime::currentTime();
QString displayTime=QString("%1:%2:%3").arg(time.hour()).arg(time.minute()).arg(time.second());
this->pTEChatText->appendPlainText(" Me:"+displayTime);
this->pTEChatText->appendPlainText(" "+content);
this->pTEChatText->appendPlainText(" ");
this->scrollToBottom();
}
bool LanPaper::eventFilter(QObject *obj, QEvent *event)
{
if(obj==this->pTEMessage)
{
if(event->type()==QEvent::KeyPress)
{
QKeyEvent* keyEvent=(QKeyEvent*)event;
if(keyEvent->key()==Qt::Key_Return||keyEvent->key()==Qt::Key_Enter)
{
this->on_pBTSendMessage_clicked();
event->accept();
return true;
}
}
}
if(obj==this)
{
if(event->type()==QEvent::WindowActivate)
{
this->trayIco->setFlash(false);
}
}
return false;
}
void LanPaper::changeEvent(QEvent *e)
{
if((e->type()==QEvent::WindowStateChange)&&this->isMinimized())
{
this->hide();
}
}
void LanPaper::aboutClick()
{
QString srcIP=Config::getSrcIP();
QString srcPort=Config::getSrcPort();
QString desIP=Config::getDesIP();
QString desPort=Config::getDesPort();
QString info;
info=QString("src %1:%2\n des %3:%4").arg(srcIP).arg(srcPort).arg(desIP).arg(desPort);
QMessageBox::about(this,"about",info);
}
void LanPaper::clientSuccess(bool success)
{
if(success)
{
this->pTEMessage->setPlainText("");
}
else
{
QMessageBox::warning(this,"warning","message send failed.");
}
this->pBTSendMessage->setEnabled(true);
this->pTEMessage->setFocus();
this->client->deleteLater();
}
bool LanPaper::isWindowsActivated()
{
if(this->isActiveWindow())
{
return true;
}
if(this->pTEChatText->isActiveWindow())
{
return true;
}
if(this->pTEChatText->isActiveWindow())
{
return true;
}
return false;
}
void LanPaper::scrollToBottom()
{
QScrollBar* scrollBar=this->pTEChatText->verticalScrollBar();
scrollBar->setValue(scrollBar->maximum());
}