]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphintabpage.h
Build with QT_NO_KEYWORDS
[dolphin.git] / src / dolphintabpage.h
index 650594214a1df20a43b3d117a1ba722e19938a67..512ac22fed5c02734460d51630e40910da32da28 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * SPDX-FileCopyrightText: 2014 Emmanuel Pescosta <emmanuelpescosta099@gmail.com>
+ * SPDX-FileCopyrightText: 2020 Felix Ernst <fe.a.ernst@gmail.com>
  *
  * SPDX-License-Identifier: GPL-2.0-or-later
  */
 class DolphinNavigatorsWidgetAction;
 class DolphinViewContainer;
 class QSplitter;
+class QVariantAnimation;
 class KFileItemList;
 
+enum Animated {
+    WithAnimation,
+    WithoutAnimation
+};
+
 class DolphinTabPage : public QWidget
 {
     Q_OBJECT
@@ -36,9 +43,15 @@ public:
     /**
      * Enables or disables the split view mode.
      *
-     * If \a enabled is true, it creates a secondary view with the url of the primary view.
+     * @param enabled      If true, creates a secondary viewContainer in this tab.
+     *                     Otherwise deletes it.
+     * @param animated     Decides wether the effects of this method call should
+     *                     happen instantly or be transitioned to smoothly.
+     * @param secondaryUrl If \p enabled is true, the new viewContainer will be opened at this
+     *                     parameter. The default value will set the Url of the new viewContainer
+     *                     to be the same as the existing one.
      */
-    void setSplitViewEnabled(bool enabled, const QUrl &secondaryUrl = QUrl());
+    void setSplitViewEnabled(bool enabled, Animated animated, const QUrl &secondaryUrl = QUrl());
 
     /**
      * @return The primary view container.
@@ -80,10 +93,7 @@ public:
      */
     void disconnectNavigators();
 
-    /**
-     * Calls resizeNavigators() when a watched object is resized.
-     */
-    bool eventFilter(QObject */* watched */, QEvent *event) override;
+    void insertNavigatorsWidget(DolphinNavigatorsWidgetAction *navigatorsWidget);
 
     /**
      * Notify the connected DolphinNavigatorsWidgetAction of geometry changes which it
@@ -139,12 +149,23 @@ public:
      */
     void setActive(bool active);
 
-signals:
+Q_SIGNALS:
     void activeViewChanged(DolphinViewContainer* viewContainer);
     void activeViewUrlChanged(const QUrl& url);
     void splitterMoved(int pos, int index);
 
-private slots:
+private Q_SLOTS:
+    /**
+     * Deletes all zombie viewContainers that were used for the animation
+     * and resets the minimum size of the others to a sane value.
+     */
+    void slotAnimationFinished();
+
+    /**
+     * This method is called for every frame of the m_expandViewAnimation.
+     */
+    void slotAnimationValueChanged(const QVariant &value);
+
     /**
      * Handles the view activated event.
      *
@@ -168,6 +189,16 @@ private:
      */
     DolphinViewContainer* createViewContainer(const QUrl& url) const;
 
+    /**
+     * Starts an animation that transitions between split view mode states.
+     *
+     * One of the viewContainers is always being expanded when toggling so
+     * this method can animate both opening and closing of viewContainers.
+     * @param expandingContainer The container that will increase in size
+     *                           over the course of the animation.
+     */
+    void startExpandViewAnimation(DolphinViewContainer *expandingContainer);
+
 private:
     QSplitter* m_splitter;
 
@@ -175,6 +206,9 @@ private:
     QPointer<DolphinViewContainer> m_primaryViewContainer;
     QPointer<DolphinViewContainer> m_secondaryViewContainer;
 
+    DolphinViewContainer *m_expandingContainer;
+    QPointer<QVariantAnimation> m_expandViewAnimation;
+
     bool m_primaryViewActive;
     bool m_splitViewEnabled;
     bool m_active;