/* * nheko Copyright (C) 2017 Konstantinos Sideris * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include "Splitter.h" Splitter::Splitter(int first_step, int second_step, QWidget *parent) : QSplitter(parent) , firstStep_{first_step} , secondStep_{second_step} { connect(this, &QSplitter::splitterMoved, this, &Splitter::onSplitterMoved); } void Splitter::onSplitterMoved(int pos, int index) { Q_UNUSED(pos); Q_UNUSED(index); auto s = sizes(); if (s.count() < 2) { qWarning() << "Splitter needs at least two children"; return; } if (s[0] == secondStep_) { rightMoveCount_ += 1; if (rightMoveCount_ > moveEventLimit_) { auto left = widget(0); auto pos = left->mapFromGlobal(QCursor::pos()); // if we are coming from the right, the cursor should // end up on the first widget. if (left->rect().contains(pos)) { qDebug() << "Resizing left"; left->setMinimumWidth(firstStep_); left->setMaximumWidth(firstStep_); rightMoveCount_ = 0; } } } else if (s[0] == firstStep_) { leftMoveCount_ += 1; if (leftMoveCount_ > moveEventLimit_) { auto left = widget(0); auto right = widget(1); auto pos = right->mapFromGlobal(QCursor::pos()); // We move the start a little further so the transition isn't so abrupt. auto extended = right->rect(); extended.translate(100, 0); // if we are coming from the left, the cursor should // end up on the second widget. if (extended.contains(pos)) { qDebug() << "Resizing Right"; left->setMinimumWidth(secondStep_); left->setMaximumWidth(2 * secondStep_); leftMoveCount_ = 0; } } } }