31 #include <QMouseEvent>
32 #include <QPaintEvent>
35 #include <QHeaderView>
43 : QWidget(parent), parent_(parent), first_column_size_ratio_(0.5
f), color_(128, 128, 128, 64)
45 setCursor(Qt::SplitHCursor);
46 parent_->header()->setStretchLastSection(
false);
47 parent_->viewport()->installEventFilter(
this);
53 if (event->type() == QEvent::Resize)
63 const int sbw =
parent_->verticalScrollBar()->isVisible() ? 0 :
parent_->verticalScrollBar()->width();
65 const int min =
header->minimumSectionSize();
66 const int available =
parent_->viewport()->contentsRect().width();
67 const auto& content =
parent_->contentsRect();
71 if (new_column_width <= 0)
73 else if (new_column_width >= available)
74 new_column_width = available;
76 new_column_width = qBound(
min,
78 available -
min - sbw);
80 if (new_column_width >
header->sectionSize(0))
82 header->resizeSection(1, available - new_column_width);
83 header->resizeSection(0, new_column_width);
87 header->resizeSection(0, new_column_width);
88 header->resizeSection(1, available - new_column_width);
92 int new_x = content.x() + new_column_width - w / 2;
93 if (new_x != x() || content.height() != height())
94 setGeometry(new_x, content.y(), w, content.height());
116 if (event->button() == Qt::LeftButton)
125 if (event->buttons() & Qt::LeftButton)
127 QPoint pos_rel_parent =
parent_->mapFromGlobal(event->globalPos());
135 int available_width =
parent_->contentsRect().width();
136 int default_width = 0.5f * available_width;
138 int col0 =
static_cast<QAbstractItemView*
>(
parent_)->sizeHintForColumn(0) - default_width;
139 int col1 =
static_cast<QAbstractItemView*
>(
parent_)->sizeHintForColumn(1) - default_width;
141 if (col0 <= 0 && col1 <= 0)
143 else if (col0 + col1 <= 0)
151 QPainter painter(
this);
153 painter.drawLine(width() / 2, 0, width() / 2, height());