#include "ElaTabWidget.h" #include "ElaTabBar.h" #include "ElaTabWidgetPrivate.h" #include #include #include #include #include ElaTabWidget::ElaTabWidget(QWidget* parent) : QTabWidget(parent), d_ptr(new ElaTabWidgetPrivate()) { Q_D(ElaTabWidget); d->q_ptr = this; _pIsTabTransparent = false; setObjectName("ElaTabWidget"); setAcceptDrops(true); ElaTabBar* tabBar = new ElaTabBar(this); setTabBar(tabBar); connect(tabBar, &ElaTabBar::tabDragCreate, d, &ElaTabWidgetPrivate::onTabDragCreate); connect(tabBar, &ElaTabBar::tabDragDrop, d, &ElaTabWidgetPrivate::onTabDragDrop); connect(tabBar, &ElaTabBar::tabCloseRequested, d, &ElaTabWidgetPrivate::onTabCloseRequested); } ElaTabWidget::~ElaTabWidget() { Q_D(ElaTabWidget); for (auto widget: d->_allTabWidgetList) { auto originTabWidgetVariant = widget->property("ElaOriginTabWidget"); if (originTabWidgetVariant.isValid() && originTabWidgetVariant.value() == this) { widget->setProperty("ElaOriginTabWidget", QVariant()); } } } void ElaTabWidget::setTabPosition(TabPosition position) { if (position == QTabWidget::North || position == QTabWidget::South) { QTabWidget::setTabPosition(position); } } void ElaTabWidget::paintEvent(QPaintEvent* event) { if (!_pIsTabTransparent) { QTabWidget::paintEvent(event); } } void ElaTabWidget::dragEnterEvent(QDragEnterEvent* event) { if (event->mimeData()->property("DragType").toString() == "ElaTabBarDrag") { event->acceptProposedAction(); } QTabWidget::dragEnterEvent(event); } void ElaTabWidget::dropEvent(QDropEvent* event) { Q_D(ElaTabWidget); if (event->mimeData()->property("ElaTabWidgetObject").value() != this) { QMimeData* data = const_cast(event->mimeData()); data->setProperty("TabDropIndex", count()); d->onTabDragDrop(event->mimeData()); event->accept(); } QTabWidget::dropEvent(event); } void ElaTabWidget::tabInserted(int index) { Q_D(ElaTabWidget); QWidget* tabWidget = widget(index); if (!tabWidget->property("ElaOriginTabWidget").isValid()) { d->_allTabWidgetList.append(widget(index)); } QTabWidget::tabInserted(index); }