Replace hard coded colors

This commit is contained in:
Julien Wadel 2021-09-03 18:46:34 +02:00
parent ba10a9ad3b
commit df719d7cc0
26 changed files with 484 additions and 507 deletions

View file

@ -915,9 +915,8 @@ Server URL not configured.</translation>
</message>
<message>
<source>ephemeralText</source>
<extracomment>&apos;New messages will be deleted on both ends once it has been read by your contact. Select a timeout.&apos;</extracomment>
<extracomment>&apos;New messages will be deleted on both ends once it has been read by your contact. Select a timeout.&apos; : Context Explanation for ephemerals</extracomment>
<translation>New messages will be deleted on both ends once it has been read by your contact. Select a timeout.</translation>
<extra-Context>Explanation for ephemerals</extra-Context>
</message>
<message>
<source>ephemeralNotInConference!</source>
@ -1379,7 +1378,7 @@ Click here: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
</message>
<message>
<source>removeParticipantSelection</source>
<extracomment>&apos;Remove this participant from the selection&apos; : Explanation abo^ut removing participant from a selection</extracomment>
<extracomment>&apos;Remove this participant from the selection&apos; : Explanation about removing participant from a selection</extracomment>
<translation>Remove this participant from the selection</translation>
<extra-Tooltip>This is a tooltip</extra-Tooltip>
</message>

View file

@ -554,6 +554,7 @@
<file>ui/views/App/Styles/Main/ConversationStyle.qml</file>
<file>ui/views/App/Styles/Main/Dialogs/AboutStyle.qml</file>
<file>ui/views/App/Styles/Main/Dialogs/AuthenticationRequestStyle.qml</file>
<file>ui/views/App/Styles/Main/Dialogs/EphemeralChatRoomStyle.qml</file>
<file>ui/views/App/Styles/Main/Dialogs/InfoChatRoomStyle.qml</file>
<file>ui/views/App/Styles/Main/Dialogs/InfoEncryptionStyle.qml</file>
<file>ui/views/App/Styles/Main/Dialogs/ManageAccountsStyle.qml</file>

View file

@ -53,10 +53,10 @@ class ColorListModel : public QAbstractListModel {
ADD_COLOR("b", "#D64D00", "Primary color for hovered items.")
ADD_COLOR("c", "#CBCBCB", "Button pressed, separatos, fields.")
ADD_COLOR("d", "#5A585B", "")
ADD_COLOR("e", "#F3F3F3", "")
ADD_COLOR("d", "#5A585B", "Text (Ephemerals)")
ADD_COLOR("e", "#F3F3F3", "Chat text area Background")
ADD_COLOR("f", "#E8E8E8", "Border color")
ADD_COLOR("g", "#6B7A86", "SIP Address, Contact Text, Selected button.")
ADD_COLOR("g", "#6B7A86", "SIP Address; Text of Contact, question popup; Selected button.")
ADD_COLOR("h", "#687680", "")
// Primary color.
@ -90,6 +90,26 @@ class ColorListModel : public QAbstractListModel {
ADD_COLOR("x", "#D0D8DE", "Background unselected round button")
ADD_COLOR("y", "#FFFFFF", "Gradient dialog start")
ADD_COLOR("z", "#E2E2E2", "Gradient dialog end")
ADD_COLOR("aa", "#E1E1E1", "Chat text outside background")
ADD_COLOR("ab", "#979797", "Chat heading section text")
ADD_COLOR("ac", "#B1B1B1", "Chat bubble author/ text")
ADD_COLOR("ad", "#FF5E00", "Ephemeral main color")
ADD_COLOR("ae", "#FF0000", "Important message")
ADD_COLOR("af", "#9FA6AB", "Admin Status")
ADD_COLOR("ag", "#EBEBEB", "Line between items in list")
ADD_COLOR("ah", "#F5F5F5", "Main List item background")
ADD_COLOR("slider_background", "#bdbebf", "Slider background")
ADD_COLOR("slider_low", "#21be2b", "Slider low value")
ADD_COLOR("slider_high", "#ff0000", "Slider high value")
ADD_COLOR("border", "black", "Borders")
// Field error.
ADD_COLOR("error", "#FF0000", "Error Generic button.")

View file

@ -22,8 +22,8 @@ Item {
Rectangle{
anchors.fill:parent
gradient: Gradient {
GradientStop { position: 0.0; color: "white" }
GradientStop { position: 1.0; color: "#E2E2E2" }
GradientStop { position: 0.0; color: Colors.y.color }
GradientStop { position: 1.0; color: Colors.z.color}
}
visible:showBar
}

View file

@ -86,62 +86,7 @@ Item {
acceptedButtons: Qt.NoButton
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
}
/*
Rectangle {
anchors.fill:parent
color: button.down?'white':'black'
opacity: 0.2
visible:autoIcon && (button.down || button.hovered)
}*/
}
/*
Colorize{
anchors.fill:icon
source:icon
hue:0.0
saturation:0.0
lightness: 0.5
visible:autoIcon && button.down
}*/
/*
GammaAdjust{
anchors.fill:icon
source:icon
gamma:1.6
visible:autoIcon && button.down
}*/
/*
Colorize{
anchors.fill:icon
source:icon
hue:0.0
saturation:0.0
lightness: -0.5
visible:autoIcon && button.hovered && !button.down
}*/
/*
Desaturate{
anchors.fill:icon
source:icon
desaturation: 1.0
visible:autoIcon && button.hovered && !button.down
}*/
/*
GammaAdjust{
anchors.fill:icon
source:icon
gamma:0.4
visible:autoIcon && button.hovered && !button.down
}*/
/*
ColorOverlay{
anchors.fill:icon
source:icon
color:button.down?'white':'orange'
visible:autoIcon && (button.down || button.hovered)
}*/
TooltipArea {
id:tooltip
text: ''

View file

@ -47,7 +47,7 @@ Item {
Rectangle{
anchors.fill: parent
color:'#E1E1E1'
color: DroppableTextAreaStyle.outsideBackgroundColor
// ---------------------------------------------------------------------------
RowLayout{
anchors.fill: parent
@ -77,12 +77,6 @@ Item {
tooltipText: droppableTextArea.dropEnabled
? qsTr('attachmentTooltip')
: droppableTextArea.dropDisabledReason
/*
TooltipArea {
text: droppableTextArea.dropEnabled
? qsTr('attachmentTooltip')
: droppableTextArea.dropDisabledReason
}*/
}
// Record audio
ActionButton {
@ -141,7 +135,7 @@ Item {
}
background: Rectangle {
color: '#f3f3f3' //DroppableTextAreaStyle.backgroundColor
color: DroppableTextAreaStyle.backgroundColor
radius: 5
clip:true
}

View file

@ -6,7 +6,8 @@ import Units 1.0
// =============================================================================
QtObject {
property color backgroundColor: Colors.q.color
property color backgroundColor: Colors.e.color
property color outsideBackgroundColor: Colors.aa.color
property QtObject fileChooserButton: QtObject {
property int margins: 6

View file

@ -95,8 +95,7 @@ Rectangle {
id: text
anchors.fill: parent
//color: ChatStyle.sectionHeading.text.color
color: '#979797'
color: ChatStyle.sectionHeading.text.color
font {
bold: true
pointSize: ChatStyle.sectionHeading.text.pointSize
@ -173,8 +172,8 @@ Rectangle {
return null
}
color: '#B1B1B1'
font.pointSize: ChatStyle.entry.time.pointSize
color: ChatStyle.entry.event.text.color
font.pointSize: ChatStyle.entry.event.text.pointSize
visible: isMessage
&& $chatEntry != undefined
&& !$chatEntry.isOutgoing // Only outgoing
@ -196,7 +195,7 @@ Rectangle {
Layout.preferredHeight: ChatStyle.entry.lineHeight
Layout.preferredWidth: ChatStyle.entry.time.width
color: '#B1B1B1'
color: ChatStyle.entry.event.text.color
font.pointSize: ChatStyle.entry.time.pointSize
text: $chatEntry.timestamp.toLocaleString(

View file

@ -55,7 +55,7 @@ GridView{
height: ChatStyle.composingText.height-5
width: GridView.width
text: deliveryLayout.getText(modelData.state, modelData.displayName, UtilsCpp.toDateTimeString(modelData.stateChangeTime))
color: "#B1B1B1"
color: ChatStyle.entry.event.text.color
font.pointSize: Units.dp * 8
elide: Text.ElideMiddle
}

View file

@ -310,7 +310,7 @@ Row {
spacing:5
Text{
text: $chatEntry.ephemeralExpireTime > 0 ? Utils.formatElapsedTime($chatEntry.ephemeralExpireTime) : Utils.formatElapsedTime($chatEntry.ephemeralLifetime)
color:"#FF5E00"
color: Colors.ad.color
font.pointSize: Units.dp * 8
Timer{
running:parent.visible

View file

@ -57,7 +57,7 @@ Item {
spacing:5
Text{
text: $chatEntry.ephemeralExpireTime > 0 ? Utils.formatElapsedTime($chatEntry.ephemeralExpireTime) : Utils.formatElapsedTime($chatEntry.ephemeralLifetime)
color:"#FF5E00"
color: Colors.ad.color
font.pointSize: Units.dp * 8
Timer{
running:parent.visible

View file

@ -11,6 +11,7 @@ import Units 1.0
// =============================================================================
RowLayout{
id: mainLayout
property string _type: {
var status = $chatEntry.eventLogType
@ -81,35 +82,29 @@ RowLayout{
return 'unknown_notice'
}
property bool isImportant : $chatEntry.status == ChatNoticeModel.NoticeError || $chatEntry.eventLogType == LinphoneEnums.EventLogTypeConferenceTerminated
property bool isImportant: $chatEntry.eventLogType == LinphoneEnums.EventLogTypeConferenceTerminated
property bool isError: $chatEntry.status == ChatNoticeModel.NoticeError
property color eventColor : (isError ? Colors.error.color : ( isImportant ? Colors.error.color : Colors.ab.color ))
Layout.preferredHeight: ChatStyle.entry.lineHeight
spacing: ChatStyle.entry.message.extraContent.spacing
Rectangle{
height:1
Layout.fillWidth: true
color:( isImportant ? '#FF0000' : '#979797' )
color: mainLayout.eventColor
}
Text {
Component {
// Never created.
// Private data for `lupdate`.
Item {
property var i18n: [
"You have joined the group" //QT_TR_NOOP('declinedIncomingCall'),
]
}
}
Layout.preferredWidth: contentWidth
id:message
color:( isImportant ? '#FF0000' : '#979797' )
Layout.preferredWidth: contentWidth
color: mainLayout.eventColor
font {
//bold: true
pointSize: Units.dp * 7
}
height: parent.height
text: $chatEntry.name?_type.arg($chatEntry.name):_type //qsTr(Utils.snakeToCamel(_type))
text: $chatEntry.name?_type.arg($chatEntry.name):_type
verticalAlignment: Text.AlignVCenter
TooltipArea {
text: $chatEntry.timestamp.toLocaleString(Qt.locale(App.locale))
@ -118,6 +113,6 @@ RowLayout{
Rectangle{
height:1
Layout.fillWidth: true
color:( isImportant ? '#FF0000' : '#979797' )
color: mainLayout.eventColor
}
}

View file

@ -19,7 +19,7 @@ QtObject {
property QtObject text: QtObject {
property int pointSize: Units.dp * 10
property color color: Colors.g.color
property color color: Colors.ab.color
}
}
@ -50,7 +50,7 @@ QtObject {
property int iconSize: 18
property QtObject text: QtObject {
property color color: Colors.d.color
property color color: Colors.ac.color
property int pointSize: Units.dp * 10
}
}

View file

@ -43,16 +43,7 @@ Rectangle {
}
}
onSelectedChanged : if(timelineModel) timeline.entrySelected(timelineModel)
// onCurrentTimelineChanged:entrySelected(currentTimeline)
}
/*
Connections {
target: model
onDataChanged: Logic.handleDataChanged(topLeft, bottomRight, roles)
onRowsAboutToBeRemoved: Logic.handleRowsAboutToBeRemoved(parent, first, last)
}
*/
// -------------------------------------------------------------------------
// Legend.
// -------------------------------------------------------------------------
@ -126,7 +117,7 @@ Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: filterChoices.height
Layout.alignment: Qt.AlignCenter
border.color: 'black'
border.color: Colors.border.color
border.width: 2
visible:false
@ -190,7 +181,7 @@ Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 40
Layout.alignment: Qt.AlignCenter
border.color: 'black'
border.color: Colors.border.color
border.width: 2
visible:false
//color: ContactsStyle.bar.backgroundColor

View file

@ -117,7 +117,7 @@ ColumnLayout {
//: 'Admin' : Admin(istrator)
//~ Context One word title for describing the current admin status
text: qsTr('adminStatus')
color:"#9FA6AB"
color: Colors.af.color
font.pointSize: Units.dp * 8
}
}
@ -468,11 +468,6 @@ ColumnLayout {
localAddress: conversation.localAddress// Reload is done on localAddress. Use this order
}
}
/*
Connections {
target: SettingsModel
onChatEnabledChanged: chatRoomProxyModel.setEntryTypeFilter(status ? ChatRoomModel.GenericEntry : ChatRoomModel.CallEntry)
}*/
Connections {
target: AccountSettingsModel

View file

@ -49,49 +49,48 @@ DialogPlus {
property int timer : 0
buttonsAlignment: Qt.AlignCenter
height: 320
width: ManageAccountsStyle.width
height: EphemeralChatRoomStyle.height
width: EphemeralChatRoomStyle.width
// ---------------------------------------------------------------------------
ColumnLayout {
anchors.fill: parent
anchors.topMargin: 15
anchors.leftMargin: 10
anchors.rightMargin: 10
spacing: 0
anchors.topMargin: EphemeralChatRoomStyle.mainLayout.topMargin
anchors.leftMargin: EphemeralChatRoomStyle.mainLayout.leftMargin
anchors.rightMargin: EphemeralChatRoomStyle.mainLayout.rightMargin
spacing: EphemeralChatRoomStyle.mainLayout.spacing
Layout.alignment: Qt.AlignCenter
Icon{
icon:'timer'
iconSize:40
Layout.preferredHeight: 50
Layout.preferredWidth: 50
iconSize: EphemeralChatRoomStyle.timer.iconSize
Layout.preferredHeight: EphemeralChatRoomStyle.timer.preferredHeight
Layout.preferredWidth: EphemeralChatRoomStyle.timer.preferredWidth
Layout.alignment: Qt.AlignCenter
}
Text{
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
Layout.leftMargin: 10
Layout.rightMargin: 10
Layout.leftMargin: EphemeralChatRoomStyle.descriptionText.leftMargin
Layout.rightMargin: EphemeralChatRoomStyle.descriptionText.rightMargin
maximumLineCount: 4
wrapMode: Text.Wrap
//: 'New messages will be deleted on both ends once it has been read by your contact. Select a timeout.'
//~ Context Explanation for ephemerals
//: 'New messages will be deleted on both ends once it has been read by your contact. Select a timeout.' : Context Explanation for ephemerals
text: qsTr('ephemeralText')
//: '\nEphemeral message is only supported in conference based chat room!'
//~ Context Warning about not being in conference based chat room.
+(!chatRoomModel.canBeEphemeral?'\n'+qsTr('ephemeralNotInConference!'):'')
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.pointSize: Units.dp * 11
color: Colors.d.color
font.pointSize: EphemeralChatRoomStyle.descriptionText.pointSize
color: EphemeralChatRoomStyle.descriptionText.color
}
ComboBox{
Layout.alignment: Qt.AlignCenter
Layout.preferredWidth: 150
Layout.topMargin:10
Layout.bottomMargin:10
Layout.preferredWidth: EphemeralChatRoomStyle.descriptionText.preferredWidth
Layout.topMargin: EphemeralChatRoomStyle.descriptionText.topMargin
Layout.bottomMargin: EphemeralChatRoomStyle.descriptionText.bottomMargin
id:timerPicker
textRole: "text"
currentIndex: if( chatRoomModel.ephemeralLifetime == 0 || !chatRoomModel.ephemeralEnabled)
@ -108,22 +107,6 @@ DialogPlus {
return 5;
else
return 5;
/*
property var fields : [
//: 'Disabled'
qsTr('disabled'),
//: '%1 minute'
qsTr('nMinute', '', 1).arg(1),
//: '%1 hour'
qsTr('nHour', '', 1).arg(1),
//: '%1 day'
qsTr('nDay', '', 1).arg(1),
//: '%1 days'
qsTr('nDay', '', 3).arg(3),
//: '%1 week'
qsTr('nWeek', '', 1).arg(1)
]
*/
model:[
//: 'Disabled'
{text:qsTr('disabled'), value:0},
@ -142,7 +125,5 @@ DialogPlus {
onActivated: dialog.timer = model[index].value
visible: chatRoomModel.canBeEphemeral
}
}
}

View file

@ -49,36 +49,36 @@ DialogPlus {
buttonsAlignment: Qt.AlignCenter
height: ManageAccountsStyle.height
width: ManageAccountsStyle.width
height: InfoEncryptionStyle.height
width: InfoEncryptionStyle.width
// ---------------------------------------------------------------------------
ColumnLayout {
anchors.fill: parent
anchors.topMargin: 15
anchors.leftMargin: 10
anchors.rightMargin: 10
spacing: 0
anchors.topMargin: InfoEncryptionStyle.mainLayout.topMargin
anchors.leftMargin: InfoEncryptionStyle.mainLayout.leftMargin
anchors.rightMargin: InfoEncryptionStyle.mainLayout.rightMargin
spacing: InfoEncryptionStyle.mainLayout.spacing
Layout.alignment: Qt.AlignCenter
Icon{
icon: dialog.securityLevel === 2?'secure_level_1': dialog.securityLevel===3? 'secure_level_2' : 'secure_level_unsafe'
iconSize:40
Layout.preferredHeight: 50
Layout.preferredWidth: 50
iconSize: InfoEncryptionStyle.securityIcon.iconSize
Layout.preferredHeight: InfoEncryptionStyle.securityIcon.preferredHeight
Layout.preferredWidth: InfoEncryptionStyle.securityIcon.preferredWidth
Layout.alignment: Qt.AlignCenter
}
Text{
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
Layout.leftMargin: 10
Layout.rightMargin: 10
Layout.leftMargin: InfoEncryptionStyle.descriptionText.leftMargin
Layout.rightMargin: InfoEncryptionStyle.descriptionText.rightMargin
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.pointSize: Units.dp * 11
color: Colors.d.color
font.pointSize: InfoEncryptionStyle.descriptionText.pointSize
color: InfoEncryptionStyle.descriptionText.color
wrapMode: Text.Wrap
//: "Instant messages are end-to-end encrypted in secured conversations. It is possible to upgrade the security level of a conversation by authentificating participants."
@ -88,13 +88,13 @@ DialogPlus {
Text{
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
Layout.leftMargin: 10
Layout.rightMargin: 10
Layout.leftMargin: InfoEncryptionStyle.descriptionText.leftMargin
Layout.rightMargin: InfoEncryptionStyle.descriptionText.rightMargin
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.pointSize: Units.dp * 11
color: Colors.d.color
font.pointSize: InfoEncryptionStyle.descriptionText.pointSize
color: InfoEncryptionStyle.descriptionText.color
wrapMode: Text.Wrap
//: "To do so, call the contact and follow the authentification process."

View file

@ -22,7 +22,7 @@ DialogPlus {
buttonsAlignment: Qt.AlignCenter
objectName: '__manageAccounts'
height: SettingsModel.rlsUriEnabled ? ManageAccountsStyle.height +30 : ManageAccountsStyle.heightWithoutPresence + 30
height: SettingsModel.rlsUriEnabled ? ManageAccountsStyle.height : ManageAccountsStyle.heightWithoutPresence
width: ManageAccountsStyle.width
// ---------------------------------------------------------------------------

View file

@ -17,7 +17,6 @@ DialogPlus {
id: conferenceManager
property ChatRoomModel chatRoomModel
readonly property int maxParticipants: 20
readonly property int minParticipants: 1
buttons: [
@ -140,7 +139,6 @@ DialogPlus {
}
ColumnLayout {
Layout.fillWidth: true
//Layout.preferredHeight: 90
spacing:10
Text{
textFormat: Text.RichText
@ -275,7 +273,7 @@ DialogPlus {
Layout.fillHeight: true
Layout.fillWidth: true
border.width: 1
border.color: "black"
border.color: Colors.l.color
ColumnLayout {
anchors.fill: parent
@ -333,7 +331,6 @@ DialogPlus {
Layout.fillWidth: true
Layout.bottomMargin: 5
//readOnly: toAddView.count >= conferenceManager.maxParticipants
textFieldStyle: TextFieldStyle.unbordered
ParticipantsView {
@ -349,7 +346,7 @@ DialogPlus {
actions: [{
icon: 'remove_participant',
//: 'Remove this participant from the selection' : Explanation abo^ut removing participant from a selection
//: 'Remove this participant from the selection' : Explanation about removing participant from a selection
//~ Tooltip This is a tooltip
tooltipText: qsTr('removeParticipantSelection'),
handler: function (entry) {

View file

@ -27,8 +27,8 @@ DialogPlus {
property var window
buttonsAlignment: Qt.AlignCenter
height: ManageAccountsStyle.height + 30
width: ManageAccountsStyle.width
height: 383
width: 450
// ---------------------------------------------------------------------------
@ -94,7 +94,6 @@ DialogPlus {
MouseArea{
anchors.fill:contactDescription
onClicked: {
//mainHeader.window.detachVirtualWindow()
mainHeader.window.attachVirtualWindow(Qt.resolvedUrl('InfoEncryption.qml')
,{securityLevel : mainHeader.securityLevel
, addressToCall : mainHeader.addressToCall}
@ -120,7 +119,7 @@ DialogPlus {
}
}
Rectangle {
color: "#ebebeb"
color: Colors.ag.color
Layout.preferredHeight: 1
Layout.fillWidth: true
}
@ -146,7 +145,7 @@ DialogPlus {
width:parent.width
height:50
color: '#f5f5f5'
color: Colors.ah.color
RowLayout{
anchors.fill:parent
Text{
@ -154,7 +153,6 @@ DialogPlus {
Layout.fillHeight: true
Layout.leftMargin: avatar.width+14*2
font.weight: Font.Light
//color: DialogStyle.description.color
font.pointSize: Units.dp * 11
verticalAlignment: Text.AlignVCenter
wrapMode: Text.WordWrap
@ -188,7 +186,7 @@ DialogPlus {
}
}
Rectangle {
color: "#ebebeb"
color: Colors.ag.color
anchors.left : parent.left
anchors.right :parent.right
anchors.bottom: parent.bottom

View file

@ -11,314 +11,314 @@ import App.Styles 1.0
// =============================================================================
TabContainer {
Column {
spacing: SettingsWindowStyle.forms.spacing
width: parent.width
// -------------------------------------------------------------------------
// Audio parameters.
// -------------------------------------------------------------------------
Form {
title: qsTr('audioTitle')
width: parent.width
//Warning if in call
FormLine {
visible: SettingsModel.isInCall
FormGroup {
RowLayout {
spacing: SettingsAudioStyle.warningMessage.iconSize
Icon {
icon: 'warning'
iconSize: SettingsAudioStyle.warningMessage.iconSize
anchors {
rightMargin: SettingsAudioStyle.warningMessage.iconSize
leftMargin: SettingsAudioStyle.warningMessage.iconSize
}
}
Text {
text: qsTr('audioSettingsInCallWarning')
}
}
}
}
FormLine {
FormGroup {
label: qsTr('playbackDeviceLabel')
ComboBox {
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.playbackDevice
})
model: SettingsModel.playbackDevices
onActivated: SettingsModel.playbackDevice = model[index]
}
}
}
FormLine {
FormGroup {
label: qsTr('playbackGainLabel')
enabled: !SettingsModel.isInCall
Slider {
id: playbackSlider
width: parent.width
enabled: !SettingsModel.isInCall
Component.onCompleted: value = SettingsModel.playbackGain
onPositionChanged: SettingsModel.playbackGain = position
ToolTip {
parent: playbackSlider.handle
visible: playbackSlider.pressed
text: (playbackSlider.value * 100).toFixed(0) + " %"
}
}
Column {
spacing: SettingsWindowStyle.forms.spacing
width: parent.width
// -------------------------------------------------------------------------
// Audio parameters.
// -------------------------------------------------------------------------
Form {
title: qsTr('audioTitle')
width: parent.width
//Warning if in call
FormLine {
visible: SettingsModel.isInCall
FormGroup {
RowLayout {
spacing: SettingsAudioStyle.warningMessage.iconSize
Icon {
icon: 'warning'
iconSize: SettingsAudioStyle.warningMessage.iconSize
anchors {
rightMargin: SettingsAudioStyle.warningMessage.iconSize
leftMargin: SettingsAudioStyle.warningMessage.iconSize
}
}
Text {
text: qsTr('audioSettingsInCallWarning')
}
}
}
}
FormLine {
FormGroup {
label: qsTr('playbackDeviceLabel')
ComboBox {
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.playbackDevice
})
model: SettingsModel.playbackDevices
onActivated: SettingsModel.playbackDevice = model[index]
}
}
}
FormLine {
FormGroup {
label: qsTr('playbackGainLabel')
enabled: !SettingsModel.isInCall
Slider {
id: playbackSlider
width: parent.width
enabled: !SettingsModel.isInCall
Component.onCompleted: value = SettingsModel.playbackGain
onPositionChanged: SettingsModel.playbackGain = position
ToolTip {
parent: playbackSlider.handle
visible: playbackSlider.pressed
text: (playbackSlider.value * 100).toFixed(0) + " %"
}
}
}
}
FormLine {
FormGroup {
label: qsTr('captureDeviceLabel')
ComboBox {
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.captureDevice
})
model: SettingsModel.captureDevices
onActivated: SettingsModel.captureDevice = model[index]
}
}
}
FormLine {
FormGroup {
label: qsTr('captureGainLabel')
Slider {
id: captureSlider
width: parent.width
enabled: !SettingsModel.isInCall
Component.onCompleted: value = SettingsModel.captureGain
onPositionChanged: SettingsModel.captureGain = position
ToolTip {
parent: captureSlider.handle
visible: captureSlider.pressed
text: (captureSlider.value * 100).toFixed(0) + " %"
}
}
}
}
FormLine {
FormGroup {
id: audioTestRow
label: qsTr('audioTestLabel')
visible: !SettingsModel.isInCall
Slider {
id: audioTestSlider
enabled: false
width: parent.width
anchors {
leftMargin: SettingsAudioStyle.ringPlayer.leftMargin
}
background: Rectangle {
x: audioTestSlider.leftPadding
y: audioTestSlider.topPadding + audioTestSlider.availableHeight / 2 - height / 2
implicitWidth: 200
implicitHeight: 8
width: audioTestSlider.availableWidth
height: implicitHeight
radius: 2
color: Colors.slider_background.color
Rectangle {
width: audioTestSlider.visualPosition * parent.width
height: parent.height
color: audioTestSlider.value > 0.8 ? Colors.slider_high.color : Colors.slider_low.color
radius: 2
}
}
//Empty slider handle
handle: Text {
text: ''
visible: false
}
Timer {
interval: 50
repeat: true
running: SettingsModel.captureGraphRunning
onTriggered: parent.value = SettingsModel.getMicVolume()
}
}
}
}
FormLine {
FormGroup {
label: qsTr('ringerDeviceLabel')
ComboBox {
enabled: !SettingsModel.isInCall
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.ringerDevice
})
model: SettingsModel.playbackDevices
onActivated: SettingsModel.ringerDevice = model[index]
}
}
}
FormLine {
FormGroup {
label: qsTr('ringLabel')
FileChooserButton {
selectedFile: SettingsModel.ringPath
onAccepted: {
var item = ringPlayer.item
if (item) {
item.stop()
}
SettingsModel.ringPath = selectedFile
}
ActionSwitch {
anchors {
left: parent.right
leftMargin: SettingsAudioStyle.ringPlayer.leftMargin
}
enabled: {
var item = ringPlayer.item
return item && item.playbackState === SoundPlayer.PlayingState
}
icon: 'pause'
onClicked: {
var item = ringPlayer.item
if (!item) {
return
}
if (enabled) {
item.stop()
} else {
item.play()
}
}
Loader {
id: ringPlayer
active: window.visible
sourceComponent: SoundPlayer {
source: SettingsModel.ringPath
}
}
}
}
}
}
FormLine {
FormGroup {
label: qsTr('echoCancellationLabel')
Row{
spacing: SettingsAudioStyle.warningMessage.iconSize
Switch {
checked: SettingsModel.echoCancellationEnabled
onClicked: {
SettingsModel.echoCancellationEnabled = !checked
echoCalibrationStatus.text = ''
}
}
Text{
id:echoCalibrationStatus
text: ''
Layout.fillWidth:true
height:parent.height
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
TextButtonB {
id: echoCalibration
enabled: SettingsModel.echoCancellationEnabled
text: qsTr('echoCancellationCalibrationLabel')
onClicked: { echoCalibrationStatus.text = qsTr("calibratingEchoCancellationInProgress");//"...calibrating echo cancellation..."
SettingsModel.startEchoCancellerCalibration();
}
Connections {
target: SettingsModel
onEchoCancellationStatus:{
switch(status){
case 0 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationInProgress"); break;
case 1 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationDone").replace('%1', msDelay); break;//"Calibrated in -"+msDelay+"ms"
case 2 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationFailed"); break;//"Calibration failed"
case 3 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationNone");//"No echo detected"
SettingsModel.echoCancellationEnabled = false;// Calibration turn off the echo cancellation
break;
default:{}
}
}
}
}
}
}
}
}
// -------------------------------------------------------------------------
// Audio Codecs.
// -------------------------------------------------------------------------
Form {
title: qsTr('audioCodecsTitle')
visible: SettingsModel.showAudioCodecs || SettingsModel.developerSettingsEnabled
width: parent.width
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
label: qsTr('showAudioCodecsLabel')
Switch {
checked: SettingsModel.showAudioCodecs
onClicked: SettingsModel.showAudioCodecs = !checked
}
}
}
CodecsViewer {
model: AudioCodecsModel
width: parent.width
}
}
}
}
FormLine {
FormGroup {
label: qsTr('captureDeviceLabel')
ComboBox {
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.captureDevice
})
model: SettingsModel.captureDevices
onActivated: SettingsModel.captureDevice = model[index]
}
}
}
FormLine {
FormGroup {
label: qsTr('captureGainLabel')
Slider {
id: captureSlider
width: parent.width
enabled: !SettingsModel.isInCall
Component.onCompleted: value = SettingsModel.captureGain
onPositionChanged: SettingsModel.captureGain = position
ToolTip {
parent: captureSlider.handle
visible: captureSlider.pressed
text: (captureSlider.value * 100).toFixed(0) + " %"
}
}
}
}
FormLine {
FormGroup {
id: audioTestRow
label: qsTr('audioTestLabel')
visible: !SettingsModel.isInCall
Slider {
id: audioTestSlider
enabled: false
width: parent.width
anchors {
leftMargin: SettingsAudioStyle.ringPlayer.leftMargin
}
background: Rectangle {
x: audioTestSlider.leftPadding
y: audioTestSlider.topPadding + audioTestSlider.availableHeight / 2 - height / 2
implicitWidth: 200
implicitHeight: 8
width: audioTestSlider.availableWidth
height: implicitHeight
radius: 2
color: "#bdbebf"
Rectangle {
width: audioTestSlider.visualPosition * parent.width
height: parent.height
color: audioTestSlider.value > 0.8 ? "#ff0000" : "#21be2b"
radius: 2
}
}
//Empty slider handle
handle: Text {
text: ''
visible: false
}
Timer {
interval: 50
repeat: true
running: SettingsModel.captureGraphRunning
onTriggered: parent.value = SettingsModel.getMicVolume()
}
}
}
}
FormLine {
FormGroup {
label: qsTr('ringerDeviceLabel')
ComboBox {
enabled: !SettingsModel.isInCall
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.ringerDevice
})
model: SettingsModel.playbackDevices
onActivated: SettingsModel.ringerDevice = model[index]
}
}
}
FormLine {
FormGroup {
label: qsTr('ringLabel')
FileChooserButton {
selectedFile: SettingsModel.ringPath
onAccepted: {
var item = ringPlayer.item
if (item) {
item.stop()
}
SettingsModel.ringPath = selectedFile
}
ActionSwitch {
anchors {
left: parent.right
leftMargin: SettingsAudioStyle.ringPlayer.leftMargin
}
enabled: {
var item = ringPlayer.item
return item && item.playbackState === SoundPlayer.PlayingState
}
icon: 'pause'
onClicked: {
var item = ringPlayer.item
if (!item) {
return
}
if (enabled) {
item.stop()
} else {
item.play()
}
}
Loader {
id: ringPlayer
active: window.visible
sourceComponent: SoundPlayer {
source: SettingsModel.ringPath
}
}
}
}
}
}
FormLine {
FormGroup {
label: qsTr('echoCancellationLabel')
Row{
spacing: SettingsAudioStyle.warningMessage.iconSize
Switch {
checked: SettingsModel.echoCancellationEnabled
onClicked: {
SettingsModel.echoCancellationEnabled = !checked
echoCalibrationStatus.text = ''
}
}
Text{
id:echoCalibrationStatus
text: ''
Layout.fillWidth:true
height:parent.height
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
TextButtonB {
id: echoCalibration
enabled: SettingsModel.echoCancellationEnabled
text: qsTr('echoCancellationCalibrationLabel')
onClicked: { echoCalibrationStatus.text = qsTr("calibratingEchoCancellationInProgress");//"...calibrating echo cancellation..."
SettingsModel.startEchoCancellerCalibration();
}
Connections {
target: SettingsModel
onEchoCancellationStatus:{
switch(status){
case 0 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationInProgress"); break;
case 1 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationDone").replace('%1', msDelay); break;//"Calibrated in -"+msDelay+"ms"
case 2 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationFailed"); break;//"Calibration failed"
case 3 : echoCalibrationStatus.text = qsTr("calibratingEchoCancellationNone");//"No echo detected"
SettingsModel.echoCancellationEnabled = false;// Calibration turn off the echo cancellation
break;
default:{}
}
}
}
}
}
}
}
}
// -------------------------------------------------------------------------
// Audio Codecs.
// -------------------------------------------------------------------------
Form {
title: qsTr('audioCodecsTitle')
visible: SettingsModel.showAudioCodecs || SettingsModel.developerSettingsEnabled
width: parent.width
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
label: qsTr('showAudioCodecsLabel')
Switch {
checked: SettingsModel.showAudioCodecs
onClicked: SettingsModel.showAudioCodecs = !checked
}
}
}
CodecsViewer {
model: AudioCodecsModel
width: parent.width
}
}
}
}

View file

@ -0,0 +1,35 @@
pragma Singleton
import QtQml 2.2
import QtQuick 2.7
import Units 1.0
// =============================================================================
QtObject {
property int height: 320
property int width: 450
property QtObject mainLayout: QtObject {
property int topMargin: 15
property int leftMargin: 10
property int rightMargin: 10
property int spacing: 0
}
property QtObject timer: QtObject {
property int iconSize: 40
property int preferredHeight: 50
property int preferredWidth: 50
}
property QtObject descriptionText: QtObject {
property int leftMargin: 10
property int rightMargin: 10
property real pointSize: Units.dp * 11
property color color: Colors.d.color
}
property QtObject timerPicker: QtObject {
property int preferredWidth: 150
property int topMargin: 10
property int bottomMargin: 10
}
}

View file

@ -14,11 +14,12 @@ QtObject {
property int leftMargin: 25
property int rightMargin: 25
property int spacing: 7
}
property QtObject searchBar : QtObject{
property int topMargin : 10
}
property QtObject results : QtObject{
property int topMargin : 10
property color color : Colors.g.color

View file

@ -8,19 +8,42 @@ import Units 1.0
// =============================================================================
QtObject {
property QtObject okButton : QtObject{
property QtObject backgroundColor: QtObject {
property color disabled: Colors.i30.color
property color hovered: Colors.b.color
property color normal: Colors.s.color
property color pressed: Colors.m.color
}
property int height: 353
property int width: 450
property QtObject textColor: QtObject {
property color disabled: Colors.q.color
property color hovered: Colors.q.color
property color normal: Colors.q.color
property color pressed: Colors.q.color
}
}
property QtObject mainLayout: QtObject {
property int topMargin: 15
property int leftMargin: 10
property int rightMargin: 10
property int spacing: 0
}
property QtObject okButton : QtObject{
property QtObject backgroundColor: QtObject {
property color disabled: Colors.i30.color
property color hovered: Colors.b.color
property color normal: Colors.s.color
property color pressed: Colors.m.color
}
property QtObject textColor: QtObject {
property color disabled: Colors.q.color
property color hovered: Colors.q.color
property color normal: Colors.q.color
property color pressed: Colors.q.color
}
}
property QtObject securityIcon: QtObject{
property int iconSize: 40
property int preferredHeight: 50
property int preferredWidth: 50
}
property QtObject descriptionText: QtObject{
property int leftMargin: 10
property int rightMargin: 10
property real pointSize: Units.dp * 11
property color color: Colors.d.color
}
}

View file

@ -4,8 +4,8 @@ import QtQml 2.2
// =============================================================================
QtObject {
property int height: 353
property int heightWithoutPresence: 284
property int height: 383
property int heightWithoutPresence: 314
property int width: 450
property QtObject accountSelector: QtObject {

View file

@ -35,10 +35,12 @@ singleton MainWindowStyle 1.0 Main/MainWindowStyl
singleton AboutStyle 1.0 Main/Dialogs/AboutStyle.qml
singleton AuthenticationRequestStyle 1.0 Main/Dialogs/AuthenticationRequestStyle.qml
singleton EphemeralChatRoomStyle 1.0 Main/Dialogs/EphemeralChatRoomStyle.qml
singleton ManageAccountsStyle 1.0 Main/Dialogs/ManageAccountsStyle.qml
singleton InfoChatRoomStyle 1.0 Main/Dialogs/InfoChatRoomStyle.qml
singleton InfoEncryptionStyle 1.0 Main/Dialogs/InfoEncryptionStyle.qml
# Settings Window --------------------------------------------------------------
singleton SettingsAdvancedStyle 1.0 Settings/SettingsAdvancedStyle.qml