Login loading icon
Add standard mechanism in HButton for loading icon display; have HImage and HIcon base components.
This commit is contained in:
parent
dc2f779d4b
commit
102baccbe5
|
@ -60,14 +60,15 @@ class ClientManager(QObject):
|
||||||
.add_done_callback(lambda _, c=client: self._on_connected(c))
|
.add_done_callback(lambda _, c=client: self._on_connected(c))
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot(str, str, str)
|
@pyqtSlot(str, str, str, result="QVariant")
|
||||||
@pyqtSlot(str, str, str, str)
|
@pyqtSlot(str, str, str, str, result="QVariant")
|
||||||
def new(self, hostname: str, username: str, password: str,
|
def new(self, hostname: str, username: str, password: str,
|
||||||
device_id: str = "") -> None:
|
device_id: str = "") -> None:
|
||||||
|
|
||||||
client = Client(self, hostname, username, device_id)
|
client = Client(self, hostname, username, device_id)
|
||||||
client.login(password, self.defaultDeviceName)\
|
future = client.login(password, self.defaultDeviceName)
|
||||||
.add_done_callback(lambda _: self._on_connected(client))
|
future.add_done_callback(lambda _: self._on_connected(client))
|
||||||
|
return future
|
||||||
|
|
||||||
|
|
||||||
def _on_connected(self, client: Client) -> None:
|
def _on_connected(self, client: Client) -> None:
|
||||||
|
|
|
@ -33,7 +33,6 @@ class SignalManager(QObject):
|
||||||
|
|
||||||
|
|
||||||
def onClientAdded(self, client: Client) -> None:
|
def onClientAdded(self, client: Client) -> None:
|
||||||
print(client)
|
|
||||||
self.connectClient(client)
|
self.connectClient(client)
|
||||||
self.backend.models.accounts.append(User(
|
self.backend.models.accounts.append(User(
|
||||||
userId = client.userId,
|
userId = client.userId,
|
||||||
|
@ -196,7 +195,6 @@ class SignalManager(QObject):
|
||||||
new_event = RoomEvent(type=etype, dateTime=date_time, dict=edict)
|
new_event = RoomEvent(type=etype, dateTime=date_time, dict=edict)
|
||||||
|
|
||||||
if etype == "RoomCreateEvent":
|
if etype == "RoomCreateEvent":
|
||||||
print(room_id, "ff")
|
|
||||||
self.backend.fully_loaded_rooms.add(room_id)
|
self.backend.fully_loaded_rooms.add(room_id)
|
||||||
|
|
||||||
if self._events_in_transfer:
|
if self._events_in_transfer:
|
||||||
|
|
|
@ -3,11 +3,19 @@ import QtQuick.Controls 2.2
|
||||||
import QtQuick.Layouts 1.4
|
import QtQuick.Layouts 1.4
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
property alias fontSize: buttonLabel.font.pixelSize
|
property int fontSize: HStyle.fontSize.normal
|
||||||
property color backgroundColor: "lightgray"
|
property color backgroundColor: "lightgray"
|
||||||
property alias overlayOpacity: buttonBackgroundOverlay.opacity
|
property alias overlayOpacity: buttonBackgroundOverlay.opacity
|
||||||
property string iconName: ""
|
property string iconName: ""
|
||||||
property bool circle: false
|
property bool circle: false
|
||||||
|
property bool loading: false
|
||||||
|
|
||||||
|
property int contentWidth: 0
|
||||||
|
|
||||||
|
function loadingUntilFutureDone(future) {
|
||||||
|
loading = true
|
||||||
|
future.onGotResult.connect(function() { loading = false })
|
||||||
|
}
|
||||||
|
|
||||||
id: button
|
id: button
|
||||||
display: Button.TextBesideIcon
|
display: Button.TextBesideIcon
|
||||||
|
@ -26,38 +34,45 @@ Button {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contentItem: HRowLayout {
|
|
||||||
spacing: button.text && iconName ? 5 : 0
|
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: buttonIcon
|
id: buttonContent
|
||||||
Image {
|
|
||||||
cache: true
|
HRowLayout {
|
||||||
mipmap: true
|
id: contentLayout
|
||||||
source: "../../icons/" + iconName + ".svg"
|
spacing: button.text && iconName ? 5 : 0
|
||||||
fillMode: Image.PreserveAspectFit
|
Component.onCompleted: contentWidth = implicitWidth
|
||||||
width: button.text ? 20 : 24
|
|
||||||
height: width
|
HIcon {
|
||||||
}
|
svgName: loading ? "hourglass" : iconName
|
||||||
}
|
dimension: contentLayout.height
|
||||||
Loader {
|
|
||||||
sourceComponent: iconName ? buttonIcon : undefined
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HLabel {
|
HLabel {
|
||||||
id: buttonLabel
|
|
||||||
|
|
||||||
text: button.text
|
text: button.text
|
||||||
|
font.pixelSize: fontSize
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
|
||||||
elide: Text.ElideRight
|
|
||||||
maximumLineCount: 1
|
|
||||||
Layout.maximumWidth: button.width - buttonIcon.width
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: loadingOverlay
|
||||||
|
HRowLayout {
|
||||||
|
HIcon {
|
||||||
|
svgName: "hourglass"
|
||||||
|
Layout.preferredWidth: contentWidth || -1
|
||||||
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contentItem: Loader {
|
||||||
|
sourceComponent:
|
||||||
|
loading && ! iconName ? loadingOverlay : buttonContent
|
||||||
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
z: 101
|
z: 101
|
||||||
|
|
10
harmonyqml/components/base/HIcon.qml
Normal file
10
harmonyqml/components/base/HIcon.qml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import QtQuick 2.7
|
||||||
|
|
||||||
|
HImage {
|
||||||
|
property var svgName: null
|
||||||
|
property int dimension: 20
|
||||||
|
|
||||||
|
source: "../../icons/" + (svgName || "none") + ".svg"
|
||||||
|
sourceSize.width: svgName ? dimension : 0
|
||||||
|
sourceSize.height: svgName ? dimension : 0
|
||||||
|
}
|
8
harmonyqml/components/base/HImage.qml
Normal file
8
harmonyqml/components/base/HImage.qml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import QtQuick 2.7
|
||||||
|
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
cache: true
|
||||||
|
mipmap: true
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
}
|
|
@ -11,9 +11,9 @@ Image {
|
||||||
source: "../../images/login_background.jpg"
|
source: "../../images/login_background.jpg"
|
||||||
|
|
||||||
function login() {
|
function login() {
|
||||||
Backend.clientManager.new(
|
loginButton.loadingUntilFutureDone(Backend.clientManager.new(
|
||||||
"matrix.org", identifierField.text, passwordField.text
|
"matrix.org", identifierField.text, passwordField.text
|
||||||
)
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
@ -119,10 +119,13 @@ Image {
|
||||||
Base.HButton {
|
Base.HButton {
|
||||||
text: qsTr("Register")
|
text: qsTr("Register")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: 32
|
||||||
}
|
}
|
||||||
Base.HButton {
|
Base.HButton {
|
||||||
|
id: loginButton
|
||||||
text: qsTr("Login")
|
text: qsTr("Login")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: 32
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@ -132,6 +135,7 @@ Image {
|
||||||
Base.HButton {
|
Base.HButton {
|
||||||
text: qsTr("Forgot?")
|
text: qsTr("Forgot?")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: 32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
harmonyqml/icons/none.svg
Normal file
1
harmonyqml/icons/none.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" viewBox="0 0 0 0"></svg>
|
After Width: | Height: | Size: 86 B |
Loading…
Reference in New Issue
Block a user