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); } }
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); }
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(); // } }
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(); }); }