From 7f18cefee45704b14f44228784b4b934b0efef66 Mon Sep 17 00:00:00 2001 From: Date: Sun, 12 Nov 2017 17:21:50 +0100 Subject: [PATCH] renamed a bunch of files and classes --- chatterino.pro | 455 +++++++++--------- src/commandmanager.cpp | 42 ++ src/commandmanager.hpp | 15 + src/widgets/emotepopup.hpp | 2 +- src/widgets/helper/.clang-format | 1 + src/widgets/{ => helper}/channelview.cpp | 16 +- src/widgets/{ => helper}/channelview.hpp | 2 +- .../droppreview.cpp} | 2 +- .../droppreview.hpp} | 0 src/widgets/{ => helper}/notebookbutton.cpp | 4 +- src/widgets/{ => helper}/notebookbutton.hpp | 0 src/widgets/{ => helper}/notebooktab.cpp | 4 +- src/widgets/{ => helper}/notebooktab.hpp | 4 +- src/widgets/{ => helper}/resizingtextedit.cpp | 2 +- src/widgets/{ => helper}/resizingtextedit.hpp | 0 .../{ => helper}/rippleeffectbutton.cpp | 0 .../{ => helper}/rippleeffectbutton.hpp | 0 .../{ => helper}/rippleeffectlabel.cpp | 4 +- .../{ => helper}/rippleeffectlabel.hpp | 4 +- .../{ => helper}/scrollbarhighlight.cpp | 2 +- .../{ => helper}/scrollbarhighlight.hpp | 0 .../{ => helper}/settingsdialogtab.cpp | 2 +- .../{ => helper}/settingsdialogtab.hpp | 0 src/widgets/{ => helper}/signallabel.hpp | 0 src/widgets/helper/splitcolumn.cpp | 9 + src/widgets/helper/splitcolumn.hpp | 23 + .../splitheader.cpp} | 74 ++- .../splitheader.hpp} | 12 +- .../splitinput.cpp} | 45 +- .../splitinput.hpp} | 14 +- src/widgets/notebook.cpp | 27 +- src/widgets/notebook.hpp | 28 +- src/widgets/scrollbar.cpp | 2 +- src/widgets/scrollbar.hpp | 2 +- src/widgets/settingsdialog.cpp | 3 +- src/widgets/settingsdialog.hpp | 2 +- src/widgets/{chatwidget.cpp => split.cpp} | 143 ++++-- src/widgets/{chatwidget.hpp => split.hpp} | 65 +-- .../{notebookpage.cpp => splitcontainer.cpp} | 89 ++-- .../{notebookpage.hpp => splitcontainer.hpp} | 27 +- src/widgets/{mainwindow.cpp => window.cpp} | 32 +- src/widgets/{mainwindow.hpp => window.hpp} | 9 +- src/windowmanager.cpp | 25 +- src/windowmanager.hpp | 12 +- 44 files changed, 699 insertions(+), 505 deletions(-) create mode 100644 src/commandmanager.cpp create mode 100644 src/commandmanager.hpp create mode 100644 src/widgets/helper/.clang-format rename src/widgets/{ => helper}/channelview.cpp (98%) rename src/widgets/{ => helper}/channelview.hpp (98%) rename src/widgets/{notebookpagedroppreview.cpp => helper/droppreview.cpp} (96%) rename src/widgets/{notebookpagedroppreview.hpp => helper/droppreview.hpp} (100%) rename src/widgets/{ => helper}/notebookbutton.cpp (96%) rename src/widgets/{ => helper}/notebookbutton.hpp (100%) rename src/widgets/{ => helper}/notebooktab.cpp (98%) rename src/widgets/{ => helper}/notebooktab.hpp (97%) rename src/widgets/{ => helper}/resizingtextedit.cpp (98%) rename src/widgets/{ => helper}/resizingtextedit.hpp (100%) rename src/widgets/{ => helper}/rippleeffectbutton.cpp (100%) rename src/widgets/{ => helper}/rippleeffectbutton.hpp (100%) rename src/widgets/{ => helper}/rippleeffectlabel.cpp (86%) rename src/widgets/{ => helper}/rippleeffectlabel.hpp (84%) rename src/widgets/{ => helper}/scrollbarhighlight.cpp (91%) rename src/widgets/{ => helper}/scrollbarhighlight.hpp (100%) rename src/widgets/{ => helper}/settingsdialogtab.cpp (97%) rename src/widgets/{ => helper}/settingsdialogtab.hpp (100%) rename src/widgets/{ => helper}/signallabel.hpp (100%) create mode 100644 src/widgets/helper/splitcolumn.cpp create mode 100644 src/widgets/helper/splitcolumn.hpp rename src/widgets/{chatwidgetheader.cpp => helper/splitheader.cpp} (74%) rename src/widgets/{chatwidgetheader.hpp => helper/splitheader.hpp} (86%) rename src/widgets/{chatwidgetinput.cpp => helper/splitinput.cpp} (83%) rename src/widgets/{chatwidgetinput.hpp => helper/splitinput.hpp} (81%) rename src/widgets/{chatwidget.cpp => split.cpp} (81%) rename src/widgets/{chatwidget.hpp => split.hpp} (82%) rename src/widgets/{notebookpage.cpp => splitcontainer.cpp} (82%) rename src/widgets/{notebookpage.hpp => splitcontainer.hpp} (75%) rename src/widgets/{mainwindow.cpp => window.cpp} (77%) rename src/widgets/{mainwindow.hpp => window.hpp} (94%) diff --git a/chatterino.pro b/chatterino.pro index 9b0b5bbe..5f3b4870 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -1,225 +1,230 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2016-12-28T18:23:35 -# -#------------------------------------------------- - -QT += core gui network multimedia -CONFIG += communi -COMMUNI += core model util -CONFIG += c++14 - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -# Include ourself -INCLUDEPATH += src/ - -TARGET = chatterino -TEMPLATE = app - -DEFINES += QT_DEPRECATED_WARNINGS - -# Define warning flags for Chatterino -win32-msvc* { - QMAKE_CXXFLAGS_WARN_ON = -W4 - # 4714 - function marked as __forceinline not inlined - # 4996 - occurs when the compiler encounters a function or variable that is marked as deprecated. - # These functions may have a different preferred name, may be insecure or have - # a more secure variant, or may be obsolete. - QMAKE_CXXFLAGS_WARN_ON += /wd4714 - QMAKE_CXXFLAGS_WARN_ON += /wd4996 -} else { - QMAKE_CXXFLAGS_WARN_ON = -Wall - QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function - QMAKE_CXXFLAGS_WARN_ON += -Wno-switch - QMAKE_CXXFLAGS_WARN_ON += -Wno-deprecated-declarations -} - -# do not use windows min/max macros -win32 { - DEFINES += NOMINMAX -} - -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - src/main.cpp \ - src/application.cpp \ - src/channel.cpp \ - src/channeldata.cpp \ - src/colorscheme.cpp \ - src/ircmanager.cpp \ - src/messages/lazyloadedimage.cpp \ - src/messages/link.cpp \ - src/messages/message.cpp \ - src/messages/word.cpp \ - src/messages/wordpart.cpp \ - src/resources.cpp \ - src/widgets/chatwidget.cpp \ - src/widgets/chatwidgetheader.cpp \ - src/widgets/chatwidgetinput.cpp \ - src/widgets/mainwindow.cpp \ - src/widgets/notebook.cpp \ - src/widgets/notebookbutton.cpp \ - src/widgets/notebookpage.cpp \ - src/widgets/notebookpagedroppreview.cpp \ - src/widgets/notebooktab.cpp \ - src/widgets/scrollbar.cpp \ - src/widgets/scrollbarhighlight.cpp \ - src/widgets/settingsdialog.cpp \ - src/widgets/settingsdialogtab.cpp \ - src/widgets/textinputdialog.cpp \ - src/messages/messageref.cpp \ - src/logging/loggingmanager.cpp \ - src/logging/loggingchannel.cpp \ - src/windowmanager.cpp \ - src/channelmanager.cpp \ - src/fontmanager.cpp \ - src/settingsmanager.cpp \ - src/emotemanager.cpp \ - src/messages/messagebuilder.cpp \ - src/twitch/twitchmessagebuilder.cpp \ - src/twitch/twitchparsemessage.cpp \ - src/widgets/titlebar.cpp \ - src/appdatapath.cpp \ - src/accountmanager.cpp \ - src/twitch/twitchuser.cpp \ - src/ircaccount.cpp \ - src/widgets/accountpopup.cpp \ - src/widgets/basewidget.cpp \ - src/widgets/resizingtextedit.cpp \ - src/completionmanager.cpp \ - src/widgets/logindialog.cpp \ - src/widgets/qualitypopup.cpp \ - src/widgets/emotepopup.cpp \ - src/widgets/channelview.cpp \ - src/twitch/twitchchannel.cpp \ - src/widgets/rippleeffectlabel.cpp \ - src/widgets/rippleeffectbutton.cpp \ - src/messages/messagecolor.cpp \ - src/util/networkmanager.cpp - -HEADERS += \ - src/asyncexec.hpp \ - src/channel.hpp \ - src/colorscheme.hpp \ - src/concurrentmap.hpp \ - src/emojis.hpp \ - src/ircmanager.hpp \ - src/messages/lazyloadedimage.hpp \ - src/messages/link.hpp \ - src/messages/message.hpp \ - src/messages/word.hpp \ - src/messages/wordpart.hpp \ - src/resources.hpp \ - src/setting.hpp \ - src/twitch/emotevalue.hpp \ - src/widgets/chatwidget.hpp \ - src/widgets/chatwidgetheader.hpp \ - src/widgets/chatwidgetinput.hpp \ - src/widgets/mainwindow.hpp \ - src/widgets/notebook.hpp \ - src/widgets/notebookbutton.hpp \ - src/widgets/notebookpage.hpp \ - src/widgets/notebookpagedroppreview.hpp \ - src/widgets/notebooktab.hpp \ - src/widgets/scrollbar.hpp \ - src/widgets/scrollbarhighlight.hpp \ - src/widgets/settingsdialog.hpp \ - src/widgets/settingsdialogtab.hpp \ - src/widgets/signallabel.hpp \ - src/widgets/textinputdialog.hpp \ - src/widgets/resizingtextedit.hpp \ - src/settingssnapshot.hpp \ - src/messages/limitedqueue.hpp \ - src/messages/limitedqueuesnapshot.hpp \ - src/messages/messageref.hpp \ - src/logging/loggingmanager.hpp \ - src/logging/loggingchannel.hpp \ - src/channelmanager.hpp \ - src/windowmanager.hpp \ - src/settingsmanager.hpp \ - src/fontmanager.hpp \ - src/emotemanager.hpp \ - src/util/urlfetch.hpp \ - src/messages/messageparseargs.hpp \ - src/messages/messagebuilder.hpp \ - src/twitch/twitchmessagebuilder.hpp \ - src/twitch/twitchparsemessage.hpp \ - src/widgets/titlebar.hpp \ - src/appdatapath.hpp \ - src/accountmanager.hpp \ - src/twitch/twitchuser.hpp \ - src/ircaccount.hpp \ - src/widgets/accountpopup.hpp \ - src/util/distancebetweenpoints.hpp \ - src/widgets/basewidget.hpp \ - src/completionmanager.hpp \ - src/widgets/channelview.hpp \ - src/twitch/twitchchannel.hpp \ - src/widgets/rippleeffectbutton.hpp \ - src/widgets/rippleeffectlabel.hpp \ - src/widgets/qualitypopup.hpp \ - src/widgets/emotepopup.hpp \ - src/messages/messagecolor.hpp \ - src/util/nativeeventhelper.hpp \ - src/debug/log.hpp \ - src/util/benchmark.hpp \ - src/util/networkmanager.hpp - -PRECOMPILED_HEADER = - -RESOURCES += \ - resources/resources.qrc - -DISTFILES += - -# Include boost -win32 { - INCLUDEPATH += C:\local\boost\ -} - -win32 { - LIBS += -luser32 - LIBS += -lgdi32 -} - -# Optional dependency on windows sdk 7.1 -win32:exists(C:\Program Files\Microsoft SDKs\Windows\v7.1\Include\Windows.h) { - LIBS += -L"C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib" \ - -ldwmapi \ - -lgdi32 - -# SOURCES += platform/borderless/qwinwidget.cpp \ -# platform/borderless/winnativewindow.cpp \ -# platform/borderless/widget.cpp - -# HEADERS += platform/borderless/qwinwidget.h \ -# platform/borderless/winnativewindow.h \ -# platform/borderless/widget.h - - DEFINES += "USEWINSDK" -} - -macx { - INCLUDEPATH += /usr/local/include -} - -FORMS += \ - forms/accountpopupform.ui - -werr { - QMAKE_CXXFLAGS += -Werror - - message("Enabling error on warning") -} - -# External dependencies -include(dependencies/rapidjson.pri) -include(dependencies/settings.pri) -include(dependencies/signals.pri) -include(dependencies/humanize.pri) -include(dependencies/fmt.pri) -DEFINES += IRC_NAMESPACE=Communi -include(dependencies/libcommuni.pri) - +#------------------------------------------------- +# +# Project created by QtCreator 2016-12-28T18:23:35 +# +#------------------------------------------------- + +QT += core gui network multimedia +CONFIG += communi +COMMUNI += core model util +CONFIG += c++14 + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +# Include ourself +INCLUDEPATH += src/ + +TARGET = chatterino +TEMPLATE = app + +DEFINES += QT_DEPRECATED_WARNINGS + +# Define warning flags for Chatterino +win32-msvc* { + QMAKE_CXXFLAGS_WARN_ON = -W4 + # 4714 - function marked as __forceinline not inlined + # 4996 - occurs when the compiler encounters a function or variable that is marked as deprecated. + # These functions may have a different preferred name, may be insecure or have + # a more secure variant, or may be obsolete. + QMAKE_CXXFLAGS_WARN_ON += /wd4714 + QMAKE_CXXFLAGS_WARN_ON += /wd4996 +} else { + QMAKE_CXXFLAGS_WARN_ON = -Wall + QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function + QMAKE_CXXFLAGS_WARN_ON += -Wno-switch + QMAKE_CXXFLAGS_WARN_ON += -Wno-deprecated-declarations +} + +# do not use windows min/max macros +win32 { + DEFINES += NOMINMAX +} + +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + src/main.cpp \ + src/application.cpp \ + src/channel.cpp \ + src/channeldata.cpp \ + src/colorscheme.cpp \ + src/ircmanager.cpp \ + src/messages/lazyloadedimage.cpp \ + src/messages/link.cpp \ + src/messages/message.cpp \ + src/messages/word.cpp \ + src/messages/wordpart.cpp \ + src/resources.cpp \ + src/widgets/notebook.cpp \ + src/widgets/helper/notebookbutton.cpp \ + src/widgets/helper/notebooktab.cpp \ + src/widgets/scrollbar.cpp \ + src/widgets/helper/scrollbarhighlight.cpp \ + src/widgets/settingsdialog.cpp \ + src/widgets/helper/settingsdialogtab.cpp \ + src/widgets/textinputdialog.cpp \ + src/messages/messageref.cpp \ + src/logging/loggingmanager.cpp \ + src/logging/loggingchannel.cpp \ + src/windowmanager.cpp \ + src/channelmanager.cpp \ + src/fontmanager.cpp \ + src/settingsmanager.cpp \ + src/emotemanager.cpp \ + src/messages/messagebuilder.cpp \ + src/twitch/twitchmessagebuilder.cpp \ + src/twitch/twitchparsemessage.cpp \ + src/widgets/titlebar.cpp \ + src/appdatapath.cpp \ + src/accountmanager.cpp \ + src/twitch/twitchuser.cpp \ + src/ircaccount.cpp \ + src/widgets/accountpopup.cpp \ + src/widgets/basewidget.cpp \ + src/widgets/helper/resizingtextedit.cpp \ + src/completionmanager.cpp \ + src/widgets/logindialog.cpp \ + src/widgets/qualitypopup.cpp \ + src/widgets/emotepopup.cpp \ + src/widgets/helper/channelview.cpp \ + src/twitch/twitchchannel.cpp \ + src/widgets/helper/rippleeffectlabel.cpp \ + src/widgets/helper/rippleeffectbutton.cpp \ + src/messages/messagecolor.cpp \ + src/util/networkmanager.cpp \ + src/commandmanager.cpp \ + src/widgets/split.cpp \ + src/widgets/helper/splitinput.cpp \ + src/widgets/helper/splitheader.cpp \ + src/widgets/splitcontainer.cpp \ + src/widgets/helper/droppreview.cpp \ + src/widgets/window.cpp \ + src/widgets/helper/splitcolumn.cpp + +HEADERS += \ + src/asyncexec.hpp \ + src/channel.hpp \ + src/colorscheme.hpp \ + src/concurrentmap.hpp \ + src/emojis.hpp \ + src/ircmanager.hpp \ + src/messages/lazyloadedimage.hpp \ + src/messages/link.hpp \ + src/messages/message.hpp \ + src/messages/word.hpp \ + src/messages/wordpart.hpp \ + src/resources.hpp \ + src/setting.hpp \ + src/twitch/emotevalue.hpp \ + src/widgets/notebook.hpp \ + src/widgets/helper/notebookbutton.hpp \ + src/widgets/helper/notebooktab.hpp \ + src/widgets/scrollbar.hpp \ + src/widgets/helper/scrollbarhighlight.hpp \ + src/widgets/settingsdialog.hpp \ + src/widgets/helper/settingsdialogtab.hpp \ + src/widgets/helper/signallabel.hpp \ + src/widgets/textinputdialog.hpp \ + src/widgets/helper/resizingtextedit.hpp \ + src/settingssnapshot.hpp \ + src/messages/limitedqueue.hpp \ + src/messages/limitedqueuesnapshot.hpp \ + src/messages/messageref.hpp \ + src/logging/loggingmanager.hpp \ + src/logging/loggingchannel.hpp \ + src/channelmanager.hpp \ + src/windowmanager.hpp \ + src/settingsmanager.hpp \ + src/fontmanager.hpp \ + src/emotemanager.hpp \ + src/util/urlfetch.hpp \ + src/messages/messageparseargs.hpp \ + src/messages/messagebuilder.hpp \ + src/twitch/twitchmessagebuilder.hpp \ + src/twitch/twitchparsemessage.hpp \ + src/widgets/titlebar.hpp \ + src/appdatapath.hpp \ + src/accountmanager.hpp \ + src/twitch/twitchuser.hpp \ + src/ircaccount.hpp \ + src/widgets/accountpopup.hpp \ + src/util/distancebetweenpoints.hpp \ + src/widgets/basewidget.hpp \ + src/completionmanager.hpp \ + src/widgets/helper/channelview.hpp \ + src/twitch/twitchchannel.hpp \ + src/widgets/helper/rippleeffectbutton.hpp \ + src/widgets/helper/rippleeffectlabel.hpp \ + src/widgets/qualitypopup.hpp \ + src/widgets/emotepopup.hpp \ + src/messages/messagecolor.hpp \ + src/util/nativeeventhelper.hpp \ + src/debug/log.hpp \ + src/util/benchmark.hpp \ + src/util/networkmanager.hpp \ + src/commandmanager.hpp \ + src/widgets/split.hpp \ + src/widgets/helper/splitheader.hpp \ + src/widgets/helper/splitinput.hpp \ + src/widgets/window.hpp \ + src/widgets/splitcontainer.hpp \ + src/widgets/helper/droppreview.hpp \ + src/widgets/helper/splitcolumn.hpp + + +PRECOMPILED_HEADER = + +RESOURCES += \ + resources/resources.qrc + +DISTFILES += + +# Include boost +win32 { + INCLUDEPATH += C:\local\boost\ +} + +win32 { + LIBS += -luser32 + LIBS += -lgdi32 +} + +# Optional dependency on windows sdk 7.1 +win32:exists(C:\Program Files\Microsoft SDKs\Windows\v7.1\Include\Windows.h) { + LIBS += -L"C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib" \ + -ldwmapi \ + -lgdi32 + +# SOURCES += platform/borderless/qwinwidget.cpp \ +# platform/borderless/winnativewindow.cpp \ +# platform/borderless/widget.cpp + +# HEADERS += platform/borderless/qwinwidget.h \ +# platform/borderless/winnativewindow.h \ +# platform/borderless/widget.h + + DEFINES += "USEWINSDK" +} + +macx { + INCLUDEPATH += /usr/local/include +} + +FORMS += \ + forms/accountpopupform.ui + +werr { + QMAKE_CXXFLAGS += -Werror + + message("Enabling error on warning") +} + +# External dependencies +include(dependencies/rapidjson.pri) +include(dependencies/settings.pri) +include(dependencies/signals.pri) +include(dependencies/humanize.pri) +include(dependencies/fmt.pri) +DEFINES += IRC_NAMESPACE=Communi +include(dependencies/libcommuni.pri) + diff --git a/src/commandmanager.cpp b/src/commandmanager.cpp new file mode 100644 index 00000000..4bcaf78a --- /dev/null +++ b/src/commandmanager.cpp @@ -0,0 +1,42 @@ +#include "commandmanager.hpp" +#include "windowmanager.hpp" + +namespace chatterino { +void CommandManager::execCommand(QString command) +{ + if (command == "selectr") { + selectSplitRelative(1, 0); + } + if (command == "selectl") { + selectSplitRelative(-1, 0); + } + if (command == "selectu") { + selectSplitRelative(0, -1); + } + if (command == "selectd") { + selectSplitRelative(0, 1); + } + + if (command == "mover") { + moveSplitRelative(1, 0); + } + if (command == "movel") { + moveSplitRelative(-1, 0); + } + if (command == "moveu") { + moveSplitRelative(0, -1); + } + if (command == "moved") { + moveSplitRelative(0, 1); + } +} + +void CommandManager::selectSplitRelative(int dx, int dy) +{ + WindowManager::instance->getCurrentWindow().getNotebook().getSelectedPage(); +} + +void CommandManager::moveSplitRelative(int dx, int dy) +{ +} +} diff --git a/src/commandmanager.hpp b/src/commandmanager.hpp new file mode 100644 index 00000000..13c28aa5 --- /dev/null +++ b/src/commandmanager.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace chatterino { +class CommandManager +{ +public: + CommandManager() = delete; + + void execCommand(QString command); + void selectSplitRelative(int dx, int dy); + void moveSplitRelative(int dx, int dy); +}; +} diff --git a/src/widgets/emotepopup.hpp b/src/widgets/emotepopup.hpp index 5df4cf7e..373fcd1a 100644 --- a/src/widgets/emotepopup.hpp +++ b/src/widgets/emotepopup.hpp @@ -3,7 +3,7 @@ #include "channel.hpp" #include "emotemanager.hpp" #include "widgets/basewidget.hpp" -#include "widgets/channelview.hpp" +#include "widgets/helper/channelview.hpp" namespace chatterino { namespace widgets { diff --git a/src/widgets/helper/.clang-format b/src/widgets/helper/.clang-format new file mode 100644 index 00000000..7cab60ce --- /dev/null +++ b/src/widgets/helper/.clang-format @@ -0,0 +1 @@ +../.clang-format \ No newline at end of file diff --git a/src/widgets/channelview.cpp b/src/widgets/helper/channelview.cpp similarity index 98% rename from src/widgets/channelview.cpp rename to src/widgets/helper/channelview.cpp index 5f4d713b..55109204 100644 --- a/src/widgets/channelview.cpp +++ b/src/widgets/helper/channelview.cpp @@ -1,4 +1,4 @@ -#include "widgets/channelview.hpp" +#include "widgets/helper/channelview.hpp" #include "channelmanager.hpp" #include "colorscheme.hpp" #include "debug/log.hpp" @@ -9,7 +9,7 @@ #include "ui_accountpopupform.h" #include "util/benchmark.hpp" #include "util/distancebetweenpoints.hpp" -#include "widgets/chatwidget.hpp" +#include "widgets/split.hpp" #include "windowmanager.hpp" #include @@ -240,8 +240,9 @@ QString ChannelView::getSelectedText() if (first) { first = false; - bool isSingleWord = isSingleMessage && this->selection.max.charIndex - charIndex < - part.getCharacterLength(); + bool isSingleWord = + isSingleMessage && + this->selection.max.charIndex - charIndex < part.getCharacterLength(); if (isSingleWord) { // return single word @@ -518,9 +519,10 @@ void ChannelView::updateMessageBuffer(messages::MessageRef *messageRef, QPixmap // this->selectionMax.messageIndex >= messageIndex) { // painter.fillRect(buffer->rect(), QColor(24, 55, 25)); //} else { - painter.fillRect(buffer->rect(), (messageRef->getMessage()->getCanHighlightTab()) - ? this->colorScheme.ChatBackgroundHighlighted - : this->colorScheme.ChatBackground); + painter.fillRect(buffer->rect(), + (messageRef->getMessage()->getCanHighlightTab()) + ? this->colorScheme.ChatBackgroundHighlighted + : this->colorScheme.ChatBackground); //} // draw selection diff --git a/src/widgets/channelview.hpp b/src/widgets/helper/channelview.hpp similarity index 98% rename from src/widgets/channelview.hpp rename to src/widgets/helper/channelview.hpp index 8353424e..95ab2b67 100644 --- a/src/widgets/channelview.hpp +++ b/src/widgets/helper/channelview.hpp @@ -7,7 +7,7 @@ #include "messages/word.hpp" #include "widgets/accountpopup.hpp" #include "widgets/basewidget.hpp" -#include "widgets/rippleeffectlabel.hpp" +#include "widgets/helper/rippleeffectlabel.hpp" #include "widgets/scrollbar.hpp" #include diff --git a/src/widgets/notebookpagedroppreview.cpp b/src/widgets/helper/droppreview.cpp similarity index 96% rename from src/widgets/notebookpagedroppreview.cpp rename to src/widgets/helper/droppreview.cpp index 58039861..b52526cc 100644 --- a/src/widgets/notebookpagedroppreview.cpp +++ b/src/widgets/helper/droppreview.cpp @@ -1,4 +1,4 @@ -#include "widgets/notebookpagedroppreview.hpp" +#include "widgets/helper/droppreview.hpp" #include "colorscheme.hpp" #include diff --git a/src/widgets/notebookpagedroppreview.hpp b/src/widgets/helper/droppreview.hpp similarity index 100% rename from src/widgets/notebookpagedroppreview.hpp rename to src/widgets/helper/droppreview.hpp diff --git a/src/widgets/notebookbutton.cpp b/src/widgets/helper/notebookbutton.cpp similarity index 96% rename from src/widgets/notebookbutton.cpp rename to src/widgets/helper/notebookbutton.cpp index 3b355e46..c09b2acd 100644 --- a/src/widgets/notebookbutton.cpp +++ b/src/widgets/helper/notebookbutton.cpp @@ -1,6 +1,6 @@ -#include "widgets/notebookbutton.hpp" +#include "widgets/helper/notebookbutton.hpp" #include "colorscheme.hpp" -#include "widgets/rippleeffectbutton.hpp" +#include "widgets/helper/rippleeffectbutton.hpp" #include #include diff --git a/src/widgets/notebookbutton.hpp b/src/widgets/helper/notebookbutton.hpp similarity index 100% rename from src/widgets/notebookbutton.hpp rename to src/widgets/helper/notebookbutton.hpp diff --git a/src/widgets/notebooktab.cpp b/src/widgets/helper/notebooktab.cpp similarity index 98% rename from src/widgets/notebooktab.cpp rename to src/widgets/helper/notebooktab.cpp index e674cfe4..0af4f1e7 100644 --- a/src/widgets/notebooktab.cpp +++ b/src/widgets/helper/notebooktab.cpp @@ -1,4 +1,4 @@ -#include "widgets/notebooktab.hpp" +#include "widgets/helper/notebooktab.hpp" #include "colorscheme.hpp" #include "settingsmanager.hpp" #include "widgets/notebook.hpp" @@ -279,7 +279,7 @@ void NotebookTab::mouseMoveEvent(QMouseEvent *event) QPoint relPoint = this->mapToParent(event->pos()); int index; - NotebookPage *clickedPage = notebook->tabAt(relPoint, index); + SplitContainer *clickedPage = notebook->tabAt(relPoint, index); if (clickedPage != nullptr && clickedPage != this->page) { this->notebook->rearrangePage(clickedPage, index); diff --git a/src/widgets/notebooktab.hpp b/src/widgets/helper/notebooktab.hpp similarity index 97% rename from src/widgets/notebooktab.hpp rename to src/widgets/helper/notebooktab.hpp index bf3caae7..b70b43aa 100644 --- a/src/widgets/notebooktab.hpp +++ b/src/widgets/helper/notebooktab.hpp @@ -15,7 +15,7 @@ class ColorScheme; namespace widgets { class Notebook; -class NotebookPage; +class SplitContainer; class NotebookTab : public BaseWidget { @@ -29,7 +29,7 @@ public: void calcSize(); - NotebookPage *page; + SplitContainer *page; const QString &getTitle() const; void setTitle(const QString &newTitle); diff --git a/src/widgets/resizingtextedit.cpp b/src/widgets/helper/resizingtextedit.cpp similarity index 98% rename from src/widgets/resizingtextedit.cpp rename to src/widgets/helper/resizingtextedit.cpp index c4d2718f..0dd2b2f3 100644 --- a/src/widgets/resizingtextedit.cpp +++ b/src/widgets/helper/resizingtextedit.cpp @@ -1,4 +1,4 @@ -#include "widgets/resizingtextedit.hpp" +#include "widgets/helper/resizingtextedit.hpp" ResizingTextEdit::ResizingTextEdit() { diff --git a/src/widgets/resizingtextedit.hpp b/src/widgets/helper/resizingtextedit.hpp similarity index 100% rename from src/widgets/resizingtextedit.hpp rename to src/widgets/helper/resizingtextedit.hpp diff --git a/src/widgets/rippleeffectbutton.cpp b/src/widgets/helper/rippleeffectbutton.cpp similarity index 100% rename from src/widgets/rippleeffectbutton.cpp rename to src/widgets/helper/rippleeffectbutton.cpp diff --git a/src/widgets/rippleeffectbutton.hpp b/src/widgets/helper/rippleeffectbutton.hpp similarity index 100% rename from src/widgets/rippleeffectbutton.hpp rename to src/widgets/helper/rippleeffectbutton.hpp diff --git a/src/widgets/rippleeffectlabel.cpp b/src/widgets/helper/rippleeffectlabel.cpp similarity index 86% rename from src/widgets/rippleeffectlabel.cpp rename to src/widgets/helper/rippleeffectlabel.cpp index a5aa8027..45fd1a71 100644 --- a/src/widgets/rippleeffectlabel.cpp +++ b/src/widgets/helper/rippleeffectlabel.cpp @@ -1,6 +1,6 @@ -#include "widgets/rippleeffectlabel.hpp" +#include "widgets/helper/rippleeffectlabel.hpp" #include "colorscheme.hpp" -#include "widgets/chatwidgetheader.hpp" +#include "widgets/helper/splitheader.hpp" #include #include diff --git a/src/widgets/rippleeffectlabel.hpp b/src/widgets/helper/rippleeffectlabel.hpp similarity index 84% rename from src/widgets/rippleeffectlabel.hpp rename to src/widgets/helper/rippleeffectlabel.hpp index bb0fc4ca..2c8c45cc 100644 --- a/src/widgets/rippleeffectlabel.hpp +++ b/src/widgets/helper/rippleeffectlabel.hpp @@ -1,8 +1,8 @@ #pragma once #include "widgets/basewidget.hpp" -#include "widgets/rippleeffectbutton.hpp" -#include "widgets/signallabel.hpp" +#include "widgets/helper/rippleeffectbutton.hpp" +#include "widgets/helper/signallabel.hpp" #include #include diff --git a/src/widgets/scrollbarhighlight.cpp b/src/widgets/helper/scrollbarhighlight.cpp similarity index 91% rename from src/widgets/scrollbarhighlight.cpp rename to src/widgets/helper/scrollbarhighlight.cpp index 516be932..1809db37 100644 --- a/src/widgets/scrollbarhighlight.cpp +++ b/src/widgets/helper/scrollbarhighlight.cpp @@ -1,4 +1,4 @@ -#include "widgets/scrollbarhighlight.hpp" +#include "widgets/helper/scrollbarhighlight.hpp" #include "colorscheme.hpp" #include "widgets/scrollbar.hpp" diff --git a/src/widgets/scrollbarhighlight.hpp b/src/widgets/helper/scrollbarhighlight.hpp similarity index 100% rename from src/widgets/scrollbarhighlight.hpp rename to src/widgets/helper/scrollbarhighlight.hpp diff --git a/src/widgets/settingsdialogtab.cpp b/src/widgets/helper/settingsdialogtab.cpp similarity index 97% rename from src/widgets/settingsdialogtab.cpp rename to src/widgets/helper/settingsdialogtab.cpp index 658d4afb..3a51555d 100644 --- a/src/widgets/settingsdialogtab.cpp +++ b/src/widgets/helper/settingsdialogtab.cpp @@ -1,4 +1,4 @@ -#include "widgets/settingsdialogtab.hpp" +#include "widgets/helper/settingsdialogtab.hpp" #include "widgets/settingsdialog.hpp" #include diff --git a/src/widgets/settingsdialogtab.hpp b/src/widgets/helper/settingsdialogtab.hpp similarity index 100% rename from src/widgets/settingsdialogtab.hpp rename to src/widgets/helper/settingsdialogtab.hpp diff --git a/src/widgets/signallabel.hpp b/src/widgets/helper/signallabel.hpp similarity index 100% rename from src/widgets/signallabel.hpp rename to src/widgets/helper/signallabel.hpp diff --git a/src/widgets/helper/splitcolumn.cpp b/src/widgets/helper/splitcolumn.cpp new file mode 100644 index 00000000..b6f346fb --- /dev/null +++ b/src/widgets/helper/splitcolumn.cpp @@ -0,0 +1,9 @@ +#include "splitcolumn.hpp" + +namespace chatterino { +namespace helper { +SplitColumn::SplitColumn() +{ +} +} +} diff --git a/src/widgets/helper/splitcolumn.hpp b/src/widgets/helper/splitcolumn.hpp new file mode 100644 index 00000000..98418d8c --- /dev/null +++ b/src/widgets/helper/splitcolumn.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "widgets/split.hpp" + +namespace chatterino { +namespace helper { +class SplitColumn +{ +public: + SplitColumn(); + + void insert(widgets::Split *split, int index = -1); + void remove(int index); + double getFlex(); + void setFlex(double flex); + +private: + std::vector items; +}; +} +} diff --git a/src/widgets/chatwidgetheader.cpp b/src/widgets/helper/splitheader.cpp similarity index 74% rename from src/widgets/chatwidgetheader.cpp rename to src/widgets/helper/splitheader.cpp index 07f6de5f..97f1aad0 100644 --- a/src/widgets/chatwidgetheader.cpp +++ b/src/widgets/helper/splitheader.cpp @@ -1,9 +1,9 @@ -#include "widgets/chatwidgetheader.hpp" +#include "widgets/helper/splitheader.hpp" #include "colorscheme.hpp" #include "twitch/twitchchannel.hpp" #include "util/urlfetch.hpp" -#include "widgets/chatwidget.hpp" -#include "widgets/notebookpage.hpp" +#include "widgets/split.hpp" +#include "widgets/splitcontainer.hpp" #include #include @@ -13,7 +13,7 @@ namespace chatterino { namespace widgets { -ChatWidgetHeader::ChatWidgetHeader(ChatWidget *_chatWidget) +SplitHeader::SplitHeader(Split *_chatWidget) : BaseWidget(_chatWidget) , chatWidget(_chatWidget) , leftLabel(this) @@ -35,23 +35,22 @@ ChatWidgetHeader::ChatWidgetHeader(ChatWidget *_chatWidget) this->leftLabel.getLabel().setTextFormat(Qt::RichText); this->leftLabel.getLabel().setText(""); - connect(&this->leftLabel, &RippleEffectLabel::clicked, this, - &ChatWidgetHeader::leftButtonClicked); + connect(&this->leftLabel, &RippleEffectLabel::clicked, this, &SplitHeader::leftButtonClicked); - this->leftMenu.addAction("Add new split", this->chatWidget, &ChatWidget::doAddSplit, + this->leftMenu.addAction("Add new split", this->chatWidget, &Split::doAddSplit, QKeySequence(tr("Ctrl+T"))); - this->leftMenu.addAction("Close split", this->chatWidget, &ChatWidget::doCloseSplit, + this->leftMenu.addAction("Close split", this->chatWidget, &Split::doCloseSplit, QKeySequence(tr("Ctrl+W"))); this->leftMenu.addAction("Move split", this, SLOT(menuMoveSplit())); - this->leftMenu.addAction("Popup", this->chatWidget, &ChatWidget::doPopup); - this->leftMenu.addAction("Open viewer list", this->chatWidget, &ChatWidget::doOpenViewerList); + this->leftMenu.addAction("Popup", this->chatWidget, &Split::doPopup); + this->leftMenu.addAction("Open viewer list", this->chatWidget, &Split::doOpenViewerList); this->leftMenu.addSeparator(); - this->leftMenu.addAction("Change channel", this->chatWidget, &ChatWidget::doChangeChannel, + this->leftMenu.addAction("Change channel", this->chatWidget, &Split::doChangeChannel, QKeySequence(tr("Ctrl+R"))); - this->leftMenu.addAction("Clear chat", this->chatWidget, &ChatWidget::doClearChat); - this->leftMenu.addAction("Open channel", this->chatWidget, &ChatWidget::doOpenChannel); - this->leftMenu.addAction("Open popup player", this->chatWidget, &ChatWidget::doOpenPopupPlayer); - this->leftMenu.addAction("Open in Streamlink", this->chatWidget, &ChatWidget::doOpenStreamlink); + this->leftMenu.addAction("Clear chat", this->chatWidget, &Split::doClearChat); + this->leftMenu.addAction("Open channel", this->chatWidget, &Split::doOpenChannel); + this->leftMenu.addAction("Open popup player", this->chatWidget, &Split::doOpenPopupPlayer); + this->leftMenu.addAction("Open in Streamlink", this->chatWidget, &Split::doOpenStreamlink); this->leftMenu.addSeparator(); this->leftMenu.addAction("Reload channel emotes", this, SLOT(menuReloadChannelEmotes())); this->leftMenu.addAction("Manual reconnect", this, SLOT(menuManualReconnect())); @@ -62,7 +61,7 @@ ChatWidgetHeader::ChatWidgetHeader(ChatWidget *_chatWidget) this->channelNameLabel.setAlignment(Qt::AlignCenter); connect(&this->channelNameLabel, &SignalLabel::mouseDoubleClick, this, - &ChatWidgetHeader::mouseDoubleClickEvent); + &SplitHeader::mouseDoubleClickEvent); // right this->rightLabel.setMinimumWidth(this->height()); @@ -76,7 +75,7 @@ ChatWidgetHeader::ChatWidgetHeader(ChatWidget *_chatWidget) }); } -void ChatWidgetHeader::initializeChannelSignals() +void SplitHeader::initializeChannelSignals() { // Disconnect any previous signal first this->onlineStatusChangedConnection.disconnect(); @@ -91,12 +90,12 @@ void ChatWidgetHeader::initializeChannelSignals() } } -void ChatWidgetHeader::resizeEvent(QResizeEvent *event) +void SplitHeader::resizeEvent(QResizeEvent *event) { - this->setFixedHeight(static_cast(32 * getDpiMultiplier())); + this->setFixedHeight(static_cast(28 * getDpiMultiplier())); } -void ChatWidgetHeader::updateChannelText() +void SplitHeader::updateChannelText() { const std::string channelName = this->chatWidget->channelName; if (channelName.empty()) { @@ -114,9 +113,8 @@ void ChatWidgetHeader::updateChannelText() "
" "Live for " + twitchChannel->streamUptime + " with " + - twitchChannel->streamViewerCount + - " viewers" - "

"); + twitchChannel->streamViewerCount + " viewers" + "

"); } else { this->channelNameLabel.setText(QString::fromStdString(channelName)); this->setToolTip(""); @@ -124,7 +122,7 @@ void ChatWidgetHeader::updateChannelText() } } -void ChatWidgetHeader::paintEvent(QPaintEvent *) +void SplitHeader::paintEvent(QPaintEvent *) { QPainter painter(this); @@ -133,23 +131,23 @@ void ChatWidgetHeader::paintEvent(QPaintEvent *) painter.drawRect(0, 0, width() - 1, height() - 1); } -void ChatWidgetHeader::mousePressEvent(QMouseEvent *event) +void SplitHeader::mousePressEvent(QMouseEvent *event) { this->dragging = true; this->dragStart = event->pos(); } -void ChatWidgetHeader::mouseMoveEvent(QMouseEvent *event) +void SplitHeader::mouseMoveEvent(QMouseEvent *event) { if (this->dragging) { if (std::abs(this->dragStart.x() - event->pos().x()) > 12 || std::abs(this->dragStart.y() - event->pos().y()) > 12) { - auto page = static_cast(this->chatWidget->parentWidget()); + auto page = static_cast(this->chatWidget->parentWidget()); if (page != nullptr) { - NotebookPage::isDraggingSplit = true; - NotebookPage::draggingSplit = this->chatWidget; + SplitContainer::isDraggingSplit = true; + SplitContainer::draggingSplit = this->chatWidget; auto originalLocation = page->removeFromLayout(this->chatWidget); @@ -168,20 +166,20 @@ void ChatWidgetHeader::mouseMoveEvent(QMouseEvent *event) page->addToLayout(this->chatWidget, originalLocation); } - NotebookPage::isDraggingSplit = false; + SplitContainer::isDraggingSplit = false; } } } } -void ChatWidgetHeader::mouseDoubleClickEvent(QMouseEvent *event) +void SplitHeader::mouseDoubleClickEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->chatWidget->doChangeChannel(); } } -void ChatWidgetHeader::leftButtonClicked() +void SplitHeader::leftButtonClicked() { QTimer::singleShot(80, [&] { this->leftMenu.move(this->leftLabel.mapToGlobal(QPoint(0, this->leftLabel.height()))); @@ -189,11 +187,11 @@ void ChatWidgetHeader::leftButtonClicked() }); } -void ChatWidgetHeader::rightButtonClicked() +void SplitHeader::rightButtonClicked() { } -void ChatWidgetHeader::refreshTheme() +void SplitHeader::refreshTheme() { QPalette palette; palette.setColor(QPalette::Foreground, this->colorScheme.Text); @@ -203,19 +201,19 @@ void ChatWidgetHeader::refreshTheme() this->rightLabel.setPalette(palette); } -void ChatWidgetHeader::menuMoveSplit() +void SplitHeader::menuMoveSplit() { } -void ChatWidgetHeader::menuReloadChannelEmotes() +void SplitHeader::menuReloadChannelEmotes() { } -void ChatWidgetHeader::menuManualReconnect() +void SplitHeader::menuManualReconnect() { } -void ChatWidgetHeader::menuShowChangelog() +void SplitHeader::menuShowChangelog() { } diff --git a/src/widgets/chatwidgetheader.hpp b/src/widgets/helper/splitheader.hpp similarity index 86% rename from src/widgets/chatwidgetheader.hpp rename to src/widgets/helper/splitheader.hpp index a067e3b9..3961f88f 100644 --- a/src/widgets/chatwidgetheader.hpp +++ b/src/widgets/helper/splitheader.hpp @@ -1,8 +1,8 @@ #pragma once -#include "signallabel.hpp" #include "widgets/basewidget.hpp" -#include "widgets/rippleeffectlabel.hpp" +#include "widgets/helper/rippleeffectlabel.hpp" +#include "widgets/helper/signallabel.hpp" #include #include @@ -20,14 +20,14 @@ class ColorScheme; namespace widgets { -class ChatWidget; +class Split; -class ChatWidgetHeader : public BaseWidget +class SplitHeader : public BaseWidget { Q_OBJECT public: - explicit ChatWidgetHeader(ChatWidget *_chatWidget); + explicit SplitHeader(Split *_chatWidget); // Update channel text from chat widget void updateChannelText(); @@ -39,7 +39,7 @@ protected: virtual void resizeEvent(QResizeEvent *event) override; private: - ChatWidget *const chatWidget; + Split *const chatWidget; QPoint dragStart; bool dragging = false; diff --git a/src/widgets/chatwidgetinput.cpp b/src/widgets/helper/splitinput.cpp similarity index 83% rename from src/widgets/chatwidgetinput.cpp rename to src/widgets/helper/splitinput.cpp index cf56aae6..78da3b6e 100644 --- a/src/widgets/chatwidgetinput.cpp +++ b/src/widgets/helper/splitinput.cpp @@ -1,11 +1,11 @@ -#include "widgets/chatwidgetinput.hpp" -#include "chatwidget.hpp" +#include "widgets/helper/splitinput.hpp" #include "colorscheme.hpp" #include "completionmanager.hpp" #include "ircmanager.hpp" -#include "notebook.hpp" -#include "notebookpage.hpp" #include "settingsmanager.hpp" +#include "widgets/notebook.hpp" +#include "widgets/split.hpp" +#include "widgets/splitcontainer.hpp" #include #include @@ -13,8 +13,7 @@ namespace chatterino { namespace widgets { -ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteManager, - WindowManager &windowManager) +SplitInput::SplitInput(Split *_chatWidget, EmoteManager &emoteManager, WindowManager &windowManager) : BaseWidget(_chatWidget) , chatWidget(_chatWidget) , emoteManager(emoteManager) @@ -65,7 +64,7 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan this->emotePopup->show(); }); - connect(&textInput, &ResizingTextEdit::textChanged, this, &ChatWidgetInput::editTextChanged); + connect(&textInput, &ResizingTextEdit::textChanged, this, &SplitInput::editTextChanged); this->refreshTheme(); textLengthLabel.setHidden(!SettingsManager::getInstance().showMessageLength.get()); @@ -96,7 +95,8 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan prevIndex = prevMsg.size(); } else if (event->key() == Qt::Key_Up) { if (event->modifiers() == Qt::AltModifier) { - NotebookPage *page = static_cast(this->chatWidget->parentWidget()); + SplitContainer *page = + static_cast(this->chatWidget->parentWidget()); int reqX = page->currentX; int reqY = page->lastRequestedY[reqX] - 1; @@ -112,7 +112,8 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan } } else if (event->key() == Qt::Key_Down) { if (event->modifiers() == Qt::AltModifier) { - NotebookPage *page = static_cast(this->chatWidget->parentWidget()); + SplitContainer *page = + static_cast(this->chatWidget->parentWidget()); int reqX = page->currentX; int reqY = page->lastRequestedY[reqX] + 1; @@ -131,7 +132,8 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan } } else if (event->key() == Qt::Key_Left) { if (event->modifiers() == Qt::AltModifier) { - NotebookPage *page = static_cast(this->chatWidget->parentWidget()); + SplitContainer *page = + static_cast(this->chatWidget->parentWidget()); int reqX = page->currentX - 1; int reqY = page->lastRequestedY[reqX]; @@ -142,7 +144,8 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan } } else if (event->key() == Qt::Key_Right) { if (event->modifiers() == Qt::AltModifier) { - NotebookPage *page = static_cast(this->chatWidget->parentWidget()); + SplitContainer *page = + static_cast(this->chatWidget->parentWidget()); int reqX = page->currentX + 1; int reqY = page->lastRequestedY[reqX]; @@ -153,7 +156,8 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan } } else if (event->key() == Qt::Key_Tab) { if (event->modifiers() == Qt::ControlModifier) { - NotebookPage *page = static_cast(this->chatWidget->parentWidget()); + SplitContainer *page = + static_cast(this->chatWidget->parentWidget()); Notebook *notebook = static_cast(page->parentWidget()); @@ -161,7 +165,8 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan } } else if (event->key() == Qt::Key_Backtab) { if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) { - NotebookPage *page = static_cast(this->chatWidget->parentWidget()); + SplitContainer *page = + static_cast(this->chatWidget->parentWidget()); Notebook *notebook = static_cast(page->parentWidget()); @@ -186,12 +191,12 @@ ChatWidgetInput::ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &emoteMan }); } -ChatWidgetInput::~ChatWidgetInput() +SplitInput::~SplitInput() { this->textLengthVisibleChangedConnection.disconnect(); } -void ChatWidgetInput::clearSelection() +void SplitInput::clearSelection() { QTextCursor c = this->textInput.textCursor(); @@ -201,7 +206,7 @@ void ChatWidgetInput::clearSelection() this->textInput.setTextCursor(c); } -void ChatWidgetInput::refreshTheme() +void SplitInput::refreshTheme() { QPalette palette; @@ -212,11 +217,11 @@ void ChatWidgetInput::refreshTheme() this->textInput.setStyleSheet(this->colorScheme.InputStyleSheet); } -void ChatWidgetInput::editTextChanged() +void SplitInput::editTextChanged() { } -void ChatWidgetInput::paintEvent(QPaintEvent *) +void SplitInput::paintEvent(QPaintEvent *) { QPainter painter(this); @@ -225,7 +230,7 @@ void ChatWidgetInput::paintEvent(QPaintEvent *) painter.drawRect(0, 0, this->width() - 1, this->height() - 1); } -void ChatWidgetInput::resizeEvent(QResizeEvent *) +void SplitInput::resizeEvent(QResizeEvent *) { if (this->height() == this->maximumHeight()) { this->textInput.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); @@ -234,7 +239,7 @@ void ChatWidgetInput::resizeEvent(QResizeEvent *) } } -void ChatWidgetInput::mousePressEvent(QMouseEvent *) +void SplitInput::mousePressEvent(QMouseEvent *) { this->chatWidget->giveFocus(Qt::MouseFocusReason); } diff --git a/src/widgets/chatwidgetinput.hpp b/src/widgets/helper/splitinput.hpp similarity index 81% rename from src/widgets/chatwidgetinput.hpp rename to src/widgets/helper/splitinput.hpp index bad7b590..7a5a70e0 100644 --- a/src/widgets/chatwidgetinput.hpp +++ b/src/widgets/helper/splitinput.hpp @@ -4,7 +4,7 @@ #include "resizingtextedit.hpp" #include "widgets/basewidget.hpp" #include "widgets/emotepopup.hpp" -#include "widgets/rippleeffectlabel.hpp" +#include "widgets/helper/rippleeffectlabel.hpp" #include #include @@ -19,15 +19,15 @@ namespace chatterino { namespace widgets { -class ChatWidget; +class Split; -class ChatWidgetInput : public BaseWidget +class SplitInput : public BaseWidget { Q_OBJECT public: - ChatWidgetInput(ChatWidget *_chatWidget, EmoteManager &, WindowManager &); - ~ChatWidgetInput(); + SplitInput(Split *_chatWidget, EmoteManager &, WindowManager &); + ~SplitInput(); void clearSelection(); @@ -38,7 +38,7 @@ protected: virtual void mousePressEvent(QMouseEvent *event) override; private: - ChatWidget *const chatWidget; + Split *const chatWidget; EmotePopup *emotePopup = nullptr; EmoteManager &emoteManager; WindowManager &windowManager; @@ -57,7 +57,7 @@ private: private slots: void editTextChanged(); - friend class ChatWidget; + friend class Split; }; } // namespace widgets diff --git a/src/widgets/notebook.cpp b/src/widgets/notebook.cpp index 6ca9ea25..19b41f85 100644 --- a/src/widgets/notebook.cpp +++ b/src/widgets/notebook.cpp @@ -1,10 +1,10 @@ #include "widgets/notebook.hpp" #include "colorscheme.hpp" -#include "widgets/mainwindow.hpp" -#include "widgets/notebookbutton.hpp" -#include "widgets/notebookpage.hpp" -#include "widgets/notebooktab.hpp" +#include "widgets/helper/notebookbutton.hpp" +#include "widgets/helper/notebooktab.hpp" #include "widgets/settingsdialog.hpp" +#include "widgets/splitcontainer.hpp" +#include "widgets/window.hpp" #include #include @@ -19,13 +19,14 @@ namespace chatterino { namespace widgets { -Notebook::Notebook(ChannelManager &_channelManager, MainWindow *parent) +Notebook::Notebook(ChannelManager &_channelManager, Window *parent, bool _showButtons) : BaseWidget(parent) , channelManager(_channelManager) , completionManager(parent->completionManager) , addButton(this) , settingsButton(this) , userButton(this) + , showButtons(_showButtons) { this->connect(&this->settingsButton, SIGNAL(clicked()), this, SLOT(settingsButtonClicked())); this->connect(&this->userButton, SIGNAL(clicked()), this, SLOT(usersButtonClicked())); @@ -42,10 +43,10 @@ Notebook::Notebook(ChannelManager &_channelManager, MainWindow *parent) [this](const bool &) { this->performLayout(); }); } -NotebookPage *Notebook::addPage(bool select) +SplitContainer *Notebook::addPage(bool select) { auto tab = new NotebookTab(this); - auto page = new NotebookPage(this->channelManager, this, tab); + auto page = new SplitContainer(this->channelManager, this, tab); tab->show(); @@ -60,7 +61,7 @@ NotebookPage *Notebook::addPage(bool select) return page; } -void Notebook::removePage(NotebookPage *page) +void Notebook::removePage(SplitContainer *page) { int index = this->pages.indexOf(page); @@ -84,7 +85,7 @@ void Notebook::removePage(NotebookPage *page) this->performLayout(); } -void Notebook::select(NotebookPage *page) +void Notebook::select(SplitContainer *page) { if (page == this->selectedPage) { return; @@ -106,7 +107,7 @@ void Notebook::select(NotebookPage *page) this->performLayout(); } -NotebookPage *Notebook::tabAt(QPoint point, int &index) +SplitContainer *Notebook::tabAt(QPoint point, int &index) { int i = 0; @@ -123,7 +124,7 @@ NotebookPage *Notebook::tabAt(QPoint point, int &index) return nullptr; } -void Notebook::rearrangePage(NotebookPage *page, int index) +void Notebook::rearrangePage(SplitContainer *page, int index) { this->pages.move(this->pages.indexOf(page), index); @@ -161,13 +162,13 @@ void Notebook::performLayout(bool animated) int x = 0, y = 0; float scale = this->getDpiMultiplier(); - if (SettingsManager::getInstance().hidePreferencesButton.get()) { + if (!showButtons || SettingsManager::getInstance().hidePreferencesButton.get()) { this->settingsButton.hide(); } else { this->settingsButton.show(); x += settingsButton.width(); } - if (SettingsManager::getInstance().hideUserButton.get()) { + if (!showButtons || SettingsManager::getInstance().hideUserButton.get()) { this->userButton.hide(); } else { this->userButton.move(x, 0); diff --git a/src/widgets/notebook.hpp b/src/widgets/notebook.hpp index 2208a0ae..f1fc7617 100644 --- a/src/widgets/notebook.hpp +++ b/src/widgets/notebook.hpp @@ -1,9 +1,9 @@ #pragma once #include "widgets/basewidget.hpp" -#include "widgets/notebookbutton.hpp" -#include "widgets/notebookpage.hpp" -#include "widgets/notebooktab.hpp" +#include "widgets/helper/notebookbutton.hpp" +#include "widgets/helper/notebooktab.hpp" +#include "widgets/splitcontainer.hpp" #include #include @@ -16,7 +16,7 @@ class CompletionManager; namespace widgets { -class MainWindow; +class Window; class Notebook : public BaseWidget { @@ -25,22 +25,22 @@ class Notebook : public BaseWidget public: enum HighlightType { none, highlighted, newMessage }; - explicit Notebook(ChannelManager &_channelManager, MainWindow *parent); + explicit Notebook(ChannelManager &_channelManager, Window *parent, bool showButtons); - NotebookPage *addPage(bool select = false); + SplitContainer *addPage(bool select = false); - void removePage(NotebookPage *page); - void select(NotebookPage *page); + void removePage(SplitContainer *page); + void select(SplitContainer *page); - NotebookPage *getSelectedPage() const + SplitContainer *getSelectedPage() const { return selectedPage; } void performLayout(bool animate = true); - NotebookPage *tabAt(QPoint point, int &index); - void rearrangePage(NotebookPage *page, int index); + SplitContainer *tabAt(QPoint point, int &index); + void rearrangePage(SplitContainer *page, int index); void nextTab(); void previousTab(); @@ -60,13 +60,15 @@ public: CompletionManager &completionManager; private: - QList pages; + QList pages; NotebookButton addButton; NotebookButton settingsButton; NotebookButton userButton; - NotebookPage *selectedPage = nullptr; + SplitContainer *selectedPage = nullptr; + + bool showButtons; public: void load(const boost::property_tree::ptree &tree); diff --git a/src/widgets/scrollbar.cpp b/src/widgets/scrollbar.cpp index b6ac33ad..3dedf6f3 100644 --- a/src/widgets/scrollbar.cpp +++ b/src/widgets/scrollbar.cpp @@ -1,6 +1,6 @@ #include "widgets/scrollbar.hpp" #include "colorscheme.hpp" -#include "widgets/channelview.hpp" +#include "widgets/helper/channelview.hpp" #include #include diff --git a/src/widgets/scrollbar.hpp b/src/widgets/scrollbar.hpp index d621e03b..6c70a23e 100644 --- a/src/widgets/scrollbar.hpp +++ b/src/widgets/scrollbar.hpp @@ -1,7 +1,7 @@ #pragma once #include "widgets/basewidget.hpp" -#include "widgets/scrollbarhighlight.hpp" +#include "widgets/helper/scrollbarhighlight.hpp" #include #include diff --git a/src/widgets/settingsdialog.cpp b/src/widgets/settingsdialog.cpp index fc517af0..583d39ae 100644 --- a/src/widgets/settingsdialog.cpp +++ b/src/widgets/settingsdialog.cpp @@ -2,8 +2,8 @@ #include "accountmanager.hpp" #include "twitch/twitchmessagebuilder.hpp" #include "twitch/twitchuser.hpp" +#include "widgets/helper/settingsdialogtab.hpp" #include "widgets/logindialog.hpp" -#include "widgets/settingsdialogtab.hpp" #include "windowmanager.hpp" #include @@ -176,7 +176,6 @@ QVBoxLayout *SettingsDialog::createAppearanceTab() fontLayout->addWidget(fontFamilyLabel); fontLayout->addWidget(fontSizeLabel); - { auto &fontManager = FontManager::getInstance(); diff --git a/src/widgets/settingsdialog.hpp b/src/widgets/settingsdialog.hpp index 20307055..d593ab64 100644 --- a/src/widgets/settingsdialog.hpp +++ b/src/widgets/settingsdialog.hpp @@ -2,7 +2,7 @@ #include "settingsmanager.hpp" #include "settingssnapshot.hpp" -#include "widgets/settingsdialogtab.hpp" +#include "widgets/helper/settingsdialogtab.hpp" #include #include diff --git a/src/widgets/chatwidget.cpp b/src/widgets/split.cpp similarity index 81% rename from src/widgets/chatwidget.cpp rename to src/widgets/split.cpp index 5a9e7207..62707965 100644 --- a/src/widgets/chatwidget.cpp +++ b/src/widgets/split.cpp @@ -1,12 +1,14 @@ -#include "widgets/chatwidget.hpp" +#include "widgets/split.hpp" #include "channelmanager.hpp" #include "colorscheme.hpp" -#include "notebookpage.hpp" #include "settingsmanager.hpp" #include "twitch/twitchmessagebuilder.hpp" #include "util/urlfetch.hpp" #include "widgets/qualitypopup.hpp" +#include "widgets/splitcontainer.hpp" #include "widgets/textinputdialog.hpp" +#include "widgets/window.hpp" +#include "windowmanager.hpp" #include #include @@ -34,7 +36,7 @@ namespace widgets { namespace { template -inline void ezShortcut(ChatWidget *w, const char *key, T t) +inline void ezShortcut(Split *w, const char *key, T t) { auto s = new QShortcut(QKeySequence(key), w); s->setContext(Qt::WidgetWithChildrenShortcut); @@ -45,17 +47,19 @@ inline void ezShortcut(ChatWidget *w, const char *key, T t) static int index = 0; -ChatWidget::ChatWidget(ChannelManager &_channelManager, NotebookPage *parent) +Split::Split(ChannelManager &_channelManager, SplitContainer *parent) : BaseWidget(parent) + , channelName("/chatWidgets/" + std::to_string(index++) + "/channelName") , parentPage(*parent) , channelManager(_channelManager) , completionManager(parent->completionManager) - , channelName("/chatWidgets/" + std::to_string(index++) + "/channelName") , channel(_channelManager.emptyChannel) , vbox(this) , header(this) , view(_channelManager.getWindowManager(), this) , input(this, _channelManager.getEmoteManager(), _channelManager.getWindowManager()) + , flexSizeX(1) + , flexSizeY(1) { this->vbox.setSpacing(0); this->vbox.setMargin(1); @@ -66,21 +70,27 @@ ChatWidget::ChatWidget(ChannelManager &_channelManager, NotebookPage *parent) // Initialize chat widget-wide hotkeys // CTRL+T: Create new split (Add page) - ezShortcut(this, "CTRL+T", &ChatWidget::doAddSplit); + ezShortcut(this, "CTRL+T", &Split::doAddSplit); // CTRL+W: Close Split - ezShortcut(this, "CTRL+W", &ChatWidget::doCloseSplit); + ezShortcut(this, "CTRL+W", &Split::doCloseSplit); // CTRL+R: Change Channel - ezShortcut(this, "CTRL+R", &ChatWidget::doChangeChannel); + ezShortcut(this, "CTRL+R", &Split::doChangeChannel); + + // xd + //ezShortcut(this, "ALT+SHIFT+RIGHT", &Split::doIncFlexX); + //ezShortcut(this, "ALT+SHIFT+LEFT", &Split::doDecFlexX); + //ezShortcut(this, "ALT+SHIFT+UP", &Split::doIncFlexY); + //ezShortcut(this, "ALT+SHIFT+DOWN", &Split::doDecFlexY); #ifndef NDEBUG // F12: Toggle message spawning - ezShortcut(this, "ALT+Q", &ChatWidget::doToggleMessageSpawning); + ezShortcut(this, "ALT+Q", &Split::doToggleMessageSpawning); #endif this->channelName.getValueChangedSignal().connect( - std::bind(&ChatWidget::channelNameUpdated, this, std::placeholders::_1)); + std::bind(&Split::channelNameUpdated, this, std::placeholders::_1)); this->channelNameUpdated(this->channelName.getValue()); @@ -94,26 +104,26 @@ ChatWidget::ChatWidget(ChannelManager &_channelManager, NotebookPage *parent) }); QTimer *timer = new QTimer(this); - connect(timer, &QTimer::timeout, this, &ChatWidget::test); + connect(timer, &QTimer::timeout, this, &Split::test); timer->start(1000); } -ChatWidget::~ChatWidget() +Split::~Split() { this->channelNameUpdated(""); } -std::shared_ptr ChatWidget::getChannel() const +std::shared_ptr Split::getChannel() const { return this->channel; } -std::shared_ptr &ChatWidget::getChannelRef() +std::shared_ptr &Split::getChannelRef() { return this->channel; } -void ChatWidget::setChannel(std::shared_ptr _newChannel) +void Split::setChannel(std::shared_ptr _newChannel) { this->view.setChannel(_newChannel); @@ -122,7 +132,29 @@ void ChatWidget::setChannel(std::shared_ptr _newChannel) this->channelChanged(); } -void ChatWidget::channelNameUpdated(const std::string &newChannelName) +void Split::setFlexSizeX(double x) +{ + this->flexSizeX = x; + this->parentPage.updateFlexValues(); +} + +double Split::getFlexSizeX() +{ + return this->flexSizeX; +} + +void Split::setFlexSizeY(double y) +{ + this->flexSizeY = y; + this->parentPage.updateFlexValues(); +} + +double Split::getFlexSizeY() +{ + return this->flexSizeY; +} + +void Split::channelNameUpdated(const std::string &newChannelName) { // remove current channel if (!this->channel->isEmpty()) { @@ -141,7 +173,7 @@ void ChatWidget::channelNameUpdated(const std::string &newChannelName) this->header.updateChannelText(); } -bool ChatWidget::showChangeChannelPopup(const char *dialogTitle, bool empty) +bool Split::showChangeChannelPopup(const char *dialogTitle, bool empty) { // create new input dialog and execute it TextInputDialog dialog(this); @@ -164,27 +196,27 @@ bool ChatWidget::showChangeChannelPopup(const char *dialogTitle, bool empty) return false; } -void ChatWidget::layoutMessages() +void Split::layoutMessages() { this->view.layoutMessages(); } -void ChatWidget::updateGifEmotes() +void Split::updateGifEmotes() { this->view.updateGifEmotes(); } -void ChatWidget::giveFocus(Qt::FocusReason reason) +void Split::giveFocus(Qt::FocusReason reason) { this->input.textInput.setFocus(reason); } -bool ChatWidget::hasFocus() const +bool Split::hasFocus() const { return this->input.textInput.hasFocus(); } -void ChatWidget::paintEvent(QPaintEvent *) +void Split::paintEvent(QPaintEvent *) { // color the background of the chat QPainter painter(this); @@ -192,7 +224,7 @@ void ChatWidget::paintEvent(QPaintEvent *) painter.fillRect(this->rect(), this->colorScheme.ChatBackground); } -void ChatWidget::load(const boost::property_tree::ptree &tree) +void Split::load(const boost::property_tree::ptree &tree) { // load tab text try { @@ -201,7 +233,7 @@ void ChatWidget::load(const boost::property_tree::ptree &tree) } } -boost::property_tree::ptree ChatWidget::save() +boost::property_tree::ptree Split::save() { boost::property_tree::ptree tree; @@ -211,19 +243,19 @@ boost::property_tree::ptree ChatWidget::save() } /// Slots -void ChatWidget::doAddSplit() +void Split::doAddSplit() { - NotebookPage *page = static_cast(this->parentWidget()); + SplitContainer *page = static_cast(this->parentWidget()); page->addChat(true); } -void ChatWidget::doCloseSplit() +void Split::doCloseSplit() { - NotebookPage *page = static_cast(this->parentWidget()); + SplitContainer *page = static_cast(this->parentWidget()); page->removeFromLayout(this); } -void ChatWidget::doChangeChannel() +void Split::doChangeChannel() { this->showChangeChannelPopup("Change channel"); auto popup = this->findChildren(); @@ -233,33 +265,37 @@ void ChatWidget::doChangeChannel() } } -void ChatWidget::doPopup() +void Split::doPopup() { - // TODO: Copy signals and stuff too - auto widget = - new ChatWidget(this->channelManager, static_cast(this->parentWidget())); - widget->channelName = this->channelName; - widget->show(); + Window &window = WindowManager::instance->createWindow(); + + Split *split = new Split(this->channelManager, + static_cast(window.getNotebook().getSelectedPage())); + split->channelName = this->channelName.getValue(); + + window.getNotebook().getSelectedPage()->addToLayout(split); + + window.show(); } -void ChatWidget::doClearChat() +void Split::doClearChat() { view.clearMessages(); } -void ChatWidget::doOpenChannel() +void Split::doOpenChannel() { qDebug() << "[UNIMPLEMENTED] Open twitch.tv/" << QString::fromStdString(this->channelName.getValue()); } -void ChatWidget::doOpenPopupPlayer() +void Split::doOpenPopupPlayer() { qDebug() << "[UNIMPLEMENTED] Open twitch.tv/" << QString::fromStdString(this->channelName.getValue()) << "/popout"; } -void ChatWidget::doOpenStreamlink() +void Split::doOpenStreamlink() { SettingsManager &settings = SettingsManager::getInstance(); QString preferredQuality = @@ -326,7 +362,7 @@ void ChatWidget::doOpenStreamlink() } } -void ChatWidget::doOpenViewerList() +void Split::doOpenViewerList() { auto viewerDock = new QDockWidget("Viewer List", this); viewerDock->setAllowedAreas(Qt::LeftDockWidgetArea); @@ -412,7 +448,7 @@ void ChatWidget::doOpenViewerList() viewerDock->show(); } -void ChatWidget::doOpenAccountPopupWidget(AccountPopupWidget *widget, QString user) +void Split::doOpenAccountPopupWidget(AccountPopupWidget *widget, QString user) { widget->setName(user); widget->move(QCursor::pos()); @@ -421,7 +457,7 @@ void ChatWidget::doOpenAccountPopupWidget(AccountPopupWidget *widget, QString us widget->setFocus(); } -void ChatWidget::doCopy() +void Split::doCopy() { QApplication::clipboard()->setText(this->view.getSelectedText()); } @@ -466,7 +502,7 @@ static Iter select_randomly(Iter start, Iter end) return select_randomly(start, end, gen); } -void ChatWidget::test() +void Split::test() { if (this->testEnabled) { messages::MessageParseArgs args; @@ -496,10 +532,29 @@ void ChatWidget::test() } } -void ChatWidget::doToggleMessageSpawning() +void Split::doToggleMessageSpawning() { this->testEnabled = !this->testEnabled; } +void Split::doIncFlexX() +{ + this->setFlexSizeX(this->getFlexSizeX() * 1.2); +} + +void Split::doDecFlexX() +{ + this->setFlexSizeX(this->getFlexSizeX() * (1 / 1.2)); +} + +void Split::doIncFlexY() +{ + this->setFlexSizeY(this->getFlexSizeY() * 1.2); +} + +void Split::doDecFlexY() +{ + this->setFlexSizeY(this->getFlexSizeY() * (1 / 1.2)); +} } // namespace widgets } // namespace chatterino diff --git a/src/widgets/chatwidget.hpp b/src/widgets/split.hpp similarity index 82% rename from src/widgets/chatwidget.hpp rename to src/widgets/split.hpp index 1e937ce5..8987ce54 100644 --- a/src/widgets/chatwidget.hpp +++ b/src/widgets/split.hpp @@ -6,10 +6,10 @@ #include "messages/word.hpp" #include "messages/wordpart.hpp" #include "widgets/basewidget.hpp" -#include "widgets/channelview.hpp" -#include "widgets/chatwidgetheader.hpp" -#include "widgets/chatwidgetinput.hpp" -#include "widgets/rippleeffectlabel.hpp" +#include "widgets/helper/channelview.hpp" +#include "widgets/helper/rippleeffectlabel.hpp" +#include "widgets/helper/splitheader.hpp" +#include "widgets/helper/splitinput.hpp" #include #include @@ -26,7 +26,7 @@ class CompletionManager; namespace widgets { -class NotebookPage; +class SplitContainer; // Each ChatWidget consists of three sub-elements that handle their own part of the chat widget: // ChatWidgetHeader @@ -38,59 +38,56 @@ class NotebookPage; // - Responsible for rendering and handling user text input // // Each sub-element has a reference to the parent Chat Widget -class ChatWidget : public BaseWidget +class Split : public BaseWidget { - friend class ChatWidgetInput; + friend class SplitInput; Q_OBJECT public: - ChatWidget(ChannelManager &_channelManager, NotebookPage *parent); - ~ChatWidget(); + Split(ChannelManager &_channelManager, SplitContainer *parent); + ~Split(); + + ChannelManager &channelManager; + CompletionManager &completionManager; + pajlada::Settings::Setting channelName; + boost::signals2::signal channelChanged; + bool testEnabled = false; std::shared_ptr getChannel() const; std::shared_ptr &getChannelRef(); + void setFlexSizeX(double x); + double getFlexSizeX(); + void setFlexSizeY(double y); + double getFlexSizeY(); bool showChangeChannelPopup(const char *dialogTitle, bool empty = false); - void giveFocus(Qt::FocusReason reason); bool hasFocus() const; - void layoutMessages(); void updateGifEmotes(); - - boost::signals2::signal channelChanged; + void load(const boost::property_tree::ptree &tree); + boost::property_tree::ptree save(); protected: virtual void paintEvent(QPaintEvent *) override; -public: - ChannelManager &channelManager; - CompletionManager &completionManager; - - pajlada::Settings::Setting channelName; - private: - void setChannel(std::shared_ptr newChannel); - void doOpenAccountPopupWidget(AccountPopupWidget *widget, QString user); - - void channelNameUpdated(const std::string &newChannelName); - - NotebookPage &parentPage; - + SplitContainer &parentPage; std::shared_ptr channel; QVBoxLayout vbox; - ChatWidgetHeader header; + SplitHeader header; ChannelView view; - ChatWidgetInput input; + SplitInput input; + double flexSizeX; + double flexSizeY; boost::signals2::connection channelIDChangedConnection; -public: - void load(const boost::property_tree::ptree &tree); - boost::property_tree::ptree save(); - bool testEnabled = false; + void setChannel(std::shared_ptr newChannel); + void doOpenAccountPopupWidget(AccountPopupWidget *widget, QString user); + void channelNameUpdated(const std::string &newChannelName); public slots: // Add new split to the notebook page that this chat widget is in @@ -127,6 +124,10 @@ public slots: void doToggleMessageSpawning(); void test(); + void doIncFlexX(); + void doDecFlexX(); + void doIncFlexY(); + void doDecFlexY(); }; } // namespace widgets diff --git a/src/widgets/notebookpage.cpp b/src/widgets/splitcontainer.cpp similarity index 82% rename from src/widgets/notebookpage.cpp rename to src/widgets/splitcontainer.cpp index 2c271fb1..46303eef 100644 --- a/src/widgets/notebookpage.cpp +++ b/src/widgets/splitcontainer.cpp @@ -1,8 +1,8 @@ -#include "widgets/notebookpage.hpp" +#include "widgets/splitcontainer.hpp" #include "colorscheme.hpp" -#include "widgets/chatwidget.hpp" +#include "widgets/helper/notebooktab.hpp" #include "widgets/notebook.hpp" -#include "widgets/notebooktab.hpp" +#include "widgets/split.hpp" #include #include @@ -19,16 +19,17 @@ namespace chatterino { namespace widgets { -bool NotebookPage::isDraggingSplit = false; -ChatWidget *NotebookPage::draggingSplit = nullptr; -std::pair NotebookPage::dropPosition = std::pair(-1, -1); +bool SplitContainer::isDraggingSplit = false; +Split *SplitContainer::draggingSplit = nullptr; +std::pair SplitContainer::dropPosition = std::pair(-1, -1); -NotebookPage::NotebookPage(ChannelManager &_channelManager, Notebook *parent, NotebookTab *_tab) +SplitContainer::SplitContainer(ChannelManager &_channelManager, Notebook *parent, NotebookTab *_tab) : BaseWidget(parent->colorScheme, parent) , channelManager(_channelManager) , completionManager(parent->completionManager) , tab(_tab) , dropPreview(this) + , chatWidgets() { this->tab->page = this; @@ -47,7 +48,18 @@ NotebookPage::NotebookPage(ChannelManager &_channelManager, Notebook *parent, No this->refreshTitle(); } -std::pair NotebookPage::removeFromLayout(ChatWidget *widget) +void SplitContainer::updateFlexValues() +{ + for (int i = 0; i < this->ui.hbox.count(); i++) { + QVBoxLayout *vbox = (QVBoxLayout *)ui.hbox.itemAt(i)->layout(); + + if (vbox->count() != 0) { + ui.hbox.setStretch(i, (int)(1000 * ((Split *)vbox->itemAt(0))->getFlexSizeX())); + } + } +} + +std::pair SplitContainer::removeFromLayout(Split *widget) { // remove reference to chat widget from chatWidgets vector auto it = std::find(std::begin(this->chatWidgets), std::end(this->chatWidgets), widget); @@ -83,8 +95,7 @@ std::pair NotebookPage::removeFromLayout(ChatWidget *widget) return std::pair(-1, -1); } -void NotebookPage::addToLayout(ChatWidget *widget, - std::pair position = std::pair(-1, -1)) +void SplitContainer::addToLayout(Split *widget, std::pair position) { this->chatWidgets.push_back(widget); @@ -120,19 +131,19 @@ void NotebookPage::addToLayout(ChatWidget *widget, this->refreshCurrentFocusCoordinates(); } -const std::vector &NotebookPage::getChatWidgets() const +const std::vector &SplitContainer::getChatWidgets() const { return this->chatWidgets; } -NotebookTab *NotebookPage::getTab() const +NotebookTab *SplitContainer::getTab() const { return this->tab; } -void NotebookPage::addChat(bool openChannelNameDialog) +void SplitContainer::addChat(bool openChannelNameDialog) { - ChatWidget *w = this->createChatWidget(); + Split *w = this->createChatWidget(); if (openChannelNameDialog) { bool ret = w->showChangeChannelPopup("Open channel", true); @@ -146,7 +157,7 @@ void NotebookPage::addChat(bool openChannelNameDialog) this->addToLayout(w, std::pair(-1, -1)); } -void NotebookPage::refreshCurrentFocusCoordinates(bool alsoSetLastRequested) +void SplitContainer::refreshCurrentFocusCoordinates(bool alsoSetLastRequested) { int setX = -1; int setY = -1; @@ -171,7 +182,7 @@ void NotebookPage::refreshCurrentFocusCoordinates(bool alsoSetLastRequested) QWidget *w = innerItem->widget(); if (w) { - ChatWidget *chatWidget = static_cast(w); + Split *chatWidget = static_cast(w); if (chatWidget->hasFocus()) { setX = x; setY = y; @@ -199,7 +210,7 @@ void NotebookPage::refreshCurrentFocusCoordinates(bool alsoSetLastRequested) } } -void NotebookPage::requestFocus(int requestedX, int requestedY) +void SplitContainer::requestFocus(int requestedX, int requestedY) { // XXX: Perhaps if we request an Y coordinate out of bounds, we shuold set all previously set // requestedYs to 0 (if -1 is requested) or that x-coordinates vbox count (if requestedY >= @@ -238,12 +249,12 @@ void NotebookPage::requestFocus(int requestedX, int requestedY) QWidget *w = innerItem->widget(); if (w) { - ChatWidget *chatWidget = static_cast(w); + Split *chatWidget = static_cast(w); chatWidget->giveFocus(Qt::OtherFocusReason); } } -void NotebookPage::enterEvent(QEvent *) +void SplitContainer::enterEvent(QEvent *) { if (this->ui.hbox.count() == 0) { this->setCursor(QCursor(Qt::PointingHandCursor)); @@ -252,11 +263,11 @@ void NotebookPage::enterEvent(QEvent *) } } -void NotebookPage::leaveEvent(QEvent *) +void SplitContainer::leaveEvent(QEvent *) { } -void NotebookPage::mouseReleaseEvent(QMouseEvent *event) +void SplitContainer::mouseReleaseEvent(QMouseEvent *event) { if (this->ui.hbox.count() == 0 && event->button() == Qt::LeftButton) { // "Add Chat" was clicked @@ -266,7 +277,7 @@ void NotebookPage::mouseReleaseEvent(QMouseEvent *event) } } -void NotebookPage::dragEnterEvent(QDragEnterEvent *event) +void SplitContainer::dragEnterEvent(QDragEnterEvent *event) { if (!event->mimeData()->hasFormat("chatterino/split")) return; @@ -306,12 +317,12 @@ void NotebookPage::dragEnterEvent(QDragEnterEvent *event) event->acceptProposedAction(); } -void NotebookPage::dragMoveEvent(QDragMoveEvent *event) +void SplitContainer::dragMoveEvent(QDragMoveEvent *event) { setPreviewRect(event->pos()); } -void NotebookPage::setPreviewRect(QPoint mousePos) +void SplitContainer::setPreviewRect(QPoint mousePos) { for (DropRegion region : this->dropRegions) { if (region.rect.contains(mousePos)) { @@ -331,25 +342,25 @@ void NotebookPage::setPreviewRect(QPoint mousePos) this->dropPreview.hide(); } -void NotebookPage::dragLeaveEvent(QDragLeaveEvent *event) +void SplitContainer::dragLeaveEvent(QDragLeaveEvent *event) { this->dropPreview.hide(); } -void NotebookPage::dropEvent(QDropEvent *event) +void SplitContainer::dropEvent(QDropEvent *event) { if (isDraggingSplit) { event->acceptProposedAction(); - NotebookPage::draggingSplit->setParent(this); + SplitContainer::draggingSplit->setParent(this); - addToLayout(NotebookPage::draggingSplit, dropPosition); + addToLayout(SplitContainer::draggingSplit, dropPosition); } this->dropPreview.hide(); } -bool NotebookPage::eventFilter(QObject *object, QEvent *event) +bool SplitContainer::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::FocusIn) { QFocusEvent *focusEvent = static_cast(event); @@ -360,7 +371,7 @@ bool NotebookPage::eventFilter(QObject *object, QEvent *event) return false; } -void NotebookPage::paintEvent(QPaintEvent *) +void SplitContainer::paintEvent(QPaintEvent *) { QPainter painter(this); @@ -380,7 +391,7 @@ void NotebookPage::paintEvent(QPaintEvent *) painter.fillRect(0, 0, width(), 2, accentColor); } -void NotebookPage::showEvent(QShowEvent *event) +void SplitContainer::showEvent(QShowEvent *event) { // Whenever this notebook page is shown, give focus to the last focused chat widget // If this is the first time this notebook page is shown, it will give focus to the top-left @@ -388,7 +399,7 @@ void NotebookPage::showEvent(QShowEvent *event) this->requestFocus(this->currentX, this->currentY); } -static std::pair getWidgetPositionInLayout(QLayout *layout, const ChatWidget *chatWidget) +static std::pair getWidgetPositionInLayout(QLayout *layout, const Split *chatWidget) { for (int i = 0; i < layout->count(); ++i) { printf("xD\n"); @@ -397,7 +408,7 @@ static std::pair getWidgetPositionInLayout(QLayout *layout, const Chat return std::make_pair(-1, -1); } -std::pair NotebookPage::getChatPosition(const ChatWidget *chatWidget) +std::pair SplitContainer::getChatPosition(const Split *chatWidget) { auto layout = this->ui.hbox.layout(); @@ -408,12 +419,12 @@ std::pair NotebookPage::getChatPosition(const ChatWidget *chatWidget) return getWidgetPositionInLayout(layout, chatWidget); } -ChatWidget *NotebookPage::createChatWidget() +Split *SplitContainer::createChatWidget() { - return new ChatWidget(this->channelManager, this); + return new Split(this->channelManager, this); } -void NotebookPage::refreshTitle() +void SplitContainer::refreshTitle() { if (!this->tab->useDefaultBehaviour) { return; @@ -444,7 +455,7 @@ void NotebookPage::refreshTitle() this->tab->setTitle(newTitle); } -void NotebookPage::load(const boost::property_tree::ptree &tree) +void SplitContainer::load(const boost::property_tree::ptree &tree) { try { int column = 0; @@ -488,7 +499,7 @@ static void saveFromLayout(QLayout *layout, boost::property_tree::ptree &tree) continue; } - ChatWidget *chatWidget = qobject_cast(widget); + Split *chatWidget = qobject_cast(widget); if (chatWidget != nullptr) { boost::property_tree::ptree chat = chatWidget->save(); @@ -499,7 +510,7 @@ static void saveFromLayout(QLayout *layout, boost::property_tree::ptree &tree) } } -boost::property_tree::ptree NotebookPage::save() +boost::property_tree::ptree SplitContainer::save() { boost::property_tree::ptree tree; diff --git a/src/widgets/notebookpage.hpp b/src/widgets/splitcontainer.hpp similarity index 75% rename from src/widgets/notebookpage.hpp rename to src/widgets/splitcontainer.hpp index 64bdee64..91c28ccc 100644 --- a/src/widgets/notebookpage.hpp +++ b/src/widgets/splitcontainer.hpp @@ -1,10 +1,9 @@ #pragma once #include "widgets/basewidget.hpp" -#include "widgets/chatwidget.hpp" -#include "widgets/notebookpage.hpp" -#include "widgets/notebookpagedroppreview.hpp" -#include "widgets/notebooktab.hpp" +#include "widgets/helper/droppreview.hpp" +#include "widgets/helper/notebooktab.hpp" +#include "widgets/split.hpp" #include #include @@ -22,26 +21,26 @@ class CompletionManager; namespace widgets { -class NotebookPage : public BaseWidget +class SplitContainer : public BaseWidget { Q_OBJECT public: - NotebookPage(ChannelManager &_channelManager, Notebook *parent, NotebookTab *_tab); + SplitContainer(ChannelManager &_channelManager, Notebook *parent, NotebookTab *_tab); ChannelManager &channelManager; CompletionManager &completionManager; - std::pair removeFromLayout(ChatWidget *widget); - void addToLayout(ChatWidget *widget, std::pair position); + std::pair removeFromLayout(Split *widget); + void addToLayout(Split *widget, std::pair position = std::pair(-1, -1)); - const std::vector &getChatWidgets() const; + const std::vector &getChatWidgets() const; NotebookTab *getTab() const; void addChat(bool openChannelNameDialog = false); static bool isDraggingSplit; - static ChatWidget *draggingSplit; + static Split *draggingSplit; static std::pair dropPosition; int currentX = 0; @@ -51,6 +50,8 @@ public: void refreshCurrentFocusCoordinates(bool alsoSetLastRequested = false); void requestFocus(int x, int y); + void updateFlexValues(); + protected: virtual bool eventFilter(QObject *object, QEvent *event) override; virtual void paintEvent(QPaintEvent *) override; @@ -86,16 +87,16 @@ private: QHBoxLayout hbox; } ui; - std::vector chatWidgets; + std::vector chatWidgets; std::vector dropRegions; NotebookPageDropPreview dropPreview; void setPreviewRect(QPoint mousePos); - std::pair getChatPosition(const ChatWidget *chatWidget); + std::pair getChatPosition(const Split *chatWidget); - ChatWidget *createChatWidget(); + Split *createChatWidget(); public: void refreshTitle(); diff --git a/src/widgets/mainwindow.cpp b/src/widgets/window.cpp similarity index 77% rename from src/widgets/mainwindow.cpp rename to src/widgets/window.cpp index d6d140b6..f98dfc04 100644 --- a/src/widgets/mainwindow.cpp +++ b/src/widgets/window.cpp @@ -1,8 +1,8 @@ -#include "widgets/mainwindow.hpp" +#include "widgets/window.hpp" #include "channelmanager.hpp" #include "colorscheme.hpp" #include "settingsmanager.hpp" -#include "widgets/chatwidget.hpp" +#include "widgets/split.hpp" #include "widgets/notebook.hpp" #include "widgets/settingsdialog.hpp" @@ -16,13 +16,13 @@ namespace chatterino { namespace widgets { -MainWindow::MainWindow(ChannelManager &_channelManager, ColorScheme &_colorScheme, - CompletionManager &_completionManager) +Window::Window(ChannelManager &_channelManager, ColorScheme &_colorScheme, + CompletionManager &_completionManager, bool _isMainWindow) : BaseWidget(_colorScheme, nullptr) , channelManager(_channelManager) , colorScheme(_colorScheme) , completionManager(_completionManager) - , notebook(this->channelManager, this) + , notebook(this->channelManager, this, _isMainWindow) , dpi(this->getDpiMultiplier()) // , windowGeometry("/windows/0/geometry") { @@ -66,11 +66,11 @@ MainWindow::MainWindow(ChannelManager &_channelManager, ColorScheme &_colorSchem } } -MainWindow::~MainWindow() +Window::~Window() { } -void MainWindow::repaintVisibleChatWidgets(Channel *channel) +void Window::repaintVisibleChatWidgets(Channel *channel) { auto *page = this->notebook.getSelectedPage(); @@ -78,10 +78,10 @@ void MainWindow::repaintVisibleChatWidgets(Channel *channel) return; } - const std::vector &widgets = page->getChatWidgets(); + const std::vector &widgets = page->getChatWidgets(); for (auto it = widgets.begin(); it != widgets.end(); ++it) { - ChatWidget *widget = *it; + Split *widget = *it; if (channel == nullptr || channel == widget->getChannel().get()) { widget->layoutMessages(); @@ -89,14 +89,14 @@ void MainWindow::repaintVisibleChatWidgets(Channel *channel) } } -void MainWindow::load(const boost::property_tree::ptree &tree) +void Window::load(const boost::property_tree::ptree &tree) { this->notebook.load(tree); loaded = true; } -boost::property_tree::ptree MainWindow::save() +boost::property_tree::ptree Window::save() { boost::property_tree::ptree child; @@ -107,30 +107,30 @@ boost::property_tree::ptree MainWindow::save() return child; } -void MainWindow::loadDefaults() +void Window::loadDefaults() { this->notebook.loadDefaults(); loaded = true; } -bool MainWindow::isLoaded() const +bool Window::isLoaded() const { return loaded; } -Notebook &MainWindow::getNotebook() +Notebook &Window::getNotebook() { return this->notebook; } -void MainWindow::closeEvent(QCloseEvent *) +void Window::closeEvent(QCloseEvent *) { // Save closing window position // this->windowGeometry = this->geometry(); } -void MainWindow::refreshTheme() +void Window::refreshTheme() { QPalette palette; palette.setColor(QPalette::Background, this->colorScheme.TabBackground); diff --git a/src/widgets/mainwindow.hpp b/src/widgets/window.hpp similarity index 94% rename from src/widgets/mainwindow.hpp rename to src/widgets/window.hpp index 2b9d68ad..12b1b545 100644 --- a/src/widgets/mainwindow.hpp +++ b/src/widgets/window.hpp @@ -8,7 +8,6 @@ //#include //#endif -#include #include #include #include @@ -21,14 +20,14 @@ class CompletionManager; namespace widgets { -class MainWindow : public BaseWidget +class Window : public BaseWidget { Q_OBJECT public: - explicit MainWindow(ChannelManager &_channelManager, ColorScheme &_colorScheme, - CompletionManager &_completionManager); - ~MainWindow(); + explicit Window(ChannelManager &_channelManager, ColorScheme &_colorScheme, + CompletionManager &_completionManager, bool isMainWindow); + ~Window(); void repaintVisibleChatWidgets(Channel *channel = nullptr); diff --git a/src/windowmanager.cpp b/src/windowmanager.cpp index 3792a42d..a26c1b10 100644 --- a/src/windowmanager.cpp +++ b/src/windowmanager.cpp @@ -9,6 +9,7 @@ #include namespace chatterino { +WindowManager *WindowManager::instance = nullptr; WindowManager::WindowManager(ChannelManager &_channelManager, ColorScheme &_colorScheme, CompletionManager &_completionManager) @@ -16,6 +17,7 @@ WindowManager::WindowManager(ChannelManager &_channelManager, ColorScheme &_colo , colorScheme(_colorScheme) , completionManager(_completionManager) { + WindowManager::instance = this; } static const std::string &getSettingsPath() @@ -49,18 +51,35 @@ void WindowManager::repaintGifEmotes() // } //} -widgets::MainWindow &WindowManager::getMainWindow() +widgets::Window &WindowManager::getMainWindow() { std::lock_guard lock(this->windowMutex); if (this->mainWindow == nullptr) { - this->mainWindow = new widgets::MainWindow(this->channelManager, this->colorScheme, - this->completionManager); + this->mainWindow = new widgets::Window(this->channelManager, this->colorScheme, + this->completionManager, true); } return *this->mainWindow; } +widgets::Window &WindowManager::getCurrentWindow() +{ +} + +widgets::Window &WindowManager::createWindow() +{ + auto *window = new widgets::Window(this->channelManager, this->colorScheme, + this->completionManager, false); + + std::lock_guard lock(this->windowMutex); + window->loadDefaults(); + + this->windows.push_back(window); + + return *window; +} + void WindowManager::load() { const auto &settingsPath = getSettingsPath(); diff --git a/src/windowmanager.hpp b/src/windowmanager.hpp index 441e7b31..78b569c8 100644 --- a/src/windowmanager.hpp +++ b/src/windowmanager.hpp @@ -1,6 +1,6 @@ #pragma once -#include "widgets/mainwindow.hpp" +#include "widgets/window.hpp" #include @@ -16,6 +16,8 @@ public: explicit WindowManager(ChannelManager &_channelManager, ColorScheme &_colorScheme, CompletionManager &_completionManager); + static WindowManager *instance; + ChannelManager &channelManager; ColorScheme &colorScheme; CompletionManager &completionManager; @@ -25,7 +27,10 @@ public: void repaintGifEmotes(); // void updateAll(); - widgets::MainWindow &getMainWindow(); + widgets::Window &getMainWindow(); + widgets::Window &getCurrentWindow(); + + widgets::Window &createWindow(); void load(); void save(); @@ -35,9 +40,10 @@ public: private: std::mutex windowMutex; + std::vector windows; // TODO(pajlada): Store as a value instead of a pointer - widgets::MainWindow *mainWindow = nullptr; + widgets::Window *mainWindow = nullptr; }; } // namespace chatterino