Files
qt6-migration-pipeline/Lts/Common/LtsWidgets/lts_tab_bar.cpp
T

121 lines
2.7 KiB
C++
Executable File

#include "lts_tab_bar.h"
#include "lts_dialog.h"
#include "lts_dialog_helper.h"
#include "lts_events.h"
#include "lts_tab_widget.h"
#include <TabBarTabStyle/tab_bar_tab_style.h>
#include <QCoreApplication>
#include <QMenu>
namespace LtsWidgets
{
LtsTabBar::LtsTabBar(bool isSecondary, QWidget *parent)
: QTabBar(parent)
, m_secondary(isSecondary)
{
setDocumentMode(true);
setTabsClosable(true);
connect(this, &LtsTabBar::currentChanged, this, &LtsTabBar::updateCloseButtonColors);
if (m_secondary)
{
connect(this, &LtsTabBar::customContextMenuRequested,
this, &LtsTabBar::onCustomContextMenuRequested);
setContextMenuPolicy(Qt::CustomContextMenu);
}
}
void LtsTabBar::_internal_closeTab()
{
QObject *object = sender();
int tabToClose = -1;
for (int i = 0; i < count(); i++)
{
if (tabButton(i, QTabBar::RightSide) == object)
{
tabToClose = i;
break;
}
}
if (tabToClose != -1)
emit tabCloseRequested(tabToClose);
}
void LtsTabBar::updateCloseButtonColors(int newIndex)
{
if (newIndex == -1)
newIndex = currentIndex();
for (int i = 0; i < count(); i++)
{
QWidget *w = tabButton(i, QTabBar::RightSide);
CloseButton *cb = qobject_cast<CloseButton *>(w);
if (!cb)
continue;
QColor text;
bool enabled = isTabEnabled(i);
bool selected = (i == newIndex);
bool secondary = m_secondary;
if (enabled)
{
if (selected)
text = (secondary) ? Styles::TabBarTabStyle::secondarySelected : Styles::TabBarTabStyle::primarySelected;
else
text = (secondary) ? Styles::TabBarTabStyle::secondaryNormal : Styles::TabBarTabStyle::primaryNormal;
}
else
text = (secondary) ? Styles::TabBarTabStyle::secondaryDisabled : Styles::TabBarTabStyle::primaryDisabled;
cb->setFontColor(text);
}
}
void LtsTabBar::onCustomContextMenuRequested(const QPoint pos)
{
if (!m_secondary)
return;
QMenu m;
QAction *a = new QAction(tr("Save as image"));
connect(a, &QAction::triggered, this, [this, pos]() { LtsTabBar::onSaveCurrentWidgetAsImage(pos); });
m.addAction(a);
m.exec(mapToGlobal(pos));
}
void LtsTabBar::onSaveCurrentWidgetAsImage(const QPoint pos)
{
int curTab = tabAt(pos);
if (curTab < 0)
curTab = currentIndex();
if (curTab < 0)
return;
LtsTabWidget *tw = qobject_cast<LtsTabWidget*>(parentWidget());
QWidget *w = tw ? tw->widget(curTab) : nullptr;
if (!w)
return;
LtsDialogHelper *helper = qobject_cast<LtsDialogHelper*>(w);
if (helper)
w = helper->getDialog();
SaveImageEvent *ev = new SaveImageEvent(w, w->grab());
ev->setAccepted(false);
QCoreApplication::postEvent(qApp, ev);
}
}