⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evachatwindow.cpp

📁 linux下的eva源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}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(&para,&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 + -