#include "dolphin_generalsettings.h"
#include "dolphinviewcontainer.h"
-#include <QPropertyAnimation>
#include <QSplitter>
-#include <QVBoxLayout>
+#include <QGridLayout>
+#include <QWidgetAction>
DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget* parent) :
QWidget(parent),
m_splitViewEnabled(false),
m_active(true)
{
- QVBoxLayout* layout = new QVBoxLayout(this);
+ QGridLayout *layout = new QGridLayout(this);
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
m_splitter->setChildrenCollapsible(false);
connect(m_splitter, &QSplitter::splitterMoved,
this, &DolphinTabPage::splitterMoved);
- layout->addWidget(m_splitter);
+ layout->addWidget(m_splitter, 1, 0);
+ layout->setRowStretch(1, 1);
// Create a new primary view
m_primaryViewContainer = createViewContainer(primaryUrl);
m_splitViewEnabled = enabled;
if (enabled) {
- int splitterTotalWidth = m_splitter->width();
const QUrl& url = (secondaryUrl.isEmpty()) ? m_primaryViewContainer->url() : secondaryUrl;
m_secondaryViewContainer = createViewContainer(url);
m_splitter->addWidget(m_secondaryViewContainer);
m_secondaryViewContainer->installEventFilter(this);
- m_secondaryViewContainer->setActive(true);
-
- // opening animation
- m_splitter->widget(1)->setMinimumWidth(1);
- const QList<int> splitterSizes = {m_splitter->width(), 0};
- m_splitter->setSizes(splitterSizes);
-
- // TODO: This is only here to test the robustness of DolphinNavigatorsWidgetAction! I still have to move it to another merge request!
- m_splitViewAnimation = new QVariantAnimation(m_splitter);
- m_splitViewAnimation->setDuration(200); // TODO: where do I get the animation times from again?
- m_splitViewAnimation->setStartValue(splitterTotalWidth);
- m_splitViewAnimation->setEndValue(splitterTotalWidth / 2);
- m_splitViewAnimation->setEasingCurve(QEasingCurve::OutCubic);
-
- connect(m_splitViewAnimation, &QVariantAnimation::valueChanged, [=]() {
- if (m_splitter->count() != 2) {
- return;
- }
- int value = m_splitViewAnimation->currentValue().toInt();
- const QList<int> splitterSizes = {value, m_splitter->width() - value};
- m_splitter->setSizes(splitterSizes);
- if (value == m_splitViewAnimation->endValue().toInt()) {
- m_splitter->widget(1)->setMinimumWidth(m_splitter->widget(1)->minimumSizeHint().width());
- }
- });
- m_splitViewAnimation->start(QAbstractAnimation::DeleteWhenStopped);
m_secondaryViewContainer->show();
+ m_secondaryViewContainer->setActive(true);
} else {
m_navigatorsWidget->setSecondaryNavigatorVisible(false);
m_secondaryViewContainer->disconnectUrlNavigator();
m_primaryViewContainer->setActive(true);
view->close();
view->deleteLater();
- if (m_splitViewAnimation) {
- delete m_splitViewAnimation;
- m_splitter->widget(0)->setMinimumWidth(m_splitter->widget(0)->minimumSizeHint().width());
- }
}
}
}
void DolphinTabPage::connectNavigators(DolphinNavigatorsWidgetAction *navigatorsWidget)
{
+ insertNavigatorsWidget(navigatorsWidget);
m_navigatorsWidget = navigatorsWidget;
auto primaryNavigator = navigatorsWidget->primaryUrlNavigator();
- primaryNavigator->setActive(m_primaryViewActive);
m_primaryViewContainer->connectUrlNavigator(primaryNavigator);
if (m_splitViewEnabled) {
auto secondaryNavigator = navigatorsWidget->secondaryUrlNavigator();
- if (!secondaryNavigator) {
- navigatorsWidget->createSecondaryUrlNavigator();
- secondaryNavigator = navigatorsWidget->secondaryUrlNavigator();
- }
- secondaryNavigator->setActive(!m_primaryViewActive);
m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator);
}
resizeNavigators();
}
}
-bool DolphinTabPage::eventFilter(QObject */* watched */, QEvent *event)
+bool DolphinTabPage::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::Resize && m_navigatorsWidget) {
resizeNavigators();
+ return false;
}
- return false;
+ return QWidget::eventFilter(watched, event);
}
+void DolphinTabPage::insertNavigatorsWidget(DolphinNavigatorsWidgetAction* navigatorsWidget)
+{
+ QGridLayout *gridLayout = static_cast<QGridLayout *>(layout());
+ if (navigatorsWidget->isInToolbar()) {
+ gridLayout->setRowMinimumHeight(0, 0);
+ } else {
+ // We set a row minimum height, so the height does not visibly change whenever
+ // navigatorsWidget is inserted which happens every time the current tab is changed.
+ gridLayout->setRowMinimumHeight(0, navigatorsWidget->primaryUrlNavigator()->height());
+ gridLayout->addWidget(navigatorsWidget->requestWidget(this), 0, 0);
+ }
+}
+
+
void DolphinTabPage::resizeNavigators() const
{
if (!m_splitViewEnabled) {
stream >> m_primaryViewActive;
if (m_primaryViewActive) {
m_primaryViewContainer->setActive(true);
- m_navigatorsWidget->primaryUrlNavigator()->setActive(true);
} else {
Q_ASSERT(m_splitViewEnabled);
m_secondaryViewContainer->setActive(true);
- m_navigatorsWidget->primaryUrlNavigator()->setActive(false);
}
- if (m_splitViewAnimation) {
- delete m_splitViewAnimation;
- m_splitter->widget(0)->setMinimumWidth(m_splitter->widget(0)->minimumSizeHint().width());
- }
QByteArray splitterState;
stream >> splitterState;
m_splitter->restoreState(splitterState);