#include "dolphin_generalsettings.h"
#include "dolphinviewcontainer.h"
-#include "global.h"
-#include <QVariantAnimation>
-#include <QSplitter>
#include <QGridLayout>
-#include <QWidgetAction>
#include <QStyle>
+#include <QVariantAnimation>
DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget* parent) :
QWidget(parent),
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
- m_splitter = new QSplitter(Qt::Horizontal, this);
+ m_splitter = new DolphinTabPageSplitter(Qt::Horizontal, this);
m_splitter->setChildrenCollapsible(false);
connect(m_splitter, &QSplitter::splitterMoved,
this, &DolphinTabPage::splitterMoved);
this, &DolphinTabPage::slotViewUrlRedirection);
m_splitter->addWidget(m_primaryViewContainer);
- m_primaryViewContainer->installEventFilter(this);
m_primaryViewContainer->show();
if (secondaryUrl.isValid() || GeneralSettings::splitView()) {
const QUrl& url = secondaryUrl.isValid() ? secondaryUrl : primaryUrl;
m_secondaryViewContainer = createViewContainer(url);
m_splitter->addWidget(m_secondaryViewContainer);
- m_secondaryViewContainer->installEventFilter(this);
m_secondaryViewContainer->show();
}
}
m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator);
m_navigatorsWidget->setSecondaryNavigatorVisible(true);
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer,
+ m_secondaryViewContainer);
m_splitter->addWidget(m_secondaryViewContainer);
- m_secondaryViewContainer->installEventFilter(this);
m_secondaryViewContainer->setActive(true);
if (animated == WithAnimation) {
}
}
m_primaryViewContainer->setActive(true);
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, nullptr);
if (animated == WithoutAnimation) {
view->close();
view->setDisabled(true);
startExpandViewAnimation(m_primaryViewContainer);
}
+
+ m_primaryViewContainer->slotSplitTabDisabled();
}
}
}
auto secondaryNavigator = navigatorsWidget->secondaryUrlNavigator();
m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator);
}
- resizeNavigators();
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer,
+ m_secondaryViewContainer);
}
void DolphinTabPage::disconnectNavigators()
}
}
-bool DolphinTabPage::eventFilter(QObject *watched, QEvent *event)
-{
- if (event->type() == QEvent::Resize && m_navigatorsWidget) {
- resizeNavigators();
- return false;
- }
- return QWidget::eventFilter(watched, event);
-}
-
void DolphinTabPage::insertNavigatorsWidget(DolphinNavigatorsWidgetAction* navigatorsWidget)
{
QGridLayout *gridLayout = static_cast<QGridLayout *>(layout());
}
}
-
-void DolphinTabPage::resizeNavigators() const
-{
- if (!m_secondaryViewContainer) {
- m_navigatorsWidget->followViewContainerGeometry(
- m_primaryViewContainer->mapToGlobal(QPoint(0,0)).x(),
- m_primaryViewContainer->width());
- } else {
- m_navigatorsWidget->followViewContainersGeometry(
- m_primaryViewContainer->mapToGlobal(QPoint(0,0)).x(),
- m_primaryViewContainer->width(),
- m_secondaryViewContainer->mapToGlobal(QPoint(0,0)).x(),
- m_secondaryViewContainer->width());
- }
-}
-
void DolphinTabPage::markUrlsAsSelected(const QList<QUrl>& urls)
{
m_primaryViewContainer->view()->markUrlsAsSelected(urls);
m_splitter->restoreState(splitterState);
}
-void DolphinTabPage::restoreStateV1(const QByteArray& state)
-{
- if (state.isEmpty()) {
- return;
- }
-
- QByteArray sd = state;
- QDataStream stream(&sd, QIODevice::ReadOnly);
-
- bool isSplitViewEnabled = false;
- stream >> isSplitViewEnabled;
- setSplitViewEnabled(isSplitViewEnabled, WithoutAnimation);
-
- QUrl primaryUrl;
- stream >> primaryUrl;
- m_primaryViewContainer->setUrl(primaryUrl);
- bool primaryUrlEditable;
- stream >> primaryUrlEditable;
- m_primaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(primaryUrlEditable);
-
- if (isSplitViewEnabled) {
- QUrl secondaryUrl;
- stream >> secondaryUrl;
- m_secondaryViewContainer->setUrl(secondaryUrl);
- bool secondaryUrlEditable;
- stream >> secondaryUrlEditable;
- m_secondaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(secondaryUrlEditable);
- }
-
- stream >> m_primaryViewActive;
- if (m_primaryViewActive) {
- m_primaryViewContainer->setActive(true);
- } else {
- Q_ASSERT(m_splitViewEnabled);
- m_secondaryViewContainer->setActive(true);
- }
-
- QByteArray splitterState;
- stream >> splitterState;
- m_splitter->restoreState(splitterState);
-}
-
void DolphinTabPage::setActive(bool active)
{
if (active) {
}
m_expandViewAnimation->start(QAbstractAnimation::DeleteWhenStopped);
}
+
+DolphinTabPageSplitterHandle::DolphinTabPageSplitterHandle(Qt::Orientation orientation, QSplitter *parent)
+ : QSplitterHandle(orientation, parent)
+ , m_mouseReleaseWasReceived(false)
+{}
+
+bool DolphinTabPageSplitterHandle::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::MouseButtonPress:
+ m_mouseReleaseWasReceived = false;
+ break;
+ case QEvent::MouseButtonRelease:
+ if (m_mouseReleaseWasReceived) {
+ resetSplitterSizes();
+ }
+ m_mouseReleaseWasReceived = !m_mouseReleaseWasReceived;
+ break;
+ case QEvent::MouseButtonDblClick:
+ m_mouseReleaseWasReceived = false;
+ resetSplitterSizes();
+ break;
+ default:
+ break;
+ }
+
+ return QSplitterHandle::event(event);
+}
+
+void DolphinTabPageSplitterHandle::resetSplitterSizes()
+{
+ QList<int> splitterSizes = splitter()->sizes();
+ std::fill(splitterSizes.begin(), splitterSizes.end(), 0);
+ splitter()->setSizes(splitterSizes);
+}
+
+DolphinTabPageSplitter::DolphinTabPageSplitter(Qt::Orientation orientation, QWidget *parent)
+ : QSplitter(orientation, parent)
+{}
+
+QSplitterHandle* DolphinTabPageSplitter::createHandle()
+{
+ return new DolphinTabPageSplitterHandle(orientation(), this);
+}