diff --git a/resources.qrc b/resources.qrc index def4f0a4b..afe2014e3 100644 --- a/resources.qrc +++ b/resources.qrc @@ -227,6 +227,8 @@ ui/modules/Common/Form/Fields/TextField.qml ui/modules/Common/Form/ListForm.js ui/modules/Common/Form/ListForm.qml + ui/modules/Common/Form/ListItemSelector.js + ui/modules/Common/Form/ListItemSelector.qml ui/modules/Common/Form/Placements/FormEmptyLine.qml ui/modules/Common/Form/Placements/FormGroup.qml ui/modules/Common/Form/Placements/FormHGroup.qml diff --git a/ui/modules/Common/Form/ListItemSelector.js b/ui/modules/Common/Form/ListItemSelector.js new file mode 100644 index 000000000..038486407 --- /dev/null +++ b/ui/modules/Common/Form/ListItemSelector.js @@ -0,0 +1,18 @@ +// ============================================================================= +// `ListItemSelector.qml` Logic. +// ============================================================================= + +.import 'qrc:/ui/scripts/Utils/utils.js' as Utils + +// ============================================================================= + +function getEntryIcon (item) { + var iconRole = view.iconRole + if (iconRole == null || iconRole.length === 0) { + return '' + } + + return Utils.isFunction(iconRole) + ? iconRole(item.flattenedModel) + : item.flattenedModel[iconRole] +} diff --git a/ui/modules/Common/Form/ListItemSelector.qml b/ui/modules/Common/Form/ListItemSelector.qml new file mode 100644 index 000000000..dc5ae27c5 --- /dev/null +++ b/ui/modules/Common/Form/ListItemSelector.qml @@ -0,0 +1,42 @@ +import Common 1.0 + +import 'ListItemSelector.js' as Logic + +// ============================================================================= + +ScrollableListViewField { + property alias currentIndex: view.currentIndex + property alias iconRole: view.iconRole + property alias model: view.model + property alias textRole: view.textRole + + signal activated (int index) + + radius: 0 + + ScrollableListView { + id: view + + // ------------------------------------------------------------------------- + + property string textRole + property var iconRole + + // ------------------------------------------------------------------------- + + anchors.fill: parent + currentIndex: -1 + + delegate: CommonItemDelegate { + id: item + + container: view + flattenedModel: view.textRole.length && + (typeof modelData !== 'undefined' ? modelData : model) + itemIcon: Logic.getEntryIcon(item) + width: parent.width + + onClicked: activated(index) + } + } +} diff --git a/ui/modules/Common/qmldir b/ui/modules/Common/qmldir index 1a3bab8e3..5d748dcbe 100644 --- a/ui/modules/Common/qmldir +++ b/ui/modules/Common/qmldir @@ -22,6 +22,7 @@ CheckBoxText 1.0 Form/CheckBoxText.qml ComboBox 1.0 Form/ComboBox.qml DroppableTextArea 1.0 Form/DroppableTextArea.qml ListForm 1.0 Form/ListForm.qml +ListItemSelector 1.0 Form/ListItemSelector.qml SearchBox 1.0 Form/SearchBox.qml Slider 1.0 Form/Slider.qml StaticListForm 1.0 Form/StaticListForm.qml diff --git a/ui/views/App/Main/Dialogs/ManageAccounts.qml b/ui/views/App/Main/Dialogs/ManageAccounts.qml index 91a034b92..162e16553 100644 --- a/ui/views/App/Main/Dialogs/ManageAccounts.qml +++ b/ui/views/App/Main/Dialogs/ManageAccounts.qml @@ -53,7 +53,10 @@ DialogPlus { FormGroup { label: qsTr('selectAccountLabel') - ComboBox { + ListItemSelector { + width: parent.width + height: ManageAccountsStyle.accountSelector.height + currentIndex: Utils.findIndex(AccountSettingsModel.accounts, function (account) { return account.sipAddress === AccountSettingsModel.sipAddress }) diff --git a/ui/views/App/Styles/Main/Dialogs/ManageAccountsStyle.qml b/ui/views/App/Styles/Main/Dialogs/ManageAccountsStyle.qml index b93d5522f..fcfbcf178 100644 --- a/ui/views/App/Styles/Main/Dialogs/ManageAccountsStyle.qml +++ b/ui/views/App/Styles/Main/Dialogs/ManageAccountsStyle.qml @@ -4,7 +4,11 @@ import QtQml 2.2 // ============================================================================= QtObject { - property int height: 234 - property int heightWithoutPresence: 165 + property int height: 303 + property int heightWithoutPresence: 234 property int width: 450 + + property QtObject accountSelector: QtObject { + property int height: 126 + } }