diff --git a/interface/resources/images/redarrow.svg b/interface/resources/images/redarrow.svg new file mode 100644 index 0000000000..156f4baa45 --- /dev/null +++ b/interface/resources/images/redarrow.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/interface/resources/images/redarrow_reversed.svg b/interface/resources/images/redarrow_reversed.svg new file mode 100644 index 0000000000..99c72cadb0 --- /dev/null +++ b/interface/resources/images/redarrow_reversed.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 70cb22dc4d..7531ee3d69 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -30,6 +30,7 @@ DialogContainer { property int maximumX: parent ? parent.width - width : 0 property int maximumY: parent ? parent.height - height : 0 + AddressBarDialog { id: addressBarDialog @@ -48,8 +49,7 @@ DialogContainer { Image { id: backArrow - source: "../images/left-arrow.svg" - scale: 0.9 + source: addressBarDialog.backEnabled ? "../images/left-arrow.svg" : "../images/redarrow_reversed.svg" anchors { fill: parent @@ -71,7 +71,7 @@ DialogContainer { Image { id: forwardArrow - source: "../images/darkgreyarrow.svg" + source: addressBarDialog.forwardEnabled ? "../images/darkgreyarrow.svg" : "../images/redarrow.svg" anchors { fill: parent @@ -127,6 +127,7 @@ DialogContainer { } } + // Add this code to make text bar draggable /* MouseArea { // Drag the input rectangle diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp index 80f51ff906..5d27af444a 100644 --- a/interface/src/ui/AddressBarDialog.cpp +++ b/interface/src/ui/AddressBarDialog.cpp @@ -22,6 +22,20 @@ AddressBarDialog::AddressBarDialog(QQuickItem* parent) : OffscreenQmlDialog(pare connect(addressManager.data(), &AddressManager::lookupResultIsOffline, this, &AddressBarDialog::displayAddressOfflineMessage); connect(addressManager.data(), &AddressManager::lookupResultIsNotFound, this, &AddressBarDialog::displayAddressNotFoundMessage); connect(addressManager.data(), &AddressManager::lookupResultsFinished, this, &AddressBarDialog::hide); + connect(addressManager.data(), &AddressManager::goBackPossible, this, [this] (bool isPossible) { + if (isPossible != _backEnabled) { + _backEnabled = isPossible; + emit backEnabledChanged(); + } + }); + connect(addressManager.data(), &AddressManager::goForwardPossible, this, [this] (bool isPossible) { + if (isPossible != _forwardEnabled) { + _forwardEnabled = isPossible; + emit forwardEnabledChanged(); + } + }); + _backEnabled = !(DependencyManager::get()->getBackStack().isEmpty()); + _forwardEnabled = !(DependencyManager::get()->getForwardStack().isEmpty()); } void AddressBarDialog::hide() { diff --git a/interface/src/ui/AddressBarDialog.h b/interface/src/ui/AddressBarDialog.h index da54e29929..e0be8aa3fb 100644 --- a/interface/src/ui/AddressBarDialog.h +++ b/interface/src/ui/AddressBarDialog.h @@ -18,9 +18,17 @@ class AddressBarDialog : public OffscreenQmlDialog { Q_OBJECT HIFI_QML_DECL + Q_PROPERTY(bool backEnabled READ backEnabled NOTIFY backEnabledChanged) + Q_PROPERTY(bool forwardEnabled READ forwardEnabled NOTIFY forwardEnabledChanged) public: AddressBarDialog(QQuickItem* parent = nullptr); + bool backEnabled() { return _backEnabled; } + bool forwardEnabled() { return _forwardEnabled; } + +signals: + void backEnabledChanged(); + void forwardEnabledChanged(); protected: void displayAddressOfflineMessage(); @@ -30,6 +38,9 @@ protected: Q_INVOKABLE void loadAddress(const QString& address); Q_INVOKABLE void loadBack(); Q_INVOKABLE void loadForward(); + + bool _backEnabled; + bool _forwardEnabled; }; #endif diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index b4c34176a4..6d9ff01be2 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -62,6 +62,9 @@ public: void loadSettings(const QString& lookupString = QString()); + const QStack& getBackStack() const { return _backStack; } + const QStack& getForwardStack() const { return _forwardStack; } + public slots: void handleLookupString(const QString& lookupString);