9#include <QWidgetAction>
10#include <QActionGroup>
11#include <QActionEvent>
18QxTabBarPrivate::QxTabBarPrivate()
22#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
34 q->layout()->setSpacing(0);
35 q->layout()->setContentsMargins(0, 0, 0, 0);
38#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
41 m_group->setExclusionPolicy(QActionGroup::ExclusionPolicy::ExclusiveOptional);
50 for (
int i = 0; i <
m_tabs.count(); ++i) {
51 if (
m_tabs.at(i) == action) {
61 if (q->orientation() == Qt::Vertical) {
63 foreach (QAction *act,
m_tabs) {
64 int aw = q->widgetForAction(act)->sizeHint().width();
68 foreach (QAction *act,
m_tabs) {
69 q->widgetForAction(act)->setFixedWidth(w);
72 foreach (QAction *act,
m_tabs) {
73 QWidget *widget = q->widgetForAction(act);
74 widget->setFixedWidth(widget->sizeHint().width());
85 Q_EMIT q->currentChanged(index);
88 Q_EMIT q->currentToggled(index, action->isChecked());
94 Q_UNUSED(orientation);
136 QAction *action =
new QAction(
this);
137 action->setIcon(icon);
138 action->setText(
text);
139 action->setCheckable(
true);
141 if (!d->validIndex(index)) {
142 index = d->m_tabs.count();
144 d->m_tabs.append(action);
147 QAction *beforeAction = d->m_tabs.at(index);
148 d->m_tabs.insert(index, action);
149 insertAction(beforeAction, action);
151 d->m_group->addAction(action);
153 if (d->m_tabs.count() == 1) {
155 }
else if (index <= d->m_currentIndex) {
167 if (!d->validIndex(index)) {
170 QAction *action = d->m_tabs.takeAt(index);
171 removeAction(action);
172 d->m_group->removeAction(action);
176 if (index == d->m_currentIndex) {
177 d->m_currentIndex = -1;
178 int newCnt = d->m_tabs.count();
181 if (newIndex >= newCnt) {
182 newIndex = newCnt - 1;
186 }
else if (index < d->m_currentIndex) {
187 newIndex = d->m_currentIndex - 1;
188 d->m_currentIndex = -1;
192 if (d->m_currentIndex == -1) {
200 if (d->validIndex(index)) {
201 d->m_tabs[index]->setEnabled(enable);
208 if (d->validIndex(index)) {
209 return d->m_tabs.at(index)->isEnabled();
217 if (d->validIndex(index)) {
218 d->m_tabs.at(index)->setVisible(visible);
225 if (d->validIndex(index)) {
226 return d->m_tabs.at(index)->isVisible();
234 if (d->validIndex(index)) {
235 d->m_tabs[index]->setToolTip(toolTip);
242 if (d->validIndex(index)) {
243 return d->m_tabs.at(index)->toolTip();
251 if (d->validIndex(index)) {
252 return d->m_tabs.at(index)->isChecked();
260 if (d->m_currentIndex != index &&
isTabEnabled(index)) {
262 d->m_tabs.at(index)->trigger();
269 return d->m_currentIndex;
274#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
278 if (d->m_togglable == able) {
281 d->m_togglable = able;
282 d->m_group->setExclusionPolicy(able ? QActionGroup::ExclusionPolicy::ExclusiveOptional
283 : QActionGroup::ExclusionPolicy::Exclusive);
290 return d->m_togglable;
296 setToolButtonStyle(style);
306 return d->m_tabs.count();
311 QToolBar::actionEvent(event);
virtual ~QxTabBarPrivate()
QList< QAction * > m_tabs
void onOrientationChanged(Qt::Orientation orientation)
int indexOf(QAction *action)
void onTriggered(QAction *action)
int addTab(const QString &text)
virtual void actionEvent(QActionEvent *event)
int insertTab(int index, const QString &text)
void setTabEnabled(int index, bool enable)
void setTabToolTip(int index, const QString &toolTip)
bool isTabEnabled(int index) const
void setTogglable(bool able)
void setTabStyle(Qt::ToolButtonStyle style)
bool isTabChecked(int index) const
QxTabBar(QWidget *parent=0)
void setTabVisible(int index, bool visible)
void setCurrentIndex(int index)
void currentChanged(int index)
QString tabToolTip(int index) const
bool isTabVisible(int index) const
void removeTab(int index)
#define QX_APP_END_NAMESPACE
#define QX_INIT_PRIVATE(Class)
#define QX_APP_BEGIN_NAMESPACE
#define QX_SET_PRIVATE(Dptr)
#define QX_FINI_PRIVATE()