Resize text input vertically to fit the contents

This commit is contained in:
Konstantinos Sideris 2018-01-25 07:57:19 +02:00
parent 1fad9398fc
commit 936e215aed
2 changed files with 20 additions and 9 deletions

View File

@ -50,6 +50,7 @@ public:
void submit();
signals:
void heightChanged(int height);
void startedTyping();
void stoppedTyping();
void message(QString);
@ -73,7 +74,7 @@ private:
void afterCompletion(int);
};
class TextInputWidget : public QFrame
class TextInputWidget : public QWidget
{
Q_OBJECT

View File

@ -32,19 +32,22 @@
#include "TextInputWidget.h"
static constexpr size_t INPUT_HISTORY_SIZE = 127;
static constexpr int MAX_TEXTINPUT_HEIGHT = 120;
FilteredTextEdit::FilteredTextEdit(QWidget *parent)
: QTextEdit{parent}
, history_index_{0}
, previewDialog_{parent}
{
setFrameStyle(QFrame::NoFrame);
connect(document()->documentLayout(),
&QAbstractTextDocumentLayout::documentSizeChanged,
this,
&FilteredTextEdit::updateGeometry);
QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Fixed);
policy.setHeightForWidth(true);
setSizePolicy(policy);
connect(document()->documentLayout(),
&QAbstractTextDocumentLayout::documentSizeChanged,
this,
[=]() { emit heightChanged(document()->size().toSize().height()); });
working_history_.push_back("");
connect(this, &QTextEdit::textChanged, this, &FilteredTextEdit::textChanged);
setAcceptRichText(false);
@ -238,17 +241,16 @@ FilteredTextEdit::receiveImage(const QByteArray img, const QString &img_name)
}
TextInputWidget::TextInputWidget(QWidget *parent)
: QFrame(parent)
: QWidget(parent)
{
setFont(QFont("Emoji One"));
setFixedHeight(conf::textInput::height);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setCursor(Qt::ArrowCursor);
topLayout_ = new QHBoxLayout();
topLayout_->setSpacing(0);
topLayout_->setContentsMargins(15, 0, 15, 5);
topLayout_->setContentsMargins(15, 0, 15, 0);
QIcon send_file_icon;
send_file_icon.addFile(":/icons/icons/ui/paper-clip-outline.png");
@ -269,9 +271,17 @@ TextInputWidget::TextInputWidget(QWidget *parent)
input_ = new FilteredTextEdit(this);
input_->setFixedHeight(32);
input_->setFont(font);
input_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
input_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
input_->setPlaceholderText(tr("Write a message..."));
input_->setStyleSheet("border: none; padding-top: 5px;");
connect(input_, &FilteredTextEdit::heightChanged, this, [=](int height) {
int textInputHeight = std::min(MAX_TEXTINPUT_HEIGHT, std::max(height, 32));
int widgetHeight =
std::min(MAX_TEXTINPUT_HEIGHT, std::max(height, conf::textInput::height));
setFixedHeight(widgetHeight);
input_->setFixedHeight(textInputHeight);
});
sendMessageBtn_ = new FlatButton(this);