📄 evachatwindow.cpp
字号:
}void EvaChatWindow::slotSend(){ if(!kteInput->isEnabled()) return; QString msg = kteInput->text(); EvaHtmlParser parser; parser.setAbsImagePath(images->getSmileyPath(), EvaMain::user->getSetting()->getPictureCacheDir()); sendtime = QDateTime::currentDateTime(Qt::LocalTime); QString toSend = msg; QString sendFileNameBase; int numFiles = parser.convertToPlainTxt(toSend, sendFileNameBase); if(toSend == ""){ KMessageBox::information(this, i18n("Cannot send empty message."), i18n("Message")); return; } if(strlen(toSend.ascii()) > QQ_MSG_IM_MAX){ KMessageBox::information(this, i18n("Message is too long, cannot send."), i18n("Message")); return; } pbSend->setEnabled(false); kteInput->setEnabled(false); QColor chatColor(buddy->getChatFontColor()); int chatSize = buddy->getChatFontSize(); if(numFiles){ QString strToShow = msg; parser.parseToAbsPath(strToShow, EvaMain::user->getSetting()->getPictureCacheDir()); chatDisplay->append( myName, sendtime, Qt::darkCyan, true, chatColor, (char)chatSize, tbU->isOn(), tbI->isOn(), tbB->isOn(), strToShow); showMessages(); m_NumImages = numFiles; //kteInput->setText(""); }else displaySendingMessage(); emit sendMessage(getBuddyQQ(), true, toSend, (char)chatSize, tbU->isOn(), tbI->isOn(), tbB->isOn(), (char)(chatColor.blue()) , (char)(chatColor.green()), (char)(chatColor.red())); if(numFiles){ QValueList<QString> nameList; QValueList<unsigned int> sizeList; unsigned int session = buddy->getNextSequence(); for(int i=0; i<numFiles; i++){ QString name = sendFileNameBase + QString::number(i) + ".jpg"; QString fullname = EvaMain::user->getSetting()->getPictureCacheDir() + "/" + name; QFileInfo info(fullname); nameList.append(fullname); sizeList.append(info.size()); } emit fileTransferSend(buddy->getQQ(), session, nameList, sizeList, QQ_TRANSFER_IMAGE); } //kteInput->setParagraphBackgroundColor(0, Qt::gray);}void EvaChatWindow::slotTbShowBuddyClick(){ emit requestBuddyQQShow(getBuddyQQ());}void EvaChatWindow::slotTbShowMeClick(){ emit requestMyQQShow();}void EvaChatWindow::slotInputKeyPress(QKeyEvent *e){ if(isSentByEnter && ((e->key() == Qt::Key_Enter) || (e->key() == Qt::Key_Return) ) && (e->state() == Qt::NoButton) ){ e->accept(); slotSend(); }else{ if( !(isSentByEnter) && ( (e->key() == Qt::Key_Enter) || (e->key() == Qt::Key_Return) ) && ( (e->state() & Qt::ControlButton)==Qt::ControlButton) ){ e->accept(); slotSend(); } }}void EvaChatWindow::slotFontChanged(QColor color, int size){// int fontSize = size;// int fontColor = color; buddy->setChatFontSize(size); buddy->setChatFontColor(color.rgb()); EvaMain::user->saveGroupedBuddyList();}void EvaChatWindow::setEnterSend(){ isSentByEnter = true; sendKey->setItemChecked(1,true); sendKey->setItemChecked(2,false); kteInput->setEnterSendEnabled(isSentByEnter);}void EvaChatWindow::setCtrlEnterSend(){ isSentByEnter = false; sendKey->setItemChecked(1,false); sendKey->setItemChecked(2,true); kteInput->setEnterSendEnabled(isSentByEnter);}void EvaChatWindow::slotPbCloseClick(){ close();}void EvaChatWindow::openSendFileDialog(){ slotFileClick();}void EvaChatWindow::slotFileClick( ){ if(!kteInput->isEnabled()) return; QString destDir = QDir::homeDirPath(); QString fullname = KFileDialog::getOpenFileName(destDir, "* *.png |" + i18n(" all files (*)"), this, i18n("select a file")); QString name = fullname.right(fullname.length() - fullname.findRev("/") -1); QFileInfo info(fullname); if(!fullname.isEmpty()){ unsigned int session = buddy->getNextSequence(); printf("EvaChatWindow::slotFileClick -- next seq: %d\n", session); chatDisplay->showFileNotification(codec->toUnicode(buddy->getNick().c_str()), name, info.size(), session, true); if(!addToFileList(session, name)) return ; // we've already got this request m_FileNoList[session] = session; QValueList<QString> nameList; nameList.append(fullname); QValueList<unsigned int> sizeList; sizeList.append(info.size()); emit fileTransferSend(buddy->getQQ(), session, nameList, sizeList, QQ_TRANSFER_FILE); }}void EvaChatWindow::slotReceivedFileRequest( const unsigned int session, const QString & file, const int size, const unsigned char transferType ){ if(transferType == QQ_TRANSFER_IMAGE){ switch(EvaMain::user->getStatus()){ case EvaUser::Eva_Online: case EvaUser::Eva_Leave: m_NumImages++; emit fileTransferAccept(buddy->getQQ(), session, "", QQ_TRANSFER_IMAGE); break; case EvaUser::Eva_Offline: // impossible case EvaUser::Eva_Invisible: printf("EvaChatWindow::slotReceivedFileRequest --id:%d, seq: %d\n", buddy->getQQ(), buddy->getSequence()); if(buddy->getSequence()){ m_NumImages++; printf("now I accepted\n"); emit fileTransferAccept(buddy->getQQ(), session, "", QQ_TRANSFER_IMAGE); } break; default: emit fileTransferCancel(buddy->getQQ(), session); } return; } if(!addToFileList(session, file)) return ; // we've already got this request m_FileNoList[session] = session; if(transferType == QQ_TRANSFER_FILE) chatDisplay->showFileNotification(codec->toUnicode(buddy->getNick().c_str()), file, size, session, false);}void EvaChatWindow::slotFileTransferAcceptClicked( const unsigned int showSession){ QString msg = i18n("You have accepted transfering \"%1\", network connecting start, please wait...").arg(getFileName(getSession(showSession))); chatDisplay->showInfomation(msg); emit fileTransferAccept(buddy->getQQ(), getSession(showSession), "", QQ_TRANSFER_FILE);}void EvaChatWindow::slotFileTransferSaveAsClicked( const unsigned int showSession ){ unsigned int session = getSession(showSession); QString name = getFileName(session); QString destDir = QDir::homeDirPath() + "/" + name; QString fullname = KFileDialog::getSaveFileName(destDir, "* |" + i18n(" all files (*)"), this, i18n("Save As")); QString dir = fullname.left(fullname.findRev("/")); //QFileInfo info(fullname); if(!dir.isEmpty()){ QString msg = i18n("You have accepted transfering \"%1\", network connecting start, please wait...").arg(getFileName(getSession(showSession))); chatDisplay->showInfomation(msg); emit fileTransferAccept(buddy->getQQ(), session, dir, QQ_TRANSFER_FILE); }}void EvaChatWindow::slotFileTransferCancelClicked( const unsigned int showSession){ printf("EvaChatWindow::slotFileTransferCancelClicked -- \n"); QString msg = i18n("You have cancelled transfering \"%1\".").arg(getFileName(getSession(showSession))); chatDisplay->showInfomation(msg); emit fileTransferCancel(buddy->getQQ(), getSession(showSession)); removeFromFileList(getSession(showSession)); m_FilePanel->closeTab( getSession( showSession));}void EvaChatWindow::slotReceivedFileAccepted(const unsigned int session, const bool isAccepted, const unsigned char transferType ){ QString filename = getFileName(session); if(filename.isEmpty()) return; // we haven't got the request if(!isAccepted) removeFromFileList(session); if(isAccepted && transferType == QQ_TRANSFER_IMAGE) return; QString name = codec->toUnicode(buddy->getNick().c_str()); QString action = isAccepted?i18n("accepted"):i18n("stoped"); QString msg = i18n("%1 has %2 transfering \"%3\".").arg(name).arg(action).arg(filename); chatDisplay->showInfomation(msg);}QString EvaChatWindow::getFileName( const unsigned int session ){ QMap<unsigned int, QString>::Iterator iter = m_FileList.find(session); if(iter == m_FileList.end()) return ""; return iter.data();}const bool EvaChatWindow::addToFileList( const unsigned int session, const QString filename ){ QString file = getFileName(session); if(!file.isEmpty()) return false; // if exists return false; m_FileList[session] = filename; return true;}const unsigned int EvaChatWindow::getSession(const unsigned int showSession){ QMap<unsigned int, unsigned int>::Iterator iter; for(iter = m_FileNoList.begin(); iter!=m_FileNoList.end(); ++iter){ if(iter.data() == showSession ) return iter.key(); } return 0;}void EvaChatWindow::removeFromFileList( const unsigned int session ){ m_FileList.remove(session); m_FileNoList.remove(session);}void EvaChatWindow::slotSessionChangedTo( const unsigned int oldSession, const unsigned int newSession ){ QString file = getFileName(oldSession); if(file.isEmpty()) return; // if not existed, return removeFromFileList(oldSession); addToFileList(newSession, file); m_FileNoList[newSession] = oldSession;}void EvaChatWindow::slotFileNotifyNormalInfo( const unsigned int session, EvaFileStatus status, const QString dir, const QString filename, const unsigned int /*size */, const unsigned char transferType){ switch(status){ case ESNone: break; case ESError:{ QString msg = i18n("network lost connection or your friend has stoped transfering \"%1\".").arg(filename); switch(transferType){ case QQ_TRANSFER_FILE:{ if(getFileName(session).isEmpty()) break; chatDisplay->showInfomation(msg); removeFromFileList(session); emit fileTransferCancel(buddy->getQQ(), session); } break; case QQ_TRANSFER_IMAGE:{ m_NumImages--; QString num = filename.mid(filename.length() - 5, 1); bool ok; unsigned int n = num.toUInt(&ok); if(!ok) break; QString file = getFileName(session * 100 + n); if(file.isEmpty()) break; chatDisplay->showInfomation(msg); emit fileTransferCancel(buddy->getQQ(), session); } break; default: break; // impossible, compiler would like this } } m_FilePanel->closeTab( session); break; case ESResume: chatDisplay->askResumeMode(filename, session); break; case ESSendFinished:{ QString msg = i18n("sending \"%1\" finished.").arg(filename); switch(transferType){ case QQ_TRANSFER_FILE: chatDisplay->showInfomation(msg); removeFromFileList(session); break; case QQ_TRANSFER_IMAGE:{ m_NumImages--; } break; default: removeFromFileList(session); } } break; case ESReceiveFinished:{ QString fullname = dir + "/" + filename; QString msg = ""; switch(transferType){ case QQ_TRANSFER_FILE:{ removeFromFileList(session); QString fileLink = "<a href = \"file://" + fullname + "\">" + fullname + "</a>"; msg = i18n("receiving file \"%1\" has been finished and saved in %2").arg(filename).arg(fileLink); } break; case QQ_TRANSFER_IMAGE:{ m_NumImages--; chatDisplay->updatePicture(fullname, "/t_" + filename); return; } break; // make compiler happy default: return; } chatDisplay->showInfomation(msg); removeFromFileList(session); } break; default: break; }}void EvaChatWindow::slotFileTransferResume( const unsigned int session, const bool isResume){ emit fileTransferResume(buddy->getQQ(), session, isResume);}void EvaChatWindow::slotFileStatusNotification( const unsigned int session, const KURL & url, const unsigned int size, const unsigned int bytes, const unsigned int time ){ if(!m_ShowFrame->isVisible()) slotHideShowsClick(); m_FilePanel->updateStatus(session, url, size, bytes, time);}void EvaChatWindow::slotFilePanelCloseClicked( const unsigned int session){ printf("EvaChatWindow::slotFilePanelCloseClicked\n"); removeFromFileList(session); emit fileTransferCancel(buddy->getQQ(), session);}void EvaChatWindow::closeEvent( QCloseEvent * e ){ if(m_FileList.size() && m_NumImages && KMessageBox::questionYesNo(this, i18n("File transfer is still in process( %1 file(s) left ). Closing this window" " will also stop those transfer processes." "Do you want to close this window?").arg(m_FileList.size()), i18n("Close Window?")) == KMessageBox::No){ e->ignore(); } else{ QMap<unsigned int, QString>::Iterator iter; for(iter = m_FileList.begin(); iter!=m_FileList.end(); ++iter){ emit fileTransferCancel(buddy->getQQ(), iter.key()); } e->accept(); }}void EvaChatWindow::slotAddImageClick( ){ if(!kteInput->isEnabled()) return; QString destDir = QDir::homeDirPath(); QString srcFullName = KFileDialog::getOpenFileName(destDir, "*.png *.bmp *.jpg *.jpeg *.gif |" + i18n(" all images (*.png *.bmp *.jpg *.jpeg *.gif)"), this, i18n("select an image file")); if(!srcFullName.isEmpty()){// if(!m_NumImages){// m_ImageFileName = QUuid::createUuid().toString().upper();// } //QString destFile = m_ImageFileName + QString::number(m_NumImages) + ".jpg"; QString destFile = QUuid::createUuid().toString().upper() + ".jpg"; QString destFullName = EvaMain::user->getSetting()->getPictureCacheDir() + "/" + destFile ; QPixmap pix(srcFullName); pix.save(destFullName, "JPEG", 100); slotAddImageToInputEdit(destFile); //m_NumImages++; }}void EvaChatWindow::slotAddImageToInputEdit( const QString & destFile){ if(!kteInput->isEnabled()) return; if(destFile.isEmpty()) return; QString smiley = "<img src=\"" + destFile + "\">"; int para; int index; QFont saveFont = kteInput->font(); QColor saveColor = kteInput->color(); // determine the current position of the cursor kteInput->insert("\255", false, true, true); kteInput->getCursorPosition(¶,&index); QString txt = kteInput->text(); txt.replace(QRegExp("\255"),smiley); kteInput->setText(txt); kteInput->setCursorPosition(para, index); kteInput->setCurrentFont(saveFont); kteInput->setColor(saveColor);}void EvaChatWindow::slotScreenShotClick( ){ if(!kteInput->isEnabled()) return; if(grabber) delete grabber; grabber = new RegionGrabber(); connect( grabber, SIGNAL( regionGrabbed( const QPixmap & ) ), SLOT( slotRegionGrabbed( const QPixmap & ) ) );}void EvaChatWindow::slotRegionGrabbed( const QPixmap & pix ){ if ( !pix.isNull() ){// if(!m_NumImages){// m_ImageFileName = QUuid::createUuid().toString().upper();// } //QString destFile = m_ImageFileName + QString::number(m_NumImages) + ".jpg"; QString destFile = QUuid::createUuid().toString().upper() + ".jpg"; QString destFullName = EvaMain::user->getSetting()->getPictureCacheDir() + "/" + destFile ; pix.save(destFullName, "JPEG", 100); slotAddImageToInputEdit(destFile); //m_NumImages++; } if(grabber) delete grabber; grabber = NULL; QApplication::restoreOverrideCursor();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -