]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphintabpage.h
Build with QT_NO_KEYWORDS
[dolphin.git] / src / dolphintabpage.h
index 74344acd1800b2b1919a2f7a4ee398880c9101f3..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
  */
 #include <QUrl>
 #include <QWidget>
 
-class QSplitter;
+class DolphinNavigatorsWidgetAction;
 class DolphinViewContainer;
+class QSplitter;
+class QVariantAnimation;
 class KFileItemList;
 
+enum Animated {
+    WithAnimation,
+    WithoutAnimation
+};
+
 class DolphinTabPage : public QWidget
 {
     Q_OBJECT
@@ -35,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.
@@ -66,6 +80,27 @@ public:
      */
     int selectedItemsCount() const;
 
+    /**
+     * Connects a navigatorsWidget to this. It will be connected to the DolphinViewContainers
+     * managed by this tab. For alignment purposes this will from now on notify the
+     * navigatorsWidget when this tab or its viewContainers are resized.
+     */
+    void connectNavigators(DolphinNavigatorsWidgetAction *navigatorsWidget);
+
+    /**
+     * Makes it so this tab and its DolphinViewContainers aren't controlled by any
+     * UrlNavigators anymore.
+     */
+    void disconnectNavigators();
+
+    void insertNavigatorsWidget(DolphinNavigatorsWidgetAction *navigatorsWidget);
+
+    /**
+     * Notify the connected DolphinNavigatorsWidgetAction of geometry changes which it
+     * needs for visual alignment.
+     */
+    void resizeNavigators() const;
+
     /**
      * Marks the items indicated by \p urls to get selected after the
      * directory DolphinView::url() has been loaded. Note that nothing
@@ -80,14 +115,6 @@ public:
      */
     void markUrlAsCurrent(const QUrl& url);
 
-    /**
-     * Sets the places selector visible, if \a visible is true.
-     * The places selector allows to select the places provided
-     * by the places model passed in the constructor. Per default
-     * the places selector is visible.
-     */
-    void setPlacesSelectorVisible(bool visible);
-
     /**
      * Refreshes the views of the main window by recreating them according to
      * the given Dolphin settings.
@@ -122,11 +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 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);
 
-private slots:
     /**
      * Handles the view activated event.
      *
@@ -150,12 +189,26 @@ 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;
 
+    QPointer<DolphinNavigatorsWidgetAction> m_navigatorsWidget;
     QPointer<DolphinViewContainer> m_primaryViewContainer;
     QPointer<DolphinViewContainer> m_secondaryViewContainer;
 
+    DolphinViewContainer *m_expandingContainer;
+    QPointer<QVariantAnimation> m_expandViewAnimation;
+
     bool m_primaryViewActive;
     bool m_splitViewEnabled;
     bool m_active;