mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-07-24 17:35:43 +02:00
SettingsView: apply the new design
Change-Id: I03f536a22eb24c30a33f9d1736ac0e7849d66c42
This commit is contained in:
parent
91163b8bed
commit
acd4b3065c
92 changed files with 4238 additions and 2767 deletions
15
resources/icons/Key_Black_24dp.svg
Normal file
15
resources/icons/Key_Black_24dp.svg
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<g id="noun-key-2387257" transform="translate(0.043 -0.005)">
|
||||
<path id="Path_306" d="M21.2,17.8v-1.2c0-0.4-0.3-0.8-0.8-0.8h-0.8v-0.8c0-0.4-0.3-0.8-0.8-0.8c0,0,0,0,0,0h-0.8v-0.8
|
||||
c0-0.2-0.1-0.4-0.2-0.5l-3.7-3.7c0.1-0.4,0.1-0.7,0.1-1.1c0-3.4-2.8-6.2-6.2-6.2S2,4.8,2,8.2s2.8,6.2,6.2,6.2c0,0,0,0,0,0
|
||||
c0.8,0,1.6-0.2,2.3-0.5l7.9,7.9c0.1,0.1,0.3,0.2,0.5,0.2h2.3c0.4,0,0.8-0.3,0.8-0.8v-2.3c0-0.2-0.1-0.4-0.2-0.5L21.2,17.8z
|
||||
M20.4,20.5h-1.2l-8.1-8.1c-0.2-0.2-0.6-0.3-0.9-0.1c-2.3,1.2-5.1,0.3-6.3-2S3.6,5.2,5.9,4s5.1-0.3,6.3,2c0.5,1,0.7,2.2,0.4,3.3
|
||||
c-0.1,0.3,0,0.5,0.2,0.7l3.8,3.8v1.2c0,0.4,0.3,0.8,0.8,0.8h0.8v0.8c0,0.4,0.3,0.8,0.8,0.8h0.8v0.8c0,0.2,0.1,0.4,0.2,0.5l0.5,0.5
|
||||
L20.4,20.5z"/>
|
||||
<path id="Path_307" d="M8.1,6.6c0,0.8-0.7,1.5-1.5,1.5C5.7,8.2,5,7.5,5,6.6c0-0.8,0.7-1.5,1.5-1.5c0,0,0,0,0,0
|
||||
C7.4,5.1,8.1,5.8,8.1,6.6"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -69,6 +69,12 @@ AppSettingsManager::setValue(const Settings::Key key, const QVariant& value)
|
|||
setValue(Settings::toString(key), value);
|
||||
}
|
||||
|
||||
QVariant
|
||||
AppSettingsManager::getDefault(const Settings::Key key) const
|
||||
{
|
||||
return Settings::defaultValue(key);
|
||||
}
|
||||
|
||||
QString
|
||||
AppSettingsManager::getLanguage()
|
||||
{
|
||||
|
|
|
@ -116,6 +116,8 @@ public:
|
|||
Q_INVOKABLE QVariant getValue(const Settings::Key key);
|
||||
Q_INVOKABLE void setValue(const Settings::Key key, const QVariant& value = {});
|
||||
|
||||
Q_INVOKABLE QVariant getDefault(const Settings::Key key) const;
|
||||
|
||||
QString getLanguage();
|
||||
|
||||
void loadTranslations();
|
||||
|
|
|
@ -23,16 +23,46 @@
|
|||
|
||||
BannedListModel::BannedListModel(QObject* parent)
|
||||
: AbstractListModelBase(parent)
|
||||
{}
|
||||
|
||||
{
|
||||
connect(this, &BannedListModel::lrcInstanceChanged, [this]() {
|
||||
if (lrcInstance_ && lrcInstance_->getCurrentContactModel()) {
|
||||
connect(
|
||||
lrcInstance_->getCurrentContactModel(),
|
||||
&ContactModel::bannedStatusChanged,
|
||||
this,
|
||||
[&](const QString& uri, bool banned) {
|
||||
if (banned) {
|
||||
beginInsertRows(QModelIndex(), rowCount(), rowCount());
|
||||
bannedlist_.append(uri);
|
||||
endInsertRows();
|
||||
set_count(rowCount());
|
||||
} else {
|
||||
auto it = std::find_if(bannedlist_.begin(),
|
||||
bannedlist_.end(),
|
||||
[&uri](const auto& c) { return uri == c; });
|
||||
if (it != bannedlist_.end()) {
|
||||
auto elementIndex = std::distance(bannedlist_.begin(), it);
|
||||
beginRemoveRows(QModelIndex(), elementIndex, elementIndex);
|
||||
bannedlist_.remove(elementIndex);
|
||||
endRemoveRows();
|
||||
set_count(rowCount());
|
||||
}
|
||||
}
|
||||
},
|
||||
Qt::UniqueConnection);
|
||||
}
|
||||
reset();
|
||||
});
|
||||
}
|
||||
|
||||
BannedListModel::~BannedListModel() {}
|
||||
|
||||
int
|
||||
BannedListModel::rowCount(const QModelIndex& parent) const
|
||||
{
|
||||
if (!parent.isValid() && lrcInstance_) {
|
||||
return lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts().size();
|
||||
}
|
||||
if (!parent.isValid() && lrcInstance_)
|
||||
return bannedlist_.size();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -50,7 +80,7 @@ QVariant
|
|||
BannedListModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
try {
|
||||
auto contactList = lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts();
|
||||
auto contactList = bannedlist_;
|
||||
if (!index.isValid() || contactList.size() <= index.row()) {
|
||||
return QVariant();
|
||||
}
|
||||
|
@ -114,5 +144,7 @@ void
|
|||
BannedListModel::reset()
|
||||
{
|
||||
beginResetModel();
|
||||
bannedlist_ = lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts();
|
||||
endResetModel();
|
||||
set_count(rowCount());
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
class BannedListModel : public AbstractListModelBase
|
||||
{
|
||||
Q_OBJECT
|
||||
QML_RO_PROPERTY(int, count)
|
||||
public:
|
||||
enum Role { ContactName = Qt::UserRole + 1, ContactID };
|
||||
Q_ENUM(Role)
|
||||
|
@ -48,5 +49,8 @@ public:
|
|||
/*
|
||||
* This function is to reset the model when there's new account added.
|
||||
*/
|
||||
Q_INVOKABLE void reset();
|
||||
void reset();
|
||||
|
||||
private:
|
||||
QList<QString> bannedlist_;
|
||||
};
|
||||
|
|
|
@ -70,7 +70,7 @@ BaseModalDialog {
|
|||
text: root.confirmLabel
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedRed
|
||||
hoveredColor: JamiTheme.buttonTintedRedHovered
|
||||
|
@ -90,7 +90,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -32,6 +32,8 @@ Column {
|
|||
property string formattedTime: MessagesAdapter.getFormattedTime(Timestamp)
|
||||
property string formattedDay: MessagesAdapter.getFormattedDay(Timestamp)
|
||||
property int seq: MsgSeq.single//a changer par textlabel
|
||||
property alias messageToSend : textLabel.text
|
||||
|
||||
width: ListView.view ? ListView.view.width : 0
|
||||
spacing: 2
|
||||
topPadding: 12
|
||||
|
|
|
@ -128,7 +128,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedRed
|
||||
hoveredColor: JamiTheme.buttonTintedRedHovered
|
||||
|
@ -168,7 +168,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -24,15 +24,13 @@ import net.jami.Models 1.1
|
|||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../../settingsview/components"
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property alias backgroundColor: outerRect.color
|
||||
|
||||
width: childrenRect.width
|
||||
height: controlsLayout.height + usernameTextEdit.height
|
||||
+ 2 * JamiTheme.preferredMarginSize
|
||||
height: controlsLayout.height + usernameTextEdit.height + 2 * JamiTheme.preferredMarginSize
|
||||
|
||||
// Background rounded rectangle.
|
||||
Rectangle {
|
||||
|
@ -44,7 +42,8 @@ Item {
|
|||
// Logo masked by outerRect.
|
||||
Item {
|
||||
anchors.fill: outerRect
|
||||
layer.enabled: true; layer.effect: OpacityMask { maskSource: outerRect }
|
||||
layer.enabled: true
|
||||
layer.effect: OpacityMask { maskSource: outerRect }
|
||||
|
||||
Rectangle {
|
||||
id: logoRect
|
||||
|
@ -77,15 +76,16 @@ Item {
|
|||
RowLayout {
|
||||
id: controlsLayout
|
||||
|
||||
Layout.alignment: Qt.AlignTop | Qt.AlignRight
|
||||
Layout.topMargin: JamiTheme.pushButtonMargin
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
|
||||
Layout.topMargin: JamiTheme.pushButtonMargin / 2
|
||||
Layout.rightMargin: JamiTheme.pushButtonMargin
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
|
||||
component JamiIdControlButton: PushButton {
|
||||
property bool clicked: true
|
||||
preferredSize : 30
|
||||
normalColor: JamiTheme.transparentColor
|
||||
hoveredColor: JamiTheme.transparentColor
|
||||
hoveredColor: JamiTheme.hoveredButtonColorWizard
|
||||
imageContainerWidth: JamiTheme.pushButtonSize
|
||||
imageContainerHeight: JamiTheme.pushButtonSize
|
||||
border.color: JamiTheme.tintedBlue
|
||||
|
@ -127,7 +127,7 @@ Item {
|
|||
id: btnCopy
|
||||
source: JamiResources.content_copy_24dp_svg
|
||||
toolTipText: JamiStrings.copy
|
||||
onClicked: UtilsAdapter.setClipboardText(CurrentAccount.bestId)
|
||||
onClicked: UtilsAdapter.setClipboardText(usernameTextEdit.staticText)
|
||||
}
|
||||
|
||||
JamiIdControlButton {
|
||||
|
@ -138,6 +138,21 @@ Item {
|
|||
appWindow,
|
||||
"mainview/components/WelcomePageQrDialog.qml")
|
||||
}
|
||||
|
||||
JamiIdControlButton {
|
||||
id: btnId
|
||||
source: JamiResources.key_black_24dp_svg
|
||||
visible: CurrentAccount.registeredName !== ""
|
||||
onClicked: {
|
||||
if (clicked) {
|
||||
usernameTextEdit.staticText = CurrentAccount.uri
|
||||
} else {
|
||||
usernameTextEdit.staticText = CurrentAccount.registeredName
|
||||
}
|
||||
|
||||
clicked = !clicked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UsernameTextEdit {
|
|
@ -48,9 +48,13 @@ AbstractButton {
|
|||
property var preferredWidth
|
||||
property real textLeftPadding
|
||||
property real textRightPadding
|
||||
property real fontSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
property real fontSize: JamiTheme.buttontextFontPixelSize
|
||||
property real textAlignment: Text.AlignHCenter
|
||||
|
||||
property real buttontextHeightMargin: JamiTheme.wizardButtonHeightMargin
|
||||
height: buttontextHeightMargin + textButton.height
|
||||
Layout.preferredHeight: height
|
||||
|
||||
Binding on width {
|
||||
when: root.preferredWidth !== undefined ||
|
||||
root.Layout.fillWidth
|
||||
|
@ -63,9 +67,10 @@ AbstractButton {
|
|||
value: width
|
||||
}
|
||||
|
||||
property real preferredHeight: JamiTheme.wizardButtonHeightMargin*2 + textButton.height
|
||||
height: preferredHeight
|
||||
Layout.preferredHeight: height
|
||||
Binding on Layout.minimumHeight {
|
||||
when: root.preferredHeight !== undefined
|
||||
value: height
|
||||
}
|
||||
|
||||
hoverEnabled: true
|
||||
focusPolicy: Qt.TabFocus
|
||||
|
|
|
@ -27,18 +27,18 @@ RadioButton {
|
|||
id: root
|
||||
|
||||
property string color: JamiTheme.textColor
|
||||
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
property string bgColor: ""
|
||||
|
||||
indicator: Rectangle {
|
||||
id: rect
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: root.bgColor
|
||||
|
||||
border {
|
||||
id: border
|
||||
color: JamiTheme.buttonTintedBlue
|
||||
width: 2
|
||||
width: 1
|
||||
}
|
||||
|
||||
implicitWidth: 20
|
||||
|
@ -56,6 +56,13 @@ RadioButton {
|
|||
radius: 10
|
||||
visible : checked || hovered
|
||||
|
||||
Behavior on visible {
|
||||
NumberAnimation {
|
||||
from: 0
|
||||
duration: JamiTheme.shortFadeDuration
|
||||
}
|
||||
}
|
||||
|
||||
color: JamiTheme.buttonTintedBlue
|
||||
|
||||
HoverHandler {
|
||||
|
@ -69,6 +76,7 @@ RadioButton {
|
|||
color: root.color
|
||||
leftPadding: root.indicator.width + root.spacing
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
}
|
||||
|
||||
Keys.onPressed: function (event) {
|
||||
|
@ -78,12 +86,4 @@ RadioButton {
|
|||
}
|
||||
}
|
||||
|
||||
onActiveFocusChanged: {
|
||||
if (focus && !root.checked) {
|
||||
border.width = 2.5
|
||||
} else {
|
||||
border.width = 2
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ TextField {
|
|||
width: parent.width
|
||||
height: visible ? 1 : 0
|
||||
anchors.top: root.baseline
|
||||
anchors.topMargin: root.font.pixelSize / 1.5
|
||||
anchors.topMargin: 10
|
||||
color: isSwarmDetail ? textColor : root.accent
|
||||
visible: {
|
||||
if (!readOnly) {
|
||||
|
|
|
@ -30,7 +30,7 @@ ModalTextEdit {
|
|||
|
||||
prefixIconSrc: firstEntry ? JamiResources.lock_svg : JamiResources.round_edit_24dp_svg
|
||||
|
||||
suffixBisIconSrc: JamiResources.eye_cross_svg
|
||||
suffixBisIconSrc: echoMode == TextInput.Password ? JamiResources.eye_cross_svg : JamiResources.noun_eye_svg
|
||||
suffixBisIconColor: JamiTheme.buttonTintedBlue
|
||||
|
||||
placeholderText: JamiStrings.password
|
||||
|
|
|
@ -161,7 +161,7 @@ ItemDelegate {
|
|||
visible: preferenceType === PreferenceItemListModel.PATH
|
||||
|
||||
preferredWidth: root.width / 2 - 8
|
||||
preferredHeight: 30
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
Layout.rightMargin: 4
|
||||
|
|
|
@ -38,7 +38,8 @@ AbstractButton {
|
|||
property int preferredSize: 30
|
||||
property int preferredHeight: 0
|
||||
property int preferredWidth: 0
|
||||
property int preferredMargin: 16
|
||||
property int preferredLeftMargin: 16
|
||||
property int preferredRightMargin: 16
|
||||
// Note the radius will default to preferredSize
|
||||
property bool circled: true
|
||||
property alias radius: background.radius
|
||||
|
@ -52,6 +53,7 @@ AbstractButton {
|
|||
property alias buttonTextColor: textContent.color
|
||||
property alias textHAlign: textContent.horizontalAlignment
|
||||
property bool buttonTextEnableElide: false
|
||||
property alias alignement: textContent.horizontalAlignment
|
||||
|
||||
property alias toolTipText: toolTip.text
|
||||
|
||||
|
@ -102,7 +104,7 @@ AbstractButton {
|
|||
|
||||
anchors.centerIn: textContent.text ? undefined : root
|
||||
anchors.left: textContent.text ? root.left : undefined
|
||||
anchors.leftMargin: textContent.text ? preferredMargin : 0
|
||||
anchors.leftMargin: textContent.text ? preferredLeftMargin : 0
|
||||
anchors.verticalCenter: root.verticalCenter
|
||||
|
||||
containerWidth: preferredWidth ? preferredWidth : preferredSize
|
||||
|
@ -128,14 +130,12 @@ AbstractButton {
|
|||
Text {
|
||||
id: textContent
|
||||
|
||||
anchors.centerIn: image.status !== Image.Null ? undefined : root
|
||||
anchors.left: image.status !== Image.Null ? image.right : undefined
|
||||
|
||||
anchors.leftMargin: preferredMargin
|
||||
anchors.left: image.status !== Image.Null ? image.right : root.left
|
||||
anchors.leftMargin: preferredLeftMargin
|
||||
anchors.verticalCenter: root.verticalCenter
|
||||
|
||||
anchors.right: buttonTextEnableElide ? root.right : undefined
|
||||
anchors.rightMargin: preferredMargin
|
||||
anchors.rightMargin: preferredRightMargin
|
||||
|
||||
visible: text ? true : false
|
||||
|
||||
|
@ -144,7 +144,7 @@ AbstractButton {
|
|||
|
||||
color: JamiTheme.primaryForegroundColor
|
||||
font.kerning: true
|
||||
font.pointSize: 9
|
||||
font.pixelSize: 12
|
||||
elide: Qt.ElideRight
|
||||
}
|
||||
|
||||
|
@ -152,15 +152,16 @@ AbstractButton {
|
|||
id: background
|
||||
|
||||
radius: circled ? preferredSize : 5
|
||||
color: normalColor
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "checked"; when: checked
|
||||
PropertyChanges { target: background; color: checkedColor }
|
||||
PropertyChanges { target: background; color: checkedColor}
|
||||
},
|
||||
State {
|
||||
name: "pressed"; when: pressed
|
||||
PropertyChanges { target: background; color: pressedColor }
|
||||
PropertyChanges { target: background; color: pressedColor}
|
||||
},
|
||||
State {
|
||||
name: "hovered"; when: hovered || root.focus
|
||||
|
@ -192,4 +193,12 @@ AbstractButton {
|
|||
]
|
||||
|
||||
}
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.key === Qt.Key_Enter ||
|
||||
keyEvent.key === Qt.Key_Return) {
|
||||
clicked()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ ComboBox {
|
|||
property string placeholderText
|
||||
property string currentSelectionText: currentText
|
||||
property string comboBoxBackgroundColor: JamiTheme.editBackgroundColor
|
||||
property bool selection: currentIndex < 0 && !count
|
||||
|
||||
MaterialToolTip {
|
||||
id: toolTip
|
||||
|
@ -61,6 +62,7 @@ ComboBox {
|
|||
color: hovered ? JamiTheme.comboboxTextColorHovered : JamiTheme.textColor
|
||||
elide: Text.ElideRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
|
@ -82,17 +84,17 @@ ComboBox {
|
|||
source: popup.visible ? JamiResources.expand_less_24dp_svg
|
||||
: JamiResources.expand_more_24dp_svg
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
color: JamiTheme.comboboxIconColor
|
||||
}
|
||||
|
||||
contentItem: Text {
|
||||
leftPadding: root.indicator.width
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
text: root.displayText
|
||||
color: JamiTheme.textColor
|
||||
|
||||
color: JamiTheme.comboboxTextColor
|
||||
font.weight: Font.Medium
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
|
@ -100,9 +102,8 @@ ComboBox {
|
|||
id: selectOption
|
||||
color: JamiTheme.transparentColor
|
||||
implicitWidth: 120
|
||||
implicitHeight: 43
|
||||
border.color: popup.visible ? JamiTheme.comboboxBorderColorActive
|
||||
: JamiTheme.comboboxBorderColor
|
||||
implicitHeight: contentItem.implicitHeight + JamiTheme.buttontextHeightMargin
|
||||
border.color: popup.visible ? JamiTheme.comboboxBorderColorActive : JamiTheme.comboboxBorderColor
|
||||
border.width: root.visualFocus ? 2 : 1
|
||||
radius: 5
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: {
|
||||
switch(buttonStyles[modelData]) {
|
||||
|
|
|
@ -81,7 +81,6 @@ Item {
|
|||
property string alias: qsTr("Alias")
|
||||
|
||||
// AdvancedCallSettings
|
||||
property string callSettings: qsTr("Call settings")
|
||||
property string allowCallsUnknownContacs: qsTr("Allow incoming calls from unknown contacts")
|
||||
property string rendezVous: qsTr("Convert your account into a rendezvous point")
|
||||
property string autoAnswerCalls: qsTr("Automatically answer calls")
|
||||
|
@ -93,7 +92,6 @@ Item {
|
|||
property string audioFile: qsTr("Audio File (*.wav *.ogg *.opus *.mp3 *.aiff *.wma)")
|
||||
|
||||
// AdvancedChatSettings
|
||||
property string chatSettings: qsTr("Chat settings")
|
||||
property string enableReadReceipts: qsTr("Enable read receipts")
|
||||
property string enableReadReceiptsTooltip: qsTr("Send and receive receipts indicating that a message have been displayed")
|
||||
|
||||
|
@ -121,6 +119,7 @@ Item {
|
|||
property string selectPrivateKey: qsTr("Select a private key")
|
||||
property string selectUserCert: qsTr("Select a user certificate")
|
||||
property string selectCACert: qsTr("Select a CA certificate")
|
||||
property string selectCACertDefault: qsTr("Select")
|
||||
property string keyFile: qsTr("Key File (*.key)")
|
||||
|
||||
// AdvancedConnectivitySettings
|
||||
|
@ -174,9 +173,14 @@ Item {
|
|||
property string accountSettingsTitle: qsTr("Account Settings")
|
||||
property string accountSettingsMenuTitle: qsTr("Account")
|
||||
property string generalSettingsTitle: qsTr("General")
|
||||
property string pluginSettingsTitle: qsTr("Plugin")
|
||||
property string avSettingsTitle: qsTr("Audio and Video Settings")
|
||||
property string avSettingsMenuTitle: qsTr("Audio/Video")
|
||||
property string pluginSettingsTitle: qsTr("Plugins")
|
||||
property string enableAccountSettingsTitle: qsTr("Enable account")
|
||||
property string manageAccountSettingsTitle: qsTr("Manage account")
|
||||
property string linkedDevicesSettingsTitle: qsTr("Linked devices")
|
||||
property string callSettingsTitle: qsTr("Call settings")
|
||||
property string chatSettingsTitle: qsTr("Chat")
|
||||
property string advancedSettingsTitle: qsTr("Advanced settings")
|
||||
property string audioVideoSettingsTitle: qsTr("Audio and Video")
|
||||
|
||||
// AudioSettings
|
||||
property string audio: qsTr("Audio")
|
||||
|
@ -187,6 +191,7 @@ Item {
|
|||
property string ringtoneDevice: qsTr("Ringtone device")
|
||||
property string selectRingtoneOutputDevice: qsTr("Select ringtone output device")
|
||||
property string audioManager: qsTr("Audio manager")
|
||||
property string soundTest: qsTr("Sound test")
|
||||
|
||||
// VideoSettings
|
||||
property string video: qsTr("Video")
|
||||
|
@ -340,6 +345,8 @@ Item {
|
|||
property string positionShareDuration: qsTr("Position share duration");
|
||||
property string positionShareLimit: qsTr("Limit the duration of location sharing");
|
||||
property string locationSharingLabel: qsTr("Location sharing");
|
||||
property string maxLocationDuration: qsTr("Unlimited");
|
||||
property string minLocationDuration: qsTr("1 min");
|
||||
|
||||
// Chatview header
|
||||
property string hideChat: qsTr("Hide chat")
|
||||
|
@ -406,7 +413,6 @@ Item {
|
|||
property string passwordOptional: qsTr("Encrypting your account with a password is optional, and if the password is lost it CANNOT be recovered later.")
|
||||
property string customizeOptional: qsTr("Setting a profile picture and nickname is optional, and can also be changed later in the settings.")
|
||||
|
||||
|
||||
// CreateSIPAccountPage
|
||||
property string sipAccount: qsTr("SIP account")
|
||||
property string proxy: qsTr("Proxy")
|
||||
|
@ -420,6 +426,19 @@ Item {
|
|||
property string displayName: qsTr("Display Name")
|
||||
|
||||
|
||||
// accountSettingsPages
|
||||
property string customizeAccountDescription:qsTr("Your profile is only shared with your contacts.\nYour picture and your nickname can be changed at all time in the settings of your account.")
|
||||
property string usernameAccountDescription: qsTr("Your username help you to be easily found and reach on Jami.\nIf you don’t choose one, the serial identifier (a randomly generated word of 40 characters) of your account will be your username. It’s more difficult to be found and reach with this number.")
|
||||
property string ecryptAccountDescription: qsTr("Your Jami account is registered only on this device as an archive containing the keys of your account. Access to this archive can be protected by a password.")
|
||||
property string saveAccountTitle: qsTr("Backup account")
|
||||
property string saveAccountDescription: qsTr("Your Jami account exists only on this device.\nIf you lose your device or uninstall the application, your account will be lost. We recommend to back up it.")
|
||||
property string deleteAccountTitle: qsTr("Delete your account")
|
||||
property string deleteAccountDescription: qsTr("If your account has not been backed up or added to another device, your account and registered name will be irrevocably lost.")
|
||||
property string linkedAccountList: qsTr("List of the devices that are linked to this account:")
|
||||
property string linkedThisDevice: qsTr("This device")
|
||||
property string linkedOtherDevices: qsTr("Other linked devices")
|
||||
property string linkedAccountDescription: qsTr("You can link your account to an other device to be able to use it on the other device.")
|
||||
|
||||
// CurrentAccountSettings && AdvancedSettings
|
||||
property string backupSuccessful: qsTr("Backup successful")
|
||||
property string backupFailed: qsTr("Backup failed")
|
||||
|
@ -428,18 +447,17 @@ Item {
|
|||
property string setPasswordSuccess: qsTr("Password set successfully")
|
||||
property string setPasswordFailed: qsTr("Password set failed")
|
||||
property string changePassword: qsTr("Change password")
|
||||
property string setPassword: qsTr("Set password")
|
||||
property string setPassword: qsTr("Encrypt account")
|
||||
property string setAPassword: qsTr("Set a password")
|
||||
property string changeCurrentPassword: qsTr("Change current password")
|
||||
property string tipBackupAccount: qsTr("Back up account to a .gz file")
|
||||
property string tipAdvancedSettingsDisplay: qsTr("Display advanced settings")
|
||||
property string tipAdvancedSettingsHide: qsTr("Hide advanced settings")
|
||||
property string enableAccount: qsTr("Enable account")
|
||||
property string advancedAccountSettings: qsTr("Advanced account settings")
|
||||
property string encryptAccount: qsTr("Encrypt account with password")
|
||||
property string customizeProfile: qsTr("Customize profile")
|
||||
property string customizeProfileDescription: qsTr("This profile is only shared with this account's contacts.\nThe profile can be changed at all times from the account's settings.")
|
||||
property string encryptTitle: qsTr("Encrypt your account with a password")
|
||||
property string encryptTitle: qsTr("Encrypt account with a password")
|
||||
property string encryptDescription: qsTr("A Jami account is created and stored locally only on this device, as an archive containing your account keys. Access to this archive can optionally be protected by a password.")
|
||||
property string encryptWarning: qsTr("Please note that if you lose your password, it CANNOT be recovered!")
|
||||
property string enterNickname: qsTr("Enter a nickname, surname...")
|
||||
|
@ -455,11 +473,10 @@ Item {
|
|||
|
||||
// LinkedDevices
|
||||
property string tipLinkNewDevice: qsTr("Link a new device to this account")
|
||||
property string linkAnotherDevice: qsTr("Link another device")
|
||||
property string linkAnotherDevice: qsTr("Link a new device")
|
||||
property string linkNewDevice: qsTr("Exporting account…")
|
||||
property string removeDevice: qsTr("Remove Device")
|
||||
property string sureToRemoveDevice: qsTr("Are you sure you wish to remove this device?")
|
||||
property string linkedDevices: qsTr("Linked Devices")
|
||||
property string yourPinIs: qsTr("Your PIN is:")
|
||||
property string linkDeviceNetWorkError: qsTr("Error connecting to the network.\nPlease try again later.")
|
||||
|
||||
|
@ -490,15 +507,19 @@ Item {
|
|||
property string keepMinimized: qsTr("Minimize on close")
|
||||
property string tipRunStartup: qsTr("Run at system startup")
|
||||
property string runStartup: qsTr("Launch at startup")
|
||||
property string downloadFolder: qsTr("Download directory")
|
||||
property string downloadFolder: qsTr("Choose download directory")
|
||||
property string tipChooseDownloadFolder: qsTr("Choose download directory")
|
||||
property string includeLocalVideo: qsTr("Include local video in recording")
|
||||
property string textZoom: qsTr("Text zoom")
|
||||
property string changeTextSize: qsTr("Change text size (%)")
|
||||
property string defaultSettings: qsTr("Default settings")
|
||||
|
||||
// ChatviewSettings
|
||||
property string enableTypingIndicator: qsTr("Typing indicators")
|
||||
property string displayHyperlinkPreviews: qsTr("Show link previews")
|
||||
property string enableTypingIndicator: qsTr("Enable typing indicators")
|
||||
property string enableTypingIndicatorDescription: qsTr("Send and receive typing indicators showing that a message is being typed.")
|
||||
property string displayHyperlinkPreviews: qsTr("Show link preview in conversations")
|
||||
property string displayHyperlinkPreviewsDescription: qsTr("Preview require to download content from this third-party servers.")
|
||||
|
||||
property string layout: qsTr("Layout")
|
||||
property string language: qsTr("User interface language")
|
||||
property string verticalViewOpt: qsTr("Vertical view")
|
||||
|
@ -507,7 +528,7 @@ Item {
|
|||
// File transfer settings
|
||||
property string fileTransfer: qsTr("File transfer")
|
||||
property string autoAcceptFiles: qsTr("Automatically accept incoming files")
|
||||
property string acceptTransferBelow: qsTr("Accept transfer limit")
|
||||
property string acceptTransferBelow: qsTr("Accept transfer limit (in Mb)")
|
||||
property string acceptTransferTooltip: qsTr("in MB, 0 = unlimited")
|
||||
|
||||
// JamiUserIdentity settings
|
||||
|
@ -544,7 +565,7 @@ Item {
|
|||
property string troubleshootButton: qsTr("Open logs")
|
||||
property string troubleshootText: qsTr("Get logs")
|
||||
|
||||
property string experimentalCallSwarm: qsTr("(Experimental) Enable call support for swarm")
|
||||
property string experimentalCallSwarm: qsTr("Enable small swarm groups support for Swarm")
|
||||
property string experimentalCallSwarmTooltip: qsTr("This feature will enable call buttons in swarms with multiple participants.")
|
||||
|
||||
// Recording Settings
|
||||
|
@ -558,7 +579,6 @@ Item {
|
|||
// KeyboardShortCutTable
|
||||
property string keyboardShortcutTableWindowTitle: qsTr("Keyboard Shortcut Table")
|
||||
property string keyboardShortcuts: qsTr("Keyboard Shortcuts")
|
||||
property string generalKeyboardShortcuts: qsTr("General")
|
||||
property string conversationKeyboardShortcuts: qsTr("Conversation")
|
||||
property string callKeyboardShortcuts: qsTr("Call")
|
||||
property string settings: qsTr("Settings")
|
||||
|
@ -572,7 +592,6 @@ Item {
|
|||
property string clearHistory: qsTr("Clear history")
|
||||
property string mediaSettings: qsTr("Media settings")
|
||||
property string generalSettings: qsTr("General settings")
|
||||
property string accountSettings: qsTr("Account settings")
|
||||
property string pluginSettings: qsTr("Plugin settings")
|
||||
property string answerIncoming: qsTr("Answer an incoming call")
|
||||
property string declineCallRequest: qsTr("Decline the call request")
|
||||
|
@ -727,8 +746,9 @@ Item {
|
|||
property string alreadyHaveAccount: qsTr("I already have an account")
|
||||
property string useExistingAccount: qsTr("Use existing Jami account")
|
||||
property string welcomeToJami: qsTr("Welcome to Jami")
|
||||
property string identifierDescription: qsTr("Share this Jami identifier to be contacted on this account!")
|
||||
property string hereIsIdentifier: qsTr("Here is your Jami identifier, don't hesitate to share it in order to be contacted more easily!")
|
||||
|
||||
|
||||
|
||||
|
||||
// SmartList
|
||||
property string clearText: qsTr("Clear Text")
|
||||
|
@ -752,6 +772,7 @@ Item {
|
|||
property string optionDelete: qsTr("Delete")
|
||||
property string optionRemove: qsTr("Remove")
|
||||
property string optionBlock: qsTr("Block")
|
||||
property string optionUnban: qsTr("Unban")
|
||||
|
||||
// Conference moderation
|
||||
property string setModerator: qsTr("Set moderator")
|
||||
|
@ -769,6 +790,7 @@ Item {
|
|||
property string enableLocalModerators: qsTr("Enable local moderators")
|
||||
property string enableAllModerators: qsTr("Make all participants moderators")
|
||||
property string addDefaultModerator: qsTr("Add default moderator")
|
||||
property string addModerator: qsTr("Add")
|
||||
property string removeDefaultModerator: qsTr("Remove default moderator")
|
||||
|
||||
// Daemon reconnection
|
||||
|
@ -856,4 +878,34 @@ Item {
|
|||
property string deleteReplyMessage: qsTr("*(Deleted Message)*")
|
||||
property string editMessage: qsTr("Edit message")
|
||||
|
||||
//Jami identifier
|
||||
property string identifierDescription: qsTr("Share this Jami identifier to be contacted on this account!")
|
||||
property string hereIsIdentifier: qsTr("Here is your Jami identifier, don't hesitate to share it in order to be contacted more easily!")
|
||||
property string jamiIdentity: qsTr("Jami identity")
|
||||
|
||||
//New settings
|
||||
//ManageAccount
|
||||
property string enableAccountDescription: qsTr("Enabling your account allows you to be contacted on Jami")
|
||||
|
||||
//General
|
||||
property string appearence: qsTr("Appearence")
|
||||
|
||||
//system
|
||||
property string experimental: qsTr("Experimental")
|
||||
|
||||
//ringtone
|
||||
property string ringtone: qsTr("Ringtone")
|
||||
|
||||
//rdv
|
||||
property string rendezVousPoint: qsTr("Rendezvous point")
|
||||
|
||||
//moderation
|
||||
property string moderation: qsTr("Moderation")
|
||||
|
||||
//Appearence
|
||||
property string theme: qsTr("Theme")
|
||||
property string zoomLevel: qsTr("Text zoom level")
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ Item {
|
|||
property color darkGreyColor: "#272727"
|
||||
property color darkGreyColorOpacity: "#be272727" // 77%
|
||||
property color tintedBlue: darkTheme ? "#03B9E9" : "#005699"
|
||||
property color sysColor: "#F0EFEF"
|
||||
|
||||
property color transparentColor: "transparent"
|
||||
property color primaryForegroundColor: darkTheme ? whiteColor : blackColor
|
||||
|
@ -131,7 +132,7 @@ Item {
|
|||
|
||||
property color primaryTextColor: darkTheme ? "black" : "white"
|
||||
property color secAndTertiTextColor: buttonTintedBlue
|
||||
property color secondaryButtonBorderColor: darkTheme ? "#03B9E9" : "#E5EEF5"
|
||||
property color secondaryButtonBorderColor: darkTheme ? "#1D5F70" : "#A3C2DA"
|
||||
property color secondaryButtonHoveredBorderColor: tintedBlue
|
||||
property color secAndTertiHoveredBackgroundColor: darkTheme ? "#123F4A" : "#E5EEF5"
|
||||
property color closeButtonLighterBlack: "#4c4c4c"
|
||||
|
@ -146,11 +147,12 @@ Item {
|
|||
|
||||
//Combobox
|
||||
property color comboBoxBackgroundColor: darkTheme ? editBackgroundColor : selectedColor
|
||||
property color comboboxBorderColorActive: tintedBlue
|
||||
property color comboboxBorderColorActive: darkTheme ? "#03B9E9" : "#005699"
|
||||
property color comboboxBorderColor: darkTheme ? "#1D5F70" : "#A3C2DA"
|
||||
property color comboboxTextColorHovered: tintedBlue
|
||||
property color comboboxIconColor: darkTheme ? "#03B9E9" : "#005699"
|
||||
property color comboboxBackgroundColorHovered: darkTheme ? "#123F4A" : "#E5EEF5"
|
||||
|
||||
property color comboboxTextColor: darkTheme ? "#03B9E9" : "#005699"
|
||||
property color comboboxTextColorHovered: tintedBlue
|
||||
|
||||
//Spinbox
|
||||
property color spinboxBackgroundColor: darkTheme ? editBackgroundColor : selectedColor
|
||||
|
@ -352,11 +354,15 @@ Item {
|
|||
property int menuItemsCommonBorderWidth: 1
|
||||
property int menuBorderPreferredHeight: 8
|
||||
|
||||
property real maximumWidthSettingsView: 600
|
||||
property real maximumWidthSettingsView: 516
|
||||
property real settingsHeaderpreferredHeight: 64
|
||||
property real preferredFieldWidth: 256
|
||||
property real preferredFieldHeight: 32
|
||||
property real preferredFieldHeight: 36
|
||||
property real preferredButtonSettingsHeight: 46
|
||||
property real preferredMarginSize: 16
|
||||
property real preferredSettingsMarginSize: 40
|
||||
property real preferredSettingsContentMarginSize: 30
|
||||
property real preferredSettingsBottomMarginSize: 30
|
||||
property real settingsMarginSize: 8
|
||||
property real preferredDialogWidth: 400
|
||||
property real preferredDialogHeight: 300
|
||||
|
@ -479,6 +485,7 @@ Item {
|
|||
property real jamiIdLogoWidth: 70
|
||||
property real jamiIdLogoHeight: 24
|
||||
property real jamiIdFontSize: calcSize(13)
|
||||
property color jamiIdColor: darkTheme ? blackColor : sysColor
|
||||
|
||||
// MainView
|
||||
property color welcomeViewBackgroundColor: darkTheme ? lightGrey_ : secondaryBackgroundColor
|
||||
|
@ -510,7 +517,7 @@ Item {
|
|||
property real welcomeLogoWidth: 100
|
||||
property real welcomeLogoHeight: 100
|
||||
property real wizardButtonWidth: 400
|
||||
property real wizardButtonHeightMargin: 13
|
||||
property real wizardButtonHeightMargin: 31
|
||||
|
||||
// WizardView Advanced Account Settings
|
||||
property color lightBlue_: darkTheme ? "#03B9E9" : "#e5eef5"
|
||||
|
@ -557,6 +564,8 @@ Item {
|
|||
//MaterialButton
|
||||
property real buttontextPadding: 10
|
||||
property real buttontextWizzardPadding: 30
|
||||
property real buttontextHeightMargin: 21
|
||||
property real buttontextFontPixelSize: calcSize(15)
|
||||
|
||||
// UsernameTextEdit
|
||||
property real usernameTextEditPointSize:calcSize(9 + fontSizeOffset)
|
||||
|
@ -590,6 +599,21 @@ Item {
|
|||
property real contactEventPointSize: calcSize(10 + fontSizeOffset)
|
||||
property int contactMessageAvatarSize: 24
|
||||
|
||||
// Settings
|
||||
property int settingMenuPixelSize: calcSize(13)
|
||||
property int settingToggleDescrpitonPixelSize: calcSize(13)
|
||||
property int settingsTitlePixelSize: calcSize(22)
|
||||
property int settingsHeaderPixelSize: calcSize(26)
|
||||
property int settingsDescriptionPixelSize: calcSize(15)
|
||||
property int settingsCategorySpacing: 15
|
||||
property int settingsCategoryAudioVideoSpacing: 6
|
||||
property int settingsBoxRadius: 10
|
||||
property int settingsBlockSpacing: 40
|
||||
property int settingsMenuChildrenButtonHeight: 30
|
||||
property int settingsMenuHeaderButtonHeight: 50
|
||||
property int settingsListViewsSpacing: 10
|
||||
|
||||
|
||||
|
||||
function setTheme(dark) {
|
||||
darkTheme = dark
|
||||
|
|
|
@ -35,6 +35,16 @@ CurrentAccount::CurrentAccount(LRCInstance* lrcInstance,
|
|||
this,
|
||||
&CurrentAccount::onAccountUpdated);
|
||||
|
||||
|
||||
connect(lrcInstance_->getCurrentContactModel(),
|
||||
&ContactModel::bannedStatusChanged,
|
||||
this,
|
||||
[&](const auto&, auto) {
|
||||
set_hasBannedContacts(
|
||||
lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts().size());
|
||||
},
|
||||
Qt::UniqueConnection);
|
||||
|
||||
connect(lrcInstance_, &LRCInstance::currentAccountIdChanged, [this] { updateData(); });
|
||||
|
||||
updateData();
|
||||
|
@ -105,6 +115,8 @@ CurrentAccount::updateData()
|
|||
set_bestId(lrcInstance_->accountModel().bestIdForAccount(id_));
|
||||
set_bestName(lrcInstance_->accountModel().bestNameForAccount(id_));
|
||||
set_hasAvatarSet(!accInfo.profileInfo.avatar.isEmpty());
|
||||
set_hasBannedContacts(
|
||||
lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts().size());
|
||||
set_status(accInfo.status);
|
||||
set_type(accInfo.profileInfo.type);
|
||||
|
||||
|
|
|
@ -108,6 +108,7 @@ class CurrentAccount final : public QObject
|
|||
QML_RO_PROPERTY(QString, bestName)
|
||||
QML_RO_PROPERTY(QString, managerUri)
|
||||
QML_RO_PROPERTY(bool, hasAvatarSet)
|
||||
QML_RO_PROPERTY(bool, hasBannedContacts)
|
||||
QML_PROPERTY(bool, enabled)
|
||||
QML_RO_PROPERTY(lrc::api::account::Status, status)
|
||||
QML_RO_PROPERTY(lrc::api::profile::Type, type)
|
||||
|
|
|
@ -239,7 +239,7 @@ Window {
|
|||
text: {
|
||||
switch (selectionBar.currentIndex) {
|
||||
case 0:
|
||||
return JamiStrings.generalKeyboardShortcuts
|
||||
return JamiStrings.generalSettingsTitle
|
||||
case 1:
|
||||
return JamiStrings.conversationKeyboardShortcuts
|
||||
case 2:
|
||||
|
|
|
@ -64,7 +64,8 @@ Popup {
|
|||
Layout.preferredWidth: 30
|
||||
Layout.preferredHeight: 30
|
||||
|
||||
preferredMargin: 8
|
||||
preferredLeftMargin: 8
|
||||
preferredRightMargin: 8
|
||||
buttonText: modelData
|
||||
buttonTextColor: "white"
|
||||
checkable: false
|
||||
|
|
|
@ -265,7 +265,6 @@ Rectangle {
|
|||
checked: CurrentConversation.ignoreNotifications
|
||||
|
||||
labelText: JamiStrings.muteConversation
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.ignoreNotificationsTooltip
|
||||
|
||||
|
|
|
@ -203,7 +203,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -185,7 +185,7 @@ void
|
|||
PositionManager::sharePosition(int maximumTime, QString accountId, QString convId)
|
||||
{
|
||||
try {
|
||||
if (settingsManager_->getValue(Settings::Key::PositionShareLimit) == true)
|
||||
if (settingsManager_->getValue(Settings::Key::PositionShareDuration) != 0)
|
||||
startPositionTimers(maximumTime);
|
||||
positionShareConvIds_.append(PositionKey {accountId, convId});
|
||||
set_positionShareConvIdsCount(positionShareConvIds_.size());
|
||||
|
|
|
@ -32,21 +32,23 @@ SidePanelBase {
|
|||
id: root
|
||||
objectName: "SettingsSidePanel"
|
||||
|
||||
property var select: function(index) {
|
||||
buttonGroup.checkedButton = buttonGroup.buttons[index]
|
||||
}
|
||||
property var deselect: function() { buttonGroup.checkedButton = null }
|
||||
|
||||
color: JamiTheme.backgroundColor
|
||||
property int currentIndex
|
||||
|
||||
|
||||
function createChild() {
|
||||
if (page.menu === undefined) {
|
||||
return
|
||||
}
|
||||
page.menu.createChild()
|
||||
}
|
||||
|
||||
Page {
|
||||
id: page
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
background: Rectangle {
|
||||
color: JamiTheme.backgroundColor
|
||||
}
|
||||
background: null
|
||||
|
||||
header: AccountComboBox {}
|
||||
|
||||
|
@ -55,76 +57,245 @@ SidePanelBase {
|
|||
target: JamiQmlUtils
|
||||
function onSettingsPageRequested(index) {
|
||||
viewCoordinator.present("SettingsView")
|
||||
|
||||
buttonGroup.checkedButton = buttonGroup.buttons[index]
|
||||
}
|
||||
}
|
||||
|
||||
ButtonGroup {
|
||||
id: buttonGroup
|
||||
buttons: settingsButtons.children
|
||||
property var menu: undefined
|
||||
|
||||
onCheckedButtonChanged: {
|
||||
for (var i = 0; i < buttons.length; i++)
|
||||
if (buttons[i] === checkedButton) {
|
||||
indexSelected(i)
|
||||
return
|
||||
}
|
||||
indexSelected(-1)
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: settingsButtons
|
||||
|
||||
spacing: 0
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
Flickable {
|
||||
id: flick
|
||||
width: root.width
|
||||
height: childrenRect.height
|
||||
clip: true
|
||||
contentHeight: col.implicitHeight
|
||||
|
||||
component SMB: PushButton {
|
||||
normalColor: root.color
|
||||
|
||||
preferredHeight: 64
|
||||
preferredMargin: 24
|
||||
function getHeaders() {
|
||||
return [
|
||||
{
|
||||
"title": JamiStrings.accountSettingsMenuTitle,
|
||||
"icon": JamiResources.account_24dp_svg,
|
||||
"children": [
|
||||
{
|
||||
"id": 0,
|
||||
"title": JamiStrings.manageAccountSettingsTitle
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"title": JamiStrings.customizeProfile
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": JamiStrings.linkedDevicesSettingsTitle,
|
||||
"visible": "isJamiAccount"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": JamiStrings.callSettingsTitle
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": JamiStrings.advancedSettingsTitle
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": JamiStrings.generalSettingsTitle,
|
||||
"icon": JamiResources.gear_black_24dp_svg,
|
||||
"children": [
|
||||
{
|
||||
"id": 5,
|
||||
"title": JamiStrings.system
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": JamiStrings.appearence
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"title": JamiStrings.locationSharingLabel
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": JamiStrings.fileTransfer
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": JamiStrings.callRecording
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"title": JamiStrings.troubleshootTitle
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": JamiStrings.updatesTitle,
|
||||
"visible": "isWindows"
|
||||
}
|
||||
]
|
||||
},{
|
||||
"title": JamiStrings.audioVideoSettingsTitle,
|
||||
"icon": JamiResources.media_black_24dp_svg,
|
||||
"children": [
|
||||
{
|
||||
"id": 12,
|
||||
"title": JamiStrings.audio
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"title": JamiStrings.video
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"title": JamiStrings.screenSharing
|
||||
}
|
||||
]
|
||||
},{
|
||||
"title": JamiStrings.pluginSettingsTitle,
|
||||
"icon": JamiResources.plugins_24dp_svg,
|
||||
"children": [
|
||||
{
|
||||
"id": 15,
|
||||
"title": JamiStrings.pluginSettingsTitle
|
||||
}
|
||||
]
|
||||
}
|
||||
]}
|
||||
|
||||
Column {
|
||||
id: col
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
Component.onCompleted: {
|
||||
page.menu = clv.createObject(this, {"base":flick.getHeaders()});
|
||||
}
|
||||
|
||||
buttonTextFont.pointSize: JamiTheme.textFontSize + 2
|
||||
textHAlign: Text.AlignLeft
|
||||
|
||||
imageColor: JamiTheme.textColor
|
||||
imageContainerHeight: 40
|
||||
imageContainerWidth: 40
|
||||
|
||||
pressedColor: Qt.lighter(JamiTheme.pressedButtonColor, 1.25)
|
||||
checkedColor: JamiTheme.smartListSelectedColor
|
||||
hoveredColor: JamiTheme.smartListHoveredColor
|
||||
|
||||
duration: 0
|
||||
checkable: true
|
||||
radius: 0
|
||||
}
|
||||
Component {
|
||||
id: clv
|
||||
|
||||
SMB {
|
||||
buttonText: JamiStrings.accountSettingsMenuTitle
|
||||
source: JamiResources.account_24dp_svg
|
||||
}
|
||||
Repeater {
|
||||
id: repeater
|
||||
|
||||
SMB {
|
||||
buttonText: JamiStrings.generalSettingsTitle
|
||||
source: JamiResources.gear_black_24dp_svg
|
||||
}
|
||||
property var base: ({})
|
||||
property var selected: null
|
||||
model: Object.keys(base)
|
||||
Layout.fillWidth: true
|
||||
|
||||
SMB {
|
||||
buttonText: JamiStrings.avSettingsMenuTitle
|
||||
source: JamiResources.media_black_24dp_svg
|
||||
}
|
||||
function createChild() {
|
||||
itemAt(0).children[0].createChild()
|
||||
root.currentIndex = 0
|
||||
}
|
||||
|
||||
SMB {
|
||||
buttonText: JamiStrings.pluginSettingsTitle
|
||||
source: JamiResources.plugin_settings_black_24dp_svg
|
||||
ColumnLayout {
|
||||
id: clvButtons
|
||||
spacing: 0
|
||||
Layout.fillWidth: true
|
||||
|
||||
PushButton {
|
||||
id: btn
|
||||
property var sprite: null
|
||||
|
||||
property var isChildren: {
|
||||
var ob = base[modelData]
|
||||
var c = ob["children"]
|
||||
return c === undefined
|
||||
}
|
||||
|
||||
function updateVisibility() {
|
||||
var currentVisibility = visible
|
||||
var ob = base[modelData]
|
||||
var c = ob["visible"]
|
||||
if (c === undefined)
|
||||
return true
|
||||
var res = false
|
||||
if (c === "isWindows") {
|
||||
res = Qt.platform.os.toString() === "windows"
|
||||
} else if (c === "isJamiAccount") {
|
||||
res = CurrentAccount.type !== Profile.Type.SIP
|
||||
} else {
|
||||
console.warn("Visibility condition not managed")
|
||||
}
|
||||
if (currentVisibility !== res && root.currentIndex === ob["id"]) {
|
||||
// If a menu disappears, go to the first index
|
||||
root.currentIndex = 0
|
||||
root.indexSelected(0)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
function createChild() {
|
||||
var ob = base[modelData]
|
||||
if(sprite === null) {
|
||||
//deselect the current selection and collapse menu
|
||||
if (repeater.selected)
|
||||
repeater.selected.destroy()
|
||||
|
||||
var c = ob["children"]
|
||||
if (c !== undefined) {
|
||||
sprite = clv.createObject(parent, {"base" : c});
|
||||
repeater.selected = sprite
|
||||
indexSelected(c[0]["id"])
|
||||
root.currentIndex = c[0]["id"]
|
||||
} else {
|
||||
indexSelected(ob["id"])
|
||||
root.currentIndex = ob["id"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
visible: updateVisibility()
|
||||
|
||||
property bool isOpen: !isChildren && sprite != null
|
||||
property bool isChildOpen: isChildren && (base[modelData]["id"] === root.currentIndex)
|
||||
|
||||
alignement: Text.AlignLeft
|
||||
Layout.preferredWidth: root.width - (isChildren ? 28 : 0)
|
||||
Layout.leftMargin: isChildren ? 28 : 0
|
||||
preferredLeftMargin: isChildren ? 47 : 25
|
||||
|
||||
imageContainerWidth: !isChildren ? 30 : 0
|
||||
height: isChildren ? JamiTheme.settingsMenuChildrenButtonHeight : JamiTheme.settingsMenuHeaderButtonHeight
|
||||
|
||||
circled: false
|
||||
radius: 0
|
||||
|
||||
buttonText: {
|
||||
return base[modelData]["title"]
|
||||
}
|
||||
|
||||
buttonTextFont.pixelSize: !isChildren ? JamiTheme.settingsDescriptionPixelSize : JamiTheme.settingMenuPixelSize
|
||||
buttonTextColor: isOpen || isChildOpen ? JamiTheme.tintedBlue : JamiTheme.primaryForegroundColor
|
||||
buttonTextFont.weight: isOpen || isChildOpen ? Font.Medium : Font.Normal
|
||||
buttonTextEnableElide: true
|
||||
|
||||
normalColor: isOpen ? JamiTheme.smartListSelectedColor : "transparent"
|
||||
hoveredColor: JamiTheme.smartListHoveredColor
|
||||
imageColor: !isChildren ? JamiTheme.tintedBlue : null
|
||||
|
||||
source: {
|
||||
|
||||
if (!isChildren)
|
||||
return base[modelData]["icon"]
|
||||
else return ""
|
||||
}
|
||||
|
||||
onClicked: createChild()
|
||||
|
||||
Keys.onPressed: function (keyEvent) {
|
||||
if (keyEvent.key === Qt.Key_Enter ||
|
||||
keyEvent.key === Qt.Key_Return) {
|
||||
clicked()
|
||||
keyEvent.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,10 +23,13 @@ import QtQuick.Layouts
|
|||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "components"
|
||||
import "../commoncomponents"
|
||||
|
||||
import "../mainview/js/contactpickercreation.js" as ContactPickerCreation
|
||||
|
||||
ListSelectionView {
|
||||
|
@ -34,9 +37,21 @@ ListSelectionView {
|
|||
objectName: "SettingsView"
|
||||
|
||||
enum SettingsMenu {
|
||||
Account,
|
||||
General,
|
||||
Media,
|
||||
ManageAccount,
|
||||
CustomizeProfile,
|
||||
LinkedDevices,
|
||||
AdvancedSettings,
|
||||
System,
|
||||
CallSettings,
|
||||
Appearence,
|
||||
LocationSharing,
|
||||
FileTransfer,
|
||||
CallRecording,
|
||||
Troubleshoot,
|
||||
Update,
|
||||
Audio,
|
||||
Video,
|
||||
Screensharing,
|
||||
Plugin
|
||||
}
|
||||
|
||||
|
@ -56,157 +71,62 @@ ListSelectionView {
|
|||
}
|
||||
}
|
||||
|
||||
selectionFallback: true
|
||||
Component.onCompleted: {
|
||||
leftPaneItem.createChild()
|
||||
}
|
||||
|
||||
property int selectedMenu: index
|
||||
|
||||
onSelectedMenuChanged: {
|
||||
if (selectedMenu === SettingsView.Account) {
|
||||
pageIdCurrentAccountSettings.updateAccountInfoDisplayed()
|
||||
} else if (selectedMenu === SettingsView.Media) {
|
||||
if (selectedMenu === SettingsView.Media) {
|
||||
avSettings.populateAVSettings()
|
||||
}
|
||||
}
|
||||
|
||||
rightPaneItem: Rectangle {
|
||||
rightPaneItem: StackLayout {
|
||||
id: settingsViewRect
|
||||
|
||||
currentIndex: selectedMenu !== -1 ? selectedMenu : 0
|
||||
anchors.fill: parent
|
||||
color: JamiTheme.secondaryBackgroundColor
|
||||
|
||||
signal stopBooth
|
||||
|
||||
property bool isSIP: {
|
||||
switch (CurrentAccount.type) {
|
||||
case Profile.Type.SIP:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
property bool isSIP: CurrentAccount.type === Profile.Type.SIP
|
||||
|
||||
ManageAccountPage {
|
||||
isSIP: settingsViewRect.isSIP
|
||||
onNavigateToMainView: dismiss()
|
||||
onNavigateToNewWizardView: dismiss()
|
||||
}
|
||||
|
||||
SettingsHeader {
|
||||
id: settingsHeader
|
||||
CustomizeProfilePage {}
|
||||
|
||||
anchors.top: settingsViewRect.top
|
||||
anchors.left: settingsViewRect.left
|
||||
anchors.leftMargin: {
|
||||
var pageWidth = rightSettingsStackLayout.itemAt(
|
||||
rightSettingsStackLayout.currentIndex).contentWidth
|
||||
return (settingsViewRect.width - pageWidth) / 2 + JamiTheme.preferredMarginSize
|
||||
}
|
||||
LinkedDevicesPage {}
|
||||
|
||||
height: JamiTheme.settingsHeaderpreferredHeight
|
||||
CallSettingsPage {}
|
||||
|
||||
title: {
|
||||
switch(selectedMenu){
|
||||
default:
|
||||
case SettingsView.Account:
|
||||
return JamiStrings.accountSettingsTitle
|
||||
case SettingsView.General:
|
||||
return JamiStrings.generalSettingsTitle
|
||||
case SettingsView.Media:
|
||||
return JamiStrings.avSettingsTitle
|
||||
case SettingsView.Plugin:
|
||||
return JamiStrings.pluginSettingsTitle
|
||||
}
|
||||
}
|
||||
AdvancedSettingsPage {}
|
||||
|
||||
onBackArrowClicked: viewNode.dismiss()
|
||||
}
|
||||
SystemSettingsPage {}
|
||||
|
||||
JamiFlickable {
|
||||
id: settingsViewScrollView
|
||||
AppearenceSettingsPage {}
|
||||
|
||||
anchors.top: settingsHeader.bottom
|
||||
anchors.horizontalCenter: settingsViewRect.horizontalCenter
|
||||
LocationSharingSettingsPage {}
|
||||
|
||||
height: settingsViewRect.height - settingsHeader.height
|
||||
width: settingsViewRect.width
|
||||
FileTransferSettingsPage{}
|
||||
|
||||
contentHeight: rightSettingsStackLayout.height
|
||||
CallRecordingSettingsPage {}
|
||||
|
||||
StackLayout {
|
||||
id: rightSettingsStackLayout
|
||||
TroubleshootSettingsPage {}
|
||||
|
||||
anchors.centerIn: parent
|
||||
UpdatesSettingsPage {}
|
||||
|
||||
width: settingsViewScrollView.width
|
||||
AudioSettingsPage {}
|
||||
|
||||
property int pageIdCurrentAccountSettingsPage: 0
|
||||
property int pageIdGeneralSettingsPage: 1
|
||||
property int pageIdAvSettingPage: 2
|
||||
property int pageIdPluginSettingsPage: 3
|
||||
VideoSettingsPage {}
|
||||
|
||||
currentIndex: {
|
||||
switch(selectedMenu){
|
||||
default:
|
||||
case SettingsView.Account:
|
||||
return pageIdCurrentAccountSettingsPage
|
||||
case SettingsView.General:
|
||||
return pageIdGeneralSettingsPage
|
||||
case SettingsView.Media:
|
||||
return pageIdAvSettingPage
|
||||
case SettingsView.Plugin:
|
||||
return pageIdPluginSettingsPage
|
||||
}
|
||||
}
|
||||
ScreenSharingSettingsPage {}
|
||||
|
||||
Component.onCompleted: {
|
||||
// avoid binding loop
|
||||
height = Qt.binding(function (){
|
||||
return Math.max(
|
||||
rightSettingsStackLayout.itemAt(currentIndex).preferredHeight,
|
||||
settingsViewScrollView.height)
|
||||
})
|
||||
}
|
||||
|
||||
// current account setting scroll page, index 0
|
||||
CurrentAccountSettings {
|
||||
id: pageIdCurrentAccountSettings
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
isSIP: settingsViewRect.isSIP
|
||||
|
||||
onNavigateToMainView: dismiss()
|
||||
Connections {
|
||||
target: LRCInstance
|
||||
|
||||
function onAccountListChanged() {
|
||||
if (!UtilsAdapter.getAccountListSize()) {
|
||||
viewCoordinator.requestAppWindowWizardView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onAdvancedSettingsToggled: function (settingsVisible) {
|
||||
if (settingsVisible)
|
||||
settingsViewScrollView.contentY = getAdvancedSettingsScrollPosition()
|
||||
else
|
||||
settingsViewScrollView.contentY = 0
|
||||
}
|
||||
}
|
||||
|
||||
// general setting page, index 1
|
||||
GeneralSettingsPage {
|
||||
id: generalSettings
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
|
||||
// av setting page, index 2
|
||||
AvSettingPage {
|
||||
id: avSettings
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
|
||||
// plugin setting page, index 3
|
||||
PluginSettingsPage {
|
||||
id: pluginSettings
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
PluginSettingsPage {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,233 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 Savoir-faire Linux Inc.
|
||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||
* Author: Albert Babí Oller <albert.babi@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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../../mainview/components"
|
||||
import "../../mainview/js/contactpickercreation.js" as ContactPickerCreation
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
property bool isSIP
|
||||
property int itemWidth
|
||||
|
||||
function updateAndShowModeratorsSlot() {
|
||||
moderatorListWidget.model.reset()
|
||||
moderatorListWidget.visible = moderatorListWidget.model.rowCount() > 0
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: ContactAdapter
|
||||
|
||||
function onDefaultModeratorsUpdated() {
|
||||
updateAndShowModeratorsSlot()
|
||||
}
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
|
||||
eText: JamiStrings.callSettings
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxUntrusted
|
||||
visible: !root.isSIP
|
||||
|
||||
labelText: JamiStrings.allowCallsUnknownContacs
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.PublicInCalls_DHT
|
||||
|
||||
onSwitchToggled: CurrentAccount.PublicInCalls_DHT = checked
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxAutoAnswer
|
||||
|
||||
labelText: JamiStrings.autoAnswerCalls
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.autoAnswer
|
||||
|
||||
onSwitchToggled: CurrentAccount.autoAnswer = checked
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxCustomRingtone
|
||||
|
||||
labelText: JamiStrings.enableCustomRingtone
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.ringtoneEnabled_Ringtone
|
||||
|
||||
onSwitchToggled: CurrentAccount.ringtoneEnabled_Ringtone = checked
|
||||
}
|
||||
|
||||
SettingMaterialButton {
|
||||
id: btnRingtone
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: checkBoxCustomRingtone.checked
|
||||
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.ringtonePath_Ringtone)
|
||||
|
||||
titleField: JamiStrings.selectCustomRingtone
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: {
|
||||
var dlg = viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/JamiFileDialog.qml",
|
||||
{
|
||||
title: JamiStrings.selectNewRingtone,
|
||||
fileMode: JamiFileDialog.OpenFile,
|
||||
folder: JamiQmlUtils.qmlFilePrefix +
|
||||
UtilsAdapter.toFileAbsolutepath(
|
||||
CurrentAccount.ringtonePath_Ringtone),
|
||||
nameFilters: [JamiStrings.audioFile, JamiStrings.allFiles]
|
||||
})
|
||||
dlg.fileAccepted.connect(function (file) {
|
||||
var url = UtilsAdapter.getAbsPath(file.toString())
|
||||
if(url.length !== 0) {
|
||||
CurrentAccount.ringtonePath_Ringtone = url
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxRdv
|
||||
|
||||
visible: !isSIP
|
||||
|
||||
labelText: JamiStrings.rendezVous
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.isRendezVous
|
||||
|
||||
onSwitchToggled: CurrentAccount.isRendezVous = checked
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: toggleLocalModerators
|
||||
|
||||
labelText: JamiStrings.enableLocalModerators
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.isLocalModeratorsEnabled
|
||||
|
||||
onSwitchToggled: CurrentAccount.isLocalModeratorsEnabled = checked
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
|
||||
eText: JamiStrings.defaultModerators
|
||||
fontSize: JamiTheme.settingsFontSize
|
||||
maxWidth: root.width - JamiTheme.preferredFieldHeight
|
||||
- JamiTheme.preferredMarginSize * 4
|
||||
}
|
||||
|
||||
JamiListView {
|
||||
id: moderatorListWidget
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 160
|
||||
|
||||
visible: model.rowCount() > 0
|
||||
|
||||
model: ModeratorListModel {
|
||||
lrcInstance: LRCInstance
|
||||
}
|
||||
|
||||
delegate: ContactItemDelegate {
|
||||
id: moderatorListDelegate
|
||||
|
||||
width: moderatorListWidget.width
|
||||
height: 74
|
||||
|
||||
contactName: ContactName
|
||||
contactID: ContactID
|
||||
|
||||
btnImgSource: JamiResources.round_remove_circle_24dp_svg
|
||||
btnToolTip: JamiStrings.removeDefaultModerator
|
||||
|
||||
onClicked: moderatorListWidget.currentIndex = index
|
||||
onBtnContactClicked: {
|
||||
AccountAdapter.setDefaultModerator(
|
||||
LRCInstance.currentAccountId, contactID, false)
|
||||
updateAndShowModeratorsSlot()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: addDefaultModeratorPushButton
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
pressedColor: JamiTheme.buttonTintedBlackPressed
|
||||
secondary: true
|
||||
toolTipText: JamiStrings.addDefaultModerator
|
||||
|
||||
iconSource: JamiResources.round_add_24dp_svg
|
||||
|
||||
text: JamiStrings.addDefaultModerator
|
||||
|
||||
onClicked: {
|
||||
ContactPickerCreation.presentContactPickerPopup(
|
||||
ContactList.CONVERSATION,
|
||||
appWindow)
|
||||
}
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkboxAllModerators
|
||||
|
||||
labelText: JamiStrings.enableAllModerators
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.isAllModeratorsEnabled
|
||||
|
||||
onSwitchToggled: CurrentAccount.isAllModeratorsEnabled = checked
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 2021-2023 Savoir-faire Linux Inc.
|
||||
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2023 Savoir-faire Linux Inc.
|
||||
* Author: Franck Laurent <franck.laurent@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
|
||||
|
@ -19,6 +19,7 @@
|
|||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
|
@ -28,29 +29,32 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property int itemWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
Text {
|
||||
|
||||
eText: JamiStrings.chatSettings
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
text: JamiStrings.chatSettingsTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
ToggleSwitch {
|
||||
id: checkBoxSendDisplayed
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxSendDisplayed
|
||||
tooltipText: JamiStrings.enableReadReceiptsTooltip
|
||||
labelText: JamiStrings.enableReadReceipts
|
||||
descText: JamiStrings.enableReadReceiptsTooltip
|
||||
|
||||
tooltipText: JamiStrings.enableReadReceiptsTooltip
|
||||
labelText: JamiStrings.enableReadReceipts
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
checked: CurrentAccount.sendReadReceipt
|
||||
|
||||
checked: CurrentAccount.sendReadReceipt
|
||||
|
||||
onSwitchToggled: CurrentAccount.sendReadReceipt = checked
|
||||
}
|
||||
onSwitchToggled: CurrentAccount.sendReadReceipt = checked
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,19 +30,25 @@ ColumnLayout {
|
|||
|
||||
property int itemWidth
|
||||
property bool isSIP
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Text {
|
||||
id: enableAccountTitle
|
||||
|
||||
eText: JamiStrings.connectivity
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
|
||||
text: JamiStrings.connectivity
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: autoRegistrationAfterExpired
|
||||
|
@ -51,10 +57,7 @@ ColumnLayout {
|
|||
|
||||
visible: isSIP
|
||||
labelText: JamiStrings.autoRegistration
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.keepAliveEnabled
|
||||
|
||||
onSwitchToggled: CurrentAccount.keepAliveEnabled = checked
|
||||
}
|
||||
|
||||
|
@ -69,7 +72,6 @@ ColumnLayout {
|
|||
topValue: 7*24*3600
|
||||
|
||||
valueField: CurrentAccount.registrationExpire
|
||||
|
||||
onNewValue: CurrentAccount.registrationExpire = valueField
|
||||
}
|
||||
|
||||
|
@ -84,7 +86,6 @@ ColumnLayout {
|
|||
topValue: 65535
|
||||
|
||||
valueField: CurrentAccount.localPort
|
||||
|
||||
onNewValue: CurrentAccount.localPort = valueField
|
||||
}
|
||||
|
||||
|
@ -94,10 +95,7 @@ ColumnLayout {
|
|||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.useUPnP
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.upnpEnabled
|
||||
|
||||
onSwitchToggled: CurrentAccount.upnpEnabled = checked
|
||||
}
|
||||
|
||||
|
@ -107,10 +105,7 @@ ColumnLayout {
|
|||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.useTURN
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.enable_TURN
|
||||
|
||||
onSwitchToggled: CurrentAccount.enable_TURN = checked
|
||||
}
|
||||
|
||||
|
@ -118,12 +113,9 @@ ColumnLayout {
|
|||
id: lineEditTurnAddress
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: checkBoxTurnEnable.checked
|
||||
|
||||
staticText: CurrentAccount.server_TURN
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
titleField: JamiStrings.turnAdress
|
||||
|
||||
|
@ -134,12 +126,9 @@ ColumnLayout {
|
|||
id: lineEditTurnUsername
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: checkBoxTurnEnable.checked
|
||||
|
||||
staticText: CurrentAccount.username_TURN
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
titleField: JamiStrings.turnUsername
|
||||
|
||||
|
@ -150,12 +139,9 @@ ColumnLayout {
|
|||
id: lineEditTurnPassword
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: checkBoxTurnEnable.checked
|
||||
|
||||
staticText: CurrentAccount.password_TURN
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
titleField: JamiStrings.turnPassword
|
||||
|
||||
|
@ -166,12 +152,9 @@ ColumnLayout {
|
|||
id: lineEditTurnRealmSIP
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: checkBoxTurnEnable.checked
|
||||
|
||||
staticText: CurrentAccount.realm_TURN
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
titleField: JamiStrings.turnRealm
|
||||
|
||||
|
@ -184,8 +167,6 @@ ColumnLayout {
|
|||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.useSTUN
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
visible: isSIP
|
||||
checked: CurrentAccount.enable_STUN
|
||||
|
||||
|
@ -200,9 +181,7 @@ ColumnLayout {
|
|||
|
||||
enabled: checkBoxSTUNEnable.checked
|
||||
visible: isSIP
|
||||
|
||||
staticText: CurrentAccount.server_STUN
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
titleField: JamiStrings.stunAdress
|
||||
|
||||
|
|
|
@ -46,29 +46,32 @@ ColumnLayout {
|
|||
dlg.fileAccepted.connect(onAcceptedCb)
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Text {
|
||||
|
||||
eText: JamiStrings.security
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: Math.min(350, root.width - JamiTheme.preferredMarginSize * 2)
|
||||
|
||||
text: JamiStrings.security
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
SettingMaterialButton {
|
||||
id: btnCACert
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: CurrentAccount.enable_TLS
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS)
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS) : JamiStrings.selectCACertDefault
|
||||
titleField: JamiStrings.caCertificate
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectCACert,
|
||||
|
@ -84,12 +87,10 @@ ColumnLayout {
|
|||
id: btnUserCert
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: CurrentAccount.enable_TLS
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateFile_TLS)
|
||||
titleField: JamiStrings.userCertificate
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectUserCert,
|
||||
|
@ -105,12 +106,10 @@ ColumnLayout {
|
|||
id: btnPrivateKey
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: CurrentAccount.enable_TLS
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.privateKeyFile_TLS)
|
||||
titleField: JamiStrings.privateKey
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectPrivateKey,
|
||||
|
|
|
@ -28,29 +28,30 @@ import "../../commoncomponents"
|
|||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: Math.min(350, root.width - JamiTheme.preferredMarginSize * 2)
|
||||
|
||||
text: JamiStrings.media
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: videoCheckBox
|
||||
|
||||
labelText: JamiStrings.enableVideo
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.videoEnabled_Video
|
||||
|
||||
|
|
|
@ -29,27 +29,26 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property int itemWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
text: JamiStrings.nameServer
|
||||
color: JamiTheme.textColor
|
||||
elide: Text.ElideRight
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
SettingsMaterialTextEdit {
|
||||
id: lineEditNameServer
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
|
|
|
@ -29,24 +29,25 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property int itemWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
text: JamiStrings.openDHTConfig
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.openDHTConfig
|
||||
elide: Text.ElideRight
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkAutoConnectOnLocalNetwork
|
||||
|
@ -56,7 +57,6 @@ ColumnLayout {
|
|||
|
||||
labelText: JamiStrings.enablePeerDiscovery
|
||||
tooltipText: JamiStrings.tooltipPeerDiscovery
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.peerDiscovery
|
||||
|
||||
|
@ -67,7 +67,7 @@ ColumnLayout {
|
|||
id: checkBoxEnableProxy
|
||||
|
||||
labelText: JamiStrings.enableProxy
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: CurrentAccount.proxyEnabled
|
||||
|
||||
|
@ -78,7 +78,6 @@ ColumnLayout {
|
|||
id: lineEditProxy
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: checkBoxEnableProxy.checked
|
||||
|
||||
|
@ -94,7 +93,6 @@ ColumnLayout {
|
|||
id: lineEditBootstrap
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
staticText: CurrentAccount.hostname
|
||||
|
||||
|
|
|
@ -29,11 +29,12 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property int itemWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
|
@ -46,13 +47,11 @@ ColumnLayout {
|
|||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxAllowIPAutoRewrite
|
||||
|
||||
labelText: JamiStrings.allowIPAutoRewrite
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.allowIPAutoRewrite
|
||||
|
||||
|
@ -63,7 +62,6 @@ ColumnLayout {
|
|||
id: checkBoxCustomAddressPort
|
||||
|
||||
labelText: JamiStrings.useCustomAddress
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
visible: !checkBoxAllowIPAutoRewrite.checked
|
||||
checked: CurrentAccount.publishedSameAsLocal
|
||||
|
@ -75,7 +73,6 @@ ColumnLayout {
|
|||
id: lineEditSIPCustomAddress
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
visible: !checkBoxAllowIPAutoRewrite.checked
|
||||
enabled: checkBoxCustomAddressPort.checked
|
||||
|
|
|
@ -29,27 +29,36 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property int itemWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing + 2
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.preferredWidth: textWidth
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth:Math.min(JamiTheme.maximumWidthSettingsView,
|
||||
root.width - 2 * JamiTheme.preferredSettingsMarginSize)
|
||||
|
||||
text: JamiStrings.sdpSettingsTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
eText: JamiStrings.sdpSettingsTitle
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: root.width
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: mainLayout
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.preferredWidth: textWidth
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
eText: JamiStrings.sdpSettingsSubtitle
|
||||
fontSize: JamiTheme.settingsFontSize
|
||||
maxWidth: parent.width - JamiTheme.preferredMarginSize
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
text: JamiStrings.sdpSettingsSubtitle
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
wrapMode: Text.WordWrap
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
|
||||
SettingSpinBox {
|
||||
|
|
|
@ -30,6 +30,7 @@ ColumnLayout {
|
|||
id: root
|
||||
|
||||
property int itemWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
function openFileDialog(title, oldPath, fileType, onAcceptedCb) {
|
||||
var openPath = oldPath === "" ?
|
||||
|
@ -47,27 +48,30 @@ ColumnLayout {
|
|||
dlg.fileAccepted.connect(onAcceptedCb)
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Text {
|
||||
|
||||
eText: JamiStrings.security
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: Math.min(350, root.width - JamiTheme.preferredMarginSize * 2)
|
||||
|
||||
text: JamiStrings.security
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
spacing: 5
|
||||
|
||||
ToggleSwitch {
|
||||
id: enableSDESToggle
|
||||
|
||||
labelText: JamiStrings.enableSDES
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.keyExchange_SRTP
|
||||
|
||||
onSwitchToggled: CurrentAccount.keyExchange_SRTP = Number(checked)
|
||||
}
|
||||
|
||||
|
@ -75,10 +79,7 @@ ColumnLayout {
|
|||
id: fallbackRTPToggle
|
||||
|
||||
labelText: JamiStrings.fallbackRTP
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.rtpFallback_SRTP
|
||||
|
||||
onSwitchToggled: CurrentAccount.rtpFallback_SRTP = checked
|
||||
}
|
||||
|
||||
|
@ -86,10 +87,7 @@ ColumnLayout {
|
|||
id: encryptNegotitationToggle
|
||||
|
||||
labelText: JamiStrings.encryptNegotiation
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.enable_TLS
|
||||
|
||||
onSwitchToggled: CurrentAccount.enable_TLS = checked
|
||||
}
|
||||
|
||||
|
@ -97,16 +95,12 @@ ColumnLayout {
|
|||
id: btnSIPCACert
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: CurrentAccount.enable_TLS
|
||||
|
||||
titleField: JamiStrings.caCertificate
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS) : JamiStrings.selectCACertDefault
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS)
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectCACert,
|
||||
CurrentAccount.certificateListFile_TLS,
|
||||
JamiStrings.certificateFile,
|
||||
|
@ -120,15 +114,11 @@ ColumnLayout {
|
|||
id: btnSIPUserCert
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: CurrentAccount.enable_TLS
|
||||
|
||||
titleField: JamiStrings.userCertificate
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateFile_TLS)
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.certificateFile_TLS) : JamiStrings.selectCACertDefault
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectUserCert,
|
||||
CurrentAccount.certificateFile_TLS,
|
||||
|
@ -143,15 +133,11 @@ ColumnLayout {
|
|||
id: btnSIPPrivateKey
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
enabled: CurrentAccount.enable_TLS
|
||||
|
||||
titleField: JamiStrings.privateKey
|
||||
source: JamiResources.round_folder_24dp_svg
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.privateKeyFile_TLS)
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.privateKeyFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.privateKeyFile_TLS) : JamiStrings.selectCACertDefault
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectPrivateKey,
|
||||
CurrentAccount.privateKeyFile_TLS,
|
||||
|
@ -174,6 +160,7 @@ ColumnLayout {
|
|||
titleField: JamiStrings.privateKeyPassword
|
||||
|
||||
staticText: CurrentAccount.password_TLS
|
||||
isPassword: true
|
||||
|
||||
onEditFinished: CurrentAccount.password_TLS = dynamicText
|
||||
}
|
||||
|
@ -182,10 +169,7 @@ ColumnLayout {
|
|||
id: verifyIncomingCertificatesServerToggle
|
||||
|
||||
labelText: JamiStrings.verifyCertificatesServer
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.verifyServer_TLS
|
||||
|
||||
onSwitchToggled: CurrentAccount.verifyServer_TLS = checked
|
||||
}
|
||||
|
||||
|
@ -193,10 +177,7 @@ ColumnLayout {
|
|||
id: verifyIncomingCertificatesClientToggle
|
||||
|
||||
labelText: JamiStrings.verifyCertificatesClient
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.verifyClient_TLS
|
||||
|
||||
onSwitchToggled: CurrentAccount.verifyClient_TLS = checked
|
||||
}
|
||||
|
||||
|
@ -204,10 +185,7 @@ ColumnLayout {
|
|||
id: requireCeritificateForTLSIncomingToggle
|
||||
|
||||
labelText: JamiStrings.tlsRequireConnections
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.requireClientCertificate_TLS
|
||||
|
||||
onSwitchToggled: CurrentAccount.requireClientCertificate_TLS = checked
|
||||
}
|
||||
|
||||
|
@ -215,10 +193,7 @@ ColumnLayout {
|
|||
id: disableSecureDlgCheckToggle
|
||||
|
||||
labelText: JamiStrings.disableSecureDlgCheck
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
checked: CurrentAccount.disableSecureDlgCheck_TLS
|
||||
|
||||
onSwitchToggled: CurrentAccount.disableSecureDlgCheck_TLS = checked
|
||||
}
|
||||
|
||||
|
@ -226,10 +201,8 @@ ColumnLayout {
|
|||
id: tlsProtocolComboBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
labelText: JamiStrings.tlsProtocol
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: ListModel {
|
||||
ListElement{textDisplay: "Default"; firstArg: "Default"; secondArg: 0}
|
||||
ListElement{textDisplay: "TLSv1"; firstArg: "TLSv1"; secondArg: 1}
|
||||
|
@ -250,7 +223,6 @@ ColumnLayout {
|
|||
id: outgoingTLSServerNameLineEdit
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
itemWidth: root.itemWidth
|
||||
titleField: JamiStrings.tlsServerName
|
||||
|
||||
|
|
|
@ -109,73 +109,6 @@ ColumnLayout {
|
|||
itemWidth: root.itemWidth
|
||||
}
|
||||
|
||||
AdvancedSIPSecuritySettings {
|
||||
id: advancedSIPSecuritySettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
visible: LRCInstance.currentAccountType === Profile.Type.SIP
|
||||
itemWidth: root.itemWidth
|
||||
}
|
||||
|
||||
AdvancedNameServerSettings {
|
||||
id: advancedNameServerSettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
visible: LRCInstance.currentAccountType === Profile.Type.JAMI
|
||||
itemWidth: root.itemWidth
|
||||
}
|
||||
|
||||
AdvancedOpenDHTSettings {
|
||||
id: advancedOpenDHTSettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
visible: LRCInstance.currentAccountType === Profile.Type.JAMI
|
||||
itemWidth: root.itemWidth
|
||||
}
|
||||
|
||||
AdvancedJamiSecuritySettings {
|
||||
id: advancedJamiSecuritySettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
visible: LRCInstance.currentAccountType === Profile.Type.JAMI
|
||||
itemWidth: root.itemWidth
|
||||
}
|
||||
|
||||
AdvancedConnectivitySettings {
|
||||
id: advancedConnectivitySettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
itemWidth: root.itemWidth
|
||||
isSIP: LRCInstance.currentAccountType === Profile.Type.SIP
|
||||
}
|
||||
|
||||
AdvancedPublicAddressSettings {
|
||||
id: advancedPublicAddressSettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
visible: isSIP
|
||||
itemWidth: root.itemWidth
|
||||
}
|
||||
|
||||
AdvancedMediaSettings {
|
||||
id: advancedMediaSettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
AdvancedSDPSettings {
|
||||
id: advancedSDPStettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
visible: isSIP
|
||||
itemWidth: root.itemWidth
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
122
src/app/settingsview/components/AdvancedSettingsPage.qml
Normal file
122
src/app/settingsview/components/AdvancedSettingsPage.qml
Normal file
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth
|
||||
signal showAdvancedSettingsRequest
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
|
||||
title: JamiStrings.advancedSettingsTitle
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
|
||||
id: currentAccountEnableColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
Layout.bottomMargin: JamiTheme.preferredSettingsContentMarginSize
|
||||
Layout.fillWidth: true
|
||||
|
||||
AdvancedSIPSecuritySettings {
|
||||
id: advancedSIPSecuritySettings
|
||||
|
||||
width: parent.width
|
||||
itemWidth: 250
|
||||
visible: CurrentAccount.type === Profile.Type.SIP
|
||||
}
|
||||
|
||||
AdvancedChatSettings {
|
||||
id: advancedChatSettings
|
||||
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
AdvancedNameServerSettings {
|
||||
id: advancedNameServerSettings
|
||||
|
||||
width: parent.width
|
||||
itemWidth: 250
|
||||
visible: CurrentAccount.type === Profile.Type.JAMI
|
||||
}
|
||||
|
||||
AdvancedOpenDHTSettings {
|
||||
id: advancedOpenDHTSettings
|
||||
|
||||
width: parent.width
|
||||
itemWidth: 250
|
||||
visible: CurrentAccount.type === Profile.Type.JAMI
|
||||
}
|
||||
|
||||
AdvancedJamiSecuritySettings {
|
||||
id: advancedJamiSecuritySettings
|
||||
|
||||
width: parent.width
|
||||
itemWidth: 250
|
||||
visible: CurrentAccount.type === Profile.Type.JAMI
|
||||
}
|
||||
|
||||
AdvancedConnectivitySettings {
|
||||
id: advancedConnectivitySettings
|
||||
|
||||
width: parent.width
|
||||
itemWidth: 250
|
||||
isSIP: CurrentAccount.type === Profile.Type.SIP
|
||||
}
|
||||
|
||||
AdvancedPublicAddressSettings {
|
||||
id: advancedPublicAddressSettings
|
||||
|
||||
width: parent.width
|
||||
itemWidth: 250
|
||||
visible: CurrentAccount.type === Profile.Type.SIP
|
||||
}
|
||||
|
||||
AdvancedMediaSettings {
|
||||
id: advancedMediaSettings
|
||||
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
AdvancedSDPSettings {
|
||||
id: advancedSDPStettings
|
||||
|
||||
itemWidth: 250
|
||||
width: parent.width
|
||||
visible: CurrentAccount.type === Profile.Type.SIP
|
||||
}
|
||||
}
|
||||
}
|
||||
|
408
src/app/settingsview/components/AppearenceSettingsPage.qml
Normal file
408
src/app/settingsview/components/AppearenceSettingsPage.qml
Normal file
|
@ -0,0 +1,408 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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.Layouts
|
||||
import QtQuick.Controls
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../../mainview/components"
|
||||
import "../../mainview/js/contactpickercreation.js" as ContactPickerCreation
|
||||
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth: 188
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
|
||||
title: JamiStrings.appearence
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: appearenceSettingsColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ColumnLayout {
|
||||
id: generalSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: enableAccountTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.generalSettingsTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: enableTypingIndicatorCheckbox
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.EnableTypingIndicator)
|
||||
|
||||
labelText: JamiStrings.enableTypingIndicator
|
||||
descText: JamiStrings.enableTypingIndicatorDescription
|
||||
|
||||
tooltipText: JamiStrings.enableTypingIndicator
|
||||
|
||||
onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.EnableTypingIndicator, checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: displayImagesCheckbox
|
||||
visible: WITH_WEBENGINE
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.DisplayHyperlinkPreviews)
|
||||
|
||||
labelText: JamiStrings.displayHyperlinkPreviews
|
||||
descText: JamiStrings.displayHyperlinkPreviewsDescription
|
||||
|
||||
tooltipText: JamiStrings.displayHyperlinkPreviews
|
||||
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.DisplayHyperlinkPreviews, checked)
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: outputComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
labelText: JamiStrings.layout
|
||||
tipText: JamiStrings.layout
|
||||
comboModel: ListModel {
|
||||
id: layoutModel
|
||||
Component.onCompleted: {
|
||||
append({ textDisplay: JamiStrings.horizontalViewOpt })
|
||||
append({ textDisplay: JamiStrings.verticalViewOpt })
|
||||
}
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
role: "textDisplay"
|
||||
|
||||
modelIndex: UtilsAdapter.getAppValue(Settings.Key.ShowChatviewHorizontally) ? 1 : 0
|
||||
|
||||
onActivated: {
|
||||
UtilsAdapter.setAppValue(
|
||||
Settings.Key.ShowChatviewHorizontally,
|
||||
comboModel.get(modelIndex).textDisplay === JamiStrings.verticalViewOpt
|
||||
)
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeLanguage() {
|
||||
var idx = outputComboBoxSetting.modelIndex
|
||||
layoutModel.clear()
|
||||
layoutModel.append({ textDisplay: JamiStrings.horizontalViewOpt })
|
||||
layoutModel.append({ textDisplay: JamiStrings.verticalViewOpt })
|
||||
outputComboBoxSetting.modelIndex = idx
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: themeSettings
|
||||
|
||||
Layout.preferredWidth: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
property var nativeDarkThemeShift: UtilsAdapter.hasNativeDarkTheme() ? 1 : 0
|
||||
|
||||
function isComplete() {
|
||||
var theme = UtilsAdapter.getAppValue(Settings.Key.AppTheme)
|
||||
if (themeSettings.nativeDarkThemeShift && theme === "System")
|
||||
sysThemeButton.checked = true
|
||||
if (theme === "Light") {
|
||||
lightThemeButton.checked = true
|
||||
} else if (theme === "Dark") {
|
||||
darkThemeButton.checked = true
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: themeSettings.isComplete()
|
||||
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.theme
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ButtonGroup { id: optionsB }
|
||||
|
||||
Flow {
|
||||
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
spacing: 5
|
||||
|
||||
Rectangle {
|
||||
id: lightThemeButtonBg
|
||||
width: 165
|
||||
height: 60
|
||||
border.color: JamiTheme.darkTheme ? "transparent" : JamiTheme.tintedBlue
|
||||
color: JamiTheme.whiteColor
|
||||
radius: JamiTheme.settingsBoxRadius
|
||||
|
||||
MaterialRadioButton {
|
||||
id: lightThemeButton
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 19
|
||||
|
||||
text: JamiStrings.light
|
||||
ButtonGroup.group: optionsB
|
||||
color: JamiTheme.blackColor
|
||||
bgColor: lightThemeButtonBg.color
|
||||
|
||||
KeyNavigation.down: darkThemeButton
|
||||
KeyNavigation.tab: KeyNavigation.down
|
||||
|
||||
onCheckedChanged: {
|
||||
if (checked)
|
||||
UtilsAdapter.setAppValue(Settings.Key.AppTheme, "Light")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: darkThemeButtonBg
|
||||
|
||||
width: 165
|
||||
height: 60
|
||||
color: JamiTheme.darkTheme ? JamiTheme.blackColor : JamiTheme.bgDarkMode_
|
||||
border.color: JamiTheme.darkTheme ? JamiTheme.tintedBlue : "transparent"
|
||||
radius: JamiTheme.settingsBoxRadius
|
||||
|
||||
MaterialRadioButton {
|
||||
id: darkThemeButton
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 19
|
||||
|
||||
text: JamiStrings.dark
|
||||
ButtonGroup.group: optionsB
|
||||
color: JamiTheme.whiteColor
|
||||
bgColor: darkThemeButtonBg.color
|
||||
|
||||
KeyNavigation.up: lightThemeButton
|
||||
KeyNavigation.down: sysThemeButton
|
||||
KeyNavigation.tab: KeyNavigation.down
|
||||
|
||||
onCheckedChanged: {
|
||||
if (checked)
|
||||
UtilsAdapter.setAppValue(Settings.Key.AppTheme, "Dark")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: sysThemeButtonBg
|
||||
|
||||
width: 165
|
||||
height: 60
|
||||
color: JamiTheme.darkTheme ? "#515151" : JamiTheme.sysColor
|
||||
radius: JamiTheme.settingsBoxRadius
|
||||
|
||||
MaterialRadioButton {
|
||||
id: sysThemeButton
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 19
|
||||
|
||||
text: JamiStrings.system
|
||||
ButtonGroup.group: optionsB
|
||||
color: JamiTheme.darkTheme ? JamiTheme.whiteColor : JamiTheme.blackColor
|
||||
bgColor: sysThemeButtonBg.color
|
||||
|
||||
KeyNavigation.up: darkThemeButton
|
||||
|
||||
onCheckedChanged: {
|
||||
if (checked)
|
||||
UtilsAdapter.setAppValue(Settings.Key.AppTheme, "System")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: zoomSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.zoomLevel
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: zoomSpinBox
|
||||
|
||||
Layout.maximumWidth: parent.width
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
value: Math.round(UtilsAdapter.getAppValue(Settings.BaseZoom) * 100.0)
|
||||
|
||||
from: 50
|
||||
to: 200
|
||||
stepSize: 10
|
||||
snapMode: Slider.SnapAlways
|
||||
|
||||
onMoved: {
|
||||
UtilsAdapter.setAppValue(Settings.BaseZoom, value / 100.0)
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
implicitWidth: 200
|
||||
implicitHeight: 2
|
||||
width: zoomSpinBox.availableWidth
|
||||
height: 2
|
||||
radius: 2
|
||||
color: JamiTheme.tintedBlue
|
||||
}
|
||||
|
||||
handle: ColumnLayout {
|
||||
x: zoomSpinBox.visualPosition * zoomSpinBox.availableWidth - textSize.width / 2
|
||||
|
||||
|
||||
Rectangle {
|
||||
Layout.topMargin: -12
|
||||
implicitWidth: 6
|
||||
implicitHeight: 25
|
||||
radius: implicitWidth
|
||||
color: JamiTheme.tintedBlue
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: zoomSpinBoxValueLabel
|
||||
|
||||
TextMetrics{
|
||||
id: textSize
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
font.bold: true
|
||||
text: zoomSpinBoxValueLabel.text
|
||||
}
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
text: zoomSpinBox.value
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
font.bold: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeFontSize() {
|
||||
zoomSpinBox.value = Math.round(UtilsAdapter.getAppValue(Settings.BaseZoom) * 100.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: defaultSettings
|
||||
|
||||
TextMetrics{
|
||||
id: defaultSettingsTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: defaultSettings.text
|
||||
}
|
||||
|
||||
secondary: true
|
||||
|
||||
text: JamiStrings.defaultSettings
|
||||
preferredWidth: defaultSettingsTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
onClicked: {
|
||||
enableTypingIndicatorCheckbox.checked = UtilsAdapter.getDefault(Settings.Key.EnableTypingIndicator)
|
||||
displayImagesCheckbox.checked = UtilsAdapter.getDefault(Settings.Key.DisplayHyperlinkPreviews)
|
||||
zoomSpinBox.value = Math.round(UtilsAdapter.getDefault(Settings.BaseZoom) * 100.0)
|
||||
|
||||
UtilsAdapter.setToDefault(Settings.Key.EnableTypingIndicator)
|
||||
UtilsAdapter.setToDefault(Settings.Key.DisplayHyperlinkPreviews)
|
||||
UtilsAdapter.setToDefault(Settings.Key.AppTheme)
|
||||
UtilsAdapter.setToDefault(Settings.Key.BaseZoom)
|
||||
|
||||
themeSettings.isComplete()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,183 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id:root
|
||||
|
||||
property int itemWidth
|
||||
|
||||
enum Setting {
|
||||
AUDIOINPUT,
|
||||
AUDIOOUTPUT,
|
||||
RINGTONEDEVICE,
|
||||
AUDIOMANAGER
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeLanguage() {
|
||||
inputAudioModel.reset()
|
||||
outputAudioModel.reset()
|
||||
ringtoneAudioModel.reset()
|
||||
}
|
||||
}
|
||||
|
||||
function populateAudioSettings() {
|
||||
inputComboBoxSetting.modelIndex = inputComboBoxSetting.comboModel.getCurrentIndex()
|
||||
outputComboBoxSetting.modelIndex = outputComboBoxSetting.comboModel.getCurrentIndex()
|
||||
ringtoneComboBoxSetting.modelIndex = ringtoneComboBoxSetting.comboModel.getCurrentIndex()
|
||||
if(audioManagerComboBoxSetting.comboModel.rowCount() > 0) {
|
||||
audioManagerComboBoxSetting.modelIndex =
|
||||
audioManagerComboBoxSetting.comboModel.getCurrentSettingIndex()
|
||||
}
|
||||
audioManagerComboBoxSetting.visible = audioManagerComboBoxSetting.comboModel.rowCount() > 0
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
eText: JamiStrings.audio
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: inputComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.microphone
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioDeviceModel {
|
||||
id: inputAudioModel
|
||||
lrcInstance: LRCInstance
|
||||
type: AudioDeviceModel.Type.Record
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.selectAudioInputDevice
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
AVModel.setInputDevice(modelIndex)
|
||||
AvAdapter.startAudioMeter()
|
||||
}
|
||||
}
|
||||
|
||||
// the audio level meter
|
||||
LevelMeter {
|
||||
id: audioInputMeter
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.preferredWidth: itemWidth * 1.5
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
indeterminate: false
|
||||
from: 0
|
||||
to: 100
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: outputComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.outputDevice
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioDeviceModel {
|
||||
id: outputAudioModel
|
||||
lrcInstance: LRCInstance
|
||||
type: AudioDeviceModel.Type.Playback
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.selectAudioOutputDevice
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
AVModel.setOutputDevice(modelIndex)
|
||||
AvAdapter.startAudioMeter()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: ringtoneComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.ringtoneDevice
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioDeviceModel {
|
||||
id: ringtoneAudioModel
|
||||
lrcInstance: LRCInstance
|
||||
type: AudioDeviceModel.Type.Ringtone
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.selectRingtoneOutputDevice
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
AVModel.setRingtoneDevice(modelIndex)
|
||||
AvAdapter.startAudioMeter()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: audioManagerComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.audioManager
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioManagerListModel {
|
||||
lrcInstance: LRCInstance
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
role: "ID_UTF8"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
var selectedAudioManager = comboModel.data(
|
||||
comboModel.index(modelIndex, 0), AudioManagerListModel.AudioManagerID)
|
||||
AVModel.setAudioManager(selectedAudioManager)
|
||||
AvAdapter.startAudioMeter()
|
||||
populateAudioSettings()
|
||||
}
|
||||
}
|
||||
}
|
199
src/app/settingsview/components/AudioSettingsPage.qml
Normal file
199
src/app/settingsview/components/AudioSettingsPage.qml
Normal file
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth: 188
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.audio
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: currentAccountEnableColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsCategoryAudioVideoSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
enum Setting {
|
||||
AUDIOINPUT,
|
||||
AUDIOOUTPUT,
|
||||
RINGTONEDEVICE,
|
||||
AUDIOMANAGER
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeLanguage() {
|
||||
inputAudioModel.reset()
|
||||
outputAudioModel.reset()
|
||||
ringtoneAudioModel.reset()
|
||||
}
|
||||
}
|
||||
|
||||
function populateAudioSettings() {
|
||||
inputComboBoxSetting.modelIndex = inputComboBoxSetting.comboModel.getCurrentIndex()
|
||||
outputComboBoxSetting.modelIndex = outputComboBoxSetting.comboModel.getCurrentIndex()
|
||||
ringtoneComboBoxSetting.modelIndex = ringtoneComboBoxSetting.comboModel.getCurrentIndex()
|
||||
if(audioManagerComboBoxSetting.comboModel.rowCount() > 0) {
|
||||
audioManagerComboBoxSetting.modelIndex =
|
||||
audioManagerComboBoxSetting.comboModel.getCurrentSettingIndex()
|
||||
}
|
||||
audioManagerComboBoxSetting.visible = audioManagerComboBoxSetting.comboModel.rowCount() > 0
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: inputComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.microphone
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioDeviceModel {
|
||||
id: inputAudioModel
|
||||
lrcInstance: LRCInstance
|
||||
type: AudioDeviceModel.Type.Record
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.selectAudioInputDevice
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
AVModel.setInputDevice(modelIndex)
|
||||
AvAdapter.startAudioMeter()
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: JamiStrings.soundTest
|
||||
elide: Text.ElideRight
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
// the audio level meter
|
||||
LevelMeter {
|
||||
id: audioInputMeter
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.preferredWidth: itemWidth
|
||||
|
||||
indeterminate: false
|
||||
from: 0
|
||||
to: 100
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: outputComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.outputDevice
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioDeviceModel {
|
||||
id: outputAudioModel
|
||||
lrcInstance: LRCInstance
|
||||
type: AudioDeviceModel.Type.Playback
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.selectAudioOutputDevice
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
AVModel.setOutputDevice(modelIndex)
|
||||
AvAdapter.startAudioMeter()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: ringtoneComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.ringtoneDevice
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioDeviceModel {
|
||||
id: ringtoneAudioModel
|
||||
lrcInstance: LRCInstance
|
||||
type: AudioDeviceModel.Type.Ringtone
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.selectRingtoneOutputDevice
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
AVModel.setRingtoneDevice(modelIndex)
|
||||
AvAdapter.startAudioMeter()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: audioManagerComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.audioManager
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: AudioManagerListModel {
|
||||
lrcInstance: LRCInstance
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
role: "ID_UTF8"
|
||||
|
||||
onActivated: {
|
||||
AvAdapter.stopAudioMeter()
|
||||
var selectedAudioManager = comboModel.data(
|
||||
comboModel.index(modelIndex, 0), AudioManagerListModel.AudioManagerID)
|
||||
AVModel.setAudioManager(selectedAudioManager)
|
||||
AvAdapter.startAudioMeter()
|
||||
currentAccountEnableColumnLayout.populateAudioSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -28,88 +28,19 @@ import "../../commoncomponents"
|
|||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
property bool isSIP
|
||||
|
||||
visible: {
|
||||
if (bannedListWidget.model.rowCount() <= 0)
|
||||
return false
|
||||
return true && !isSIP && CurrentAccount.managerUri === ""
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: ContactAdapter
|
||||
|
||||
function onBannedStatusChanged(uri, banned) {
|
||||
if (banned) {
|
||||
bannedListWidget.model.reset()
|
||||
root.visible = true
|
||||
bannedContactsBtn.visible = true
|
||||
bannedListWidget.visible = false
|
||||
} else {
|
||||
updateAndShowBannedContactsSlot()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function toggleBannedContacts() {
|
||||
var bannedContactsVisible = bannedListWidget.visible
|
||||
bannedListWidget.visible = !bannedContactsVisible
|
||||
updateAndShowBannedContactsSlot()
|
||||
}
|
||||
|
||||
function updateAndShowBannedContactsSlot() {
|
||||
bannedListWidget.model.reset()
|
||||
root.visible = bannedListWidget.model.rowCount() > 0
|
||||
if(bannedListWidget.model.rowCount() <= 0) {
|
||||
bannedListWidget.visible = false
|
||||
bannedContactsBtn.visible = false
|
||||
} else {
|
||||
bannedContactsBtn.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: bannedContactsBtn
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
|
||||
eText: JamiStrings.bannedContacts
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: root.width - JamiTheme.preferredFieldHeight
|
||||
- JamiTheme.preferredMarginSize * 4
|
||||
}
|
||||
|
||||
PushButton {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.preferredWidth: JamiTheme.preferredFieldHeight
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
toolTipText: bannedListWidget.visible?
|
||||
JamiStrings.tipBannedContactsHide :
|
||||
JamiStrings.tipBannedContactsDisplay
|
||||
imageColor: JamiTheme.textColor
|
||||
|
||||
source: bannedListWidget.visible?
|
||||
JamiResources.expand_less_24dp_svg :
|
||||
JamiResources.expand_more_24dp_svg
|
||||
|
||||
onClicked: toggleBannedContacts()
|
||||
}
|
||||
}
|
||||
|
||||
JamiListView {
|
||||
id: bannedListWidget
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 160
|
||||
property int bannedContactsSize: 0
|
||||
|
||||
visible: false
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: Math.min(bannedContactsSize, 5) * (74 + spacing)
|
||||
spacing: JamiTheme.settingsListViewsSpacing
|
||||
|
||||
model: BannedListModel {
|
||||
lrcInstance: LRCInstance
|
||||
|
||||
onCountChanged: bannedListWidget.bannedContactsSize = count
|
||||
}
|
||||
|
||||
delegate: ContactItemDelegate {
|
||||
|
@ -121,7 +52,7 @@ ColumnLayout {
|
|||
contactName: ContactName
|
||||
contactID: ContactID
|
||||
|
||||
btnImgSource: JamiResources.round_remove_circle_24dp_svg
|
||||
btnImgSource: JamiStrings.optionUnban
|
||||
btnToolTip: JamiStrings.reinstateContact
|
||||
|
||||
onClicked: bannedListWidget.currentIndex = index
|
||||
|
|
292
src/app/settingsview/components/CallRecordingSettingsPage.qml
Normal file
292
src/app/settingsview/components/CallRecordingSettingsPage.qml
Normal file
|
@ -0,0 +1,292 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@savoirfairelinux.com>
|
||||
* 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 Qt.labs.platform
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property string recordPath: AVModel.getRecordPath()
|
||||
property string screenshotPath: UtilsAdapter.getDirScreenshot()
|
||||
|
||||
property string recordPathBestName: UtilsAdapter.dirName(AVModel.getRecordPath())
|
||||
property string screenshotPathBestName: UtilsAdapter.dirName(UtilsAdapter.getDirScreenshot())
|
||||
|
||||
property int itemWidth: 188
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.callRecording
|
||||
|
||||
onRecordPathChanged: {
|
||||
if(recordPath === "")
|
||||
return
|
||||
|
||||
if(AVModel) {
|
||||
AVModel.setRecordPath(recordPath)
|
||||
}
|
||||
}
|
||||
|
||||
onScreenshotPathChanged: {
|
||||
if (screenshotPath === "")
|
||||
return
|
||||
UtilsAdapter.setScreenshotPath(screenshotPath)
|
||||
}
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: callSettingsColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ColumnLayout {
|
||||
id: generalSettings
|
||||
|
||||
width: parent.width
|
||||
|
||||
FolderDialog {
|
||||
id: recordPathDialog
|
||||
|
||||
title: JamiStrings.selectFolder
|
||||
currentFolder: UtilsAdapter.getDirScreenshot()
|
||||
options: FolderDialog.ShowDirsOnly
|
||||
|
||||
onAccepted: {
|
||||
var dir = UtilsAdapter.getAbsPath(folder.toString())
|
||||
var dirName = UtilsAdapter.dirName(folder.toString())
|
||||
recordPath = dir
|
||||
recordPathBestName = dirName
|
||||
}
|
||||
}
|
||||
|
||||
FolderDialog {
|
||||
id: screenshotPathDialog
|
||||
|
||||
title: JamiStrings.selectFolder
|
||||
currentFolder: StandardPaths.writableLocation(StandardPaths.PicturesLocation)
|
||||
options: FolderDialog.ShowDirsOnly
|
||||
|
||||
onAccepted: {
|
||||
var dir = UtilsAdapter.getAbsPath(folder.toString())
|
||||
var dirName = UtilsAdapter.dirName(folder.toString())
|
||||
screenshotPath = dir
|
||||
screenshotPathBestName = dirName
|
||||
}
|
||||
}
|
||||
|
||||
Timer{
|
||||
id: updateRecordQualityTimer
|
||||
|
||||
interval: 500
|
||||
|
||||
onTriggered: AVModel.setRecordQuality(recordQualitySlider.value * 100)
|
||||
}
|
||||
|
||||
|
||||
ToggleSwitch {
|
||||
id: alwaysRecordingCheckBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
checked: AVModel.getAlwaysRecord()
|
||||
labelText: JamiStrings.alwaysRecordCalls
|
||||
tooltipText: JamiStrings.alwaysRecordCalls
|
||||
onSwitchToggled: AVModel.setAlwaysRecord(checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: recordPreviewCheckBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
checked: AVModel.getRecordPreview()
|
||||
labelText: JamiStrings.includeLocalVideo
|
||||
onSwitchToggled: AVModel.setRecordPreview(checked)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.quality
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: recordQualityValueLabel
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
text: UtilsAdapter.getRecordQualityString(AVModel.getRecordQuality() / 100)
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
font.weight: Font.Medium
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: recordQualitySlider
|
||||
|
||||
Layout.maximumWidth: itemWidth
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
value: AVModel.getRecordQuality() / 100
|
||||
|
||||
from: 0
|
||||
to: 500
|
||||
stepSize: 1
|
||||
|
||||
onMoved: {
|
||||
recordQualityValueLabel.text = UtilsAdapter.getRecordQualityString(value)
|
||||
updateRecordQualityTimer.restart()
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
y: recordQualitySlider.height / 2
|
||||
implicitWidth: 200
|
||||
implicitHeight: 2
|
||||
width: recordQualitySlider.availableWidth
|
||||
height: implicitHeight
|
||||
radius: 2
|
||||
color: JamiTheme.tintedBlue
|
||||
}
|
||||
|
||||
handle: ColumnLayout {
|
||||
x: recordQualitySlider.visualPosition * recordQualitySlider.availableWidth
|
||||
y: recordQualitySlider.height / 2
|
||||
|
||||
Rectangle {
|
||||
Layout.topMargin: -12
|
||||
implicitWidth: 6
|
||||
implicitHeight: 25
|
||||
radius: implicitWidth
|
||||
color: JamiTheme.tintedBlue
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
}
|
||||
|
||||
MaterialToolTip {
|
||||
id: toolTip
|
||||
text: JamiStrings.quality
|
||||
visible: parent.hovered
|
||||
delay: Qt.styleHints.mousePressAndHoldInterval
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
text: JamiStrings.saveRecordingsTo
|
||||
wrapMode: Text.WordWrap
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: recordPathButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
textLeftPadding: JamiTheme.buttontextWizzardPadding
|
||||
textRightPadding: JamiTheme.buttontextWizzardPadding
|
||||
|
||||
toolTipText: recordPath
|
||||
text: recordPathBestName
|
||||
secondary: true
|
||||
|
||||
onClicked: recordPathDialog.open()
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
text: JamiStrings.saveScreenshotsTo
|
||||
wrapMode: Text.WordWrap
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: screenshotPathButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
textLeftPadding: JamiTheme.buttontextWizzardPadding
|
||||
textRightPadding: JamiTheme.buttontextWizzardPadding
|
||||
|
||||
toolTipText: screenshotPath
|
||||
text: screenshotPathBestName
|
||||
secondary: true
|
||||
onClicked: screenshotPathDialog.open()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
330
src/app/settingsview/components/CallSettingsPage.qml
Normal file
330
src/app/settingsview/components/CallSettingsPage.qml
Normal file
|
@ -0,0 +1,330 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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.Layouts
|
||||
import QtMultimedia
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../../mainview/components"
|
||||
import "../../mainview/js/contactpickercreation.js" as ContactPickerCreation
|
||||
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
|
||||
property bool isSIP
|
||||
property int itemWidth: 132
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.callSettingsTitle
|
||||
|
||||
function updateAndShowModeratorsSlot() {
|
||||
moderatorListWidget.model.reset()
|
||||
moderatorListWidget.visible = moderatorListWidget.model.rowCount() > 0
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: ContactAdapter
|
||||
|
||||
function onDefaultModeratorsUpdated() {
|
||||
updateAndShowModeratorsSlot()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: callSettingsColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ColumnLayout {
|
||||
id: generalSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: enableAccountTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.generalSettingsTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxUntrusted
|
||||
visible: !root.isSIP
|
||||
|
||||
labelText: JamiStrings.allowCallsUnknownContacs
|
||||
checked: CurrentAccount.PublicInCalls_DHT
|
||||
onSwitchToggled: CurrentAccount.PublicInCalls_DHT = checked
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxAutoAnswer
|
||||
|
||||
labelText: JamiStrings.autoAnswerCalls
|
||||
checked: CurrentAccount.autoAnswer
|
||||
onSwitchToggled: CurrentAccount.autoAnswer = checked
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: ringtoneSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: 9
|
||||
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.ringtone
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxCustomRingtone
|
||||
|
||||
labelText: JamiStrings.enableCustomRingtone
|
||||
checked: CurrentAccount.ringtoneEnabled_Ringtone
|
||||
onSwitchToggled: CurrentAccount.ringtoneEnabled_Ringtone = checked
|
||||
}
|
||||
|
||||
SettingMaterialButton {
|
||||
id: btnRingtone
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
enabled: checkBoxCustomRingtone.checked
|
||||
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.ringtonePath_Ringtone)
|
||||
|
||||
titleField: JamiStrings.selectCustomRingtone
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: {
|
||||
var dlg = viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/JamiFileDialog.qml",
|
||||
{
|
||||
title: JamiStrings.selectNewRingtone,
|
||||
fileMode: JamiFileDialog.OpenFile,
|
||||
folder: JamiQmlUtils.qmlFilePrefix +
|
||||
UtilsAdapter.toFileAbsolutepath(
|
||||
CurrentAccount.ringtonePath_Ringtone),
|
||||
nameFilters: [JamiStrings.audioFile, JamiStrings.allFiles]
|
||||
})
|
||||
dlg.fileAccepted.connect(function (file) {
|
||||
var url = UtilsAdapter.getAbsPath(file.toString())
|
||||
if(url.length !== 0) {
|
||||
CurrentAccount.ringtonePath_Ringtone = url
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: rendezVousSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.rendezVousPoint
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkBoxRdv
|
||||
|
||||
visible: !isSIP
|
||||
|
||||
labelText: JamiStrings.rendezVous
|
||||
checked: CurrentAccount.isRendezVous
|
||||
onSwitchToggled: CurrentAccount.isRendezVous = checked
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: moderationSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: 9
|
||||
|
||||
Text {
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.moderation
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: toggleLocalModerators
|
||||
|
||||
labelText: JamiStrings.enableLocalModerators
|
||||
checked: CurrentAccount.isLocalModeratorsEnabled
|
||||
onSwitchToggled: CurrentAccount.isLocalModeratorsEnabled = checked
|
||||
}
|
||||
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkboxAllModerators
|
||||
|
||||
labelText: JamiStrings.enableAllModerators
|
||||
checked: CurrentAccount.isAllModeratorsEnabled
|
||||
onSwitchToggled: CurrentAccount.isAllModeratorsEnabled = checked
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
color: JamiTheme.textColor
|
||||
wrapMode : Text.WordWrap
|
||||
text: JamiStrings.defaultModerators
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: addDefaultModeratorPushButton
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
preferredWidth: textSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
primary: true
|
||||
toolTipText: JamiStrings.addDefaultModerator
|
||||
|
||||
text: JamiStrings.addModerator
|
||||
|
||||
onClicked: {
|
||||
ContactPickerCreation.presentContactPickerPopup(
|
||||
ContactList.CONVERSATION,
|
||||
appWindow)
|
||||
}
|
||||
|
||||
TextMetrics{
|
||||
id: textSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: addDefaultModeratorPushButton.text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
JamiListView {
|
||||
id: moderatorListWidget
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 160
|
||||
spacing: JamiTheme.settingsListViewsSpacing
|
||||
|
||||
visible: model.rowCount() > 0
|
||||
|
||||
model: ModeratorListModel {
|
||||
lrcInstance: LRCInstance
|
||||
}
|
||||
|
||||
delegate: ContactItemDelegate {
|
||||
id: moderatorListDelegate
|
||||
|
||||
width: moderatorListWidget.width
|
||||
height: 74
|
||||
|
||||
contactName: ContactName
|
||||
contactID: ContactID
|
||||
|
||||
btnImgSource: JamiStrings.optionRemove
|
||||
btnToolTip: JamiStrings.removeDefaultModerator
|
||||
|
||||
onClicked: moderatorListWidget.currentIndex = index
|
||||
onBtnContactClicked: {
|
||||
AccountAdapter.setDefaultModerator(
|
||||
LRCInstance.currentAccountId, contactID, false)
|
||||
updateAndShowModeratorsSlot()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,123 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 Savoir-faire Linux Inc.
|
||||
* Author: Sébastien Blin <sebastien.blin@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.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id:root
|
||||
|
||||
property int itemWidth
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: JamiStrings.chat
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.textColor
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: enableTypingIndicatorCheckbox
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.EnableTypingIndicator)
|
||||
|
||||
labelText: JamiStrings.enableTypingIndicator
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.enableTypingIndicator
|
||||
|
||||
onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.EnableTypingIndicator, checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: displayImagesCheckbox
|
||||
visible: WITH_WEBENGINE
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.DisplayHyperlinkPreviews)
|
||||
|
||||
labelText: JamiStrings.displayHyperlinkPreviews
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.displayHyperlinkPreviews
|
||||
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.DisplayHyperlinkPreviews, checked)
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: outputComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.layout
|
||||
tipText: JamiStrings.layout
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: ListModel {
|
||||
id: layoutModel
|
||||
Component.onCompleted: {
|
||||
append({ textDisplay: JamiStrings.horizontalViewOpt })
|
||||
append({ textDisplay: JamiStrings.verticalViewOpt })
|
||||
}
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
role: "textDisplay"
|
||||
|
||||
modelIndex: UtilsAdapter.getAppValue(Settings.Key.ShowChatviewHorizontally) ? 1 : 0
|
||||
|
||||
onActivated: {
|
||||
UtilsAdapter.setAppValue(
|
||||
Settings.Key.ShowChatviewHorizontally,
|
||||
comboModel.get(modelIndex).textDisplay === JamiStrings.verticalViewOpt
|
||||
)
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeLanguage() {
|
||||
var idx = outputComboBoxSetting.modelIndex
|
||||
layoutModel.clear()
|
||||
layoutModel.append({ textDisplay: JamiStrings.horizontalViewOpt })
|
||||
layoutModel.append({ textDisplay: JamiStrings.verticalViewOpt })
|
||||
outputComboBoxSetting.modelIndex = idx
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -36,9 +36,10 @@ ItemDelegate {
|
|||
|
||||
signal btnContactClicked
|
||||
|
||||
highlighted: ListView.isCurrentItem
|
||||
background: Rectangle {
|
||||
color: highlighted? JamiTheme.selectedColor : JamiTheme.editBackgroundColor
|
||||
color: JamiTheme.editBackgroundColor
|
||||
height: root.height
|
||||
radius: 5
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
|
@ -106,21 +107,29 @@ ItemDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
PushButton {
|
||||
MaterialButton {
|
||||
id: btnContact
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
|
||||
Layout.rightMargin: 16
|
||||
Layout.preferredWidth: JamiTheme.preferredFieldHeight
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
source: btnImgSource
|
||||
imageColor: JamiTheme.textColor
|
||||
normalColor: highlighted? JamiTheme.selectedColor : JamiTheme.editBackgroundColor
|
||||
TextMetrics{
|
||||
id: textSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: btnContact.text
|
||||
}
|
||||
|
||||
secondary: true
|
||||
buttontextHeightMargin: 14
|
||||
|
||||
text: btnImgSource
|
||||
preferredWidth: textSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
toolTipText: btnToolTip
|
||||
|
||||
onClicked: btnContactClicked()
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ Rectangle {
|
|||
id: root
|
||||
|
||||
property bool isSIP
|
||||
|
||||
property int contentWidth: currentAccountSettingsColumnLayout.width
|
||||
property int preferredHeight: currentAccountSettingsColumnLayout.implicitHeight
|
||||
property int preferredColumnWidth : Math.min(root.width / 2 - 50, 350)
|
||||
|
@ -56,30 +55,6 @@ Rectangle {
|
|||
|
||||
width: Math.min(JamiTheme.maximumWidthSettingsView, root.width)
|
||||
|
||||
ToggleSwitch {
|
||||
id: accountEnableCheckBox
|
||||
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.enableAccount
|
||||
fontPointSize: JamiTheme.headerFontSize
|
||||
|
||||
checked: CurrentAccount.enabled
|
||||
|
||||
onSwitchToggled: CurrentAccount.enableAccount(checked)
|
||||
}
|
||||
|
||||
AccountProfile {
|
||||
id: accountProfile
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
}
|
||||
|
||||
UserIdentity {
|
||||
id: userIdentity
|
||||
isSIP: root.isSIP
|
||||
|
@ -100,7 +75,7 @@ Rectangle {
|
|||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -131,7 +106,7 @@ Rectangle {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -188,7 +163,7 @@ Rectangle {
|
|||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedRed
|
||||
hoveredColor: JamiTheme.buttonTintedRedHovered
|
||||
|
|
106
src/app/settingsview/components/CustomizeProfilePage.qml
Normal file
106
src/app/settingsview/components/CustomizeProfilePage.qml
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.customizeProfile
|
||||
|
||||
function stopBooth() {
|
||||
currentAccountAvatar.stopBooth()
|
||||
}
|
||||
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: currentAccountEnableColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
RowLayout {
|
||||
|
||||
spacing: 40
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
Connections {
|
||||
target: settingsViewRect
|
||||
|
||||
function onStopBooth() {
|
||||
stopBooth()
|
||||
}
|
||||
}
|
||||
|
||||
PhotoboothView {
|
||||
id: currentAccountAvatar
|
||||
width: avatarSize
|
||||
height: avatarSize
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
imageId: LRCInstance.currentAccountId
|
||||
avatarSize: 150
|
||||
}
|
||||
|
||||
ModalTextEdit {
|
||||
id: displayNameLineEdit
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight + 8
|
||||
Layout.fillWidth: true
|
||||
|
||||
staticText: CurrentAccount.alias
|
||||
placeholderText: JamiStrings.enterNickname
|
||||
|
||||
onAccepted: AccountAdapter.setCurrAccDisplayName(dynamicText)
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: description
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.bottomMargin: JamiTheme.preferredSettingsBottomMarginSize
|
||||
|
||||
text: JamiStrings.customizeAccountDescription
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
lineHeight: JamiTheme.wizardViewTextLineHeight
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (C) 2019-2023 Savoir-faire Linux Inc.
|
||||
* Author: Yang Wang <yang.wang@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
|
||||
|
@ -38,29 +39,27 @@ ItemDelegate {
|
|||
|
||||
signal btnRemoveDeviceClicked
|
||||
|
||||
highlighted: ListView.isCurrentItem
|
||||
|
||||
background: Rectangle {
|
||||
color: highlighted? JamiTheme.selectedColor : JamiTheme.editBackgroundColor
|
||||
color: JamiTheme.editBackgroundColor
|
||||
height: root.height
|
||||
radius: 5
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: rowLayout
|
||||
anchors.fill: root
|
||||
|
||||
Image {
|
||||
ResponsiveImage {
|
||||
id: deviceImage
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredWidth: 24
|
||||
Layout.preferredHeight: 24
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
layer {
|
||||
enabled: true
|
||||
effect: ColorOverlay {
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
}
|
||||
source: JamiResources.baseline_desktop_windows_24dp_svg
|
||||
}
|
||||
|
||||
|
@ -69,12 +68,13 @@ ItemDelegate {
|
|||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize / 2
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MaterialLineEdit {
|
||||
id: editDeviceName
|
||||
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 30
|
||||
|
||||
|
@ -115,9 +115,10 @@ ItemDelegate {
|
|||
Text {
|
||||
id: labelDeviceId
|
||||
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: editDeviceName.leftPadding
|
||||
Layout.bottomMargin: 10
|
||||
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
|
@ -130,11 +131,11 @@ ItemDelegate {
|
|||
id: btnEditDevice
|
||||
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
Layout.rightMargin: 16
|
||||
Layout.rightMargin: 13
|
||||
Layout.preferredWidth: JamiTheme.preferredFieldHeight
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
imageColor: JamiTheme.textColor
|
||||
imageColor: JamiTheme.tintedBlue
|
||||
normalColor: highlighted ?
|
||||
JamiTheme.selectedColor :
|
||||
JamiTheme.editBackgroundColor
|
||||
|
@ -143,7 +144,7 @@ ItemDelegate {
|
|||
(editable ?
|
||||
JamiResources.round_save_alt_24dp_svg :
|
||||
JamiResources.round_edit_24dp_svg) :
|
||||
JamiResources.round_remove_circle_24dp_svg
|
||||
JamiResources.delete_24dp_svg
|
||||
|
||||
toolTipText: isCurrent ?
|
||||
(editable ?
|
||||
|
@ -153,23 +154,18 @@ ItemDelegate {
|
|||
|
||||
onClicked: {
|
||||
if (isCurrent) {
|
||||
if (!editable)
|
||||
if (!editable) {
|
||||
editable = !editable
|
||||
else
|
||||
editDeviceName.forceActiveFocus()
|
||||
}
|
||||
else {
|
||||
editDeviceName.focus = false
|
||||
editDeviceName.accepted()
|
||||
}
|
||||
} else {
|
||||
btnRemoveDeviceClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CustomBorder {
|
||||
commonBorder: false
|
||||
lBorderwidth: 0
|
||||
rBorderwidth: 0
|
||||
tBorderwidth: 0
|
||||
bBorderwidth: 2
|
||||
borderColor: JamiTheme.selectedColor
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2021-2023 Savoir-faire Linux Inc.
|
||||
* Author: Sébastien Blin <sebastien.blin@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.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
ColumnLayout {
|
||||
id:root
|
||||
|
||||
property int itemWidth
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: JamiStrings.fileTransfer
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.textColor
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: autoAcceptFilesCheckbox
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: CurrentAccount.autoTransferFromTrusted
|
||||
|
||||
labelText: JamiStrings.autoAcceptFiles
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.autoAcceptFiles
|
||||
|
||||
onSwitchToggled: CurrentAccount.autoTransferFromTrusted = checked
|
||||
}
|
||||
|
||||
SettingSpinBox {
|
||||
id: acceptTransferBelowSpinBox
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
title: JamiStrings.acceptTransferBelow
|
||||
tooltipText: JamiStrings.acceptTransferTooltip
|
||||
itemWidth: root.itemWidth
|
||||
bottomValue: 0
|
||||
|
||||
valueField: CurrentAccount.autoTransferSizeThreshold
|
||||
|
||||
onNewValue: CurrentAccount.autoTransferSizeThreshold = valueField
|
||||
}
|
||||
}
|
97
src/app/settingsview/components/FileTransferSettingsPage.qml
Normal file
97
src/app/settingsview/components/FileTransferSettingsPage.qml
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@savoirfairelinux.com>
|
||||
* Author: Sébastien Blin <sebastien.blin@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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth: 164
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.fileTransfer
|
||||
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: callSettingsColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: autoAcceptFilesCheckbox
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: CurrentAccount.autoTransferFromTrusted
|
||||
labelText: JamiStrings.autoAcceptFiles
|
||||
tooltipText: JamiStrings.autoAcceptFiles
|
||||
onSwitchToggled: CurrentAccount.autoTransferFromTrusted = checked
|
||||
}
|
||||
|
||||
SettingSpinBox {
|
||||
id: acceptTransferBelowSpinBox
|
||||
Layout.fillWidth: true
|
||||
|
||||
title: JamiStrings.acceptTransferBelow
|
||||
tooltipText: JamiStrings.acceptTransferTooltip
|
||||
itemWidth: root.itemWidth
|
||||
bottomValue: 0
|
||||
|
||||
valueField: CurrentAccount.autoTransferSizeThreshold
|
||||
onNewValue: CurrentAccount.autoTransferSizeThreshold = valueField
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: defaultSettings
|
||||
|
||||
TextMetrics{
|
||||
id: defaultSettingsTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: defaultSettings.text
|
||||
}
|
||||
|
||||
secondary: true
|
||||
|
||||
text: JamiStrings.defaultSettings
|
||||
preferredWidth: defaultSettingsTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
onClicked: {
|
||||
autoAcceptFilesCheckbox.checked = UtilsAdapter.getDefault(Settings.Key.AutoAcceptFiles)
|
||||
acceptTransferBelowSpinBox.valueField = UtilsAdapter.getDefault(Settings.Key.AcceptTransferBelow)
|
||||
|
||||
UtilsAdapter.setToDefault(Settings.Key.AutoAcceptFiles)
|
||||
UtilsAdapter.setToDefault(Settings.Key.AcceptTransferBelow)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -43,74 +43,6 @@ Rectangle {
|
|||
|
||||
width: Math.min(JamiTheme.maximumWidthSettingsView, root.width)
|
||||
|
||||
// system setting panel
|
||||
SystemSettings {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
itemWidth: preferredColumnWidth
|
||||
}
|
||||
|
||||
// chatview setting panel
|
||||
ChatviewSettings {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
itemWidth: preferredColumnWidth
|
||||
}
|
||||
|
||||
// location sharing setting panel
|
||||
LocationSharingSettings {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
itemWidth: preferredColumnWidth
|
||||
}
|
||||
|
||||
// file transfer setting panel
|
||||
FileTransferSettings {
|
||||
id: fileTransferSettings
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
itemWidth: preferredColumnWidth
|
||||
}
|
||||
|
||||
// call recording setting panel
|
||||
RecordingSettings {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
itemWidth: preferredColumnWidth
|
||||
}
|
||||
|
||||
// Trouble shooting setting panel
|
||||
TroubleshootSettings {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
itemWidth: preferredColumnWidth
|
||||
}
|
||||
|
||||
// update setting panel
|
||||
UpdateSettings {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
visible: UpdateManager.isUpdaterEnabled()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import QtQuick.Controls
|
|||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
ProgressBar {
|
||||
id: root
|
||||
|
@ -31,6 +32,17 @@ ProgressBar {
|
|||
return clamp(rmsLevel * 300.0, 0.0, 100.0)
|
||||
}
|
||||
|
||||
contentItem: Item {
|
||||
implicitWidth: parent.width
|
||||
implicitHeight: parent.height
|
||||
|
||||
Rectangle {
|
||||
width: root.visualPosition * parent.width
|
||||
height: parent.height
|
||||
color: JamiTheme.tintedBlue
|
||||
}
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
rmsLevel = 0
|
||||
|
|
|
@ -159,7 +159,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: enabled? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -179,7 +179,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -330,7 +330,7 @@ BaseModalDialog {
|
|||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: enabled ? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -32,9 +32,16 @@ import "../../commoncomponents"
|
|||
ColumnLayout {
|
||||
id:root
|
||||
|
||||
width: parent.width
|
||||
property bool inverted: false
|
||||
property string title
|
||||
property bool isCurrent: true
|
||||
|
||||
visible: settingsListView.model.count > 0
|
||||
|
||||
function removeDeviceSlot(index){
|
||||
var deviceId = settingsListView.model.data(settingsListView.model.index(index,0),
|
||||
DeviceItemListModel.DeviceID)
|
||||
DeviceItemListModel.DeviceID)
|
||||
if(CurrentAccount.hasArchivePassword){
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
|
@ -49,7 +56,7 @@ ColumnLayout {
|
|||
infoText: JamiStrings.sureToRemoveDevice,
|
||||
buttonTitles: [JamiStrings.optionOk, JamiStrings.optionCancel],
|
||||
buttonStyles: [SimpleMessageDialog.ButtonStyle.TintedBlue,
|
||||
SimpleMessageDialog.ButtonStyle.TintedBlack],
|
||||
SimpleMessageDialog.ButtonStyle.TintedBlack],
|
||||
buttonCallBacks: [
|
||||
function() { DeviceItemListModel.revokeDevice(deviceId, "") }
|
||||
]
|
||||
|
@ -57,13 +64,20 @@ ColumnLayout {
|
|||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Text {
|
||||
id: title
|
||||
|
||||
text: JamiStrings.linkedDevices
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: root.title
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.weight: Font.Medium
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
|
@ -71,55 +85,34 @@ ColumnLayout {
|
|||
id: settingsListView
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 160
|
||||
Layout.preferredHeight: Math.min(model.count, 5) * (70 + spacing)
|
||||
spacing: JamiTheme.settingsListViewsSpacing
|
||||
interactive: !isCurrent
|
||||
|
||||
model: SortFilterProxyModel {
|
||||
sourceModel: DeviceItemListModel
|
||||
sorters: [
|
||||
RoleSorter { roleName: "IsCurrent"; sortOrder: Qt.DescendingOrder },
|
||||
StringSorter {
|
||||
roleName: "DeviceName"
|
||||
caseSensitivity: Qt.CaseInsensitive
|
||||
}
|
||||
RoleSorter { roleName: "DeviceName"; sortOrder: Qt.DescendingOrder}
|
||||
]
|
||||
|
||||
filters: ValueFilter {
|
||||
roleName: "DeviceID"
|
||||
value: CurrentAccount.deviceId
|
||||
inverted: root.inverted
|
||||
}
|
||||
}
|
||||
|
||||
delegate: DeviceItemDelegate {
|
||||
id: settingsListDelegate
|
||||
|
||||
implicitWidth: settingsListView.width
|
||||
width: settingsListView.width
|
||||
Layout.fillWidth: true
|
||||
implicitWidth: root.width
|
||||
height: 70
|
||||
|
||||
deviceName: DeviceName
|
||||
deviceName: root.isCurrent ? DeviceName : "Device name: " + DeviceName
|
||||
deviceId: DeviceID
|
||||
isCurrent: IsCurrent
|
||||
|
||||
onBtnRemoveDeviceClicked: removeDeviceSlot(index)
|
||||
isCurrent: root.isCurrent
|
||||
}
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: linkDevPushButton
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
|
||||
visible: CurrentAccount.managerUri === "" && CurrentAccount.enabled
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
pressedColor: JamiTheme.buttonTintedBlackPressed
|
||||
secondary: true
|
||||
toolTipText: JamiStrings.tipLinkNewDevice
|
||||
|
||||
iconSource: JamiResources.round_add_24dp_svg
|
||||
|
||||
text: JamiStrings.linkAnotherDevice
|
||||
|
||||
onClicked: viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"settingsview/components/LinkDeviceDialog.qml")
|
||||
}
|
||||
}
|
134
src/app/settingsview/components/LinkedDevicesPage.qml
Normal file
134
src/app/settingsview/components/LinkedDevicesPage.qml
Normal file
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@savoirfairelinux.com>
|
||||
* Author: Franck Laurent <franck.laurent@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 Qt.labs.platform
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.linkedDevicesSettingsTitle
|
||||
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: currentAccountEnableColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
Text {
|
||||
id: linkedDevicesTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.linkedAccountList
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: linkedDevices
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
LinkedDevicesBase {
|
||||
id: thisDevice
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
title: JamiStrings.linkedThisDevice
|
||||
}
|
||||
|
||||
LinkedDevicesBase {
|
||||
id: otherDevices
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
inverted: true
|
||||
isCurrent: false
|
||||
title: JamiStrings.linkedOtherDevices
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: linkedDevicesDescription
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
visible: (CurrentAccount.managerUri === "" && CurrentAccount.enabled)
|
||||
|
||||
text: JamiStrings.linkedAccountDescription
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
lineHeight: JamiTheme.wizardViewTextLineHeight
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: linkDevPushButton
|
||||
|
||||
TextMetrics{
|
||||
id: linkDevPushButtonTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
text: linkDevPushButton.text
|
||||
}
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
preferredWidth: linkDevPushButtonTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
visible: CurrentAccount.managerUri === "" && CurrentAccount.enabled
|
||||
|
||||
primary: true
|
||||
toolTipText: JamiStrings.tipLinkNewDevice
|
||||
text: JamiStrings.linkAnotherDevice
|
||||
|
||||
onClicked: viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"settingsview/components/LinkDeviceDialog.qml",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,150 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2022-2023 Savoir-faire Linux Inc.
|
||||
* Author: Nicolas Vengeon <nicolas.vengeon@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.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
property int itemWidth
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: JamiStrings.locationSharingLabel
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.textColor
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: isTimeLimit
|
||||
|
||||
visible: WITH_WEBENGINE
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.PositionShareLimit)
|
||||
|
||||
labelText: JamiStrings.positionShareLimit
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.positionShareLimit
|
||||
|
||||
onSwitchToggled: {
|
||||
positionSharingLimitation = !UtilsAdapter.getAppValue(Settings.PositionShareLimit)
|
||||
UtilsAdapter.setAppValue(Settings.PositionShareLimit,
|
||||
positionSharingLimitation)
|
||||
|
||||
}
|
||||
property bool positionSharingLimitation: UtilsAdapter.getAppValue(Settings.PositionShareLimit)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: timeSharingLocation
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
visible: isTimeLimit.positionSharingLimitation
|
||||
|
||||
function standartCountdown(minutes) {
|
||||
var hour = Math.floor(minutes / 60)
|
||||
var min = minutes % 60
|
||||
if (hour) {
|
||||
if (min)
|
||||
return qsTr("%1h%2min").arg(hour).arg(min)
|
||||
else
|
||||
return qsTr("%1h").arg(hour)
|
||||
}
|
||||
return qsTr("%1min").arg(min)
|
||||
}
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.positionShareDuration
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
elide: Text.ElideRight
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: timeSharingLocationValueLabel
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: timeSharingLocation.standartCountdown(UtilsAdapter.getAppValue(Settings.PositionShareDuration))
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: timeSharingSlider
|
||||
|
||||
Layout.maximumWidth: itemWidth
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
value: Math.log(UtilsAdapter.getAppValue(Settings.PositionShareDuration))
|
||||
|
||||
from: 0.5
|
||||
to: Math.log(600)
|
||||
stepSize: 0.05
|
||||
|
||||
onMoved: {
|
||||
timeSharingLocationValueLabel.text = timeSharingLocation.standartCountdown(Math.floor(Math.exp(value)))
|
||||
UtilsAdapter.setAppValue(Settings.PositionShareDuration, Math.floor(Math.exp(value)))
|
||||
}
|
||||
|
||||
MaterialToolTip {
|
||||
id: toolTip
|
||||
|
||||
text: JamiStrings.positionShareDuration
|
||||
visible: parent.hovered
|
||||
delay: Qt.styleHints.mousePressAndHoldInterval
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
220
src/app/settingsview/components/LocationSharingSettingsPage.qml
Normal file
220
src/app/settingsview/components/LocationSharingSettingsPage.qml
Normal file
|
@ -0,0 +1,220 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@savoirfairelinux.com>
|
||||
* Author: Nicolas Vengeon <nicolas.vengeon@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.Layouts
|
||||
import QtQuick.Controls
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../../mainview/components"
|
||||
import "../../mainview/js/contactpickercreation.js" as ContactPickerCreation
|
||||
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth: 578
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.locationSharingLabel
|
||||
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: callSettingsColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
RowLayout {
|
||||
id: timeSharingLocation
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
function standartCountdown(minutes) {
|
||||
var hour = Math.floor(minutes / 60)
|
||||
var min = minutes % 60
|
||||
if (hour) {
|
||||
if (min)
|
||||
return qsTr("%1h%2min").arg(hour).arg(min)
|
||||
else
|
||||
return qsTr("%1h").arg(hour)
|
||||
}
|
||||
return qsTr("%1min").arg(min)
|
||||
}
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.positionShareDuration
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
wrapMode : Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
|
||||
visible: WITH_WEBENGINE
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
|
||||
Text {
|
||||
id: minValue
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillHeight: true
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
text: JamiStrings.minLocationDuration
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: maxValue
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillHeight: true
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
text: JamiStrings.maxLocationDuration
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: timeSharingSlider
|
||||
|
||||
visible: WITH_WEBENGINE
|
||||
|
||||
Layout.maximumWidth: itemWidth
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
property bool isMax: UtilsAdapter.getAppValue(Settings.PositionShareDuration) < 0.05
|
||||
value: isMax ? Math.log(600) : Math.log(UtilsAdapter.getAppValue(Settings.PositionShareDuration))
|
||||
|
||||
function valueLabel(){
|
||||
if (value != Math.log(600)){
|
||||
UtilsAdapter.setAppValue(Settings.PositionShareDuration, Math.floor(Math.exp(value)))
|
||||
timeSharingLocationValueLabel.text = timeSharingLocation.standartCountdown(Math.floor(Math.exp(value)))
|
||||
}
|
||||
else {
|
||||
UtilsAdapter.setAppValue(Settings.PositionShareDuration, 0)
|
||||
timeSharingLocationValueLabel.text = JamiStrings.maxLocationDuration
|
||||
}
|
||||
}
|
||||
|
||||
from: 0.5
|
||||
to: Math.log(600)
|
||||
stepSize: 0.05
|
||||
|
||||
onMoved: valueLabel()
|
||||
|
||||
Component.onCompleted: valueLabel()
|
||||
|
||||
background: Rectangle {
|
||||
implicitWidth: 200
|
||||
implicitHeight: 2
|
||||
width: timeSharingSlider.availableWidth
|
||||
height: implicitHeight
|
||||
radius: 2
|
||||
color: JamiTheme.tintedBlue
|
||||
}
|
||||
|
||||
handle: ColumnLayout {
|
||||
x: timeSharingSlider.visualPosition * timeSharingSlider.availableWidth - textSize.width / 2
|
||||
|
||||
|
||||
Rectangle {
|
||||
Layout.topMargin: -12
|
||||
implicitWidth: 6
|
||||
implicitHeight: 25
|
||||
radius: implicitWidth
|
||||
color: JamiTheme.tintedBlue
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: timeSharingLocationValueLabel
|
||||
|
||||
TextMetrics{
|
||||
id: textSize
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
font.bold: true
|
||||
text: timeSharingLocationValueLabel.text
|
||||
}
|
||||
|
||||
color: JamiTheme.tintedBlue
|
||||
text: timeSharingLocation.standartCountdown(UtilsAdapter.getAppValue(Settings.PositionShareDuration))
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
font.bold: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: defaultSettings
|
||||
|
||||
TextMetrics{
|
||||
id: defaultSettingsTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: defaultSettings.text
|
||||
}
|
||||
|
||||
secondary: true
|
||||
|
||||
text: JamiStrings.defaultSettings
|
||||
preferredWidth: defaultSettingsTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
onClicked: {
|
||||
timeSharingSlider.value = Math.log(UtilsAdapter.getDefault(Settings.Key.PositionShareDuration))
|
||||
timeSharingSlider.valueLabel()
|
||||
UtilsAdapter.setToDefault(Settings.Key.PositionShareDuration)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -121,7 +121,6 @@ Window {
|
|||
|
||||
checked: false
|
||||
labelText: JamiStrings.logsViewDisplay
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: {
|
||||
logging = !logging
|
||||
|
@ -145,7 +144,7 @@ Window {
|
|||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
preferredWidth: itemWidth / widthDivisor
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
secondary: true
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
|
@ -170,7 +169,7 @@ Window {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: itemWidth / widthDivisor
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -210,7 +209,7 @@ Window {
|
|||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
preferredWidth: itemWidth / widthDivisor
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
447
src/app/settingsview/components/ManageAccountPage.qml
Normal file
447
src/app/settingsview/components/ManageAccountPage.qml
Normal file
|
@ -0,0 +1,447 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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 Qt.labs.platform
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property bool isSIP
|
||||
property int itemWidth: 250
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.manageAccountSettingsTitle
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
|
||||
id: manageAccountColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ColumnLayout {
|
||||
id: enableAccount
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: enableAccountTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.enableAccountSettingsTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: accountEnableSwitch
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
labelText: JamiStrings.enableAccountDescription
|
||||
|
||||
widthOfSwitch: 60
|
||||
heightOfSwitch: 30
|
||||
|
||||
checked: CurrentAccount.enabled
|
||||
onSwitchToggled: CurrentAccount.enableAccount(checked)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: userIdentity
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
visible: isSIP
|
||||
|
||||
Text {
|
||||
id: userIdentityTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.identity
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
SIPUserIdentity {
|
||||
id: sipUserIdentity
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: jamiIdentity
|
||||
|
||||
width: parent.width
|
||||
visible: !isSIP
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: jamiIdentityTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
text: JamiStrings.jamiIdentity
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
JamiIdentifier {
|
||||
id: jamiIdentifier
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.topMargin: 10
|
||||
Layout.preferredWidth: Math.min(360, root.width - JamiTheme.preferredSettingsMarginSize)
|
||||
backgroundColor: JamiTheme.jamiIdColor
|
||||
}
|
||||
|
||||
Text {
|
||||
id: jamiIdentifierDescription
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.usernameAccountDescription
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
lineHeight: JamiTheme.wizardViewTextLineHeight
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: encryptAccount
|
||||
|
||||
width: parent.width
|
||||
visible: !isSIP && CurrentAccount.managerUri === ""
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
|
||||
Text {
|
||||
id: encryptTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.encryptTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
Text {
|
||||
id: encryptDescription
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.ecryptAccountDescription
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
lineHeight: JamiTheme.wizardViewTextLineHeight
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: passwdPushButton
|
||||
|
||||
TextMetrics{
|
||||
id: passwdPushButtonTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
text: passwdPushButton.text
|
||||
}
|
||||
|
||||
preferredWidth: passwdPushButtonTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
primary: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
|
||||
toolTipText: CurrentAccount.hasArchivePassword ?
|
||||
JamiStrings.changeCurrentPassword :
|
||||
JamiStrings.setAPassword
|
||||
text: CurrentAccount.hasArchivePassword ?
|
||||
JamiStrings.changePassword :
|
||||
JamiStrings.setPassword
|
||||
|
||||
onClicked: viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/PasswordDialog.qml",
|
||||
{ purpose: CurrentAccount.hasArchivePassword ?
|
||||
PasswordDialog.ChangePassword :
|
||||
PasswordDialog.SetPassword })
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
||||
id: saveAccount
|
||||
width: parent.width
|
||||
visible: !isSIP && CurrentAccount.managerUri === ""
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: saveTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.saveAccountTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
Text {
|
||||
id: saveDescription
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.saveAccountDescription
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
lineHeight: JamiTheme.wizardViewTextLineHeight
|
||||
}
|
||||
|
||||
|
||||
MaterialButton {
|
||||
id: btnExportAccount
|
||||
|
||||
TextMetrics{
|
||||
id: btnExportAccountTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
text: btnExportAccount.text
|
||||
}
|
||||
|
||||
preferredWidth: btnExportAccountTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
primary: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
|
||||
toolTipText: JamiStrings.tipBackupAccount
|
||||
text: JamiStrings.saveAccountTitle
|
||||
|
||||
onClicked: {
|
||||
var dlg = viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/JamiFileDialog.qml",
|
||||
{
|
||||
title: JamiStrings.backupAccountHere,
|
||||
fileMode: FileDialog.SaveFile,
|
||||
folder: StandardPaths.writableLocation(StandardPaths.DesktopLocation),
|
||||
nameFilters: [JamiStrings.jamiArchiveFiles, JamiStrings.allFiles]
|
||||
})
|
||||
dlg.fileAccepted.connect(function (file) {
|
||||
// is there password? If so, go to password dialog, else, go to following directly
|
||||
var exportPath = UtilsAdapter.getAbsPath(file.toString())
|
||||
if (CurrentAccount.hasArchivePassword) {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/PasswordDialog.qml",
|
||||
{
|
||||
purpose: PasswordDialog.ExportAccount,
|
||||
path: exportPath
|
||||
})
|
||||
return
|
||||
} else if (exportPath.length > 0) {
|
||||
var success = AccountAdapter.model.exportToFile(LRCInstance.currentAccountId, exportPath)
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/SimpleMessageDialog.qml",
|
||||
{
|
||||
title: success ? JamiStrings.success : JamiStrings.error,
|
||||
infoText: success ? JamiStrings.backupSuccessful : JamiStrings.backupFailed,
|
||||
buttonTitles: [JamiStrings.optionOk],
|
||||
buttonStyles: [SimpleMessageDialog.ButtonStyle.TintedBlue]
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
||||
id: bannedAccount
|
||||
width: parent.width
|
||||
visible: !isSIP && CurrentAccount.hasBannedContacts
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: bannedAccountTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.bannedContacts
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
BannedContacts {
|
||||
id: bannedContacts
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: manageAccountDeleteColumnLayout
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: deleteTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.deleteAccountTitle
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
}
|
||||
|
||||
Text {
|
||||
id: deleteDescription
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.deleteAccountDescription
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
lineHeight: JamiTheme.wizardViewTextLineHeight
|
||||
}
|
||||
|
||||
|
||||
MaterialButton {
|
||||
id: deleteAccountPushButton
|
||||
|
||||
TextMetrics{
|
||||
id: deleteAccountPushButtonTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
text: deleteAccountPushButton.text
|
||||
}
|
||||
|
||||
preferredWidth: deleteAccountPushButtonTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
primary: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
color: JamiTheme.buttonTintedRed
|
||||
hoveredColor: JamiTheme.buttonTintedRedHovered
|
||||
pressedColor: JamiTheme.buttonTintedRedPressed
|
||||
|
||||
|
||||
text: JamiStrings.deleteAccount
|
||||
|
||||
onClicked: {
|
||||
var dlg = viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/DeleteAccountDialog.qml",
|
||||
{
|
||||
isSIP: CurrentAccount.type === Profile.Type.SIP,
|
||||
bestName: CurrentAccount.bestName,
|
||||
accountId: CurrentAccount.uri
|
||||
})
|
||||
dlg.accepted.connect(navigateToMainView)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -38,8 +38,10 @@ ItemDelegate {
|
|||
|
||||
highlighted: ListView.isCurrentItem
|
||||
background: Rectangle {
|
||||
color: highlighted? JamiTheme.selectedColor : JamiTheme.editBackgroundColor
|
||||
color: highlighted || hovered ? JamiTheme.smartListSelectedColor : JamiTheme.editBackgroundColor
|
||||
}
|
||||
hoverEnabled: true
|
||||
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
|
@ -61,7 +63,7 @@ ItemDelegate {
|
|||
layer {
|
||||
enabled: true
|
||||
effect: ColorOverlay {
|
||||
color: JamiTheme.textColor
|
||||
color: JamiTheme.tintedBlue
|
||||
}
|
||||
mipmap: false
|
||||
smooth: true
|
||||
|
|
|
@ -146,7 +146,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: enabled? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -165,7 +165,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -248,7 +248,7 @@ BaseModalDialog {
|
|||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -60,7 +60,7 @@ Rectangle {
|
|||
Layout.topMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -269,7 +269,7 @@ Rectangle {
|
|||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -162,7 +162,7 @@ Rectangle {
|
|||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -26,54 +26,51 @@ import net.jami.Constants 1.1
|
|||
|
||||
import "../../commoncomponents"
|
||||
|
||||
Rectangle {
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int contentWidth: pluginSettingsColumnLayout.width
|
||||
property int preferredHeight: pluginSettingsColumnLayout.implicitHeight
|
||||
title: JamiStrings.pluginSettingsTitle
|
||||
|
||||
color: JamiTheme.secondaryBackgroundColor
|
||||
|
||||
ColumnLayout {
|
||||
flickableContent: ColumnLayout {
|
||||
id: pluginSettingsColumnLayout
|
||||
|
||||
anchors.horizontalCenter: root.horizontalCenter
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
width: Math.min(JamiTheme.maximumWidthSettingsView, root.width)
|
||||
|
||||
ToggleSwitch {
|
||||
id: enabledplugin
|
||||
ColumnLayout {
|
||||
id: generalSettings
|
||||
|
||||
checked: PluginAdapter.isEnabled
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
ToggleSwitch {
|
||||
id: enabledplugin
|
||||
|
||||
labelText: JamiStrings.enable
|
||||
fontPointSize: JamiTheme.headerFontSize
|
||||
checked: PluginAdapter.isEnabled
|
||||
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
labelText: JamiStrings.enable
|
||||
|
||||
onSwitchToggled: {
|
||||
PluginModel.setPluginsEnabled(checked)
|
||||
PluginAdapter.isEnabled = checked
|
||||
onSwitchToggled: {
|
||||
PluginModel.setPluginsEnabled(checked)
|
||||
PluginAdapter.isEnabled = checked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PluginListView {
|
||||
id: pluginListView
|
||||
PluginListView {
|
||||
id: pluginListView
|
||||
|
||||
visible: PluginAdapter.isEnabled
|
||||
visible: PluginAdapter.isEnabled
|
||||
|
||||
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
Layout.topMargin: JamiTheme.preferredMarginSize
|
||||
Layout.minimumHeight: 0
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.minimumHeight: 0
|
||||
Layout.preferredHeight: childrenRect.height
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,260 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 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 Qt.labs.platform
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
property int itemWidth
|
||||
property string recordPath: AVModel.getRecordPath()
|
||||
property string screenshotPath: UtilsAdapter.getDirScreenshot()
|
||||
|
||||
onRecordPathChanged: {
|
||||
if(recordPath === "")
|
||||
return
|
||||
|
||||
if(AVModel) {
|
||||
AVModel.setRecordPath(recordPath)
|
||||
}
|
||||
}
|
||||
|
||||
onScreenshotPathChanged: {
|
||||
if (screenshotPath === "")
|
||||
return
|
||||
UtilsAdapter.setScreenshotPath(screenshotPath)
|
||||
}
|
||||
|
||||
FolderDialog {
|
||||
id: recordPathDialog
|
||||
|
||||
title: JamiStrings.selectFolder
|
||||
currentFolder: UtilsAdapter.getDirScreenshot()
|
||||
options: FolderDialog.ShowDirsOnly
|
||||
|
||||
onAccepted: {
|
||||
var dir = UtilsAdapter.getAbsPath(folder.toString())
|
||||
recordPath = dir
|
||||
}
|
||||
}
|
||||
|
||||
FolderDialog {
|
||||
id: screenshotPathDialog
|
||||
|
||||
title: JamiStrings.selectFolder
|
||||
currentFolder: StandardPaths.writableLocation(StandardPaths.PicturesLocation)
|
||||
options: FolderDialog.ShowDirsOnly
|
||||
|
||||
onAccepted: {
|
||||
var dir = UtilsAdapter.getAbsPath(folder.toString())
|
||||
screenshotPath = dir
|
||||
}
|
||||
}
|
||||
|
||||
Timer{
|
||||
id: updateRecordQualityTimer
|
||||
|
||||
interval: 500
|
||||
|
||||
onTriggered: AVModel.setRecordQuality(recordQualitySlider.value * 100)
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
|
||||
eText: JamiStrings.callRecording
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
maxWidth: width
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: alwaysRecordingCheckBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: AVModel.getAlwaysRecord()
|
||||
|
||||
labelText: JamiStrings.alwaysRecordCalls
|
||||
tooltipText: JamiStrings.alwaysRecordCalls
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: AVModel.setAlwaysRecord(checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: recordPreviewCheckBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: AVModel.getRecordPreview()
|
||||
|
||||
labelText: JamiStrings.includeLocalVideo
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: AVModel.setRecordPreview(checked)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.quality
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
elide: Text.ElideRight
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: recordQualityValueLabel
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: UtilsAdapter.getRecordQualityString(AVModel.getRecordQuality() / 100)
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: recordQualitySlider
|
||||
|
||||
Layout.maximumWidth: itemWidth
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
value: AVModel.getRecordQuality() / 100
|
||||
|
||||
from: 0
|
||||
to: 500
|
||||
stepSize: 1
|
||||
|
||||
onMoved: {
|
||||
recordQualityValueLabel.text = UtilsAdapter.getRecordQualityString(value)
|
||||
updateRecordQualityTimer.restart()
|
||||
}
|
||||
|
||||
MaterialToolTip {
|
||||
id: toolTip
|
||||
text: JamiStrings.quality
|
||||
visible: parent.hovered
|
||||
delay: Qt.styleHints.mousePressAndHoldInterval
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
text: JamiStrings.saveRecordingsTo
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: recordPathButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
toolTipText: JamiStrings.tipRecordFolder
|
||||
text: recordPath
|
||||
iconSource: JamiResources.round_folder_24dp_svg
|
||||
color: JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedGreyHovered
|
||||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
|
||||
onClicked: recordPathDialog.open()
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
text: JamiStrings.saveScreenshotsTo
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: screenshotPathButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
toolTipText: UtilsAdapter.getDirScreenshot()
|
||||
text: screenshotPath
|
||||
iconSource: JamiResources.round_folder_24dp_svg
|
||||
color: JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedGreyHovered
|
||||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
|
||||
onClicked: screenshotPathDialog.open()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -83,7 +83,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: enabled? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
@ -106,7 +106,7 @@ BaseModalDialog {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
|
|
|
@ -34,7 +34,6 @@ ColumnLayout {
|
|||
id: usernameSIP
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
staticText: CurrentAccount.username
|
||||
|
||||
|
@ -48,7 +47,6 @@ ColumnLayout {
|
|||
id: hostnameSIP
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
staticText: CurrentAccount.hostname
|
||||
|
||||
|
@ -62,7 +60,6 @@ ColumnLayout {
|
|||
id: passSIPlineEdit
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
staticText: CurrentAccount.password
|
||||
|
||||
|
@ -77,7 +74,6 @@ ColumnLayout {
|
|||
id: proxySIP
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
staticText: CurrentAccount.routeset
|
||||
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
|
||||
|
||||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth: 150
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.screenSharing
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: currentAccountEnableColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
SettingsComboBox {
|
||||
id: screenSharingFPSComboBoxSetting
|
||||
|
||||
visible: modelSize > 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tipText: JamiStrings.selectScreenSharingFPS
|
||||
labelText: JamiStrings.fps
|
||||
currentSelectionText: VideoDevices.screenSharingDefaultFps.toString()
|
||||
placeholderText: VideoDevices.screenSharingDefaultFps.toString()
|
||||
comboModel: ListModel { id: screenSharingFpsModel }
|
||||
role: "FPS"
|
||||
Component.onCompleted: {
|
||||
var elements = VideoDevices.sharingFpsSourceModel
|
||||
for (var item in elements) {
|
||||
screenSharingFpsModel.append({"FPS": elements[item]})
|
||||
}
|
||||
}
|
||||
|
||||
onActivated: VideoDevices.setDisplayFPS(screenSharingFpsModel.get(modelIndex).FPS)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -45,24 +45,23 @@ RowLayout {
|
|||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: button
|
||||
|
||||
Layout.fillHeight: true
|
||||
preferredWidth: root.itemWidth
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
textLeftPadding: JamiTheme.buttontextWizzardPadding /2
|
||||
textRightPadding: JamiTheme.buttontextWizzardPadding /2
|
||||
|
||||
iconSource: root.source
|
||||
color: JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedGreyHovered
|
||||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
secondary: true
|
||||
|
||||
onClicked: click()
|
||||
}
|
||||
|
|
|
@ -48,10 +48,9 @@ RowLayout {
|
|||
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
color: JamiTheme.textColor
|
||||
elide: Text.ElideRight
|
||||
wrapMode: Text.WordWrap
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
@ -64,9 +63,8 @@ RowLayout {
|
|||
hoverEnabled: true
|
||||
|
||||
Layout.preferredWidth: root.itemWidth
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
font.pointSize: JamiTheme.buttonFontSize
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
onValueChanged: newValue()
|
||||
|
@ -90,10 +88,12 @@ RowLayout {
|
|||
verticalAlignment: Qt.AlignVCenter
|
||||
inputMethodHints : Qt.ImhDigitsOnly
|
||||
validator: spinbox.validator
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
border.color: JamiTheme.spinboxBorderColor
|
||||
implicitHeight: textInput.implicitHeight + JamiTheme.buttontextHeightMargin
|
||||
color: JamiTheme.transparentColor
|
||||
radius: JamiTheme.primaryRadius
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ import "../../commoncomponents"
|
|||
RowLayout {
|
||||
id: root
|
||||
|
||||
property alias labelText: label.eText
|
||||
property alias labelText: title.text
|
||||
property alias comboModel: comboBoxOfLayout.model
|
||||
property alias tipText: comboBoxOfLayout.tooltipText
|
||||
property alias role: comboBoxOfLayout.textRole
|
||||
|
@ -37,27 +37,27 @@ RowLayout {
|
|||
property alias modelIndex: comboBoxOfLayout.currentIndex
|
||||
property alias modelSize: comboBoxOfLayout.count
|
||||
|
||||
property int heightOfLayout: 30
|
||||
property int widthOfComboBox: 50
|
||||
|
||||
signal activated
|
||||
|
||||
ElidedTextLabel {
|
||||
id: label
|
||||
Text {
|
||||
id: title
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: heightOfLayout
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
fontSize: JamiTheme.settingsFontSize
|
||||
maxWidth: widthOfComboBox
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.textColor
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
SettingParaCombobox {
|
||||
id: comboBoxOfLayout
|
||||
|
||||
Layout.preferredWidth: widthOfComboBox
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
font.pointSize: JamiTheme.buttonFontSize
|
||||
font.kerning: true
|
||||
|
|
|
@ -25,11 +25,14 @@ import net.jami.Constants 1.1
|
|||
|
||||
import "../../commoncomponents"
|
||||
|
||||
|
||||
|
||||
RowLayout {
|
||||
id: root
|
||||
|
||||
property string title: ""
|
||||
required property string title
|
||||
signal backArrowClicked
|
||||
spacing: 10
|
||||
|
||||
BackButton {
|
||||
id: backToSettingsMenuButton
|
||||
|
@ -44,11 +47,11 @@ RowLayout {
|
|||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: root.title
|
||||
font.pointSize: JamiTheme.titleFontSize
|
||||
font.pixelSize: JamiTheme.settingsHeaderPixelSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.textColor
|
||||
Layout.leftMargin: backToSettingsMenuButton.visible ? 0 : JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
|
|
@ -45,15 +45,13 @@ RowLayout {
|
|||
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize / 2
|
||||
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
ModalTextEdit {
|
||||
|
@ -64,7 +62,6 @@ RowLayout {
|
|||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.preferredWidth: itemWidth
|
||||
Layout.maximumHeight: 40
|
||||
staticText: root.staticText
|
||||
placeholderText: root.placeholderText ? root.placeholderText : root.titleField
|
||||
|
||||
|
@ -91,16 +88,17 @@ RowLayout {
|
|||
id: passwordTextEdit
|
||||
|
||||
visible: root.isPassword
|
||||
isSettings: true
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.preferredWidth: itemWidth
|
||||
Layout.maximumHeight: 40
|
||||
staticText: root.staticText
|
||||
placeholderText: root.placeholderText ? root.placeholderText : root.titleField
|
||||
|
||||
onAccepted: {
|
||||
root.dynamicText = dynamicText
|
||||
editFinished()
|
||||
echoMode = TextInput.Password
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,10 +31,8 @@ PushButton {
|
|||
property int menuType: 0
|
||||
|
||||
preferredHeight: 64
|
||||
preferredMargin: 24
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
preferredLeftMargin: 24
|
||||
preferredRightMargin: 24
|
||||
|
||||
buttonTextFont.pointSize: JamiTheme.textFontSize + 2
|
||||
textHAlign: Text.AlignLeft
|
||||
|
|
66
src/app/settingsview/components/SettingsPageBase.qml
Normal file
66
src/app/settingsview/components/SettingsPageBase.qml
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
required property Item flickableContent
|
||||
|
||||
property real contentFlickableWidth: Math.min(JamiTheme.maximumWidthSettingsView,
|
||||
root.width - 2 * JamiTheme.preferredSettingsMarginSize)
|
||||
|
||||
property color backgroundColor: JamiTheme.secondaryBackgroundColor
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
color: backgroundColor
|
||||
}
|
||||
|
||||
header: Rectangle {
|
||||
height: JamiTheme.settingsHeaderpreferredHeight
|
||||
width: root.preferredWidth
|
||||
color: backgroundColor
|
||||
|
||||
SettingsHeader {
|
||||
id: settingsHeader
|
||||
title: root.title
|
||||
anchors.fill: parent
|
||||
onBackArrowClicked: viewNode.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
JamiFlickable {
|
||||
id: flickable
|
||||
anchors.fill: parent
|
||||
contentHeight: contentItem.childrenRect.height
|
||||
contentItem.children: [flickableContent]
|
||||
topMargin: JamiTheme.preferredSettingsBottomMarginSize
|
||||
bottomMargin: JamiTheme.preferredSettingsBottomMarginSize
|
||||
}
|
||||
}
|
|
@ -1,269 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 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 Qt.labs.platform
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id:root
|
||||
|
||||
property int itemWidth
|
||||
property string downloadPath: UtilsAdapter.getDirDownload()
|
||||
|
||||
onDownloadPathChanged: {
|
||||
if(downloadPath === "") return
|
||||
UtilsAdapter.setDownloadPath(downloadPath)
|
||||
}
|
||||
|
||||
FolderDialog {
|
||||
id: downloadPathDialog
|
||||
|
||||
title: JamiStrings.selectFolder
|
||||
currentFolder: StandardPaths.writableLocation(StandardPaths.DownloadLocation)
|
||||
options: FolderDialog.ShowDirsOnly
|
||||
|
||||
onAccepted: {
|
||||
var dir = UtilsAdapter.getAbsPath(folder.toString())
|
||||
downloadPath = dir
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: JamiStrings.system
|
||||
color: JamiTheme.textColor
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
|
||||
|
||||
SettingsComboBox {
|
||||
id: themeComboBoxSettings
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
property var nativeDarkThemeShift: UtilsAdapter.hasNativeDarkTheme() ? 1 : 0
|
||||
|
||||
labelText: JamiStrings.applicationTheme
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
comboModel: ListModel {
|
||||
id: themeModel
|
||||
Component.onCompleted: {
|
||||
if (themeComboBoxSettings.nativeDarkThemeShift)
|
||||
append({ textDisplay: JamiStrings.system })
|
||||
append({ textDisplay: JamiStrings.light })
|
||||
append({ textDisplay: JamiStrings.dark })
|
||||
}
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
tipText: JamiStrings.applicationTheme
|
||||
role: "textDisplay"
|
||||
|
||||
modelIndex: {
|
||||
var theme = UtilsAdapter.getAppValue(Settings.Key.AppTheme)
|
||||
if (themeComboBoxSettings.nativeDarkThemeShift && theme === "System")
|
||||
return 0
|
||||
if (theme === "Light") {
|
||||
return 0 + nativeDarkThemeShift
|
||||
} else if (theme === "Dark") {
|
||||
return 1 + nativeDarkThemeShift
|
||||
}
|
||||
return nativeDarkThemeShift
|
||||
}
|
||||
|
||||
onActivated: {
|
||||
if (modelIndex === 0 + nativeDarkThemeShift)
|
||||
UtilsAdapter.setAppValue(Settings.Key.AppTheme, "Light")
|
||||
else if (modelIndex === 1 + nativeDarkThemeShift)
|
||||
UtilsAdapter.setAppValue(Settings.Key.AppTheme, "Dark")
|
||||
else if (modelIndex === 0)
|
||||
UtilsAdapter.setAppValue(Settings.Key.AppTheme, "System")
|
||||
}
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: notificationCheckBox
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.EnableNotifications)
|
||||
|
||||
labelText: JamiStrings.showNotifications
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.enableNotifications
|
||||
|
||||
onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.EnableNotifications, checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: closeOrMinCheckBox
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
checked: UtilsAdapter.getAppValue(Settings.MinimizeOnClose)
|
||||
|
||||
labelText: JamiStrings.keepMinimized
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.MinimizeOnClose, checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: applicationOnStartUpCheckBox
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: UtilsAdapter.checkStartupLink()
|
||||
|
||||
labelText: JamiStrings.runStartup
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tooltipText: JamiStrings.tipRunStartup
|
||||
|
||||
onSwitchToggled: UtilsAdapter.setRunOnStartUp(checked)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.downloadFolder
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: downloadButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
toolTipText: JamiStrings.tipChooseDownloadFolder
|
||||
text: downloadPath
|
||||
iconSource: JamiResources.round_folder_24dp_svg
|
||||
color: JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedGreyHovered
|
||||
pressedColor: JamiTheme.buttonTintedGreyPressed
|
||||
|
||||
onClicked: downloadPathDialog.open()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: langComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.language
|
||||
tipText: JamiStrings.language
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
comboModel: ListModel {
|
||||
id: langModel
|
||||
Component.onCompleted: {
|
||||
var supported = UtilsAdapter.supportedLang();
|
||||
var keys = Object.keys(supported);
|
||||
var currentKey = UtilsAdapter.getAppValue(Settings.Key.LANG);
|
||||
for (var i = 0 ; i < keys.length ; ++i) {
|
||||
append({ textDisplay: supported[keys[i]], id: keys[i] })
|
||||
if (keys[i] == currentKey)
|
||||
langComboBoxSetting.modelIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
widthOfComboBox: itemWidth
|
||||
role: "textDisplay"
|
||||
|
||||
onActivated: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.LANG, comboModel.get(modelIndex).id)
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeFontSize() {
|
||||
zoomSpinBox.valueField = Math.round(UtilsAdapter.getAppValue(Settings.BaseZoom) * 100.0)
|
||||
}
|
||||
|
||||
function onChangeLanguage() {
|
||||
var idx = themeComboBoxSettings.modelIndex
|
||||
themeModel.clear()
|
||||
if (themeComboBoxSettings.nativeDarkThemeShift)
|
||||
themeModel.append({ textDisplay: JamiStrings.system })
|
||||
themeModel.append({ textDisplay: JamiStrings.light })
|
||||
themeModel.append({ textDisplay: JamiStrings.dark })
|
||||
themeComboBoxSettings.modelIndex = idx
|
||||
|
||||
var langIdx = langComboBoxSetting.modelIndex
|
||||
langModel.clear()
|
||||
var supported = UtilsAdapter.supportedLang();
|
||||
var keys = Object.keys(supported);
|
||||
for (var i = 0 ; i < keys.length ; ++i) {
|
||||
langModel.append({ textDisplay: supported[keys[i]], id: keys[i] })
|
||||
}
|
||||
langComboBoxSetting.modelIndex = langIdx
|
||||
}
|
||||
}
|
||||
|
||||
SettingSpinBox {
|
||||
id: zoomSpinBox
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
title: JamiStrings.textZoom
|
||||
tooltipText: JamiStrings.changeTextSize
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
bottomValue: 50
|
||||
topValue: 200
|
||||
step: 10
|
||||
|
||||
valueField: UtilsAdapter.getAppValue(Settings.BaseZoom) * 100.0
|
||||
|
||||
onNewValue: UtilsAdapter.setAppValue(Settings.BaseZoom, valueField / 100.0)
|
||||
}
|
||||
}
|
260
src/app/settingsview/components/SystemSettingsPage.qml
Normal file
260
src/app/settingsview/components/SystemSettingsPage.qml
Normal file
|
@ -0,0 +1,260 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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 Qt.labs.platform
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property string downloadPath: UtilsAdapter.getDirDownload()
|
||||
property string downloadPathBestName: UtilsAdapter.dirName(UtilsAdapter.getDirDownload())
|
||||
property int itemWidth: 188
|
||||
|
||||
property bool isSIP
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.system
|
||||
|
||||
|
||||
onDownloadPathChanged: {
|
||||
if(downloadPath === "") return
|
||||
UtilsAdapter.setDownloadPath(downloadPath)
|
||||
}
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
|
||||
id: manageAccountEnableColumnLayout
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ColumnLayout {
|
||||
id: enableAccount
|
||||
|
||||
width: parent.width
|
||||
|
||||
FolderDialog {
|
||||
id: downloadPathDialog
|
||||
|
||||
title: JamiStrings.selectFolder
|
||||
currentFolder: StandardPaths.writableLocation(StandardPaths.DownloadLocation)
|
||||
options: FolderDialog.ShowDirsOnly
|
||||
|
||||
onAccepted: {
|
||||
var dir = UtilsAdapter.getAbsPath(folder.toString())
|
||||
var dirName = UtilsAdapter.dirName(folder.toString())
|
||||
downloadPath = dir
|
||||
downloadPathBestName = dirName
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: notificationCheckBox
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.EnableNotifications)
|
||||
labelText: JamiStrings.showNotifications
|
||||
tooltipText: JamiStrings.enableNotifications
|
||||
onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.EnableNotifications, checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: closeOrMinCheckBox
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: UtilsAdapter.getAppValue(Settings.MinimizeOnClose)
|
||||
labelText: JamiStrings.keepMinimized
|
||||
onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.MinimizeOnClose, checked)
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: applicationOnStartUpCheckBox
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: UtilsAdapter.checkStartupLink()
|
||||
labelText: JamiStrings.runStartup
|
||||
tooltipText: JamiStrings.tipRunStartup
|
||||
onSwitchToggled: UtilsAdapter.setRunOnStartUp(checked)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
wrapMode: Text.WordWrap
|
||||
color: JamiTheme.textColor
|
||||
text: JamiStrings.downloadFolder
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: downloadButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
textLeftPadding: JamiTheme.buttontextWizzardPadding
|
||||
textRightPadding: JamiTheme.buttontextWizzardPadding
|
||||
|
||||
toolTipText: downloadPath
|
||||
text: downloadPathBestName
|
||||
secondary: true
|
||||
|
||||
onClicked: downloadPathDialog.open()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: langComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
labelText: JamiStrings.language
|
||||
tipText: JamiStrings.language
|
||||
comboModel: ListModel {
|
||||
id: langModel
|
||||
Component.onCompleted: {
|
||||
var supported = UtilsAdapter.supportedLang();
|
||||
var keys = Object.keys(supported);
|
||||
var currentKey = UtilsAdapter.getAppValue(Settings.Key.LANG);
|
||||
for (var i = 0 ; i < keys.length ; ++i) {
|
||||
append({ textDisplay: supported[keys[i]], id: keys[i] })
|
||||
if (keys[i] === currentKey)
|
||||
langComboBoxSetting.modelIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
role: "textDisplay"
|
||||
|
||||
onActivated: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.LANG, comboModel.get(modelIndex).id)
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
|
||||
function onChangeLanguage() {
|
||||
var langIdx = langComboBoxSetting.modelIndex
|
||||
langModel.clear()
|
||||
var supported = UtilsAdapter.supportedLang();
|
||||
var keys = Object.keys(supported);
|
||||
for (var i = 0 ; i < keys.length ; ++i) {
|
||||
langModel.append({ textDisplay: supported[keys[i]], id: keys[i] })
|
||||
}
|
||||
langComboBoxSetting.modelIndex = langIdx
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategorySpacing
|
||||
|
||||
Text {
|
||||
id: experimentalTitle
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.preferredWidth: parent.width
|
||||
|
||||
text: JamiStrings.experimental
|
||||
color: JamiTheme.textColor
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode : Text.WordWrap
|
||||
|
||||
font.pixelSize: JamiTheme.settingsTitlePixelSize
|
||||
font.kerning: true
|
||||
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkboxCallSwarm
|
||||
Layout.fillWidth: true
|
||||
checked: UtilsAdapter.getAppValue(Settings.EnableExperimentalSwarm)
|
||||
labelText: JamiStrings.experimentalCallSwarm
|
||||
tooltipText: JamiStrings.experimentalCallSwarmTooltip
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.EnableExperimentalSwarm, checked)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: defaultSettings
|
||||
|
||||
TextMetrics{
|
||||
id: textSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: defaultSettings.text
|
||||
}
|
||||
|
||||
secondary: true
|
||||
|
||||
text: JamiStrings.defaultSettings
|
||||
preferredWidth: textSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
onClicked: {
|
||||
notificationCheckBox.checked = UtilsAdapter.getDefault(Settings.Key.EnableNotifications)
|
||||
closeOrMinCheckBox.checked = UtilsAdapter.getDefault(Settings.Key.MinimizeOnClose)
|
||||
checkboxCallSwarm.checked = UtilsAdapter.getDefault(Settings.Key.EnableExperimentalSwarm)
|
||||
langComboBoxSetting.modelIndex = 0
|
||||
|
||||
UtilsAdapter.setToDefault(Settings.Key.EnableNotifications)
|
||||
UtilsAdapter.setToDefault(Settings.Key.MinimizeOnClose)
|
||||
UtilsAdapter.setToDefault(Settings.Key.LANG)
|
||||
UtilsAdapter.setToDefault(Settings.Key.EnableExperimentalSwarm)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -27,10 +27,9 @@ import "../../commoncomponents"
|
|||
RowLayout {
|
||||
id: root
|
||||
property string labelText: ""
|
||||
property string descText: ""
|
||||
property int widthOfSwitch: 50
|
||||
property int heightOfSwitch: 10
|
||||
property int heightOfLayout: 30
|
||||
property int fontPointSize: JamiTheme.headerFontSize
|
||||
|
||||
property string tooltipText: ""
|
||||
|
||||
|
@ -39,19 +38,40 @@ RowLayout {
|
|||
|
||||
signal switchToggled
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: heightOfLayout
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
ColumnLayout {
|
||||
id: toggleLayout
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
spacing: 5
|
||||
|
||||
text: root.labelText
|
||||
font.pointSize: fontPointSize
|
||||
font.kerning: true
|
||||
elide: Text.ElideRight
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
Text {
|
||||
id: title
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
visible: labelText !== ""
|
||||
text: root.labelText
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
|
||||
Text {
|
||||
id: description
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
visible: descText !== ""
|
||||
text: root.descText
|
||||
font.pixelSize: JamiTheme.settingToggleDescrpitonPixelSize
|
||||
font.kerning: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
}
|
||||
|
||||
JamiSwitch {
|
||||
|
@ -59,7 +79,6 @@ RowLayout {
|
|||
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
|
||||
|
||||
Layout.preferredWidth: widthOfSwitch
|
||||
Layout.preferredHeight: heightOfSwitch
|
||||
|
||||
hoverEnabled: true
|
||||
toolTipText: tooltipText
|
||||
|
@ -80,4 +99,5 @@ RowLayout {
|
|||
switchToggled()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2021-2023 Savoir-faire Linux Inc.
|
||||
* Author: Trevor Tabah <trevor.tabah@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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../js/logviewwindowcreation.js" as LogViewWindowCreation
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
property int itemWidth
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: JamiStrings.troubleshootTitle
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.textColor
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 30
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
text: JamiStrings.troubleshootText
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
elide: Text.ElideRight
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: enableTroubleshootingButton
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: itemWidth / 1.5
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
color: JamiTheme.buttonTintedBlack
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
pressedColor: JamiTheme.buttonTintedBlackPressed
|
||||
secondary: true
|
||||
|
||||
text: JamiStrings.troubleshootButton
|
||||
toolTipText: JamiStrings.troubleshootButton
|
||||
|
||||
onClicked: {
|
||||
LogViewWindowCreation.createlogViewWindowObject()
|
||||
LogViewWindowCreation.showLogViewWindow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: checkboxCallSwarm
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
checked: UtilsAdapter.getAppValue(Settings.EnableExperimentalSwarm)
|
||||
labelText: JamiStrings.experimentalCallSwarm
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
tooltipText: JamiStrings.experimentalCallSwarmTooltip
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.EnableExperimentalSwarm, checked)
|
||||
}
|
||||
}
|
||||
}
|
96
src/app/settingsview/components/TroubleshootSettingsPage.qml
Normal file
96
src/app/settingsview/components/TroubleshootSettingsPage.qml
Normal file
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* Copyright (C) 2021-2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@savoirfairelinux.com>
|
||||
* Author: Trevor Tabah <trevor.tabah@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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
import "../js/logviewwindowcreation.js" as LogViewWindowCreation
|
||||
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.troubleshootTitle
|
||||
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: troubleshootSettingsColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
RowLayout {
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 30
|
||||
Layout.rightMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
text: JamiStrings.troubleshootText
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: enableTroubleshootingButton
|
||||
|
||||
TextMetrics{
|
||||
id: enableTroubleshootingButtonTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: enableTroubleshootingButton.text
|
||||
}
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
preferredWidth: enableTroubleshootingButtonTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
|
||||
|
||||
primary: true
|
||||
|
||||
text: JamiStrings.troubleshootButton
|
||||
toolTipText: JamiStrings.troubleshootButton
|
||||
|
||||
onClicked: {
|
||||
LogViewWindowCreation.createlogViewWindowObject()
|
||||
LogViewWindowCreation.showLogViewWindow()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,184 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 Savoir-faire Linux Inc.
|
||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@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.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
text: JamiStrings.updatesTitle
|
||||
font.pointSize: JamiTheme.headerFontSize
|
||||
font.kerning: true
|
||||
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: autoUpdateCheckBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
checked: Qt.platform.os.toString() === "windows" ?
|
||||
UtilsAdapter.getAppValue(Settings.Key.AutoUpdate) :
|
||||
UpdateManager.isAutoUpdaterEnabled()
|
||||
|
||||
labelText: JamiStrings.update
|
||||
tooltipText: JamiStrings.enableAutoUpdates
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.AutoUpdate, checked)
|
||||
UpdateManager.setAutoUpdateCheck(checked)
|
||||
}
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: checkUpdateButton
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
color: enabled? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
pressedColor: JamiTheme.buttonTintedBlackPressed
|
||||
secondary: true
|
||||
autoAccelerator: true
|
||||
|
||||
toolTipText: JamiStrings.checkForUpdates
|
||||
text: JamiStrings.checkForUpdates
|
||||
|
||||
onClicked: UpdateManager.checkForUpdates()
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: installBetaButton
|
||||
|
||||
visible: !UpdateManager.isCurrentVersionBeta() && Qt.platform.os.toString() === "windows"
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
color: enabled? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
pressedColor: JamiTheme.buttonTintedBlackPressed
|
||||
secondary: true
|
||||
autoAccelerator: true
|
||||
|
||||
toolTipText: JamiStrings.betaInstall
|
||||
text: JamiStrings.betaInstall
|
||||
|
||||
onClicked: presentConfirmInstallDialog(JamiStrings.confirmBeta, true)
|
||||
}
|
||||
|
||||
function presentInfoDialog(infoText) {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/SimpleMessageDialog.qml",
|
||||
{
|
||||
title: JamiStrings.updateDialogTitle,
|
||||
infoText: infoText,
|
||||
buttonTitles: [JamiStrings.optionOk],
|
||||
buttonStyles: [SimpleMessageDialog.ButtonStyle.TintedBlue],
|
||||
buttonCallBacks: []
|
||||
})
|
||||
}
|
||||
|
||||
function presentConfirmInstallDialog(infoText, beta) {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/SimpleMessageDialog.qml",
|
||||
{
|
||||
title: JamiStrings.updateDialogTitle,
|
||||
infoText: infoText,
|
||||
buttonTitles: [JamiStrings.optionUpgrade, JamiStrings.optionLater],
|
||||
buttonStyles: [
|
||||
SimpleMessageDialog.ButtonStyle.TintedBlue,
|
||||
SimpleMessageDialog.ButtonStyle.TintedBlue
|
||||
],
|
||||
buttonCallBacks: [function() {UpdateManager.applyUpdates(beta)}]
|
||||
})
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UpdateManager
|
||||
|
||||
function errorToString(error) {
|
||||
switch(error){
|
||||
case NetWorkManager.ACCESS_DENIED:
|
||||
return JamiStrings.genericError
|
||||
case NetWorkManager.DISCONNECTED:
|
||||
return JamiStrings.networkDisconnected
|
||||
case NetWorkManager.NETWORK_ERROR:
|
||||
return JamiStrings.updateNetworkError
|
||||
case NetWorkManager.SSL_ERROR:
|
||||
return JamiStrings.updateSSLError
|
||||
case NetWorkManager.CANCELED:
|
||||
return JamiStrings.updateDownloadCanceled
|
||||
default: return {}
|
||||
}
|
||||
}
|
||||
|
||||
function onUpdateDownloadStarted() {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"settingsview/components/UpdateDownloadDialog.qml",
|
||||
{title: JamiStrings.updateDialogTitle})
|
||||
}
|
||||
|
||||
function onUpdateCheckReplyReceived(ok, found) {
|
||||
if (!ok) {
|
||||
presentInfoDialog(JamiStrings.updateCheckError)
|
||||
return
|
||||
}
|
||||
if (!found) {
|
||||
presentInfoDialog(JamiStrings.updateNotFound)
|
||||
} else {
|
||||
presentConfirmInstallDialog(JamiStrings.updateFound, false)
|
||||
}
|
||||
}
|
||||
|
||||
function onUpdateDownloadErrorOccurred(error) {
|
||||
presentInfoDialog(errorToString(error))
|
||||
}
|
||||
|
||||
function onUpdateCheckErrorOccurred(error) {
|
||||
presentInfoDialog(errorToString(error))
|
||||
}
|
||||
}
|
||||
}
|
188
src/app/settingsview/components/UpdatesSettingsPage.qml
Normal file
188
src/app/settingsview/components/UpdatesSettingsPage.qml
Normal file
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
* Copyright (C) 2021-2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@savoirfairelinux.com>
|
||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.updatesTitle
|
||||
|
||||
function presentInfoDialog(infoText) {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/SimpleMessageDialog.qml",
|
||||
{
|
||||
title: JamiStrings.updateDialogTitle,
|
||||
infoText: infoText,
|
||||
buttonTitles: [JamiStrings.optionOk],
|
||||
buttonStyles: [SimpleMessageDialog.ButtonStyle.TintedBlue],
|
||||
buttonCallBacks: []
|
||||
})
|
||||
}
|
||||
|
||||
function presentConfirmInstallDialog(infoText, beta) {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"commoncomponents/SimpleMessageDialog.qml",
|
||||
{
|
||||
title: JamiStrings.updateDialogTitle,
|
||||
infoText: infoText,
|
||||
buttonTitles: [JamiStrings.optionUpgrade, JamiStrings.optionLater],
|
||||
buttonStyles: [
|
||||
SimpleMessageDialog.ButtonStyle.TintedBlue,
|
||||
SimpleMessageDialog.ButtonStyle.TintedBlue
|
||||
],
|
||||
buttonCallBacks: [function() {UpdateManager.applyUpdates(beta)}]
|
||||
})
|
||||
}
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
|
||||
id: manageAccountEnableColumnLayout
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
ToggleSwitch {
|
||||
id: autoUpdateCheckBox
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
checked: Qt.platform.os.toString() === "windows" ?
|
||||
UtilsAdapter.getAppValue(Settings.Key.AutoUpdate) :
|
||||
UpdateManager.isAutoUpdaterEnabled()
|
||||
|
||||
labelText: JamiStrings.update
|
||||
tooltipText: JamiStrings.enableAutoUpdates
|
||||
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.AutoUpdate, checked)
|
||||
UpdateManager.setAutoUpdateCheck(checked)
|
||||
}
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: checkUpdateButton
|
||||
|
||||
TextMetrics{
|
||||
id: checkUpdateButtonTextSize
|
||||
font.weight: Font.Bold
|
||||
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
|
||||
font.capitalization: Font.AllUppercase
|
||||
text: checkUpdateButton.text
|
||||
}
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
|
||||
preferredWidth: checkUpdateButtonTextSize.width + 2*JamiTheme.buttontextWizzardPadding
|
||||
|
||||
primary: true
|
||||
autoAccelerator: true
|
||||
|
||||
toolTipText: JamiStrings.checkForUpdates
|
||||
text: JamiStrings.checkForUpdates
|
||||
|
||||
onClicked: UpdateManager.checkForUpdates()
|
||||
}
|
||||
|
||||
MaterialButton {
|
||||
id: installBetaButton
|
||||
|
||||
visible: !UpdateManager.isCurrentVersionBeta() && Qt.platform.os.toString() === "windows"
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
preferredWidth: JamiTheme.preferredFieldWidth
|
||||
|
||||
color: enabled? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
|
||||
hoveredColor: JamiTheme.buttonTintedBlackHovered
|
||||
pressedColor: JamiTheme.buttonTintedBlackPressed
|
||||
secondary: true
|
||||
autoAccelerator: true
|
||||
|
||||
toolTipText: JamiStrings.betaInstall
|
||||
text: JamiStrings.betaInstall
|
||||
|
||||
onClicked: presentConfirmInstallDialog(JamiStrings.confirmBeta, true)
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UpdateManager
|
||||
|
||||
function errorToString(error) {
|
||||
switch(error){
|
||||
case NetWorkManager.ACCESS_DENIED:
|
||||
return JamiStrings.genericError
|
||||
case NetWorkManager.DISCONNECTED:
|
||||
return JamiStrings.networkDisconnected
|
||||
case NetWorkManager.NETWORK_ERROR:
|
||||
return JamiStrings.updateNetworkError
|
||||
case NetWorkManager.SSL_ERROR:
|
||||
return JamiStrings.updateSSLError
|
||||
case NetWorkManager.CANCELED:
|
||||
return JamiStrings.updateDownloadCanceled
|
||||
default: return {}
|
||||
}
|
||||
}
|
||||
|
||||
function onUpdateDownloadStarted() {
|
||||
viewCoordinator.presentDialog(
|
||||
appWindow,
|
||||
"settingsview/components/UpdateDownloadDialog.qml",
|
||||
{title: JamiStrings.updateDialogTitle})
|
||||
}
|
||||
|
||||
function onUpdateCheckReplyReceived(ok, found) {
|
||||
if (!ok) {
|
||||
presentInfoDialog(JamiStrings.updateCheckError)
|
||||
return
|
||||
}
|
||||
if (!found) {
|
||||
presentInfoDialog(JamiStrings.updateNotFound)
|
||||
} else {
|
||||
presentConfirmInstallDialog(JamiStrings.updateFound, false)
|
||||
}
|
||||
}
|
||||
|
||||
function onUpdateDownloadErrorOccurred(error) {
|
||||
presentInfoDialog(errorToString(error))
|
||||
}
|
||||
|
||||
function onUpdateCheckErrorOccurred(error) {
|
||||
presentInfoDialog(errorToString(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,334 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 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 Qt5Compat.GraphicalEffects
|
||||
|
||||
import SortFilterProxyModel 0.2
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
property real aspectRatio: 0.75
|
||||
property int itemWidth
|
||||
|
||||
function startPreviewing(force = false) {
|
||||
if (!visible) {
|
||||
return
|
||||
}
|
||||
previewWidget.startWithId(VideoDevices.getDefaultDevice(), force)
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
flipControl.checked = UtilsAdapter.getAppValue(Settings.FlipSelf)
|
||||
if (visible) {
|
||||
hardwareAccelControl.checked = AvAdapter.getHardwareAcceleration()
|
||||
if (previewWidget.visible)
|
||||
startPreviewing(true)
|
||||
} else {
|
||||
previewWidget.startWithId("")
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: VideoDevices
|
||||
|
||||
function onDefaultResChanged() {
|
||||
startPreviewing(true)
|
||||
}
|
||||
|
||||
function onDefaultFpsChanged() {
|
||||
startPreviewing(true)
|
||||
}
|
||||
|
||||
function onDeviceAvailable() {
|
||||
startPreviewing()
|
||||
}
|
||||
|
||||
function onDeviceListChanged() {
|
||||
var deviceModel = deviceComboBoxSetting.comboModel
|
||||
var resModel = resolutionComboBoxSetting.comboModel
|
||||
var fpsModel = fpsComboBoxSetting.comboModel
|
||||
|
||||
var resultList = deviceModel.match(deviceModel.index(0, 0),
|
||||
VideoInputDeviceModel.DeviceId,
|
||||
VideoDevices.defaultId)
|
||||
deviceComboBoxSetting.modelIndex = resultList.length > 0 ?
|
||||
resultList[0].row : deviceModel.rowCount() ? 0 : -1
|
||||
|
||||
resultList = resModel.match(resModel.index(0, 0),
|
||||
VideoFormatResolutionModel.Resolution,
|
||||
VideoDevices.defaultRes)
|
||||
resolutionComboBoxSetting.modelIndex = resultList.length > 0 ?
|
||||
resultList[0].row : deviceModel.rowCount() ? 0 : -1
|
||||
|
||||
resultList = fpsModel.match(fpsModel.index(0, 0),
|
||||
VideoFormatFpsModel.FPS,
|
||||
VideoDevices.defaultFps)
|
||||
fpsComboBoxSetting.modelIndex = resultList.length > 0 ?
|
||||
resultList[0].row : deviceModel.rowCount() ? 0 : -1
|
||||
}
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
eText: JamiStrings.video
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: itemWidth * 2
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: deviceComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
enabled: VideoDevices.listSize !== 0
|
||||
opacity: enabled ? 1.0 : 0.5
|
||||
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
widthOfComboBox: itemWidth
|
||||
|
||||
labelText: JamiStrings.device
|
||||
tipText: JamiStrings.selectVideoDevice
|
||||
placeholderText: JamiStrings.noVideoDevice
|
||||
currentSelectionText: VideoDevices.defaultName
|
||||
|
||||
comboModel: SortFilterProxyModel {
|
||||
id: filteredDevicesModel
|
||||
sourceModel: SortFilterProxyModel {
|
||||
id: deviceSourceModel
|
||||
sourceModel: VideoDevices.deviceSourceModel
|
||||
}
|
||||
filters: ValueFilter {
|
||||
roleName: "DeviceName"
|
||||
value: VideoDevices.defaultName
|
||||
inverted: true
|
||||
enabled: deviceSourceModel.count > 1
|
||||
}
|
||||
}
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
// TODO: start and stop preview logic in here should be in LRC
|
||||
previewWidget.startWithId("")
|
||||
VideoDevices.setDefaultDevice(
|
||||
filteredDevicesModel.mapToSource(modelIndex))
|
||||
startPreviewing()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: resolutionComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
enabled: VideoDevices.listSize !== 0
|
||||
opacity: enabled ? 1.0 : 0.5
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
labelText: JamiStrings.resolution
|
||||
currentSelectionText: VideoDevices.defaultRes
|
||||
tipText: JamiStrings.selectVideoResolution
|
||||
|
||||
comboModel: SortFilterProxyModel {
|
||||
id: filteredResModel
|
||||
sourceModel: SortFilterProxyModel {
|
||||
id: resSourceModel
|
||||
sourceModel: VideoDevices.resSourceModel
|
||||
}
|
||||
filters: ValueFilter {
|
||||
roleName: "Resolution"
|
||||
value: VideoDevices.defaultRes
|
||||
inverted: true
|
||||
enabled: resSourceModel.count > 1
|
||||
}
|
||||
}
|
||||
role: "Resolution"
|
||||
|
||||
onActivated: VideoDevices.setDefaultDeviceRes(
|
||||
filteredResModel.mapToSource(modelIndex))
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: fpsComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
enabled: VideoDevices.listSize !== 0
|
||||
opacity: enabled ? 1.0 : 0.5
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tipText: JamiStrings.selectFPS
|
||||
labelText: JamiStrings.fps
|
||||
currentSelectionText: VideoDevices.defaultFps.toString()
|
||||
comboModel: SortFilterProxyModel {
|
||||
id: filteredFpsModel
|
||||
sourceModel: SortFilterProxyModel {
|
||||
id: fpsSourceModel
|
||||
sourceModel: VideoDevices.fpsSourceModel
|
||||
}
|
||||
filters: ValueFilter {
|
||||
roleName: "FPS"
|
||||
value: VideoDevices.defaultFps
|
||||
inverted: true
|
||||
enabled: fpsSourceModel.count > 1
|
||||
}
|
||||
}
|
||||
role: "FPS"
|
||||
|
||||
onActivated: VideoDevices.setDefaultDeviceFps(
|
||||
filteredFpsModel.mapToSource(modelIndex))
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: hardwareAccelControl
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.enableHWAccel
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: {
|
||||
AvAdapter.setHardwareAcceleration(checked)
|
||||
startPreviewing(true)
|
||||
}
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: flipControl
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
labelText: JamiStrings.mirrorLocalVideo
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.FlipSelf, checked)
|
||||
CurrentCall.flipSelf = UtilsAdapter.getAppValue(Settings.FlipSelf)
|
||||
}
|
||||
}
|
||||
|
||||
// video Preview
|
||||
Rectangle {
|
||||
visible: VideoDevices.listSize !== 0
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.preferredHeight: width * previewWidget.invAspectRatio
|
||||
|
||||
Layout.minimumWidth: 200
|
||||
Layout.maximumWidth: 400
|
||||
Layout.preferredWidth: itemWidth * 2
|
||||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
color: JamiTheme.primaryForegroundColor
|
||||
|
||||
LocalVideo {
|
||||
id: previewWidget
|
||||
|
||||
anchors.fill: parent
|
||||
flip: flipControl.checked
|
||||
|
||||
underlayItems: Text {
|
||||
anchors.centerIn: parent
|
||||
font.pointSize: 18
|
||||
font.capitalization: Font.AllUppercase
|
||||
color: "white"
|
||||
text: JamiStrings.noVideo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: VideoDevices.listSize === 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
text: JamiStrings.previewUnavailable
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.primaryForegroundColor
|
||||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
ElidedTextLabel {
|
||||
id: screenSharingSetTitle
|
||||
visible: screenSharingFPSComboBoxSetting.modelSize > 0
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
eText: JamiStrings.screenSharing
|
||||
fontSize: JamiTheme.headerFontSize
|
||||
maxWidth: itemWidth * 2
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: screenSharingFPSComboBoxSetting
|
||||
|
||||
visible: modelSize > 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
fontPointSize: JamiTheme.settingsFontSize
|
||||
|
||||
tipText: JamiStrings.selectScreenSharingFPS
|
||||
labelText: JamiStrings.fps
|
||||
currentSelectionText: VideoDevices.screenSharingDefaultFps.toString()
|
||||
placeholderText: VideoDevices.screenSharingDefaultFps.toString()
|
||||
comboModel: ListModel { id: screenSharingFpsModel }
|
||||
role: "FPS"
|
||||
Component.onCompleted: {
|
||||
var elements = VideoDevices.sharingFpsSourceModel
|
||||
for (var item in elements) {
|
||||
screenSharingFpsModel.append({"FPS": elements[item]})
|
||||
}
|
||||
}
|
||||
|
||||
onActivated: VideoDevices.setDisplayFPS(screenSharingFpsModel.get(modelIndex).FPS)
|
||||
}
|
||||
}
|
294
src/app/settingsview/components/VideoSettingsPage.qml
Normal file
294
src/app/settingsview/components/VideoSettingsPage.qml
Normal file
|
@ -0,0 +1,294 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Fadi Shehadeh <fadi.shehadeh@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 Qt5Compat.GraphicalEffects
|
||||
|
||||
import SortFilterProxyModel 0.2
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
|
||||
import "../../commoncomponents"
|
||||
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
|
||||
property int itemWidth: 266
|
||||
property real aspectRatio: 0.75
|
||||
|
||||
signal navigateToMainView
|
||||
signal navigateToNewWizardView
|
||||
title: JamiStrings.video
|
||||
|
||||
flickableContent: ColumnLayout {
|
||||
id: currentAccountEnableColumnLayout
|
||||
|
||||
width: contentFlickableWidth
|
||||
spacing: JamiTheme.settingsBlockSpacing
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: JamiTheme.preferredSettingsMarginSize
|
||||
|
||||
|
||||
ColumnLayout {
|
||||
id: generalSettings
|
||||
|
||||
width: parent.width
|
||||
spacing: JamiTheme.settingsCategoryAudioVideoSpacing
|
||||
|
||||
function startPreviewing(force = false) {
|
||||
if (!visible) {
|
||||
return
|
||||
}
|
||||
previewWidget.startWithId(VideoDevices.getDefaultDevice(), force)
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
flipControl.checked = UtilsAdapter.getAppValue(Settings.FlipSelf)
|
||||
if (visible) {
|
||||
hardwareAccelControl.checked = AvAdapter.getHardwareAcceleration()
|
||||
if (previewWidget.visible)
|
||||
generalSettings.startPreviewing(true)
|
||||
} else {
|
||||
previewWidget.startWithId("")
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: VideoDevices
|
||||
|
||||
function onDefaultResChanged() {
|
||||
generalSettings.startPreviewing(true)
|
||||
}
|
||||
|
||||
function onDefaultFpsChanged() {
|
||||
generalSettings.startPreviewing(true)
|
||||
}
|
||||
|
||||
function onDeviceAvailable() {
|
||||
generalSettings.startPreviewing()
|
||||
}
|
||||
|
||||
function onDeviceListChanged() {
|
||||
var deviceModel = deviceComboBoxSetting.comboModel
|
||||
var resModel = resolutionComboBoxSetting.comboModel
|
||||
var fpsModel = fpsComboBoxSetting.comboModel
|
||||
|
||||
var resultList = deviceModel.match(deviceModel.index(0, 0),
|
||||
VideoInputDeviceModel.DeviceId,
|
||||
VideoDevices.defaultId)
|
||||
deviceComboBoxSetting.modelIndex = resultList.length > 0 ?
|
||||
resultList[0].row : deviceModel.rowCount() ? 0 : -1
|
||||
|
||||
resultList = resModel.match(resModel.index(0, 0),
|
||||
VideoFormatResolutionModel.Resolution,
|
||||
VideoDevices.defaultRes)
|
||||
resolutionComboBoxSetting.modelIndex = resultList.length > 0 ?
|
||||
resultList[0].row : deviceModel.rowCount() ? 0 : -1
|
||||
|
||||
resultList = fpsModel.match(fpsModel.index(0, 0),
|
||||
VideoFormatFpsModel.FPS,
|
||||
VideoDevices.defaultFps)
|
||||
fpsComboBoxSetting.modelIndex = resultList.length > 0 ?
|
||||
resultList[0].row : deviceModel.rowCount() ? 0 : -1
|
||||
}
|
||||
}
|
||||
|
||||
// video Preview
|
||||
Rectangle {
|
||||
visible: VideoDevices.listSize !== 0
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.preferredHeight: width * previewWidget.invAspectRatio
|
||||
|
||||
Layout.minimumWidth: 200
|
||||
Layout.maximumWidth: 515
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.bottomMargin: JamiTheme.preferredMarginSize
|
||||
|
||||
color: JamiTheme.primaryForegroundColor
|
||||
|
||||
LocalVideo {
|
||||
id: previewWidget
|
||||
|
||||
anchors.fill: parent
|
||||
flip: flipControl.checked
|
||||
|
||||
underlayItems: Text {
|
||||
anchors.centerIn: parent
|
||||
font.pointSize: 18
|
||||
font.capitalization: Font.AllUppercase
|
||||
color: "white"
|
||||
text: JamiStrings.noVideo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: flipControl
|
||||
|
||||
Layout.fillWidth: true
|
||||
labelText: JamiStrings.mirrorLocalVideo
|
||||
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.FlipSelf, checked)
|
||||
CurrentCall.flipSelf = UtilsAdapter.getAppValue(Settings.FlipSelf)
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: deviceComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
enabled: VideoDevices.listSize !== 0
|
||||
opacity: enabled ? 1.0 : 0.5
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
|
||||
labelText: JamiStrings.device
|
||||
tipText: JamiStrings.selectVideoDevice
|
||||
placeholderText: JamiStrings.noVideoDevice
|
||||
currentSelectionText: VideoDevices.defaultName
|
||||
|
||||
comboModel: SortFilterProxyModel {
|
||||
id: filteredDevicesModel
|
||||
sourceModel: SortFilterProxyModel {
|
||||
id: deviceSourceModel
|
||||
sourceModel: VideoDevices.deviceSourceModel
|
||||
}
|
||||
filters: ValueFilter {
|
||||
roleName: "DeviceName"
|
||||
value: VideoDevices.defaultName
|
||||
inverted: true
|
||||
enabled: deviceSourceModel.count > 1
|
||||
}
|
||||
}
|
||||
role: "DeviceName"
|
||||
|
||||
onActivated: {
|
||||
// TODO: start and stop preview logic in here should be in LRC
|
||||
previewWidget.startWithId("")
|
||||
VideoDevices.setDefaultDevice(
|
||||
filteredDevicesModel.mapToSource(modelIndex))
|
||||
generalSettings.startPreviewing()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: resolutionComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
enabled: VideoDevices.listSize !== 0
|
||||
opacity: enabled ? 1.0 : 0.5
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
|
||||
labelText: JamiStrings.resolution
|
||||
currentSelectionText: VideoDevices.defaultRes
|
||||
tipText: JamiStrings.selectVideoResolution
|
||||
|
||||
comboModel: SortFilterProxyModel {
|
||||
id: filteredResModel
|
||||
sourceModel: SortFilterProxyModel {
|
||||
id: resSourceModel
|
||||
sourceModel: VideoDevices.resSourceModel
|
||||
}
|
||||
filters: ValueFilter {
|
||||
roleName: "Resolution"
|
||||
value: VideoDevices.defaultRes
|
||||
inverted: true
|
||||
enabled: resSourceModel.count > 1
|
||||
}
|
||||
}
|
||||
role: "Resolution"
|
||||
|
||||
onActivated: VideoDevices.setDefaultDeviceRes(
|
||||
filteredResModel.mapToSource(modelIndex))
|
||||
}
|
||||
|
||||
SettingsComboBox {
|
||||
id: fpsComboBoxSetting
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
enabled: VideoDevices.listSize !== 0
|
||||
opacity: enabled ? 1.0 : 0.5
|
||||
|
||||
widthOfComboBox: itemWidth
|
||||
|
||||
tipText: JamiStrings.selectFPS
|
||||
labelText: JamiStrings.fps
|
||||
currentSelectionText: VideoDevices.defaultFps.toString()
|
||||
comboModel: SortFilterProxyModel {
|
||||
id: filteredFpsModel
|
||||
sourceModel: SortFilterProxyModel {
|
||||
id: fpsSourceModel
|
||||
sourceModel: VideoDevices.fpsSourceModel
|
||||
}
|
||||
filters: ValueFilter {
|
||||
roleName: "FPS"
|
||||
value: VideoDevices.defaultFps
|
||||
inverted: true
|
||||
enabled: fpsSourceModel.count > 1
|
||||
}
|
||||
}
|
||||
role: "FPS"
|
||||
|
||||
onActivated: VideoDevices.setDefaultDeviceFps(
|
||||
filteredFpsModel.mapToSource(modelIndex))
|
||||
}
|
||||
|
||||
ToggleSwitch {
|
||||
id: hardwareAccelControl
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
labelText: JamiStrings.enableHWAccel
|
||||
|
||||
onSwitchToggled: {
|
||||
AvAdapter.setHardwareAcceleration(checked)
|
||||
generalSettings.startPreviewing(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Text {
|
||||
visible: VideoDevices.listSize === 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.preferredFieldHeight
|
||||
|
||||
text: JamiStrings.previewUnavailable
|
||||
font.pointSize: JamiTheme.settingsFontSize
|
||||
font.kerning: true
|
||||
color: JamiTheme.primaryForegroundColor
|
||||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -90,6 +90,18 @@ UtilsAdapter::setAppValue(const Settings::Key key, const QVariant& value)
|
|||
Q_EMIT appThemeChanged();
|
||||
}
|
||||
|
||||
QVariant
|
||||
UtilsAdapter::getDefault(const Settings::Key key)
|
||||
{
|
||||
return settingsManager_->getDefault(key);
|
||||
}
|
||||
|
||||
void
|
||||
UtilsAdapter::setToDefault(const Settings::Key key)
|
||||
{
|
||||
setAppValue(key, settingsManager_->getDefault(key));
|
||||
}
|
||||
|
||||
const QString
|
||||
UtilsAdapter::getProjectCredits()
|
||||
{
|
||||
|
@ -361,6 +373,13 @@ UtilsAdapter::fileName(const QString& path)
|
|||
return fi.fileName();
|
||||
}
|
||||
|
||||
QString
|
||||
UtilsAdapter::dirName(const QString& path)
|
||||
{
|
||||
QDir dir(path);
|
||||
return dir.dirName();
|
||||
}
|
||||
|
||||
QString
|
||||
UtilsAdapter::getExt(const QString& path)
|
||||
{
|
||||
|
|
|
@ -77,6 +77,8 @@ public:
|
|||
Q_INVOKABLE void setAppValue(const QString& key, const QVariant& value);
|
||||
Q_INVOKABLE QVariant getAppValue(const Settings::Key key);
|
||||
Q_INVOKABLE void setAppValue(const Settings::Key key, const QVariant& value);
|
||||
Q_INVOKABLE QVariant getDefault(const Settings::Key key);
|
||||
Q_INVOKABLE void setToDefault(const Settings::Key key);
|
||||
|
||||
Q_INVOKABLE const QString getProjectCredits();
|
||||
Q_INVOKABLE const QString getVersionStr();
|
||||
|
@ -108,6 +110,7 @@ public:
|
|||
Q_INVOKABLE QString toFileInfoName(QString inputFileName);
|
||||
Q_INVOKABLE QString toFileAbsolutepath(QString inputFileName);
|
||||
Q_INVOKABLE QString getAbsPath(QString path);
|
||||
Q_INVOKABLE QString dirName(const QString& path);
|
||||
Q_INVOKABLE QString fileName(const QString& path);
|
||||
Q_INVOKABLE QString getExt(const QString& path);
|
||||
Q_INVOKABLE bool isImage(const QString& fileExt);
|
||||
|
|
|
@ -238,10 +238,8 @@ Rectangle {
|
|||
KeyNavigation.up: backButton
|
||||
KeyNavigation.down: infoBox
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Label {
|
||||
id: invalidLabel
|
||||
|
||||
|
|
|
@ -167,6 +167,7 @@ Rectangle {
|
|||
text: JamiStrings.tls
|
||||
ButtonGroup.group: optionsB
|
||||
checked: true
|
||||
bgColor: JamiTheme.secondaryBackgroundColor
|
||||
|
||||
KeyNavigation.up: sipPasswordEdit
|
||||
KeyNavigation.down: udpRadioButton
|
||||
|
@ -180,6 +181,7 @@ Rectangle {
|
|||
text: JamiStrings.udp
|
||||
ButtonGroup.group: optionsB
|
||||
color: JamiTheme.textColor
|
||||
bgColor: JamiTheme.secondaryBackgroundColor
|
||||
|
||||
KeyNavigation.up: tlsRadioButton
|
||||
KeyNavigation.down: createAccountButton
|
||||
|
|
Loading…
Add table
Reference in a new issue