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 \
|
||||
notebook.cpp \
|
||||
notebooktab.cpp \
|
||||
notebookpage.cpp
|
||||
notebookpage.cpp \
|
||||
notebookbutton.cpp
|
||||
|
||||
HEADERS += mainwindow.h \
|
||||
chatwidget.h \
|
||||
notebook.h \
|
||||
notebooktab.h \
|
||||
notebookpage.h
|
||||
notebookpage.h \
|
||||
notebookbutton.h
|
||||
|
||||
FORMS += mainwindow.ui
|
||||
|
|
|
@ -1,16 +1,24 @@
|
|||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "chatwidget.h"
|
||||
#include "notebook.h"
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow)
|
||||
ui(new Ui::MainWindow),
|
||||
notebook(this)
|
||||
{
|
||||
//ui->setupUi(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()
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include "notebook.h"
|
||||
|
||||
namespace Ui {
|
||||
class MainWindow;
|
||||
|
@ -14,6 +15,7 @@ class MainWindow : public QMainWindow
|
|||
public:
|
||||
explicit MainWindow(QWidget *parent = 0);
|
||||
~MainWindow();
|
||||
Notebook notebook;
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
|
|
61
notebook.cpp
61
notebook.cpp
|
@ -1,22 +1,65 @@
|
|||
#include "QWidget"
|
||||
#include "QList"
|
||||
#include "notebook.h"
|
||||
#include "notebooktab.h"
|
||||
#include "notebookpage.h"
|
||||
#include "notebookbutton.h"
|
||||
|
||||
Notebook::Notebook(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
: QWidget(parent),
|
||||
addButton(this),
|
||||
settingsButton(this),
|
||||
userButton(this)
|
||||
{
|
||||
auto list = new QList<std::tuple<NotebookPage*, NotebookTab*>>();
|
||||
|
||||
this->pages = list;
|
||||
settingsButton.resize(24, 24);
|
||||
settingsButton.icon = NotebookButton::IconSettings;
|
||||
userButton.resize(24, 24);
|
||||
userButton.move(24, 0);
|
||||
userButton.icon = NotebookButton::IconUser;
|
||||
addButton.resize(24, 24);
|
||||
}
|
||||
|
||||
NotebookPage*
|
||||
Notebook::AddPage()
|
||||
NotebookPage* Notebook::addPage()
|
||||
{
|
||||
auto page = new NotebookPage(this);
|
||||
auto tab = new NotebookTab(this, this, page);
|
||||
auto tab = new NotebookTab(this);
|
||||
auto page = new NotebookPage(this, tab);
|
||||
|
||||
this->pages->append(std::make_tuple(page, tab));
|
||||
this->pages.append(page);
|
||||
|
||||
layout();
|
||||
|
||||
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 "notebookpage.h"
|
||||
#include "notebooktab.h"
|
||||
#include "notebookbutton.h"
|
||||
|
||||
class Notebook : public QWidget
|
||||
{
|
||||
|
@ -13,10 +14,21 @@ Q_OBJECT
|
|||
public:
|
||||
Notebook(QWidget *parent);
|
||||
|
||||
NotebookPage* AddPage();
|
||||
NotebookPage* addPage();
|
||||
|
||||
enum HighlightType { none, highlighted, newMessage };
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *);
|
||||
|
||||
private:
|
||||
QList<std::tuple<NotebookPage*, NotebookTab*>>* pages;
|
||||
QList<NotebookPage*> pages;
|
||||
|
||||
NotebookButton addButton;
|
||||
NotebookButton settingsButton;
|
||||
NotebookButton userButton;
|
||||
|
||||
void layout();
|
||||
};
|
||||
|
||||
#endif // NOTEBOOK_H
|
||||
|
|
|
@ -1,6 +1,78 @@
|
|||
#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
|
||||
#define NOTEBOOKBUTTON_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
class NotebookButton
|
||||
class NotebookButton : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
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
|
|
@ -1,8 +1,9 @@
|
|||
#include "QWidget"
|
||||
#include "notebookpage.h"
|
||||
#include "notebooktab.h"
|
||||
|
||||
NotebookPage::NotebookPage(QWidget *parent)
|
||||
NotebookPage::NotebookPage(QWidget *parent, NotebookTab *tab)
|
||||
: QWidget(parent)
|
||||
{
|
||||
|
||||
this->tab = tab;
|
||||
}
|
||||
|
|
|
@ -3,12 +3,15 @@
|
|||
|
||||
#include "QWidget"
|
||||
|
||||
class NotebookTab;
|
||||
|
||||
class NotebookPage : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
NotebookPage(QWidget *parent);
|
||||
NotebookPage(QWidget *parent, NotebookTab *tab);
|
||||
NotebookTab* tab;
|
||||
};
|
||||
|
||||
#endif // NOTEBOOKPAGE_H
|
||||
|
|
|
@ -1,10 +1,49 @@
|
|||
#include "notebook.h"
|
||||
#include "notebooktab.h"
|
||||
#include "notebookpage.h"
|
||||
#include "QPainter"
|
||||
|
||||
NotebookTab::NotebookTab(QWidget *parent, Notebook *notebook, NotebookPage *page)
|
||||
: QWidget(parent)
|
||||
NotebookTab::NotebookTab(Notebook *notebook)
|
||||
: QWidget(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
|
||||
|
||||
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:
|
||||
Notebook *notebook;
|
||||
NotebookPage *page;
|
||||
|
||||
bool isSelected;
|
||||
bool mouseOver = false;
|
||||
bool mouseDown = false;
|
||||
};
|
||||
|
||||
#endif // NOTEBOOKTAB_H
|
||||
|
|
Loading…
Reference in a new issue