mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
added tab system
This commit is contained in:
parent
42b5de161d
commit
bb91ec2045
48
notebook.cpp
48
notebook.cpp
|
@ -1,9 +1,11 @@
|
||||||
#include "QWidget"
|
#include "QWidget"
|
||||||
#include "QList"
|
#include "QList"
|
||||||
|
#include "QLayout"
|
||||||
#include "notebook.h"
|
#include "notebook.h"
|
||||||
#include "notebooktab.h"
|
#include "notebooktab.h"
|
||||||
#include "notebookpage.h"
|
#include "notebookpage.h"
|
||||||
#include "notebookbutton.h"
|
#include "notebookbutton.h"
|
||||||
|
#include "QFormLayout"
|
||||||
|
|
||||||
Notebook::Notebook(QWidget *parent)
|
Notebook::Notebook(QWidget *parent)
|
||||||
: QWidget(parent),
|
: QWidget(parent),
|
||||||
|
@ -22,26 +24,48 @@ Notebook::Notebook(QWidget *parent)
|
||||||
NotebookPage* Notebook::addPage()
|
NotebookPage* Notebook::addPage()
|
||||||
{
|
{
|
||||||
auto tab = new NotebookTab(this);
|
auto tab = new NotebookTab(this);
|
||||||
auto page = new NotebookPage(this, tab);
|
auto page = new NotebookPage(tab);
|
||||||
|
|
||||||
|
if (pages.count() == 0)
|
||||||
|
{
|
||||||
|
select(page);
|
||||||
|
}
|
||||||
|
|
||||||
this->pages.append(page);
|
this->pages.append(page);
|
||||||
|
|
||||||
layout();
|
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notebook::layout()
|
void Notebook::select(NotebookPage* page)
|
||||||
|
{
|
||||||
|
if (selected != nullptr)
|
||||||
|
{
|
||||||
|
selected->setParent(nullptr);
|
||||||
|
selected->tab->setSelected(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (page != nullptr)
|
||||||
|
{
|
||||||
|
page->setParent(this);
|
||||||
|
page->tab->setSelected(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
selected = page;
|
||||||
|
|
||||||
|
performLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notebook::performLayout()
|
||||||
{
|
{
|
||||||
int x = 48, y = 0;
|
int x = 48, y = 0;
|
||||||
int tabHeight = 16;
|
int tabHeight = 16;
|
||||||
bool firstInLine = true;
|
bool first = true;
|
||||||
|
|
||||||
for (auto &i : this->pages)
|
for (auto &i : pages)
|
||||||
{
|
{
|
||||||
tabHeight = i->tab->height();
|
tabHeight = i->tab->height();
|
||||||
|
|
||||||
if (!firstInLine && (i == this->pages.last() ? tabHeight : 0) + x + i->width() > this->width())
|
if (!first && (i == pages.last() ? tabHeight : 0) + x + i->tab->width() > width())
|
||||||
{
|
{
|
||||||
y +=i->tab->height();
|
y +=i->tab->height();
|
||||||
i->tab->move(0, y);
|
i->tab->move(0, y);
|
||||||
|
@ -53,13 +77,19 @@ void Notebook::layout()
|
||||||
x += i->tab->width();
|
x += i->tab->width();
|
||||||
}
|
}
|
||||||
|
|
||||||
firstInLine = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->addButton.move(x, y);
|
this->addButton.move(x, y);
|
||||||
|
|
||||||
|
if (selected != nullptr)
|
||||||
|
{
|
||||||
|
selected->move(0, y + tabHeight);
|
||||||
|
selected->resize(width(), height() - y - tabHeight);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notebook::resizeEvent(QResizeEvent *)
|
void Notebook::resizeEvent(QResizeEvent *)
|
||||||
{
|
{
|
||||||
layout();
|
performLayout();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,9 @@ public:
|
||||||
|
|
||||||
enum HighlightType { none, highlighted, newMessage };
|
enum HighlightType { none, highlighted, newMessage };
|
||||||
|
|
||||||
|
void select(NotebookPage* page);
|
||||||
|
void performLayout();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent *);
|
void resizeEvent(QResizeEvent *);
|
||||||
|
|
||||||
|
@ -28,7 +31,7 @@ private:
|
||||||
NotebookButton settingsButton;
|
NotebookButton settingsButton;
|
||||||
NotebookButton userButton;
|
NotebookButton userButton;
|
||||||
|
|
||||||
void layout();
|
NotebookPage* selected = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEBOOK_H
|
#endif // NOTEBOOK_H
|
||||||
|
|
|
@ -1,9 +1,20 @@
|
||||||
#include "QWidget"
|
#include "QWidget"
|
||||||
|
#include "QPainter"
|
||||||
#include "notebookpage.h"
|
#include "notebookpage.h"
|
||||||
#include "notebooktab.h"
|
#include "notebooktab.h"
|
||||||
|
|
||||||
NotebookPage::NotebookPage(QWidget *parent, NotebookTab *tab)
|
NotebookPage::NotebookPage(NotebookTab *tab)
|
||||||
: QWidget(parent)
|
|
||||||
{
|
{
|
||||||
this->tab = tab;
|
this->tab = tab;
|
||||||
|
tab->page = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookPage::paintEvent(QPaintEvent *)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
|
||||||
|
painter.setPen(QColor(255, 0, 0));
|
||||||
|
painter.drawRect(0, 0, width() - 1, height() - 1);
|
||||||
|
|
||||||
|
painter.drawText(8, 8, QString::number(tab->x()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,16 +2,19 @@
|
||||||
#define NOTEBOOKPAGE_H
|
#define NOTEBOOKPAGE_H
|
||||||
|
|
||||||
#include "QWidget"
|
#include "QWidget"
|
||||||
|
#include "notebookpage.h"
|
||||||
class NotebookTab;
|
#include "notebooktab.h"
|
||||||
|
|
||||||
class NotebookPage : public QWidget
|
class NotebookPage : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NotebookPage(QWidget *parent, NotebookTab *tab);
|
NotebookPage(NotebookTab *tab);
|
||||||
NotebookTab* tab;
|
NotebookTab* tab;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTEBOOKPAGE_H
|
#endif // NOTEBOOKPAGE_H
|
||||||
|
|
|
@ -1,49 +1,96 @@
|
||||||
#include "notebook.h"
|
#include "notebook.h"
|
||||||
#include "notebooktab.h"
|
#include "notebooktab.h"
|
||||||
#include "notebookpage.h"
|
|
||||||
#include "QPainter"
|
#include "QPainter"
|
||||||
|
|
||||||
NotebookTab::NotebookTab(Notebook *notebook)
|
NotebookTab::NotebookTab(Notebook *notebook)
|
||||||
: QWidget(notebook)
|
: QWidget(notebook)
|
||||||
{
|
{
|
||||||
this->notebook = notebook;
|
this->notebook = notebook;
|
||||||
|
text = "<no title>";
|
||||||
|
|
||||||
resize(100, 24);
|
calcSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::setSelected(bool value)
|
||||||
|
{
|
||||||
|
selected = value;
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NotebookTab::getSelected()
|
||||||
|
{
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NotebookTab::calcSize()
|
||||||
|
{
|
||||||
|
resize(fontMetrics().width(text) + 8, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotebookTab::paintEvent(QPaintEvent *)
|
void NotebookTab::paintEvent(QPaintEvent *)
|
||||||
{
|
{
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
|
|
||||||
painter.setBrush(this->mouseDown ? QColor(0, 255, 0) : (this->mouseOver ? QColor(255, 0, 0) : QColor(0, 0, 255)));
|
QColor bg = QColor(255, 255, 255), fg = QColor(0, 0, 0);
|
||||||
|
|
||||||
painter.drawRect(0, 0, this->width(), this->height());
|
// if (selected)
|
||||||
|
// {
|
||||||
|
// bg = App.ColorScheme.TabSelectedBG;
|
||||||
|
// text = App.ColorScheme.TabSelectedText;
|
||||||
|
// }
|
||||||
|
// else if (mouseOver)
|
||||||
|
// {
|
||||||
|
// bg = App.ColorScheme.TabHoverBG;
|
||||||
|
// text = App.ColorScheme.TabHoverText;
|
||||||
|
// }
|
||||||
|
// else if ()
|
||||||
|
// {
|
||||||
|
// bg = App.ColorScheme.TabHighlightedBG;
|
||||||
|
// text = App.ColorScheme.TabHighlightedText;
|
||||||
|
// }
|
||||||
|
// else if ()
|
||||||
|
// {
|
||||||
|
// bg = App.ColorScheme.TabNewMessageBG;
|
||||||
|
// text = App.ColorScheme.TabHighlightedText;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// bg = App.ColorScheme.TabBG;
|
||||||
|
// text = App.ColorScheme.TabText;
|
||||||
|
// }
|
||||||
|
|
||||||
|
painter.fillRect(rect(), bg);
|
||||||
|
|
||||||
|
painter.setPen(fg);
|
||||||
|
painter.drawText(4, (height() + fontMetrics().height()) / 2, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotebookTab::mousePressEvent(QMouseEvent *)
|
void NotebookTab::mousePressEvent(QMouseEvent *)
|
||||||
{
|
{
|
||||||
mouseDown = true;
|
mouseDown = true;
|
||||||
|
|
||||||
this->repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotebookTab::mouseReleaseEvent(QMouseEvent *)
|
void NotebookTab::mouseReleaseEvent(QMouseEvent *)
|
||||||
{
|
{
|
||||||
mouseDown = false;
|
mouseDown = false;
|
||||||
|
|
||||||
this->repaint();
|
repaint();
|
||||||
|
|
||||||
|
notebook->select(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotebookTab::enterEvent(QEvent *)
|
void NotebookTab::enterEvent(QEvent *)
|
||||||
{
|
{
|
||||||
mouseOver = true;
|
mouseOver = true;
|
||||||
|
|
||||||
this->repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotebookTab::leaveEvent(QEvent *)
|
void NotebookTab::leaveEvent(QEvent *)
|
||||||
{
|
{
|
||||||
mouseOver = false;
|
mouseOver = false;
|
||||||
|
|
||||||
this->repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#ifndef NOTEBOOKTAB_H
|
#ifndef NOTEBOOKTAB_H
|
||||||
#define NOTEBOOKTAB_H
|
#define NOTEBOOKTAB_H
|
||||||
|
|
||||||
#include "QObject"
|
#include "QWidget"
|
||||||
#include "notebookpage.h"
|
|
||||||
|
|
||||||
class Notebook;
|
class Notebook;
|
||||||
|
class NotebookPage;
|
||||||
|
|
||||||
class NotebookTab : public QWidget
|
class NotebookTab : public QWidget
|
||||||
{
|
{
|
||||||
|
@ -13,6 +13,14 @@ Q_OBJECT
|
||||||
public:
|
public:
|
||||||
NotebookTab(Notebook *notebook);
|
NotebookTab(Notebook *notebook);
|
||||||
|
|
||||||
|
void calcSize();
|
||||||
|
|
||||||
|
NotebookPage* page;
|
||||||
|
QString text;
|
||||||
|
|
||||||
|
bool getSelected();
|
||||||
|
void setSelected(bool value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
|
void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
@ -21,12 +29,10 @@ protected:
|
||||||
void enterEvent(QEvent *) Q_DECL_OVERRIDE;
|
void enterEvent(QEvent *) Q_DECL_OVERRIDE;
|
||||||
void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
|
void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
bool IsSelected();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Notebook *notebook;
|
Notebook *notebook;
|
||||||
|
bool selected = false;
|
||||||
|
|
||||||
bool isSelected;
|
|
||||||
bool mouseOver = false;
|
bool mouseOver = false;
|
||||||
bool mouseDown = false;
|
bool mouseDown = false;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue