Skip to content

Commit

Permalink
change the way we add tab to qtMaterialToolTabs
Browse files Browse the repository at this point in the history
  • Loading branch information
seb committed Dec 14, 2019
1 parent 552959a commit fae0747
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 77 deletions.
39 changes: 20 additions & 19 deletions components/qtmaterialtooltabs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ void QtMaterialToolTabsPrivate::init()

tabLayout->setSpacing(0);
tabLayout->setMargin(0);
tabLayout->setContentsMargins(0, 0, 0, 0);
//tabLayout->setAlignment(Qt::AlignTop);
tabLayout->setContentsMargins(0, 0, 0, 0);
}

/*!
Expand Down Expand Up @@ -179,30 +178,30 @@ void QtMaterialToolTabs::setCurrentTab(int index)
emit currentChanged(index);
}

void QtMaterialToolTabs::addTab(const QString &text, const QIcon &icon)
QtMaterialToolTab* QtMaterialToolTabs::getTab(int index)
{
Q_D(QtMaterialToolTabs);
return static_cast<QtMaterialToolTab *>(d->tabLayout->itemAt(index)->widget());
}

QtMaterialToolTab* QtMaterialToolTabs::addTab(QtMaterialToolTab *tab)
{
Q_D(QtMaterialToolTabs);

QtMaterialToolTab *tab = new QtMaterialToolTab(this);
tab->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Expanding );
tab->button()->setText(text);
connect(tab, SIGNAL(onActivate(QtMaterialToolTab*)), this, SLOT(setCurrentTab(QtMaterialToolTab*)));

tab->button()->setHaloVisible(isHaloVisible());
tab->button()->setRippleStyle(rippleStyle());

if (!icon.isNull()) {
tab->button()->setIcon(icon);
tab->button()->setIconSize(QSize(22, 22));
}

d->tabLayout->addWidget(tab);

d->tabLayout->setStretchFactor(tab, 0);

if (-1 == d->tab) {
d->tab = 0;
d->inkBar->refreshGeometry();
d->inkBar->raise();
tab->setActive(true);
d->tabLayout->setStretch(0, 1);
setTabActive(0,true);
}
return tab;
}

int QtMaterialToolTabs::currentIndex() const
Expand All @@ -220,7 +219,7 @@ void QtMaterialToolTabs::setTabActive(int index, bool active)
QWidget *tabContent;

if (index > -1) {
tab = static_cast<QtMaterialToolTab *>(d->tabLayout->itemAt(index)->widget());
tab = getTab(index);
if (tab) {
tab->setActive(active);
if(active)
Expand All @@ -229,20 +228,22 @@ void QtMaterialToolTabs::setTabActive(int index, bool active)
d->tabLayout->setStretch(index, 0);
}
}
update();
}

void QtMaterialToolTabs::updateTabs()
{
Q_D(QtMaterialToolTabs);

QtMaterialToolTab *tab;
for (int i = 0; i < d->tabLayout->count(); i=i+2) {
QLayoutItem *item = d->tabLayout->itemAt(i);
if ((tab = static_cast<QtMaterialToolTab *>(item->widget()))) {
for (int i = 0; i < d->tabLayout->count(); i++) {
tab = getTab(i);
if (tab ) {
tab->button()->setRippleStyle(d->rippleStyle);
tab->button()->setHaloVisible(d->showHalo);
tab->button()->setBackgroundColor(backgroundColor());
tab->button()->setForegroundColor(textColor());
}
}
}

8 changes: 6 additions & 2 deletions components/qtmaterialtooltabs.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,19 @@ class QtMaterialToolTabs : public QWidget
void setTextColor(const QColor &color);
QColor textColor() const;

void addTab(const QString &text, const QIcon &icon = QIcon());
QtMaterialToolTab* addTab(const QString &text, const QIcon &icon = QIcon());
QtMaterialToolTab* addTab(QtMaterialToolTab *tab);

void setCurrentTab(QtMaterialToolTab *tab);
//void setCurrentTab(QtMaterialToolTab *tab);
void setCurrentTab(int index);
QtMaterialToolTab* getTab(int index);

int currentIndex() const;

signals:
void currentChanged(int);
public slots:
void setCurrentTab(QtMaterialToolTab*);

protected:
void setTabActive(int index, bool active = true);
Expand Down
82 changes: 37 additions & 45 deletions components/qtmaterialtooltabs_internal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,62 +9,42 @@
#include "qtmaterialscrollbar.h"
#include <QtWidgets/QAbstractScrollArea>

QtMaterialToolTab::QtMaterialToolTab(const QString &text)
:m_active(false)
{
Q_ASSERT(parent);
/*!
* \class QtMaterialToolTab
* \internal
*/

QtMaterialToolTab::QtMaterialToolTab(QtMaterialToolTabs *parent)
:m_tabs(parent),
m_active(false)
{
Q_ASSERT(parent);

// Q_ASSERT(parent);
m_tabLayout = new QVBoxLayout(this);
m_tabButton = new QtMaterialFlatButton(this);
m_tabContent = new QWidget(this);
//m_tabContent = new QtMaterialScrollBar(this);

m_tabButton->setFixedHeight(40);
m_tabLayout->addWidget(m_tabButton);
m_tabLayout->addWidget(m_tabContent);
m_tabLayout->setStretchFactor(m_tabButton, 0);
m_tabLayout->setStretchFactor(m_tabContent, 1);
m_tabLayout->setContentsMargins(0, 0, 0, 0);
m_tabLayout->setSpacing(0);
m_tabLayout->setMargin(0);

QFont f(font());
f.setStyleName("Normal");
m_tabButton->setFont(f);
m_tabButton->setText(text);

m_tabButton->setCornerRadius(0);
m_tabButton->setRole(Material::Primary);
m_tabButton->setBackgroundMode(Qt::OpaqueMode);
m_tabButton->setBaseOpacity(0.25);

m_tabButton->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Fixed );
m_tabButton->setStyleSheet("border: 3px solid red");

//m_tabContent->setFixedHeight(0);
setTitleHeight(titleHeight);

m_tabContent->setStyleSheet("background: blue;");
m_tabContent->resize(200, 0);
m_tabContent->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Fixed );
/*
QVBoxLayout *layout = new QVBoxLayout(m_tabContent);
m_tabContent->setLayout(layout);
QAbstractScrollArea *scrollArea = new QAbstractScrollArea(m_tabContent);
layout->addWidget(scrollArea);
//m_tabContent->setStyleSheet("border: 8px solid green");
*/
m_tabContent->setFixedHeight(0);

//m_tabContent->setStyleSheet("background-color:black;");
//m_tabContent->setBackgroundMode(Qt::OpaqueMode);
//m_tabContent->setBaseOpacity(0.25);
QColor col = m_tabButton->backgroundColor().darker(120);
QString str = " background-color : " +col.name();
m_tabContent->setStyleSheet(str);

setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Expanding );

m_tabLayout->addWidget(m_tabButton);
m_tabLayout->addWidget(m_tabContent);
m_tabLayout->setContentsMargins(0, 0, 0, 0);
m_tabLayout->setSpacing(0);
m_tabLayout->setMargin(0);
m_tabLayout->setStretch(0, 0);
m_tabLayout->setStretch(1, 0);
//m_tabLayout->setAlignment(Qt::AlignTop);

connect(m_tabButton, SIGNAL(clicked(bool)), this, SLOT(activateTab()));
}
Expand All @@ -73,18 +53,30 @@ QtMaterialToolTab::~QtMaterialToolTab()
{
}

void QtMaterialToolTab::setTitleHeight(int height)
{
m_tabButton->setFixedHeight(height);
titleHeight = height;
updateGeometry();
}

QSize QtMaterialToolTab::sizeHint() const
{
if (m_tabButton->icon().isNull()) {
return m_tabButton->sizeHint()+QSize(40,m_tabContent->height());
} else {
return QSize(40, m_tabButton->iconSize().height()+m_tabContent->height());
}
if (m_active)
return QSize(m_tabButton->sizeHint().width(), titleHeight) + m_tabContent->sizeHint();
else
return m_tabButton->minimumSize();// QSize(m_tabButton->sizeHint().width(), titleHeight);
}

QSize QtMaterialToolTab::minimumSizeHint() const
{
return m_tabButton->minimumSize();
}


void QtMaterialToolTab::activateTab()
{
m_tabs->setCurrentTab(this);
emit onActivate(this);
}

void QtMaterialToolTab::paintForeground(QPainter *painter)
Expand Down
22 changes: 11 additions & 11 deletions components/qtmaterialtooltabs_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "lib/qtmaterialoverlaywidget.h"
#include "qtmaterialflatbutton.h"
#include <QtWidgets/QHBoxLayout>
#include "lib/qtmaterialstyle.h"

class QPropertyAnimation;
class QtMaterialToolTabs;
Expand All @@ -13,7 +14,7 @@ class QtMaterialToolTab : public QWidget
Q_OBJECT

public:
explicit QtMaterialToolTab(QtMaterialToolTabs *parent);
explicit QtMaterialToolTab(const QString &text);
~QtMaterialToolTab();

inline void setActive(bool state);
Expand All @@ -23,38 +24,37 @@ class QtMaterialToolTab : public QWidget
QWidget* content();

QSize sizeHint() const Q_DECL_OVERRIDE;

QSize minimumSizeHint() const Q_DECL_OVERRIDE;
void setTitleHeight(int height);
signals:
void onActivate(QtMaterialToolTab* tooltab);
protected slots:
void activateTab();

protected:
void paintForeground(QPainter *painter); //Q_DECL_OVERRIDE;
void paintForeground(QPainter *painter);// Q_DECL_OVERRIDE;

private:
Q_DISABLE_COPY(QtMaterialToolTab)

QVBoxLayout *m_tabLayout;
QtMaterialToolTabs *const m_tabs;
//QtMaterialToolTabs *const m_tabs;
QtMaterialFlatButton *m_tabButton;
//QtMaterialFlatButton *m_tabContent;
QWidget *m_tabContent;
bool m_active;
int titleHeight = 30;
};

inline void QtMaterialToolTab::setActive(bool state)
{
m_active = state;
if (state)
{
//m_tabContent->setMinimumHeight(300);
m_tabContent->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Expanding );
m_tabContent->setMaximumHeight(16777215);
}
else
{
//m_tabContent->setFixedHeight(0);
//m_tabContent->setHeight(0);
m_tabContent->resize(200, 0);
m_tabContent->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Fixed );
m_tabContent->setFixedHeight(0);
}
update();
}
Expand Down

0 comments on commit fae0747

Please sign in to comment.