2017-06-07 10:09:24 +02:00
|
|
|
#pragma once
|
2016-12-29 17:31:07 +01:00
|
|
|
|
2017-06-11 09:31:45 +02:00
|
|
|
#include "channel.hpp"
|
|
|
|
#include "messages/limitedqueuesnapshot.hpp"
|
|
|
|
#include "messages/messageref.hpp"
|
|
|
|
#include "messages/word.hpp"
|
|
|
|
#include "messages/wordpart.hpp"
|
2017-06-26 16:41:20 +02:00
|
|
|
#include "widgets/basewidget.hpp"
|
2017-11-12 17:21:50 +01:00
|
|
|
#include "widgets/helper/channelview.hpp"
|
|
|
|
#include "widgets/helper/rippleeffectlabel.hpp"
|
|
|
|
#include "widgets/helper/splitheader.hpp"
|
|
|
|
#include "widgets/helper/splitinput.hpp"
|
2017-01-01 02:30:42 +01:00
|
|
|
|
2017-01-18 04:33:30 +01:00
|
|
|
#include <QFont>
|
2017-06-10 23:53:39 +02:00
|
|
|
#include <QShortcut>
|
2017-01-18 04:33:30 +01:00
|
|
|
#include <QVBoxLayout>
|
|
|
|
#include <QWidget>
|
2017-02-02 22:15:09 +01:00
|
|
|
#include <boost/signals2/connection.hpp>
|
2017-01-18 04:33:30 +01:00
|
|
|
|
2017-04-14 17:52:22 +02:00
|
|
|
namespace chatterino {
|
2017-06-13 21:13:58 +02:00
|
|
|
|
|
|
|
class ChannelManager;
|
2017-06-26 16:41:20 +02:00
|
|
|
class ColorScheme;
|
2017-06-13 21:13:58 +02:00
|
|
|
|
2017-04-14 17:52:22 +02:00
|
|
|
namespace widgets {
|
2017-01-18 21:30:23 +01:00
|
|
|
|
2017-11-12 17:21:50 +01:00
|
|
|
class SplitContainer;
|
2017-06-26 16:41:20 +02:00
|
|
|
|
2017-06-10 22:48:28 +02:00
|
|
|
// Each ChatWidget consists of three sub-elements that handle their own part of the chat widget:
|
|
|
|
// ChatWidgetHeader
|
|
|
|
// - Responsible for rendering which channel the ChatWidget is in, and the menu in the top-left of
|
|
|
|
// the chat widget
|
|
|
|
// ChatWidgetView
|
|
|
|
// - Responsible for rendering all chat messages, and the scrollbar
|
|
|
|
// ChatWidgetInput
|
|
|
|
// - Responsible for rendering and handling user text input
|
|
|
|
//
|
|
|
|
// Each sub-element has a reference to the parent Chat Widget
|
2017-11-12 17:21:50 +01:00
|
|
|
class Split : public BaseWidget
|
2016-12-29 17:31:07 +01:00
|
|
|
{
|
2017-11-12 17:21:50 +01:00
|
|
|
friend class SplitInput;
|
2017-09-21 02:20:02 +02:00
|
|
|
|
2016-12-29 17:31:07 +01:00
|
|
|
Q_OBJECT
|
|
|
|
|
2017-12-22 14:44:31 +01:00
|
|
|
const std::string uuid;
|
|
|
|
const std::string settingRoot;
|
|
|
|
|
2016-12-29 17:31:07 +01:00
|
|
|
public:
|
2017-12-22 14:44:31 +01:00
|
|
|
Split(ChannelManager &_channelManager, SplitContainer *parent, const std::string &_uuid);
|
2017-11-12 17:21:50 +01:00
|
|
|
~Split();
|
|
|
|
|
|
|
|
ChannelManager &channelManager;
|
|
|
|
pajlada::Settings::Setting<std::string> channelName;
|
|
|
|
boost::signals2::signal<void()> channelChanged;
|
2016-12-29 17:31:07 +01:00
|
|
|
|
2017-12-22 14:44:31 +01:00
|
|
|
const std::string &getUUID() const;
|
2017-06-11 11:36:42 +02:00
|
|
|
std::shared_ptr<Channel> getChannel() const;
|
|
|
|
std::shared_ptr<Channel> &getChannelRef();
|
2017-11-12 17:21:50 +01:00
|
|
|
void setFlexSizeX(double x);
|
|
|
|
double getFlexSizeX();
|
|
|
|
void setFlexSizeY(double y);
|
|
|
|
double getFlexSizeY();
|
2017-01-17 00:15:44 +01:00
|
|
|
|
2017-07-31 01:36:42 +02:00
|
|
|
bool showChangeChannelPopup(const char *dialogTitle, bool empty = false);
|
2017-08-12 15:41:14 +02:00
|
|
|
void giveFocus(Qt::FocusReason reason);
|
|
|
|
bool hasFocus() const;
|
2017-10-11 10:34:04 +02:00
|
|
|
void layoutMessages();
|
2017-09-16 00:05:06 +02:00
|
|
|
void updateGifEmotes();
|
2017-11-04 14:57:29 +01:00
|
|
|
|
2016-12-29 17:31:07 +01:00
|
|
|
protected:
|
2017-07-02 14:28:37 +02:00
|
|
|
virtual void paintEvent(QPaintEvent *) override;
|
2016-12-29 17:31:07 +01:00
|
|
|
|
2017-07-23 14:16:13 +02:00
|
|
|
private:
|
2017-11-12 17:21:50 +01:00
|
|
|
SplitContainer &parentPage;
|
2017-06-11 11:36:42 +02:00
|
|
|
std::shared_ptr<Channel> channel;
|
2017-01-18 04:33:30 +01:00
|
|
|
|
2017-06-11 11:36:42 +02:00
|
|
|
QVBoxLayout vbox;
|
2017-11-12 17:21:50 +01:00
|
|
|
SplitHeader header;
|
2017-09-16 00:05:06 +02:00
|
|
|
ChannelView view;
|
2017-11-12 17:21:50 +01:00
|
|
|
SplitInput input;
|
|
|
|
double flexSizeX;
|
|
|
|
double flexSizeY;
|
2017-01-29 11:38:00 +01:00
|
|
|
|
2017-09-16 00:05:06 +02:00
|
|
|
boost::signals2::connection channelIDChangedConnection;
|
2017-02-02 22:15:09 +01:00
|
|
|
|
2017-11-12 17:21:50 +01:00
|
|
|
void setChannel(std::shared_ptr<Channel> newChannel);
|
|
|
|
void doOpenAccountPopupWidget(AccountPopupWidget *widget, QString user);
|
|
|
|
void channelNameUpdated(const std::string &newChannelName);
|
2017-06-10 23:53:39 +02:00
|
|
|
|
|
|
|
public slots:
|
|
|
|
// Add new split to the notebook page that this chat widget is in
|
|
|
|
// Maybe we should use this chat widget as a hint to where the new split should be created
|
|
|
|
void doAddSplit();
|
|
|
|
|
|
|
|
// Close current split (chat widget)
|
|
|
|
void doCloseSplit();
|
|
|
|
|
|
|
|
// Show a dialog for changing the current splits/chat widgets channel
|
|
|
|
void doChangeChannel();
|
2017-06-11 09:11:55 +02:00
|
|
|
|
|
|
|
// Open popup copy of this chat widget
|
|
|
|
// XXX: maybe make current chatwidget a popup instead?
|
|
|
|
void doPopup();
|
|
|
|
|
|
|
|
// Clear chat from all messages
|
|
|
|
void doClearChat();
|
|
|
|
|
|
|
|
// Open link to twitch channel in default browser
|
|
|
|
void doOpenChannel();
|
|
|
|
|
|
|
|
// Open popup player of twitch channel in default browser
|
|
|
|
void doOpenPopupPlayer();
|
2017-08-12 14:44:27 +02:00
|
|
|
|
|
|
|
// Open twitch channel stream through streamlink
|
|
|
|
void doOpenStreamlink();
|
2017-09-12 19:06:16 +02:00
|
|
|
|
|
|
|
// Copy text from chat
|
|
|
|
void doCopy();
|
2017-09-12 19:12:02 +02:00
|
|
|
|
2017-09-11 22:37:39 +02:00
|
|
|
// Open viewer list of the channel
|
|
|
|
void doOpenViewerList();
|
2017-09-17 04:36:48 +02:00
|
|
|
|
2017-11-12 17:21:50 +01:00
|
|
|
void doIncFlexX();
|
|
|
|
void doDecFlexX();
|
|
|
|
void doIncFlexY();
|
|
|
|
void doDecFlexY();
|
2016-12-29 17:31:07 +01:00
|
|
|
};
|
2017-01-29 11:38:00 +01:00
|
|
|
|
2017-04-14 17:52:22 +02:00
|
|
|
} // namespace widgets
|
|
|
|
} // namespace chatterino
|