71 lines
2.3 KiB
C++
71 lines
2.3 KiB
C++
#include "ElaTabWidget.h"
|
|
|
|
#include "ElaTabBar.h"
|
|
#include "ElaTabWidgetPrivate.h"
|
|
#include <QDebug>
|
|
#include <QDrag>
|
|
#include <QMimeData>
|
|
#include <QMouseEvent>
|
|
#include <QPainter>
|
|
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<ElaTabWidget *>() == 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<ElaTabWidget *>() != this) {
|
|
QMimeData *data = const_cast<QMimeData *>(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);
|
|
}
|