mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
added basic tabs
This commit is contained in:
parent
cfda4798d4
commit
2ce96a05bc
|
@ -28,12 +28,14 @@ SOURCES += main.cpp\
|
||||||
chatwidget.cpp \
|
chatwidget.cpp \
|
||||||
notebook.cpp \
|
notebook.cpp \
|
||||||
notebooktab.cpp \
|
notebooktab.cpp \
|
||||||
notebookpage.cpp
|
notebookpage.cpp \
|
||||||
|
notebookbutton.cpp
|
||||||
|
|
||||||
HEADERS += mainwindow.h \
|
HEADERS += mainwindow.h \
|
||||||
chatwidget.h \
|
chatwidget.h \
|
||||||
notebook.h \
|
notebook.h \
|
||||||
notebooktab.h \
|
notebooktab.h \
|
||||||
notebookpage.h
|
notebookpage.h \
|
||||||
|
notebookbutton.h
|
||||||
|
|
||||||
FORMS += mainwindow.ui
|
FORMS += mainwindow.ui
|
||||||
|
|
|
@ -1,16 +1,24 @@
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
#include "chatwidget.h"
|
#include "chatwidget.h"
|
||||||
|
#include "notebook.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
QMainWindow(parent),
|
QMainWindow(parent),
|
||||||
ui(new Ui::MainWindow)
|
ui(new Ui::MainWindow),
|
||||||
|
notebook(this)
|
||||||
{
|
{
|
||||||
//ui->setupUi(this);
|
//ui->setupUi(this);
|
||||||
|
|
||||||
//ChatWidget widget = new ChatWidget(this);
|
//ChatWidget widget = new ChatWidget(this);
|
||||||
|
|
||||||
setCentralWidget(new ChatWidget(this));
|
//this->notebook = new Notebook(this);
|
||||||
|
|
||||||
|
setCentralWidget(&this->notebook);
|
||||||
|
|
||||||
|
this->notebook.addPage();
|
||||||
|
this->notebook.addPage();
|
||||||
|
this->notebook.addPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define MAINWINDOW_H
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include "notebook.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
@ -14,6 +15,7 @@ class MainWindow : public QMainWindow
|
||||||
public:
|
public:
|
||||||
explicit MainWindow(QWidget *parent = 0);
|
explicit MainWindow(QWidget *parent = 0);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
Notebook notebook;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
|
|
61
notebook.cpp
61
notebook.cpp
|
@ -1,22 +1,65 @@
|
||||||
#include "QWidget"
|
#include "QWidget"
|
||||||
|
#include "QList"
|
||||||
#include "notebook.h"
|
#include "notebook.h"
|
||||||
|
#include "notebooktab.h"
|
||||||
#include "notebookpage.h"
|
#include "notebookpage.h"
|
||||||
|
#include "notebookbutton.h"
|
||||||
|
|
||||||
Notebook::Notebook(QWidget *parent)
|
Notebook::Notebook(QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent),
|
||||||
|
addButton(this),
|
||||||
|
settingsButton(this),
|
||||||
|
userButton(this)
|
||||||
{
|
{
|
||||||
auto list = new QList<std::tuple<NotebookPage*, NotebookTab*>>();
|
settingsButton.resize(24, 24);
|
||||||
|
settingsButton.icon = NotebookButton::IconSettings;
|
||||||
this->pages = list;
|
userButton.resize(24, 24);
|
||||||
|
userButton.move(24, 0);
|
||||||
|
userButton.icon = NotebookButton::IconUser;
|
||||||
|
addButton.resize(24, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
NotebookPage*
|
NotebookPage* Notebook::addPage()
|
||||||
Notebook::AddPage()
|
|
||||||
{
|
{
|
||||||
auto page = new NotebookPage(this);
|
auto tab = new NotebookTab(this);
|
||||||
auto tab = new NotebookTab(this, this, page);
|
auto page = new NotebookPage(this, tab);
|
||||||
|
|
||||||
this->pages->append(std::make_tuple(page, tab));
|
this->pages.append(page);
|
||||||
|
|
||||||
|
layout();
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Notebook::layout()
|
||||||
|
{
|
||||||
|
int x = 48, y = 0;
|
||||||
|
int tabHeight = 16;
|
||||||
|
bool firstInLine = true;
|
||||||
|
|
||||||
|
for (auto &i : this->pages)
|
||||||
|
{
|
||||||
|
tabHeight = i->tab->height();
|
||||||
|
|
||||||
|
if (!firstInLine && (i == this->pages.last() ? tabHeight : 0) + x + i->width() > this->width())
|
||||||
|
{
|
||||||
|
y +=i->tab->height();
|
||||||
|
i->tab->move(0, y);
|
||||||
|
x = i->tab->width();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i->tab->move(x, y);
|
||||||
|
x += i->tab->width();
|
||||||
|
}
|
||||||
|
|
||||||
|
firstInLine = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->addButton.move(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notebook::resizeEvent(QResizeEvent *)
|
||||||
|
{
|
||||||
|
layout();
|
||||||
|
}
|
||||||
|
|
16
notebook.h
16
notebook.h
|
@ -5,6 +5,7 @@
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include "notebookpage.h"
|
#include "notebookpage.h"
|
||||||
#include "notebooktab.h"
|
#include "notebooktab.h"
|
||||||
|
#include "notebookbutton.h"
|
||||||
|
|
||||||
class Notebook : public QWidget
|
class Notebook : public QWidget
|
||||||
{
|
{
|
||||||
|
@ -13,10 +14,21 @@ Q_OBJECT
|
||||||
public:
|
public:
|
||||||
Notebook(QWidget *parent);
|
Notebook(QWidget *parent);
|
||||||
|
|
||||||
NotebookPage* AddPage();
|
NotebookPage* addPage();
|
||||||
|
|
||||||
|
enum HighlightType { none, highlighted, newMessage };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void resizeEvent(QResizeEvent *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<std::tuple<NotebookPage*, NotebookTab*>>* pages;
|
QList<NotebookPage*> pages;
|
||||||
|
|
||||||
|
NotebookButton addButton;
|
||||||
|
NotebookButton settingsButton;
|
||||||
|
NotebookButton userButton;
|
||||||
|
|
||||||
|
void layout();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEBOOK_H
|
#endif // NOTEBOOK_H
|
||||||
|
|
|
@ -1,6 +1,78 @@
|
||||||
#include "notebookbutton.h"
|
#include "notebookbutton.h"
|
||||||
|
#include "QPainter"
|
||||||
|
|
||||||
NotebookButton::NotebookButton()
|
NotebookButton::NotebookButton(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NotebookButton::paintEvent(QPaintEvent *)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
|
||||||
|
QColor background;
|
||||||
|
QColor foreground;
|
||||||
|
|
||||||
|
if (mouseDown)
|
||||||
|
{
|
||||||
|
foreground = QColor(0, 0, 0);
|
||||||
|
background = QColor(255, 255, 255);
|
||||||
|
}
|
||||||
|
else if (mouseOver)
|
||||||
|
{
|
||||||
|
foreground = QColor(255, 255, 255);
|
||||||
|
background = QColor(0, 0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreground = QColor(0, 0, 0);
|
||||||
|
background = QColor(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
painter.fillRect(this->rect(), background);
|
||||||
|
|
||||||
|
float h = this->height(), w = this->width();
|
||||||
|
|
||||||
|
if (icon == IconPlus)
|
||||||
|
{
|
||||||
|
painter.fillRect(QRectF((h / 12) * 2 + 1, (h / 12) * 5 + 1, w - ((h / 12) * 5), (h / 12) * 1), foreground);
|
||||||
|
painter.fillRect(QRectF((h / 12) * 5 + 1, (h / 12) * 2 + 1, (h / 12) * 1, w - ((h / 12) * 5)), foreground);
|
||||||
|
}
|
||||||
|
else if (icon == IconUser)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else // IconSettings
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookButton::mousePressEvent(QMouseEvent *)
|
||||||
|
{
|
||||||
|
mouseDown = true;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookButton::mouseReleaseEvent(QMouseEvent *)
|
||||||
|
{
|
||||||
|
mouseDown = false;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookButton::enterEvent(QEvent *)
|
||||||
|
{
|
||||||
|
mouseOver = true;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookButton::leaveEvent(QEvent *)
|
||||||
|
{
|
||||||
|
mouseOver = false;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
|
@ -1,11 +1,29 @@
|
||||||
#ifndef NOTEBOOKBUTTON_H
|
#ifndef NOTEBOOKBUTTON_H
|
||||||
#define NOTEBOOKBUTTON_H
|
#define NOTEBOOKBUTTON_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
class NotebookButton
|
class NotebookButton : public QWidget
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
NotebookButton();
|
static const int IconPlus = 0;
|
||||||
|
static const int IconUser = 0;
|
||||||
|
static const int IconSettings = 0;
|
||||||
|
|
||||||
|
int icon = 0;
|
||||||
|
|
||||||
|
NotebookButton(QWidget *parent);
|
||||||
|
|
||||||
|
void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void enterEvent(QEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool mouseOver = false;
|
||||||
|
bool mouseDown = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEBOOKBUTTON_H
|
#endif // NOTEBOOKBUTTON_H
|
|
@ -1,8 +1,9 @@
|
||||||
#include "QWidget"
|
#include "QWidget"
|
||||||
#include "notebookpage.h"
|
#include "notebookpage.h"
|
||||||
|
#include "notebooktab.h"
|
||||||
|
|
||||||
NotebookPage::NotebookPage(QWidget *parent)
|
NotebookPage::NotebookPage(QWidget *parent, NotebookTab *tab)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
{
|
{
|
||||||
|
this->tab = tab;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,15 @@
|
||||||
|
|
||||||
#include "QWidget"
|
#include "QWidget"
|
||||||
|
|
||||||
|
class NotebookTab;
|
||||||
|
|
||||||
class NotebookPage : public QWidget
|
class NotebookPage : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NotebookPage(QWidget *parent);
|
NotebookPage(QWidget *parent, NotebookTab *tab);
|
||||||
|
NotebookTab* tab;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEBOOKPAGE_H
|
#endif // NOTEBOOKPAGE_H
|
||||||
|
|
|
@ -1,10 +1,49 @@
|
||||||
#include "notebook.h"
|
#include "notebook.h"
|
||||||
#include "notebooktab.h"
|
#include "notebooktab.h"
|
||||||
#include "notebookpage.h"
|
#include "notebookpage.h"
|
||||||
|
#include "QPainter"
|
||||||
|
|
||||||
NotebookTab::NotebookTab(QWidget *parent, Notebook *notebook, NotebookPage *page)
|
NotebookTab::NotebookTab(Notebook *notebook)
|
||||||
: QWidget(parent)
|
: QWidget(notebook)
|
||||||
{
|
{
|
||||||
this->notebook = notebook;
|
this->notebook = notebook;
|
||||||
this->page = page;
|
|
||||||
|
resize(100, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::paintEvent(QPaintEvent *)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
|
||||||
|
painter.setBrush(this->mouseDown ? QColor(0, 255, 0) : (this->mouseOver ? QColor(255, 0, 0) : QColor(0, 0, 255)));
|
||||||
|
|
||||||
|
painter.drawRect(0, 0, this->width(), this->height());
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::mousePressEvent(QMouseEvent *)
|
||||||
|
{
|
||||||
|
mouseDown = true;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::mouseReleaseEvent(QMouseEvent *)
|
||||||
|
{
|
||||||
|
mouseDown = false;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::enterEvent(QEvent *)
|
||||||
|
{
|
||||||
|
mouseOver = true;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::leaveEvent(QEvent *)
|
||||||
|
{
|
||||||
|
mouseOver = false;
|
||||||
|
|
||||||
|
this->repaint();
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,24 @@ class NotebookTab : public QWidget
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NotebookTab(QWidget *parent, Notebook *notebook, NotebookPage *page);
|
NotebookTab(Notebook *notebook);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void enterEvent(QEvent *) Q_DECL_OVERRIDE;
|
||||||
|
void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
bool IsSelected();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Notebook *notebook;
|
Notebook *notebook;
|
||||||
NotebookPage *page;
|
|
||||||
|
bool isSelected;
|
||||||
|
bool mouseOver = false;
|
||||||
|
bool mouseDown = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEBOOKTAB_H
|
#endif // NOTEBOOKTAB_H
|
||||||
|
|
Loading…
Reference in a new issue