From a114bd12048c797550ae3588dd3567915810571c Mon Sep 17 00:00:00 2001 From: fourtf Date: Sat, 21 Jan 2017 05:14:27 +0100 Subject: [PATCH] added auto resizing input & settings --- chatterino.pro | 3 ++- colorscheme.cpp | 4 +++ colorscheme.h | 2 ++ settings/boolsetting.h | 9 ++++++- settings/intsetting.h | 4 +-- settings/settings.cpp | 1 + settings/settings.h | 7 +++++ settings/stringsetting.h | 11 +++++++- widgets/chatwidget.cpp | 6 ++++- widgets/chatwidgetinput.cpp | 11 ++++++-- widgets/chatwidgetinput.h | 8 +++++- widgets/resizingtextedit.h | 51 +++++++++++++++++++++++++++++++++++++ 12 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 widgets/resizingtextedit.h diff --git a/chatterino.pro b/chatterino.pro index a2b3b50d8..eec16546f 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -111,7 +111,8 @@ HEADERS += account.h \ settings/boolsetting.h \ settings/stringsetting.h \ settings/intsetting.h \ - settings/floatsetting.h + settings/floatsetting.h \ + widgets/resizingtextedit.h PRECOMPILED_HEADER = diff --git a/colorscheme.cpp b/colorscheme.cpp index f9d6721a4..3f756ba12 100644 --- a/colorscheme.cpp +++ b/colorscheme.cpp @@ -70,6 +70,10 @@ ColorScheme::setColors(float hue, float multiplyer) // for (int i = 0; i < LOOKUP_COLOR_COUNT; i++) { // qInfo(QString::number(this->middleLookupTable[i]).toStdString().c_str()); // } + + InputStyleSheet = "background:" + ChatInputBackground.name() + ";" + + "border:" + TabSelectedBackground.name() + ";" + + "color:" + Text.name(); } void ColorScheme::fillLookupTableValues(qreal (&array)[360], qreal from, diff --git a/colorscheme.h b/colorscheme.h index 4ac8d71b6..0bf94024b 100644 --- a/colorscheme.h +++ b/colorscheme.h @@ -11,6 +11,8 @@ class ColorScheme public: bool IsLightTheme; + QString InputStyleSheet; + QColor SystemMessageColor; QColor DropPreviewBackground; diff --git a/settings/boolsetting.h b/settings/boolsetting.h index 4639d3b1e..31215417c 100644 --- a/settings/boolsetting.h +++ b/settings/boolsetting.h @@ -26,7 +26,11 @@ public: void set(bool value) { - this->value = value; + if (this->value != value) { + this->value = value; + + emit valueChanged(value); + } } void @@ -39,6 +43,9 @@ public: { } +signals: + void valueChanged(bool value); + private: bool value; bool defaultValue; diff --git a/settings/intsetting.h b/settings/intsetting.h index 8a4e1c369..11ab3b25c 100644 --- a/settings/intsetting.h +++ b/settings/intsetting.h @@ -7,10 +7,10 @@ namespace chatterino { namespace settings { -class BoolSetting : public Setting +class IntSetting : public Setting { public: - BoolSetting(const QString &name, int defaultValue) + IntSetting(const QString &name, int defaultValue) : Setting(name) , value(defaultValue) , defaultValue(defaultValue) diff --git a/settings/settings.cpp b/settings/settings.cpp index 3d38a71b7..fad974199 100644 --- a/settings/settings.cpp +++ b/settings/settings.cpp @@ -31,6 +31,7 @@ BoolSetting Settings::enableGifAnimations("", true); BoolSetting Settings::enableGifs("", true); BoolSetting Settings::inlineWhispers("", true); BoolSetting Settings::windowTopMost("", true); +BoolSetting Settings::compactTabs("", false); QSettings Settings::settings( QStandardPaths::writableLocation(QStandardPaths::AppDataLocation), diff --git a/settings/settings.h b/settings/settings.h index 41e1bb014..6f1445a18 100644 --- a/settings/settings.h +++ b/settings/settings.h @@ -71,6 +71,7 @@ private: settingsItems.push_back(&enableGifs); settingsItems.push_back(&inlineWhispers); settingsItems.push_back(&windowTopMost); + settingsItems.push_back(&compactTabs); } static QSettings settings; @@ -215,6 +216,11 @@ public: { return Settings::windowTopMost; } + static BoolSetting + getCompactTabs() + { + return Settings::compactTabs; + } private: static StringSetting theme; @@ -242,6 +248,7 @@ private: static BoolSetting enableGifs; static BoolSetting inlineWhispers; static BoolSetting windowTopMost; + static BoolSetting compactTabs; }; } } diff --git a/settings/stringsetting.h b/settings/stringsetting.h index 121697f7d..cdda8b74d 100644 --- a/settings/stringsetting.h +++ b/settings/stringsetting.h @@ -27,7 +27,13 @@ public: const QString & set(const QString &value) { - return (this->value = value); + this->value = value; + + QString tmp = value; + + emit valueChanged(tmp); + + return this->value; } void @@ -40,6 +46,9 @@ public: { } +signals: + void valueChanged(const QString &value); + private: QString value; QString defaultValue; diff --git a/widgets/chatwidget.cpp b/widgets/chatwidget.cpp index 9baa8133d..695d99a83 100644 --- a/widgets/chatwidget.cpp +++ b/widgets/chatwidget.cpp @@ -23,8 +23,12 @@ ChatWidget::ChatWidget(QWidget *parent) this->vbox.setSpacing(0); this->vbox.setMargin(1); + // header.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + // view.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + // input.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + this->vbox.addWidget(&header); - this->vbox.addWidget(&view); + this->vbox.addWidget(&view, 1); this->vbox.addWidget(&input); } diff --git a/widgets/chatwidgetinput.cpp b/widgets/chatwidgetinput.cpp index 8d3b64326..e9c2b3813 100644 --- a/widgets/chatwidgetinput.cpp +++ b/widgets/chatwidgetinput.cpp @@ -7,9 +7,16 @@ namespace chatterino { namespace widgets { ChatWidgetInput::ChatWidgetInput() - : edit(this) + : hbox() + , edit() { - setFixedHeight(38); + this->setLayout(&hbox); + + this->setMaximumHeight(100); + + this->hbox.addWidget(&edit); + + edit.setStyleSheet(ColorScheme::instance().InputStyleSheet); } void diff --git a/widgets/chatwidgetinput.h b/widgets/chatwidgetinput.h index d469878e3..ef797da6f 100644 --- a/widgets/chatwidgetinput.h +++ b/widgets/chatwidgetinput.h @@ -1,8 +1,13 @@ #ifndef CHATWIDGETINPUT_H #define CHATWIDGETINPUT_H +#include "resizingtextedit.h" + +#include +#include #include #include +#include #include namespace chatterino { @@ -19,7 +24,8 @@ protected: void paintEvent(QPaintEvent *); private: - QTextEdit edit; + QHBoxLayout hbox; + ResizingTextEdit edit; }; } } diff --git a/widgets/resizingtextedit.h b/widgets/resizingtextedit.h new file mode 100644 index 000000000..39dba82ac --- /dev/null +++ b/widgets/resizingtextedit.h @@ -0,0 +1,51 @@ +#ifndef RESIZINGTEXTEDIT_H +#define RESIZINGTEXTEDIT_H + +#include + +class ResizingTextEdit : public QTextEdit +{ +public: + ResizingTextEdit() + { + auto sizePolicy = this->sizePolicy(); + sizePolicy.setHeightForWidth(true); + sizePolicy.setVerticalPolicy(QSizePolicy::Preferred); + this->setSizePolicy(sizePolicy); + + QObject::connect(this, &QTextEdit::textChanged, this, &updateGeometry); + } + + QSize + sizeHint() const override + { + return QSize(this->width(), this->heightForWidth(this->width())); + } + + bool + hasHeightForWidth() const override + { + return true; + } + +protected: + int + heightForWidth(int w) const override + { + auto margins = this->contentsMargins(); + + int documentWidth; + + if (w >= margins.left() + margins.right()) { + documentWidth = w - margins.left() - margins.right(); + } else { + documentWidth = 0; + } + + auto document = this->document()->clone(); + + return margins.top() + document->size().height() + margins.bottom() + 2; + } +}; + +#endif // RESIZINGTEXTEDIT_H