┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinnavigatorswidgetaction.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dolphinnavigatorswidgetaction.h')
-rw-r--r--src/dolphinnavigatorswidgetaction.h97
1 files changed, 75 insertions, 22 deletions
diff --git a/src/dolphinnavigatorswidgetaction.h b/src/dolphinnavigatorswidgetaction.h
index bbd8cf127..6f5f8e7af 100644
--- a/src/dolphinnavigatorswidgetaction.h
+++ b/src/dolphinnavigatorswidgetaction.h
@@ -10,6 +10,7 @@
#include "dolphinurlnavigator.h"
+#include <QPointer>
#include <QSplitter>
#include <QTimer>
#include <QWidgetAction>
@@ -30,7 +31,8 @@ class QPushButton;
* The secondary side only exists for split view and is created by
* createSecondaryUrlNavigator() when necessary.
* - Each side is a QWidget which I call NavigatorWidget with a QHBoxLayout.
- * - Each NavigatorWidget consists an UrlNavigator, an emptyTrashButton and spacing.
+ * - Each NavigatorWidget consists an UrlNavigator, an emptyTrashButton, a
+ * networkFolderButton, and spacing.
* - Only the primary navigatorWidget has leading spacing. Both have trailing spacing.
* The spacing is there to align the UrlNavigator with its DolphinViewContainer.
*/
@@ -42,6 +44,13 @@ public:
DolphinNavigatorsWidgetAction(QWidget *parent = nullptr);
/**
+ * Adjusts the width of the spacings used to align the UrlNavigators with ViewContainers.
+ * This can only work nicely if up-to-date geometry of ViewContainers is cached so
+ * followViewContainersGeometry() has to have been called at least once before.
+ */
+ void adjustSpacing();
+
+ /**
* The secondary UrlNavigator is only created on-demand. Such an action is not necessary
* for the primary UrlNavigator which is created preemptively.
*
@@ -53,16 +62,11 @@ public:
void createSecondaryUrlNavigator();
/**
- * Notify the primary UrlNavigator of changes in geometry of the ViewContainer it tries to be
- * aligned with. Only call this method if there is no secondary UrlNavigator.
- */
- void followViewContainerGeometry(int globalXOfPrimary, int widthOfPrimary);
- /**
* Notify this widget of changes in geometry of the ViewContainers it tries to be
* aligned with.
*/
- void followViewContainersGeometry(int globalXOfPrimary, int widthOfPrimary,
- int globalXOfSecondary, int widthOfSecondary);
+ void followViewContainersGeometry(QWidget *primaryViewContainer,
+ QWidget *secondaryViewContainer = nullptr);
bool isInToolbar() const;
@@ -98,13 +102,6 @@ protected:
private:
/**
- * Adjusts the width of the spacings used to align the UrlNavigators with ViewContainers.
- * This can only work nicely if up-to-date geometry of ViewContainers is cached so
- * followViewContainersGeometry() has to have been called at least once before.
- */
- void adjustSpacing();
-
- /**
* In Left-to-right languages the Primary side will be the left one.
*/
enum Side {
@@ -124,13 +121,27 @@ private:
/**
* Creates a new empty trash button.
* @param urlNavigator Only when this UrlNavigator shows the trash directory
- * will the the button be visible.
+ * will the button be visible.
* @param parent Aside from the usual QObject deletion mechanisms,
* this parameter influences the positioning of dialog windows
* pertaining to this trash button.
*/
QPushButton *newEmptyTrashButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const;
+ /**
+ * Used to retrieve the networkFolderButtons for the navigatorWidgets on
+ * both sides.
+ */
+ QPushButton *networkFolderButton(Side side);
+
+ /**
+ * Creates a new add "network folder" button.
+ * @param urlNavigator Only when this UrlNavigator shows the remote directory
+ * will the button be visible.
+ * @param parent The object that should be the button's parent.
+ */
+ QPushButton *newNetworkFolderButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const;
+
enum Position {
Leading,
Trailing
@@ -157,12 +168,54 @@ private:
*/
std::unique_ptr<QTimer> m_adjustSpacingTimer;
- // cached values
- int m_globalXOfSplitter;
- int m_globalXOfPrimary;
- int m_widthOfPrimary;
- int m_globalXOfSecondary;
- int m_widthOfSecondary;
+ /**
+ * Extracts the geometry information needed by adjustSpacing() from
+ * ViewContainers. They are also monitored for size changes which
+ * will lead to adjustSpacing() calls.
+ */
+ class ViewGeometriesHelper : public QObject
+ {
+ public:
+ /**
+ * @param navigatorsWidget The QWidget of the navigatorsWidgetAction.
+ * @param navigatorsWidgetAction is only used to call adjustSpacing() whenever that is
+ * deemed necessary.
+ */
+ ViewGeometriesHelper(QWidget *navigatorsWidget, DolphinNavigatorsWidgetAction *navigatorsWidgetAction);
+
+ /**
+ * Calls m_navigatorsWidgetAction::adjustSpacing() when a watched object is resized.
+ */
+ bool eventFilter(QObject *watched, QEvent *event) override;
+
+ /**
+ * Sets the ViewContainers whose geometry is obtained when viewGeometries() is called.
+ */
+ void setViewContainers(QWidget *primaryViewContainer,
+ QWidget *secondaryViewContainer = nullptr);
+
+ struct Geometries {
+ int globalXOfNavigatorsWidget;
+ int globalXOfPrimary;
+ int widthOfPrimary;
+ int globalXOfSecondary;
+ int widthOfSecondary;
+ };
+ /**
+ * @return a Geometries struct that contains values adjustSpacing() requires.
+ */
+ Geometries viewGeometries();
+
+ private:
+ QWidget *m_navigatorsWidget;
+ /** Is only used to call adjustSpacing() whenever that is deemed necessary. */
+ DolphinNavigatorsWidgetAction *m_navigatorsWidgetAction;
+
+ QPointer<QWidget> m_primaryViewContainer;
+ QPointer<QWidget> m_secondaryViewContainer;
+ };
+
+ ViewGeometriesHelper m_viewGeometriesHelper;
};
#endif // DOLPHINNAVIGATORSWIDGETACTION_H