diff --git a/tests/linphone.pro b/tests/linphone.pro index 68f5e30dc..6185daa39 100644 --- a/tests/linphone.pro +++ b/tests/linphone.pro @@ -21,6 +21,7 @@ TRANSLATIONS = \ lupdate_only{ # Each component folder must be added explicitly. SOURCES = \ + ui/components/dialog/*.qml \ ui/components/form/*.qml \ ui/views/*.qml } diff --git a/tests/resources.qrc b/tests/resources.qrc index 9348ccd14..812aede8c 100644 --- a/tests/resources.qrc +++ b/tests/resources.qrc @@ -5,6 +5,8 @@ languages/fr.qm + ui/components/dialog/DialogDescription.qml + ui/components/dialog/DialogPlus.qml ui/components/form/Collapse.qml ui/components/form/DialogButton.qml ui/components/form/DialogComboBox.qml diff --git a/tests/ui/components/dialog/DialogDescription.qml b/tests/ui/components/dialog/DialogDescription.qml new file mode 100644 index 000000000..b975e5906 --- /dev/null +++ b/tests/ui/components/dialog/DialogDescription.qml @@ -0,0 +1,18 @@ +import QtQuick 2.7 + +Item { + property alias text: description.text + property alias fontSize: description.font.pointSize + + height: 90 + + Text { + anchors.fill: parent + anchors.leftMargin: 50 + anchors.rightMargin: 50 + font.pointSize: 12 + id: description + verticalAlignment: Text.AlignVCenter + wrapMode: Text.WordWrap + } +} diff --git a/tests/ui/components/dialog/DialogPlus.qml b/tests/ui/components/dialog/DialogPlus.qml new file mode 100644 index 000000000..55058aa1f --- /dev/null +++ b/tests/ui/components/dialog/DialogPlus.qml @@ -0,0 +1,57 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import QtQuick.Window 2.2 + +import 'qrc:/ui/components/dialog' +import 'qrc:/ui/components/form' + +Window { + default property alias contents: content.data + + // Optionnal description text. + property alias descriptionText: description.text + + // Required buttons. + property alias buttons: buttons.data + + id: window + modality: Qt.WindowModal + + ColumnLayout { + anchors.fill: parent + spacing: 0 + + // Description. + DialogDescription { + Layout.alignment : Qt.AlignTop + Layout.fillWidth: true + id: description + } + + // Content. + Item { + Layout.alignment: Qt.AlignTop + Layout.fillHeight: true + Layout.fillWidth: true + id: content + } + + // Buttons. + Item { + Layout.alignment: Qt.AlignTop + Layout.fillWidth: true + height: 100 + + Row { + anchors.left: parent.left + anchors.leftMargin: 50 + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + height: 30 + id: buttons + spacing: 20 + } + } + } +} diff --git a/tests/ui/components/form/DialogButton.qml b/tests/ui/components/form/DialogButton.qml index 945fe4e85..cfa199665 100644 --- a/tests/ui/components/form/DialogButton.qml +++ b/tests/ui/components/form/DialogButton.qml @@ -5,7 +5,6 @@ Button { background: Rectangle { color: button.down ? '#FE5E00' : '#434343' implicitWidth: 120 - implicitHeight: 30 radius: 4 } contentItem: Text { diff --git a/tests/ui/views/main_window.qml b/tests/ui/views/main_window.qml index e00852b4f..f97571cc3 100644 --- a/tests/ui/views/main_window.qml +++ b/tests/ui/views/main_window.qml @@ -29,9 +29,16 @@ ApplicationWindow { // User actions. ToolBarButton { onClicked: { - var component = Qt.createComponent("qrc:/ui/views/manage_accounts.qml"); - var win = component.createObject(mainWindow); - win.show(); + var component = Qt.createComponent('qrc:/ui/views/manage_accounts.qml'); + if (component.status !== Component.Ready) { + console.debug('Window not ready.') + if(component.status === Component.Error) { + console.debug('Error:' + component.errorString()) + } + } else { + var win = component.createObject(mainWindow); + win.show(); + } } } diff --git a/tests/ui/views/manage_accounts.qml b/tests/ui/views/manage_accounts.qml index c19bbacff..8bd90add3 100644 --- a/tests/ui/views/manage_accounts.qml +++ b/tests/ui/views/manage_accounts.qml @@ -3,193 +3,159 @@ import QtQuick.Controls 2.0 import QtQuick.Layouts 1.3 import QtQuick.Window 2.2 +import 'qrc:/ui/components/dialog' import 'qrc:/ui/components/form' -Window { +DialogPlus { + descriptionText: qsTr('manageAccountsDescription') id: window minimumHeight: 328 minimumWidth: 480 - modality: Qt.WindowModal title: qsTr('manageAccountsTitle') - ColumnLayout { + buttons: DialogButton { + text: qsTr('validate') + } + + // Accounts list. + Item { + id: listViewContainer anchors.fill: parent - spacing: 0 - // Window description. - Item { - Layout.alignment : Qt.AlignTop - Layout.fillWidth: true - height: 90 + ListView { + anchors.fill: parent + boundsBehavior: Flickable.StopAtBounds + clip: true + highlightRangeMode: ListView.ApplyRange + id: accountsList + spacing: 0 - Text { - anchors.fill: parent - anchors.leftMargin: 50 - anchors.rightMargin: 50 - font.pointSize: 12 - text: qsTr('manageAccountsDescription') - verticalAlignment: Text.AlignVCenter - wrapMode: Text.WordWrap - } - } - - // Accounts list. - Item { - Layout.alignment: Qt.AlignTop - Layout.fillHeight: true - Layout.fillWidth: true - id: listViewContainer - - ListView { - anchors.fill: parent - boundsBehavior: Flickable.StopAtBounds - clip: true - highlightRangeMode: ListView.ApplyRange - id: accountsList - spacing: 0 - horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOn - // TODO: Remove, use C++ model instead. - model: ListModel { - ListElement { - presence: 'connected' - sipAddress: 'jim.williams.zzzz.yyyy.kkkk.sip.linphone.org' - isDefault: false - } - ListElement { - presence: 'connected' - sipAddress: 'toto.lala.sip.linphone.org' - isDefault: false - } - ListElement { - presence: 'disconnected' - sipAddress: 'machin.truc.sip.linphone.org' - isDefault: true - } - ListElement { - presence: 'absent' - sipAddress: 'hey.listen.sip.linphone.org' - isDefault: false - } - ListElement { - presence: 'do_not_disturb' - sipAddress: 'valentin.cognito.sip.linphone.org' - isDefault: false - } - ListElement { - presence: 'do_not_disturb' - sipAddress: 'charles.henri.sip.linphone.org' - isDefault: false - } - ListElement { - presence: 'disconnected' - sipAddress: 'yesyes.nono.sip.linphone.org' - isDefault: false - } - ListElement { - presence: 'connected' - sipAddress: 'nsa.sip.linphone.org' - isDefault: false - } + // TODO: Remove, use C++ model instead. + model: ListModel { + ListElement { + presence: 'connected' + sipAddress: 'jim.williams.zzzz.yyyy.kkkk.sip.linphone.org' + isDefault: false } - delegate: Item { - height: 34 - width: parent.width + ListElement { + presence: 'connected' + sipAddress: 'toto.lala.sip.linphone.org' + isDefault: false + } + ListElement { + presence: 'disconnected' + sipAddress: 'machin.truc.sip.linphone.org' + isDefault: true + } + ListElement { + presence: 'absent' + sipAddress: 'hey.listen.sip.linphone.org' + isDefault: false + } + ListElement { + presence: 'do_not_disturb' + sipAddress: 'valentin.cognito.sip.linphone.org' + isDefault: false + } + ListElement { + presence: 'do_not_disturb' + sipAddress: 'charles.henri.sip.linphone.org' + isDefault: false + } + ListElement { + presence: 'disconnected' + sipAddress: 'yesyes.nono.sip.linphone.org' + isDefault: false + } + ListElement { + presence: 'connected' + sipAddress: 'nsa.sip.linphone.org' + isDefault: false + } + } + delegate: Item { + height: 34 + width: parent.width - Rectangle { + Rectangle { + anchors.fill: parent + color: isDefault ? '#EAEAEA' : 'transparent' + id: accountLine + + RowLayout { anchors.fill: parent - color: isDefault ? '#EAEAEA' : 'transparent' - id: accountLine + spacing: 15 + anchors.leftMargin: 15 + anchors.rightMargin: 15 - RowLayout { - anchors.fill: parent - spacing: 15 - anchors.leftMargin: 15 - anchors.rightMargin: 15 + // Default account. + Item { + Layout.fillHeight: parent.height + Layout.preferredWidth: 20 - // Default account. - Item { - Layout.fillHeight: parent.height - Layout.preferredWidth: 20 + Image { + anchors.fill: parent + fillMode: Image.PreserveAspectFit + source: isDefault ? 'qrc:/imgs/valid.svg' : '' + } + } - Image { + // Sip account. + Item { + Layout.fillHeight: parent.height + Layout.fillWidth: true + + Text { + anchors.fill: parent + clip: true + color: '#59575A' + text: sipAddress; + verticalAlignment: Text.AlignVCenter + + MouseArea { anchors.fill: parent - fillMode: Image.PreserveAspectFit - source: isDefault ? 'qrc:/imgs/valid.svg' : '' + cursorShape: Qt.PointingHandCursor } } + } - // Sip account. - Item { - Layout.fillHeight: parent.height - Layout.fillWidth: true + // Presence. + Item { + Layout.fillHeight: parent.height + Layout.preferredWidth: 20 - Text { - anchors.fill: parent - clip: true - color: '#59575A' - text: sipAddress; - verticalAlignment: Text.AlignVCenter - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - } - } + Image { + anchors.fill: parent + fillMode: Image.PreserveAspectFit + source: 'qrc:/imgs/led_' + presence + '.svg' } + } - // Presence. - Item { - Layout.fillHeight: parent.height - Layout.preferredWidth: 20 + // Update presence. + Item { + Layout.fillHeight: parent.height + Layout.preferredWidth: 160 - Image { - anchors.fill: parent - fillMode: Image.PreserveAspectFit - source: 'qrc:/imgs/led_' + presence + '.svg' - } - } - - // Update presence. - Item { - Layout.fillHeight: parent.height - Layout.preferredWidth: 160 - - DialogComboBox { - anchors.fill: parent - model: ListModel { - ListElement { key: qsTr('onlinePresence'); value: 1 } - ListElement { key: qsTr('busyPresence'); value: 2 } - ListElement { key: qsTr('beRightBackPresence'); value: 3 } - ListElement { key: qsTr('awayPresence'); value: 4 } - ListElement { key: qsTr('onThePhonePresence'); value: 5 } - ListElement { key: qsTr('outToLunchPresence'); value: 6 } - ListElement { key: qsTr('doNotDisturbPresence'); value: 7 } - ListElement { key: qsTr('movedPresence'); value: 8 } - ListElement { key: qsTr('usingAnotherMessagingServicePresence'); value: 9 } - ListElement { key: qsTr('offlinePresence'); value: 10 } - } - textRole: 'key' + DialogComboBox { + anchors.fill: parent + model: ListModel { + ListElement { key: qsTr('onlinePresence'); value: 1 } + ListElement { key: qsTr('busyPresence'); value: 2 } + ListElement { key: qsTr('beRightBackPresence'); value: 3 } + ListElement { key: qsTr('awayPresence'); value: 4 } + ListElement { key: qsTr('onThePhonePresence'); value: 5 } + ListElement { key: qsTr('outToLunchPresence'); value: 6 } + ListElement { key: qsTr('doNotDisturbPresence'); value: 7 } + ListElement { key: qsTr('movedPresence'); value: 8 } + ListElement { key: qsTr('usingAnotherMessagingServicePresence'); value: 9 } + ListElement { key: qsTr('offlinePresence'); value: 10 } } + textRole: 'key' } } } } } } - - // Validate - Rectangle { - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - height: 100 - - DialogButton { - anchors.bottom: parent.bottom - anchors.bottomMargin: 30 - anchors.left: parent.left - anchors.leftMargin: 54 - text: qsTr('validate') - } - } } }