Commit ef334013 authored by Ronan Abhamon's avatar Ronan Abhamon

feat(manageAccounts): use reusable components (DialogDescription/DialogPlus)

parent fd30f4d6
...@@ -21,6 +21,7 @@ TRANSLATIONS = \ ...@@ -21,6 +21,7 @@ TRANSLATIONS = \
lupdate_only{ lupdate_only{
# Each component folder must be added explicitly. # Each component folder must be added explicitly.
SOURCES = \ SOURCES = \
ui/components/dialog/*.qml \
ui/components/form/*.qml \ ui/components/form/*.qml \
ui/views/*.qml ui/views/*.qml
} }
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
<file>languages/fr.qm</file> <file>languages/fr.qm</file>
<!-- UI. --> <!-- UI. -->
<file>ui/components/dialog/DialogDescription.qml</file>
<file>ui/components/dialog/DialogPlus.qml</file>
<file>ui/components/form/Collapse.qml</file> <file>ui/components/form/Collapse.qml</file>
<file>ui/components/form/DialogButton.qml</file> <file>ui/components/form/DialogButton.qml</file>
<file>ui/components/form/DialogComboBox.qml</file> <file>ui/components/form/DialogComboBox.qml</file>
......
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
}
}
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
}
}
}
}
...@@ -5,7 +5,6 @@ Button { ...@@ -5,7 +5,6 @@ Button {
background: Rectangle { background: Rectangle {
color: button.down ? '#FE5E00' : '#434343' color: button.down ? '#FE5E00' : '#434343'
implicitWidth: 120 implicitWidth: 120
implicitHeight: 30
radius: 4 radius: 4
} }
contentItem: Text { contentItem: Text {
......
...@@ -29,9 +29,16 @@ ApplicationWindow { ...@@ -29,9 +29,16 @@ ApplicationWindow {
// User actions. // User actions.
ToolBarButton { ToolBarButton {
onClicked: { onClicked: {
var component = Qt.createComponent("qrc:/ui/views/manage_accounts.qml"); var component = Qt.createComponent('qrc:/ui/views/manage_accounts.qml');
var win = component.createObject(mainWindow); if (component.status !== Component.Ready) {
win.show(); console.debug('Window not ready.')
if(component.status === Component.Error) {
console.debug('Error:' + component.errorString())
}
} else {
var win = component.createObject(mainWindow);
win.show();
}
} }
} }
......
...@@ -3,193 +3,159 @@ import QtQuick.Controls 2.0 ...@@ -3,193 +3,159 @@ import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Window 2.2 import QtQuick.Window 2.2
import 'qrc:/ui/components/dialog'
import 'qrc:/ui/components/form' import 'qrc:/ui/components/form'
Window { DialogPlus {
descriptionText: qsTr('manageAccountsDescription')
id: window id: window
minimumHeight: 328 minimumHeight: 328
minimumWidth: 480 minimumWidth: 480
modality: Qt.WindowModal
title: qsTr('manageAccountsTitle') title: qsTr('manageAccountsTitle')
ColumnLayout { buttons: DialogButton {
text: qsTr('validate')
}
// Accounts list.
Item {
id: listViewContainer
anchors.fill: parent anchors.fill: parent
spacing: 0
// Window description.
Item {
Layout.alignment : Qt.AlignTop
Layout.fillWidth: true
height: 90
Text {
anchors.fill: parent
anchors.leftMargin: 50
anchors.rightMargin: 50
font.pointSize: 12
text: qsTr('manageAccountsDescription')
verticalAlignment: Text.AlignVCenter
wrapMode: Text.WordWrap
}
}
// Accounts list. ListView {
Item { anchors.fill: parent
Layout.alignment: Qt.AlignTop boundsBehavior: Flickable.StopAtBounds
Layout.fillHeight: true clip: true
Layout.fillWidth: true highlightRangeMode: ListView.ApplyRange
id: listViewContainer id: accountsList
spacing: 0
ListView {
anchors.fill: parent // TODO: Remove, use C++ model instead.
boundsBehavior: Flickable.StopAtBounds model: ListModel {
clip: true ListElement {
highlightRangeMode: ListView.ApplyRange presence: 'connected'
id: accountsList sipAddress: 'jim.williams.zzzz.yyyy.kkkk.sip.linphone.org'
spacing: 0 isDefault: false
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
}
} }
delegate: Item { ListElement {
height: 34 presence: 'connected'
width: parent.width sipAddress: 'toto.lala.sip.linphone.org'
isDefault: false
Rectangle { }
anchors.fill: parent ListElement {
color: isDefault ? '#EAEAEA' : 'transparent' presence: 'disconnected'
id: accountLine sipAddress: 'machin.truc.sip.linphone.org'
isDefault: true
RowLayout { }
anchors.fill: parent ListElement {
spacing: 15 presence: 'absent'
anchors.leftMargin: 15 sipAddress: 'hey.listen.sip.linphone.org'
anchors.rightMargin: 15 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
// Default account. Rectangle {
Item { anchors.fill: parent
Layout.fillHeight: parent.height color: isDefault ? '#EAEAEA' : 'transparent'
Layout.preferredWidth: 20 id: accountLine
Image { RowLayout {
anchors.fill: parent anchors.fill: parent
fillMode: Image.PreserveAspectFit spacing: 15
source: isDefault ? 'qrc:/imgs/valid.svg' : '' anchors.leftMargin: 15
} anchors.rightMargin: 15
// Default account.
Item {
Layout.fillHeight: parent.height
Layout.preferredWidth: 20
Image {
anchors.fill: parent
fillMode: Image.PreserveAspectFit
source: isDefault ? 'qrc:/imgs/valid.svg' : ''
} }
}
// Sip account.
Item {
Layout.fillHeight: parent.height
Layout.fillWidth: true
// Sip account. Text {
Item { anchors.fill: parent
Layout.fillHeight: parent.height clip: true
Layout.fillWidth: true color: '#59575A'
text: sipAddress;
verticalAlignment: Text.AlignVCenter
Text { MouseArea {
anchors.fill: parent anchors.fill: parent
clip: true cursorShape: Qt.PointingHandCursor
color: '#59575A'
text: sipAddress;
verticalAlignment: Text.AlignVCenter
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
}
} }
} }
}
// Presence. // Presence.
Item { Item {
Layout.fillHeight: parent.height Layout.fillHeight: parent.height
Layout.preferredWidth: 20 Layout.preferredWidth: 20
Image { Image {
anchors.fill: parent anchors.fill: parent
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
source: 'qrc:/imgs/led_' + presence + '.svg' source: 'qrc:/imgs/led_' + presence + '.svg'
}
} }
}
// Update presence. // Update presence.
Item { Item {
Layout.fillHeight: parent.height Layout.fillHeight: parent.height
Layout.preferredWidth: 160 Layout.preferredWidth: 160
DialogComboBox { DialogComboBox {
anchors.fill: parent anchors.fill: parent
model: ListModel { model: ListModel {
ListElement { key: qsTr('onlinePresence'); value: 1 } ListElement { key: qsTr('onlinePresence'); value: 1 }
ListElement { key: qsTr('busyPresence'); value: 2 } ListElement { key: qsTr('busyPresence'); value: 2 }
ListElement { key: qsTr('beRightBackPresence'); value: 3 } ListElement { key: qsTr('beRightBackPresence'); value: 3 }
ListElement { key: qsTr('awayPresence'); value: 4 } ListElement { key: qsTr('awayPresence'); value: 4 }
ListElement { key: qsTr('onThePhonePresence'); value: 5 } ListElement { key: qsTr('onThePhonePresence'); value: 5 }
ListElement { key: qsTr('outToLunchPresence'); value: 6 } ListElement { key: qsTr('outToLunchPresence'); value: 6 }
ListElement { key: qsTr('doNotDisturbPresence'); value: 7 } ListElement { key: qsTr('doNotDisturbPresence'); value: 7 }
ListElement { key: qsTr('movedPresence'); value: 8 } ListElement { key: qsTr('movedPresence'); value: 8 }
ListElement { key: qsTr('usingAnotherMessagingServicePresence'); value: 9 } ListElement { key: qsTr('usingAnotherMessagingServicePresence'); value: 9 }
ListElement { key: qsTr('offlinePresence'); value: 10 } ListElement { key: qsTr('offlinePresence'); value: 10 }
}
textRole: 'key'
} }
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')
}
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment