diff options
| author | Felix Ernst <[email protected]> | 2021-01-02 17:48:52 +0000 |
|---|---|---|
| committer | Elvis Angelaccio <[email protected]> | 2021-01-02 17:48:52 +0000 |
| commit | f01a61b76c8588a4df2054ab70e9a746a74f7817 (patch) | |
| tree | 1bc359df5c5f2e203652f1e59e1c08544383488e /src/dolphintabpage.h | |
| parent | d3c5bb6e9b99c6ff43bd8160df58d35a725a0894 (diff) | |
Animate split view mode toggling
Have the secondary ViewContainer slide into/out of view when split view mode is switched on or off by the user.
This should help users understand what split view mode is about. Without the animation it might seem like the only thing the button does is creating a weird vertical line in the middle of the view or something. With the animation it should be clear that the second view is a separate entity that was added. The closing animation will help users understand which of the ViewContainers was just closed.
Diffstat (limited to 'src/dolphintabpage.h')
| -rw-r--r-- | src/dolphintabpage.h | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/src/dolphintabpage.h b/src/dolphintabpage.h index 63a246328..e90bf99bf 100644 --- a/src/dolphintabpage.h +++ b/src/dolphintabpage.h @@ -1,5 +1,6 @@ /* * SPDX-FileCopyrightText: 2014 Emmanuel Pescosta <[email protected]> + * SPDX-FileCopyrightText: 2020 Felix Ernst <[email protected]> * * SPDX-License-Identifier: GPL-2.0-or-later */ @@ -14,8 +15,14 @@ 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. @@ -148,6 +161,17 @@ signals: private 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. * * It sets the previous active view to inactive, updates the current @@ -170,6 +194,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; @@ -177,6 +211,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; |
