-
Are you sure you → Do you really → Do you by a password → with a password confirmExtensionReset: OK → Reset confirmExtensionUninstall: OK → Uninstall confirmRmConversation → confirmLeaveConversation Change-Id: I8e61197a19fb61f3d362d76b1a6d676dcb842b75 GitLab: #1730
Are you sure you → Do you really → Do you by a password → with a password confirmExtensionReset: OK → Reset confirmExtensionUninstall: OK → Uninstall confirmRmConversation → confirmLeaveConversation Change-Id: I8e61197a19fb61f3d362d76b1a6d676dcb842b75 GitLab: #1730
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
PluginPreferencesListView.qml 11.33 KiB
/*
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import net.jami.Adapters 1.1
import net.jami.Models 1.1
import net.jami.Constants 1.1
import "../../commoncomponents"
Rectangle {
id: root
property string accountId: ""
required property string pluginId
required property bool isLoaded
width: parent.width
property int count: pluginPreferenceView.count + pluginPreferenceViewCategory.count
implicitHeight: childrenRect.height
onVisibleChanged: {
if (visible) {
preferencesPerCategoryModel.reset();
generalPreferencesModel.reset();
}
}
color: "transparent"
Connections {
target: LRCInstance
function onCurrentAccountIdChanged() {
if (accountId) {
preferencesPerCategoryModel.reset();
generalPreferencesModel.reset();
}
}
}
property string category: categories.length > 0 ? categories[0] : category ? category : ""
property var categories: PluginAdapter.getPluginPreferencesCategories(pluginId, accountId)
property string generalCategory: categories.length <= 1 ? "all" : ""
function setPreference(pluginId, preferenceKey, preferenceNewValue) {
PluginModel.setPluginPreference(pluginId, accountId, preferenceKey, preferenceNewValue);
}
ColumnLayout {
anchors.left: root.left
anchors.right: root.right
Item {
id: prefsByCategory
visible: categories.length > 1
Layout.topMargin: 24
Layout.fillWidth: true
implicitHeight: childrenRect.height
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
GridLayout {
id: categoriesGrid
Layout.fillWidth: true
implicitHeight: gridModel.count * JamiTheme.preferredFieldHeight
columns: 2
columnSpacing: 0
rowSpacing: 0
Repeater {
id: gridModel
model: categories.length % 2 === 1 ? PluginAdapter.getPluginPreferencesCategories(pluginId, accountId, true) : root.categories
Button {
id: repDelegate
Layout.fillWidth: true
Layout.preferredHeight: JamiTheme.preferredFieldHeight
highlighted: root.category === modelData
text: modelData
flat: true
onClicked: {
root.category = modelData;
}
background: Rectangle {
anchors.fill: parent
color: repDelegate.highlighted ? JamiTheme.selectedColor : JamiTheme.primaryBackgroundColor
border.color: JamiTheme.selectedColor
border.width: 1
}
contentItem: Text {
text: repDelegate.text
font: repDelegate.font
opacity: enabled ? 1.0 : 0.3
color: JamiTheme.primaryForegroundColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
}
}
}
Button {
id: oddCategoryButton
Layout.fillWidth: true
Layout.preferredHeight: JamiTheme.preferredFieldHeight
flat: true
visible: categories.length % 2 === 1
text: categories[categories.length - 1]
highlighted: root.category === text
onClicked: {
root.category = oddCategoryButton.text;
}
background: Rectangle {
anchors.fill: parent
color: oddCategoryButton.highlighted ? JamiTheme.selectedColor : JamiTheme.primaryBackgroundColor
border.color: JamiTheme.selectedColor
border.width: 1
}
contentItem: Text {
text: oddCategoryButton.text
font: oddCategoryButton.font
opacity: enabled ? 1.0 : 0.3
color: JamiTheme.primaryForegroundColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
}
ListView {
id: pluginPreferenceViewCategory
Layout.fillWidth: true
Layout.minimumHeight: 1
Layout.preferredHeight: childrenRect.height
model: PreferenceItemListModel {
id: preferencesPerCategoryModel
lrcInstance: LRCInstance
category: root.category
accountId: root.accountId
pluginId: root.pluginId
onCategoryChanged: {
this.reset();
}
}
interactive: false
delegate: PreferenceItemDelegate {
id: preferenceItemDelegateCategory
width: pluginPreferenceViewCategory.width
height: 50
preferenceName: PreferenceName
preferenceSummary: PreferenceSummary
preferenceType: PreferenceType
preferenceCurrentValue: PreferenceCurrentValue
pluginId: PluginId
currentPath: CurrentPath
preferenceKey: PreferenceKey
fileFilters: FileFilters
isImage: IsImage
enabled: Enabled
pluginListPreferenceModel: PluginListPreferenceModel {
id: pluginListPreferenceCategoryModel
lrcInstance: LRCInstance
preferenceKey: PreferenceKey
accountId: root.accountId
pluginId: PluginId
}
onBtnPreferenceClicked: {
setPreference(pluginId, preferenceKey, preferenceNewValue);
preferencesPerCategoryModel.reset();
}
background: Rectangle {
anchors.fill: parent
color: JamiTheme.backgroundColor
}
}
}
}
}
ListView {
id: pluginPreferenceView
Layout.fillWidth: true
Layout.minimumHeight: 1
Layout.preferredHeight: childrenRect.height
model: PreferenceItemListModel {
id: generalPreferencesModel
lrcInstance: LRCInstance
category: generalCategory
accountId: root.accountId
pluginId: root.pluginId
onCategoryChanged: {
this.reset();
}
}
interactive: false
delegate: PreferenceItemDelegate {
id: preferenceItemDelegate
width: pluginPreferenceView.width
height: 50
preferenceName: PreferenceName
preferenceSummary: PreferenceSummary
preferenceType: PreferenceType
preferenceCurrentValue: PreferenceCurrentValue
pluginId: PluginId
currentPath: CurrentPath
preferenceKey: PreferenceKey
fileFilters: FileFilters
isImage: IsImage
enabled: Enabled
pluginListPreferenceModel: PluginListPreferenceModel {
id: pluginListPreferenceModel
lrcInstance: LRCInstance
preferenceKey: PreferenceKey
accountId: root.accountId
pluginId: PluginId
}
onBtnPreferenceClicked: {
setPreference(pluginId, preferenceKey, preferenceNewValue);
generalPreferencesModel.reset();
}
}
}
MaterialButton {
id: resetButton
visible: count > 0
Layout.alignment: Qt.AlignCenter
preferredWidth: JamiTheme.preferredFieldWidth
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
color: JamiTheme.buttonTintedBlack
hoveredColor: JamiTheme.buttonTintedBlackHovered
pressedColor: JamiTheme.buttonTintedBlackPressed
secondary: true
text: JamiStrings.reset
onClicked: viewCoordinator.presentDialog(appWindow, "commoncomponents/SimpleMessageDialog.qml", {
"title": JamiStrings.resetPreferences,
"infoText": JamiStrings.confirmExtensionReset.arg(pluginId),
"buttonTitles": [JamiStrings.optionReset, JamiStrings.optionCancel],
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue, SimpleMessageDialog.ButtonStyle.TintedBlack],
"buttonCallBacks": [function () {
if (isLoaded) {
PluginModel.unloadPlugin(pluginId);
PluginModel.resetPluginPreferencesValues(pluginId, accountId);
PluginModel.loadPlugin(pluginId);
} else {
PluginModel.resetPluginPreferencesValues(pluginId, accountId);
}
preferencesPerCategoryModel.reset();
generalPreferencesModel.reset();
}],
"buttonRoles": [DialogButtonBox.AcceptRole, DialogButtonBox.RejectRole]
})
}
}
}