[vlc-devel] [PATCH 25/33] QML: implement the next navigation in the history
Adrien Maglo
magsoft at videolan.org
Wed Jun 12 14:01:32 CEST 2019
---
.../gui/qt/components/navigation_history.cpp | 59 +++++++++++++++----
.../gui/qt/components/navigation_history.hpp | 18 ++++--
modules/gui/qt/qml/BannerSources.qml | 5 +-
modules/gui/qt/qml/MainInterface.qml | 2 +-
modules/gui/qt/qml/about/About.qml | 2 +-
modules/gui/qt/qml/utils/IconToolButton.qml | 7 ++-
6 files changed, 69 insertions(+), 24 deletions(-)
diff --git a/modules/gui/qt/components/navigation_history.cpp b/modules/gui/qt/components/navigation_history.cpp
index 39a428a7d9..5f494d1c58 100644
--- a/modules/gui/qt/components/navigation_history.cpp
+++ b/modules/gui/qt/components/navigation_history.cpp
@@ -1,28 +1,43 @@
#include "navigation_history.hpp"
#include <QDebug>
-NavigationHistory::NavigationHistory(QObject *parent) : QObject(parent)
+NavigationHistory::NavigationHistory(QObject *parent)
+ : QObject(parent), m_position(-1)
{
}
QVariant NavigationHistory::getCurrent()
{
+ return m_history[m_position];
+}
- return m_history.back();
+bool NavigationHistory::isPreviousEmpty()
+{
+ return m_position < 1;
}
-bool NavigationHistory::isEmpty()
+bool NavigationHistory::isNextEmpty()
{
- return m_history.count() < 1;
+ return m_position == m_history.length() - 1;
}
void NavigationHistory::push(QVariantMap item, PostAction postAction)
{
+ if (m_position < m_history.length() - 1) {
+ /* We want to push a new view while we have other views
+ * after the current one.
+ * In the case we delete all the following views. */
+ m_history.erase(m_history.begin() + m_position + 1, m_history.end());
+ emit nextEmptyChanged(true);
+ }
+
//m_history.push_back(VariantToPropertyMap(item));
m_history.push_back(item);
- if (m_history.count() == 2)
- emit emptyChanged(true);
+ // Set to last position
+ m_position++;
+ if (m_position == 1)
+ emit previousEmptyChanged(true);
if (postAction == PostAction::Go)
emit currentChanged(m_history.back());
}
@@ -52,17 +67,35 @@ void NavigationHistory::push(QVariantList itemList, NavigationHistory::PostActio
push(itemMap, postAction);
}
-void NavigationHistory::pop(PostAction postAction)
+void NavigationHistory::previous(PostAction postAction)
{
- if (m_history.count() == 1)
+ if (m_position == 0)
return;
//delete m_history.back();
- m_history.pop_back();
+ m_position--;
+
+ if (m_position == 0)
+ emit previousEmptyChanged(true);
+ if (m_position == m_history.length() - 2)
+ emit nextEmptyChanged(false);
- if (m_history.count() == 1) {
- emit emptyChanged(true);
- }
if (postAction == PostAction::Go)
- emit currentChanged(m_history.back());
+ emit currentChanged(m_history[m_position]);
+}
+
+void NavigationHistory::next(PostAction postAction)
+{
+ if (m_position == m_history.length() - 1)
+ return;
+
+ m_position++;
+
+ if (m_position == 1)
+ emit previousEmptyChanged(false);
+ if (m_position == m_history.length() - 1)
+ emit nextEmptyChanged(true);
+
+ if (postAction == PostAction::Go)
+ emit currentChanged(m_history[m_position]);
}
diff --git a/modules/gui/qt/components/navigation_history.hpp b/modules/gui/qt/components/navigation_history.hpp
index 36d8c4a8ce..a07c0ab93a 100644
--- a/modules/gui/qt/components/navigation_history.hpp
+++ b/modules/gui/qt/components/navigation_history.hpp
@@ -10,7 +10,8 @@ class NavigationHistory : public QObject
Q_OBJECT
public:
Q_PROPERTY(QVariant current READ getCurrent NOTIFY currentChanged)
- Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged)
+ Q_PROPERTY(bool previousEmpty READ isPreviousEmpty NOTIFY previousEmptyChanged)
+ Q_PROPERTY(bool nextEmpty READ isNextEmpty NOTIFY nextEmptyChanged)
enum class PostAction{
Stay,
@@ -22,11 +23,13 @@ public:
explicit NavigationHistory(QObject *parent = nullptr);
QVariant getCurrent();
- bool isEmpty();
+ bool isPreviousEmpty();
+ bool isNextEmpty();
signals:
void currentChanged(QVariant current);
- void emptyChanged(bool empty);
+ void previousEmptyChanged(bool empty);
+ void nextEmptyChanged(bool empty);
public slots:
/**
@@ -62,11 +65,16 @@ public slots:
* \endcode
*/
Q_INVOKABLE void push(QVariantList itemList, PostAction = PostAction::Stay );
- //pop the last page
- void pop( PostAction = PostAction::Stay );
+
+ // Go to previous page
+ void previous( PostAction = PostAction::Stay );
+
+ // Go to next page
+ void next( PostAction = PostAction::Stay );
private:
QVariantList m_history;
+ int m_position;
};
#endif // NAVIGATION_HISTORY_HPP
diff --git a/modules/gui/qt/qml/BannerSources.qml b/modules/gui/qt/qml/BannerSources.qml
index a438039653..6caf918dc4 100644
--- a/modules/gui/qt/qml/BannerSources.qml
+++ b/modules/gui/qt/qml/BannerSources.qml
@@ -220,7 +220,8 @@ Utils.NavigableFocusScope {
Layout.minimumWidth: width
text: VLCIcons.topbar_previous
KeyNavigation.right: history_next
- onClicked: history.pop(History.Go)
+ onClicked: history.previous(History.Go)
+ enabled: !history.previousEmpty
}
Utils.IconToolButton {
@@ -230,6 +231,8 @@ Utils.NavigableFocusScope {
text: VLCIcons.topbar_next
KeyNavigation.right: bar
KeyNavigation.up: buttonView
+ onClicked: history.next(History.Go)
+ enabled: !history.nextEmpty
}
TabBar {
diff --git a/modules/gui/qt/qml/MainInterface.qml b/modules/gui/qt/qml/MainInterface.qml
index c6ad268015..0d23bc068b 100644
--- a/modules/gui/qt/qml/MainInterface.qml
+++ b/modules/gui/qt/qml/MainInterface.qml
@@ -50,7 +50,7 @@ Rectangle {
focus: true
onActionCancel: {
console.log("onActionCancel")
- history.pop(History.Go)
+ history.previous(History.Go)
}
}
}
diff --git a/modules/gui/qt/qml/about/About.qml b/modules/gui/qt/qml/about/About.qml
index a24af79f3c..662b2653af 100644
--- a/modules/gui/qt/qml/about/About.qml
+++ b/modules/gui/qt/qml/about/About.qml
@@ -97,7 +97,7 @@ Utils.NavigableFocusScope {
KeyNavigation.right: textScroll
onClicked: {
- history.pop(History.Go)
+ history.previous(History.Go)
}
}
}
diff --git a/modules/gui/qt/qml/utils/IconToolButton.qml b/modules/gui/qt/qml/utils/IconToolButton.qml
index fabb7c6344..d142d0632f 100644
--- a/modules/gui/qt/qml/utils/IconToolButton.qml
+++ b/modules/gui/qt/qml/utils/IconToolButton.qml
@@ -22,9 +22,9 @@ import "qrc:///style/"
ToolButton {
id: control
- property color color: control.checked
- ? (control.activeFocus ? VLCStyle.colors.accent : VLCStyle.colors.bgHover )
- : VLCStyle.colors.buttonText
+ property color color: control.enabled ?
+ VLCStyle.colors.buttonText : VLCStyle.colors.lightText
+
property int size: VLCStyle.icon_normal
property color highlightColor: VLCStyle.colors.accent
@@ -40,6 +40,7 @@ ToolButton {
}
Label {
+ id: text
text: control.text
color: control.color
--
2.20.1
More information about the vlc-devel
mailing list