示例#1
0
void ChatEdit::onTextChanged()
{
	if (!m_session)
		return;

	if (m_autoResize) {
		QFontMetrics fontHeight = fontMetrics();
		//const int docHeight = document()->size().toSize().height()*fontHeight.height() + int(document()->documentMargin()) * 3;
		const int docHeight = document()->size().toSize().height()+int(document()->documentMargin());
		//qDebug() << "New docHeight is: " << docHeight;
		if (docHeight != previousTextHeight) {
			previousTextHeight = docHeight;
			const int resHeight = qMin(window()->height() / 3, qMax(docHeight, fontHeight.height()));
			setMinimumHeight(resHeight);
			setMaximumHeight(resHeight);
		}
	}

	QString text = textEditToPlainText();
	if (text.trimmed().isEmpty()) {
		m_session.data()->setChatState(ChatUnit::ChatStateActive);
	} else {
		m_session.data()->setChatState(ChatUnit::ChatStateComposing);
	}
}
示例#2
0
文件: chatedit.cpp 项目: akahan/qutim
void ChatEdit::onTextChanged()
{
	if(!m_session)
		return;

	QString text = textEditToPlainText();
	if(!m_session || text.trimmed().isEmpty())
		m_session->setChatState(ChatStateActive);
	else
		m_session->setChatState(ChatStateComposing);
}
示例#3
0
文件: chatedit.cpp 项目: akahan/qutim
void ChatEdit::send()
{
	QString text = textEditToPlainText();
	QString trimmed = text.trimmed();
	if(!m_session || trimmed.isEmpty())
		return;
	
	ChatUnit *unit = m_session->getCurrentUnit();
	if (trimmed.startsWith(QLatin1Char('/')) && trimmed.size() > 1) {
		int index = trimmed.indexOf(QLatin1Char(' '));
		QStringRef cmd = trimmed.midRef(1, (index == -1 ? trimmed.size() : index) - 1);
		const QMetaObject *meta = unit->metaObject();
		for (int i = meta->propertyCount() - 1; i >= 0; --i) {
			QMetaProperty prop = meta->property(i);
			if (prop.isWritable() && QLatin1String(prop.name()) == cmd) {
				prop.write(unit, trimmed.mid(index + 1));
				clear();
				return;
			}
		}
		QByteArray signature = cmd.toString().toLatin1();
		int methodIndex = meta->indexOfMethod(signature + "(QString)");
		if (methodIndex != -1) {
			QMetaMethod method = meta->method(methodIndex);
			QString arg = trimmed.mid(index + 1);
			if (method.invoke(unit, Q_ARG(QString, arg))) {
				clear();
				return;
			}
		}
		methodIndex = meta->indexOfMethod(signature + "(QVariant)");
		if (methodIndex != -1) {
			QMetaMethod method = meta->method(methodIndex);
			QVariant arg = trimmed.mid(index + 1);
			if (method.invoke(unit, Q_ARG(QVariant, arg))) {
				clear();
				return;
			}
		}
		methodIndex = meta->indexOfMethod(signature + "()");
		if (methodIndex != -1) {
			QMetaMethod method = meta->method(methodIndex);
			if (method.invoke(unit)) {
				clear();
				return;
			}
		}
	}
	Message message(text);
	message.setIncoming(false);
	message.setChatUnit(unit);
	message.setTime(QDateTime::currentDateTime());

	qint64 result = m_session->appendMessage(message);
	if (MessageHandler::Error != -result)
		clear();
//	if (!unit->sendMessage(message)) {
//		NotificationRequest request(Notification::System);
//		request.setObject(this);
//		request.setText(tr("Unable to send message to %1").arg(unit->title()));
//		request.send();
//	}
//	else {
//		m_session->appendMessage(message);
//		clear();
//	}
}
示例#4
0
void ChatEdit::send()
{
	if (!isEnabled())
		return;

	ChatEditLocker locker(this);

	QString text = textEditToPlainText();
	QString trimmed = text.trimmed();
	if(!m_session || trimmed.isEmpty())
		return;

	ChatUnit *unit = m_session.data()->getCurrentUnit();
	if (trimmed.startsWith(QLatin1Char('/')) && trimmed.size() > 1) {
		int index = trimmed.indexOf(QLatin1Char(' '));
		QStringRef cmd = trimmed.midRef(1, (index == -1 ? trimmed.size() : index) - 1);
		const QMetaObject *meta = unit->metaObject();
		for (int i = meta->propertyCount() - 1; i >= 0; --i) {
			QMetaProperty prop = meta->property(i);
			if (prop.isWritable() && QLatin1String(prop.name()) == cmd) {
				prop.write(unit, trimmed.mid(index + 1));
				clear();
				return;
			}
		}
		QByteArray signature = cmd.toString().toLatin1();
		int methodIndex = meta->indexOfMethod(signature + "(QString)");
		if (methodIndex != -1) {
			QMetaMethod method = meta->method(methodIndex);
			QString arg = trimmed.mid(index + 1);
			if (method.invoke(unit, Q_ARG(QString, arg))) {
				clear();
				return;
			}
		}
		methodIndex = meta->indexOfMethod(signature + "(QVariant)");
		if (methodIndex != -1) {
			QMetaMethod method = meta->method(methodIndex);
			QVariant arg = trimmed.mid(index + 1);
			if (method.invoke(unit, Q_ARG(QVariant, arg))) {
				clear();
				return;
			}
		}
		methodIndex = meta->indexOfMethod(signature + "()");
		if (methodIndex != -1) {
			QMetaMethod method = meta->method(methodIndex);
			if (method.invoke(unit)) {
				clear();
				return;
			}
		}
	}
	Message message(text);
	message.setIncoming(false);
	message.setChatUnit(unit);
	message.setTime(QDateTime::currentDateTime());
	MessageHandler::traceHandlers();

	auto lockerPtr = QSharedPointer<ChatEditLocker>::create(std::move(locker));
	QPointer<ChatEdit> edit(this);
	m_session->append(message, [edit, lockerPtr] (qint64 result, const Message &, const QString &) mutable {
		if (MessageHandler::Error != -result && edit)
			edit->clear();
		lockerPtr.reset();
	});
}