added escape key handler (#461)

Added escape key handler for drawer2type
This commit is contained in:
Nethius 2024-02-28 19:39:28 +07:00 committed by GitHub
parent 6dbdb85aaf
commit b05ad2392b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 90 additions and 8 deletions

View file

@ -77,7 +77,16 @@ void PageController::closeWindow()
void PageController::keyPressEvent(Qt::Key key) void PageController::keyPressEvent(Qt::Key key)
{ {
switch (key) { switch (key) {
case Qt::Key_Back: emit closePage(); case Qt::Key_Back:
case Qt::Key_Escape: {
if (m_drawerDepth) {
emit closeTopDrawer();
setDrawerDepth(getDrawerDepth() - 1);
} else {
emit escapePressed();
}
break;
}
default: return; default: return;
} }
} }
@ -132,3 +141,15 @@ void PageController::closeApplication()
{ {
qApp->quit(); qApp->quit();
} }
void PageController::setDrawerDepth(const int depth)
{
if (depth >= 0) {
m_drawerDepth = depth;
}
}
int PageController::getDrawerDepth()
{
return m_drawerDepth;
}

View file

@ -87,6 +87,9 @@ public slots:
void closeApplication(); void closeApplication();
void setDrawerDepth(const int depth);
int getDrawerDepth();
signals: signals:
void goToPage(PageLoader::PageEnum page, bool slide = true); void goToPage(PageLoader::PageEnum page, bool slide = true);
void goToStartPage(); void goToStartPage();
@ -105,7 +108,7 @@ signals:
void showNotificationMessage(const QString &message); void showNotificationMessage(const QString &message);
void showBusyIndicator(bool visible); void showBusyIndicator(bool visible);
void enableTabBar(bool enabled); void disableControls(bool disabled);
void hideMainWindow(); void hideMainWindow();
void raiseMainWindow(); void raiseMainWindow();
@ -113,12 +116,17 @@ signals:
void showPassphraseRequestDrawer(); void showPassphraseRequestDrawer();
void passphraseRequestDrawerClosed(QString passphrase); void passphraseRequestDrawerClosed(QString passphrase);
void escapePressed();
void closeTopDrawer();
private: private:
QSharedPointer<ServersModel> m_serversModel; QSharedPointer<ServersModel> m_serversModel;
std::shared_ptr<Settings> m_settings; std::shared_ptr<Settings> m_settings;
bool m_isTriggeredByConnectButton; bool m_isTriggeredByConnectButton;
int m_drawerDepth;
}; };
#endif // PAGECONTROLLER_H #endif // PAGECONTROLLER_H

View file

@ -25,6 +25,8 @@ Item {
property real expandedHeight property real expandedHeight
property real collapsedHeight: 0 property real collapsedHeight: 0
property int depthIndex: 0
signal entered signal entered
signal exited signal exited
signal pressed(bool pressed, bool entered) signal pressed(bool pressed, bool entered)
@ -36,6 +38,24 @@ Item {
signal closed signal closed
signal opened signal opened
Connections {
target: PageController
function onCloseTopDrawer() {
if (depthIndex === PageController.getDrawerDepth()) {
if (isCollapsed) {
return
}
aboutToHide()
drawerContent.state = root.drawerCollapsed
depthIndex = 0
closed()
}
}
}
Connections { Connections {
target: root target: root
@ -47,6 +67,8 @@ Item {
aboutToHide() aboutToHide()
drawerContent.state = root.drawerCollapsed drawerContent.state = root.drawerCollapsed
depthIndex = 0
PageController.setDrawerDepth(PageController.getDrawerDepth() - 1)
closed() closed()
} }
@ -58,6 +80,8 @@ Item {
aboutToShow() aboutToShow()
drawerContent.state = root.drawerExpanded drawerContent.state = root.drawerExpanded
depthIndex = PageController.getDrawerDepth() + 1
PageController.setDrawerDepth(depthIndex)
opened() opened()
} }
} }

View file

@ -14,8 +14,8 @@ import "../Config"
PageType { PageType {
id: root id: root
Component.onCompleted: PageController.enableTabBar(false) Component.onCompleted: PageController.disableControls(true)
Component.onDestruction: PageController.enableTabBar(true) Component.onDestruction: PageController.disableControls(false)
SortFilterProxyModel { SortFilterProxyModel {
id: proxyServersModel id: proxyServersModel

View file

@ -14,8 +14,8 @@ import "../Config"
PageType { PageType {
id: root id: root
Component.onCompleted: PageController.enableTabBar(false) Component.onCompleted: PageController.disableControls(true)
Component.onDestruction: PageController.enableTabBar(true) Component.onDestruction: PageController.disableControls(false)
property bool isTimerRunning: true property bool isTimerRunning: true
property string progressBarText: qsTr("Usually it takes no more than 5 minutes") property string progressBarText: qsTr("Usually it takes no more than 5 minutes")

View file

@ -13,6 +13,8 @@ import "../Components"
PageType { PageType {
id: root id: root
property bool isControlsDisabled: false
Connections { Connections {
target: PageController target: PageController
@ -45,6 +47,18 @@ PageType {
stackView.pop() stackView.pop()
} }
} }
function onDisableControls(disabled) {
isControlsDisabled = disabled
}
function onEscapePressed() {
if (isControlsDisabled || busyIndicator.visible) {
return
}
PageController.closePage()
}
} }
Connections { Connections {

View file

@ -38,8 +38,8 @@ PageType {
tabBar.enabled = !visible tabBar.enabled = !visible
} }
function onEnableTabBar(enabled) { function onDisableControls(disabled) {
tabBar.enabled = enabled tabBar.enabled = !disabled
} }
function onClosePage() { function onClosePage() {
@ -70,6 +70,21 @@ PageType {
tabBarStackView.pop() tabBarStackView.pop()
} }
} }
function onEscapePressed() {
if (!tabBar.enabled || busyIndicator.visible) {
return
}
var pageName = tabBarStackView.currentItem.objectName
if ((pageName === PageController.getPagePath(PageEnum.PageShare)) ||
(pageName === PageController.getPagePath(PageEnum.PageSettings))) {
PageController.goToPageHome()
tabBar.previousIndex = 0
} else {
PageController.closePage()
}
}
} }
Connections { Connections {