mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-04-18 21:58:27 +00:00
Allow smallbuttons to use emojis. Insert text in text area in chats. Ensure to send plain text message. Use custom text font for text edit. Emoji picker and display it aside of files preview with a splitter. Fix file preview layout in replies. Change double click to simple click on avatar for copying address into the smartsearchbar. Add an option to change emojis font. Update chat actions colors.
331 lines
9 KiB
QML
331 lines
9 KiB
QML
import QtQuick 2.7
|
|
import QtQuick.Dialogs 1.3
|
|
import QtQuick.Layouts 1.3
|
|
|
|
import Common 1.0
|
|
import Linphone 1.0
|
|
import Utils 1.0
|
|
import UtilsCpp 1.0
|
|
|
|
import App.Styles 1.0
|
|
import Linphone.Styles 1.0
|
|
import Common.Styles 1.0
|
|
|
|
import 'SettingsUi.js' as Logic
|
|
|
|
// =============================================================================
|
|
|
|
TabContainer {
|
|
Column {
|
|
spacing: SettingsWindowStyle.forms.spacing
|
|
width: parent.width
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Languages.
|
|
// -------------------------------------------------------------------------
|
|
|
|
Form {
|
|
title: qsTr('languagesTitle')
|
|
width: parent.width
|
|
|
|
FormLine {
|
|
FormGroup {
|
|
label: qsTr('languagesLabel')
|
|
|
|
ComboBox {
|
|
textRole: 'key'
|
|
|
|
Component.onCompleted: {
|
|
var locales = Logic.getAvailableLocales()
|
|
model = locales
|
|
|
|
var locale = App.configLocale
|
|
if (!locale.length) {
|
|
currentIndex = 0
|
|
return
|
|
}
|
|
|
|
var value = Qt.locale(locale).name
|
|
currentIndex = Number(Utils.findIndex(locales, function (locale) {
|
|
return locale.value === value
|
|
}))
|
|
}
|
|
|
|
onActivated: Logic.setLocale(model[index].value)
|
|
}
|
|
}
|
|
}
|
|
Form {
|
|
//: 'Fonts' : title of fonts section in settings
|
|
title: qsTr('fontsTitle')
|
|
width: parent.width
|
|
FormLine {
|
|
FormGroup {
|
|
//: 'Text Messages' : Label for changing text message fonts
|
|
label: qsTr('fontsTextChange')
|
|
RowLayout{
|
|
ActionButton {
|
|
isCustom: true
|
|
backgroundRadius: 90
|
|
colorSet: SettingsUiStyle.options
|
|
onClicked: fontDialog.visible = true
|
|
Layout.preferredWidth: 25
|
|
FontDialog {
|
|
id: fontDialog
|
|
//: 'Select a new font' : Popup title for choosing new fonts
|
|
title: qsTr('fontsPopupTitle')
|
|
visible:false
|
|
font: SettingsModel.textMessageFont
|
|
onAccepted: {
|
|
SettingsModel.textMessageFont = fontDialog.font
|
|
}
|
|
onRejected: {
|
|
}
|
|
}
|
|
}
|
|
Text{
|
|
Layout.leftMargin: 18
|
|
Layout.fillWidth: true
|
|
text: SettingsModel.textMessageFont.family +", "+SettingsModel.textMessageFont.pointSize
|
|
font {
|
|
bold: true
|
|
pointSize: FormTableStyle.entry.text.pointSize
|
|
}
|
|
}
|
|
ActionButton{
|
|
isCustom: true
|
|
backgroundRadius: 90
|
|
colorSet: SettingsUiStyle.cancel
|
|
onClicked: SettingsModel.textMessageFont = ''
|
|
Layout.preferredWidth: 25
|
|
}
|
|
}
|
|
}
|
|
}
|
|
FormLine {
|
|
FormGroup {
|
|
//: 'Emojis' : Label for changing emojis fonts
|
|
label: qsTr('fontsEmojiChange')
|
|
RowLayout{
|
|
ActionButton {
|
|
isCustom: true
|
|
backgroundRadius: 90
|
|
colorSet: SettingsUiStyle.options
|
|
onClicked: fontEmojisDialog.visible = true
|
|
Layout.preferredWidth: 25
|
|
FontDialog {
|
|
id: fontEmojisDialog
|
|
//: 'Select a new font' : Popup title for choosing new fonts
|
|
title: qsTr('fontsPopupTitle')
|
|
visible:false
|
|
font: SettingsModel.emojiFont
|
|
onAccepted: {
|
|
SettingsModel.emojiFont = fontEmojisDialog.font
|
|
}
|
|
onRejected: {
|
|
}
|
|
}
|
|
}
|
|
Text{
|
|
Layout.leftMargin: 18
|
|
Layout.fillWidth: true
|
|
text: SettingsModel.emojiFont.family +", "+SettingsModel.emojiFont.pointSize
|
|
font {
|
|
bold: true
|
|
pointSize: FormTableStyle.entry.text.pointSize
|
|
}
|
|
}
|
|
ActionButton{
|
|
isCustom: true
|
|
backgroundRadius: 90
|
|
colorSet: SettingsUiStyle.cancel
|
|
onClicked: SettingsModel.emojiFont = ''
|
|
Layout.preferredWidth: 25
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Paths.
|
|
// -------------------------------------------------------------------------
|
|
|
|
Form {
|
|
title: qsTr('pathsTitle')
|
|
visible: SettingsModel.videoEnabled ||
|
|
SettingsModel.callRecorderEnabled ||
|
|
SettingsModel.standardChatEnabled ||
|
|
SettingsModel.secureChatEnabled ||
|
|
SettingsModel.developerSettingsEnabled
|
|
width: parent.width
|
|
|
|
FormLine {
|
|
visible: SettingsModel.videoEnabled
|
|
|
|
FormGroup {
|
|
label: qsTr('savedScreenshotsLabel')
|
|
|
|
FileChooserButton {
|
|
selectedFile: SettingsModel.savedScreenshotsFolder
|
|
selectFolder: true
|
|
|
|
onAccepted: SettingsModel.savedScreenshotsFolder = selectedFile
|
|
}
|
|
}
|
|
}
|
|
|
|
FormLine {
|
|
visible: SettingsModel.callRecorderEnabled || SettingsModel.developerSettingsEnabled
|
|
|
|
FormGroup {
|
|
label: qsTr('savedCallsLabel')
|
|
|
|
FileChooserButton {
|
|
selectedFile: SettingsModel.savedCallsFolder
|
|
selectFolder: true
|
|
|
|
onAccepted: SettingsModel.savedCallsFolder = selectedFile
|
|
}
|
|
}
|
|
}
|
|
|
|
FormLine {
|
|
visible: SettingsModel.standardChatEnabled || SettingsModel.secureChatEnabled || SettingsModel.developerSettingsEnabled
|
|
|
|
FormGroup {
|
|
label: qsTr('downloadLabel')
|
|
|
|
FileChooserButton {
|
|
selectedFile: SettingsModel.downloadFolder
|
|
selectFolder: true
|
|
|
|
onAccepted: SettingsModel.downloadFolder = selectedFile
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Data.
|
|
// -------------------------------------------------------------------------
|
|
|
|
Form {
|
|
title: qsTr('dataTitle')
|
|
visible: SettingsModel.contactsEnabled || SettingsModel.developerSettingsEnabled
|
|
width: parent.width
|
|
}
|
|
|
|
TextButtonB {
|
|
anchors.right: parent.right
|
|
text: qsTr('cleanAvatars')
|
|
visible: SettingsModel.contactsEnabled || SettingsModel.developerSettingsEnabled
|
|
|
|
onClicked: Logic.cleanAvatars()
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Other.
|
|
// -------------------------------------------------------------------------
|
|
|
|
Form {
|
|
title: qsTr('otherTitle')
|
|
width: parent.width
|
|
|
|
FormLine {
|
|
FormGroup {
|
|
label: qsTr('exitOnCloseLabel')
|
|
|
|
Switch {
|
|
checked: SettingsModel.exitOnClose
|
|
|
|
onClicked: SettingsModel.exitOnClose = !checked
|
|
}
|
|
}
|
|
|
|
FormGroup {
|
|
label: qsTr('autoStartLabel')
|
|
|
|
Switch {
|
|
checked: App.autoStart
|
|
|
|
onClicked: App.autoStart = !checked
|
|
}
|
|
}
|
|
}
|
|
FormLine {
|
|
FormGroup {
|
|
//: 'Enable Mipmap'
|
|
label: qsTr('mipmapLabel')
|
|
|
|
Switch {
|
|
checked: SettingsModel.mipmapEnabled
|
|
|
|
onClicked: SettingsModel.mipmapEnabled = !checked
|
|
TooltipArea{
|
|
//: 'This property holds whether the image uses mipmap filtering when scaled or transformed.' : first line of a tooltip about Mipmap mode.
|
|
text: qsTr('mipmapTooltip1')+'\n'
|
|
//: 'Mipmap filtering gives better visual quality when scaling down compared to smooth, but it may come at a performance cost (both when initializing the image and during rendering).' : Second line of a tooltip about Mipmap mode.
|
|
+qsTr('mipmapTooltip2')
|
|
}
|
|
}
|
|
}
|
|
FormGroup {
|
|
//: 'Minimal Timeline filter'
|
|
label: qsTr('minimalTimelineFilterLabel')
|
|
|
|
Switch {
|
|
checked: SettingsModel.useMinimalTimelineFilter
|
|
|
|
onClicked: SettingsModel.useMinimalTimelineFilter = !checked
|
|
TooltipArea{
|
|
//: 'Show a minimal version of what to display in timeline.' :
|
|
text: qsTr('minimalTimelineFilterTooltip')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
FormLine {
|
|
maxItemWidth: parent.width
|
|
visible: SettingsModel.isCheckForUpdateAvailable()
|
|
FormGroup {
|
|
//: 'Check for updates' : Label switch for enabling check for updates
|
|
label: qsTr('checkForUpdateLabel')
|
|
maxWidth: 3*parent.width/2
|
|
RowLayout{
|
|
Switch {
|
|
checked: SettingsModel.checkForUpdateEnabled
|
|
|
|
onClicked: SettingsModel.checkForUpdateEnabled = !checked
|
|
}
|
|
TextField {
|
|
Layout.fillWidth: true
|
|
text: SettingsModel.versionCheckUrl
|
|
|
|
onEditingFinished: SettingsModel.versionCheckUrl = text
|
|
}
|
|
ComboBox{
|
|
Layout.preferredWidth: fitWidth
|
|
Layout.leftMargin: 10
|
|
//: 'Release' : Keyword for an option to check the release version
|
|
model: [qsTr('versionCheckTypeRelease'),
|
|
//: 'Nightly' : Keyword for an option to check the nightly version
|
|
qsTr('versionCheckTypeNightly'),
|
|
//: 'Custom' : Keyword for an option to check the custom version
|
|
qsTr('versionCheckTypeCustom')]
|
|
visible: SettingsModel.haveVersionNightlyUrl()
|
|
currentIndex: SettingsModel.versionCheckType == SettingsModel.VersionCheckType_Release ? 0
|
|
: SettingsModel.versionCheckType == SettingsModel.VersionCheckType_Nightly ? 1
|
|
: 2
|
|
onActivated: SettingsModel.versionCheckType = ( index == 0 ? SettingsModel.VersionCheckType_Release
|
|
: index == 1 ? SettingsModel.VersionCheckType_Nightly
|
|
: SettingsModel.VersionCheckType_Custom)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|