text:qsTr("Encryption keeps your messages safe by only allowing the people you sent the message to to read it. For extra security, if you want to make sure you are talking to the right people, you can verify them in real life.")
text:qsTr("Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!")
Layout.preferredWidth:400
color:palette.text
text:qsTr("Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!")
text:qsTr("Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!")
Layout.preferredWidth:400
color:palette.text
text:qsTr("Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!")
verticalAlignment:Text.AlignVCenter
wrapMode:Text.Wrap
}
Item{
Layout.fillHeight:true
}
Item{Layout.fillHeight:true;}
RowLayout{
id: emojis
propertyvarmapping:[{
"number":0,
"emoji":"🐶",
"description":"Dog",
"unicode":"U+1F436"
},{
"number":1,
"emoji":"🐱",
"description":"Cat",
"unicode":"U+1F431"
},{
"number":2,
"emoji":"🦁",
"description":"Lion",
"unicode":"U+1F981"
},{
"number":3,
"emoji":"🐎",
"description":"Horse",
"unicode":"U+1F40E"
},{
"number":4,
"emoji":"🦄",
"description":"Unicorn",
"unicode":"U+1F984"
},{
"number":5,
"emoji":"🐷",
"description":"Pig",
"unicode":"U+1F437"
},{
"number":6,
"emoji":"🐘",
"description":"Elephant",
"unicode":"U+1F418"
},{
"number":7,
"emoji":"🐰",
"description":"Rabbit",
"unicode":"U+1F430"
},{
"number":8,
"emoji":"🐼",
"description":"Panda",
"unicode":"U+1F43C"
},{
"number":9,
"emoji":"🐓",
"description":"Rooster",
"unicode":"U+1F413"
},{
"number":10,
"emoji":"🐧",
"description":"Penguin",
"unicode":"U+1F427"
},{
"number":11,
"emoji":"🐢",
"description":"Turtle",
"unicode":"U+1F422"
},{
"number":12,
"emoji":"🐟",
"description":"Fish",
"unicode":"U+1F41F"
},{
"number":13,
"emoji":"🐙",
"description":"Octopus",
"unicode":"U+1F419"
},{
"number":14,
"emoji":"🦋",
"description":"Butterfly",
"unicode":"U+1F98B"
},{
"number":15,
"emoji":"🌷",
"description":"Flower",
"unicode":"U+1F337"
},{
"number":16,
"emoji":"🌳",
"description":"Tree",
"unicode":"U+1F333"
},{
"number":17,
"emoji":"🌵",
"description":"Cactus",
"unicode":"U+1F335"
},{
"number":18,
"emoji":"🍄",
"description":"Mushroom",
"unicode":"U+1F344"
},{
"number":19,
"emoji":"🌏",
"description":"Globe",
"unicode":"U+1F30F"
},{
"number":20,
"emoji":"🌙",
"description":"Moon",
"unicode":"U+1F319"
},{
"number":21,
"emoji":"☁️",
"description":"Cloud",
"unicode":"U+2601U+FE0F"
},{
"number":22,
"emoji":"🔥",
"description":"Fire",
"unicode":"U+1F525"
},{
"number":23,
"emoji":"🍌",
"description":"Banana",
"unicode":"U+1F34C"
},{
"number":24,
"emoji":"🍎",
"description":"Apple",
"unicode":"U+1F34E"
},{
"number":25,
"emoji":"🍓",
"description":"Strawberry",
"unicode":"U+1F353"
},{
"number":26,
"emoji":"🌽",
"description":"Corn",
"unicode":"U+1F33D"
},{
"number":27,
"emoji":"🍕",
"description":"Pizza",
"unicode":"U+1F355"
},{
"number":28,
"emoji":"🎂",
"description":"Cake",
"unicode":"U+1F382"
},{
"number":29,
"emoji":"❤️",
"description":"Heart",
"unicode":"U+2764U+FE0F"
},{
"number":30,
"emoji":"😀",
"description":"Smiley",
"unicode":"U+1F600"
},{
"number":31,
"emoji":"🤖",
"description":"Robot",
"unicode":"U+1F916"
},{
"number":32,
"emoji":"🎩",
"description":"Hat",
"unicode":"U+1F3A9"
},{
"number":33,
"emoji":"👓",
"description":"Glasses",
"unicode":"U+1F453"
},{
"number":34,
"emoji":"🔧",
"description":"Spanner",
"unicode":"U+1F527"
},{
"number":35,
"emoji":"🎅",
"description":"Santa",
"unicode":"U+1F385"
},{
"number":36,
"emoji":"👍",
"description":"Thumbs Up",
"unicode":"U+1F44D"
},{
"number":37,
"emoji":"☂️",
"description":"Umbrella",
"unicode":"U+2602U+FE0F"
},{
"number":38,
"emoji":"⌛",
"description":"Hourglass",
"unicode":"U+231B"
},{
"number":39,
"emoji":"⏰",
"description":"Clock",
"unicode":"U+23F0"
},{
"number":40,
"emoji":"🎁",
"description":"Gift",
"unicode":"U+1F381"
},{
"number":41,
"emoji":"💡",
"description":"Light Bulb",
"unicode":"U+1F4A1"
},{
"number":42,
"emoji":"📕",
"description":"Book",
"unicode":"U+1F4D5"
},{
"number":43,
"emoji":"✏️",
"description":"Pencil",
"unicode":"U+270FU+FE0F"
},{
"number":44,
"emoji":"📎",
"description":"Paperclip",
"unicode":"U+1F4CE"
},{
"number":45,
"emoji":"✂️",
"description":"Scissors",
"unicode":"U+2702U+FE0F"
},{
"number":46,
"emoji":"🔒",
"description":"Lock",
"unicode":"U+1F512"
},{
"number":47,
"emoji":"🔑",
"description":"Key",
"unicode":"U+1F511"
},{
"number":48,
"emoji":"🔨",
"description":"Hammer",
"unicode":"U+1F528"
},{
"number":49,
"emoji":"☎️",
"description":"Telephone",
"unicode":"U+260EU+FE0F"
},{
"number":50,
"emoji":"🏁",
"description":"Flag",
"unicode":"U+1F3C1"
},{
"number":51,
"emoji":"🚂",
"description":"Train",
"unicode":"U+1F682"
},{
"number":52,
"emoji":"🚲",
"description":"Bicycle",
"unicode":"U+1F6B2"
},{
"number":53,
"emoji":"✈️",
"description":"Aeroplane",
"unicode":"U+2708U+FE0F"
},{
"number":54,
"emoji":"🚀",
"description":"Rocket",
"unicode":"U+1F680"
},{
"number":55,
"emoji":"🏆",
"description":"Trophy",
"unicode":"U+1F3C6"
},{
"number":56,
"emoji":"⚽",
"description":"Ball",
"unicode":"U+26BD"
},{
"number":57,
"emoji":"🎸",
"description":"Guitar",
"unicode":"U+1F3B8"
},{
"number":58,
"emoji":"🎺",
"description":"Trumpet",
"unicode":"U+1F3BA"
},{
"number":59,
"emoji":"🔔",
"description":"Bell",
"unicode":"U+1F514"
},{
"number":60,
"emoji":"⚓",
"description":"Anchor",
"unicode":"U+2693"
},{
"number":61,
"emoji":"🎧",
"description":"Headphones",
"unicode":"U+1F3A7"
},{
"number":62,
"emoji":"📁",
"description":"Folder",
"unicode":"U+1F4C1"
},{
"number":63,
"emoji":"📌",
"description":"Pin",
"unicode":"U+1F4CC"
}]
"number":0,
"emoji":"🐶",
"description":"Dog",
"unicode":"U+1F436"
},{
"number":1,
"emoji":"🐱",
"description":"Cat",
"unicode":"U+1F431"
},{
"number":2,
"emoji":"🦁",
"description":"Lion",
"unicode":"U+1F981"
},{
"number":3,
"emoji":"🐎",
"description":"Horse",
"unicode":"U+1F40E"
},{
"number":4,
"emoji":"🦄",
"description":"Unicorn",
"unicode":"U+1F984"
},{
"number":5,
"emoji":"🐷",
"description":"Pig",
"unicode":"U+1F437"
},{
"number":6,
"emoji":"🐘",
"description":"Elephant",
"unicode":"U+1F418"
},{
"number":7,
"emoji":"🐰",
"description":"Rabbit",
"unicode":"U+1F430"
},{
"number":8,
"emoji":"🐼",
"description":"Panda",
"unicode":"U+1F43C"
},{
"number":9,
"emoji":"🐓",
"description":"Rooster",
"unicode":"U+1F413"
},{
"number":10,
"emoji":"🐧",
"description":"Penguin",
"unicode":"U+1F427"
},{
"number":11,
"emoji":"🐢",
"description":"Turtle",
"unicode":"U+1F422"
},{
"number":12,
"emoji":"🐟",
"description":"Fish",
"unicode":"U+1F41F"
},{
"number":13,
"emoji":"🐙",
"description":"Octopus",
"unicode":"U+1F419"
},{
"number":14,
"emoji":"🦋",
"description":"Butterfly",
"unicode":"U+1F98B"
},{
"number":15,
"emoji":"🌷",
"description":"Flower",
"unicode":"U+1F337"
},{
"number":16,
"emoji":"🌳",
"description":"Tree",
"unicode":"U+1F333"
},{
"number":17,
"emoji":"🌵",
"description":"Cactus",
"unicode":"U+1F335"
},{
"number":18,
"emoji":"🍄",
"description":"Mushroom",
"unicode":"U+1F344"
},{
"number":19,
"emoji":"🌏",
"description":"Globe",
"unicode":"U+1F30F"
},{
"number":20,
"emoji":"🌙",
"description":"Moon",
"unicode":"U+1F319"
},{
"number":21,
"emoji":"☁️",
"description":"Cloud",
"unicode":"U+2601U+FE0F"
},{
"number":22,
"emoji":"🔥",
"description":"Fire",
"unicode":"U+1F525"
},{
"number":23,
"emoji":"🍌",
"description":"Banana",
"unicode":"U+1F34C"
},{
"number":24,
"emoji":"🍎",
"description":"Apple",
"unicode":"U+1F34E"
},{
"number":25,
"emoji":"🍓",
"description":"Strawberry",
"unicode":"U+1F353"
},{
"number":26,
"emoji":"🌽",
"description":"Corn",
"unicode":"U+1F33D"
},{
"number":27,
"emoji":"🍕",
"description":"Pizza",
"unicode":"U+1F355"
},{
"number":28,
"emoji":"🎂",
"description":"Cake",
"unicode":"U+1F382"
},{
"number":29,
"emoji":"❤️",
"description":"Heart",
"unicode":"U+2764U+FE0F"
},{
"number":30,
"emoji":"😀",
"description":"Smiley",
"unicode":"U+1F600"
},{
"number":31,
"emoji":"🤖",
"description":"Robot",
"unicode":"U+1F916"
},{
"number":32,
"emoji":"🎩",
"description":"Hat",
"unicode":"U+1F3A9"
},{
"number":33,
"emoji":"👓",
"description":"Glasses",
"unicode":"U+1F453"
},{
"number":34,
"emoji":"🔧",
"description":"Spanner",
"unicode":"U+1F527"
},{
"number":35,
"emoji":"🎅",
"description":"Santa",
"unicode":"U+1F385"
},{
"number":36,
"emoji":"👍",
"description":"Thumbs Up",
"unicode":"U+1F44D"
},{
"number":37,
"emoji":"☂️",
"description":"Umbrella",
"unicode":"U+2602U+FE0F"
},{
"number":38,
"emoji":"⌛",
"description":"Hourglass",
"unicode":"U+231B"
},{
"number":39,
"emoji":"⏰",
"description":"Clock",
"unicode":"U+23F0"
},{
"number":40,
"emoji":"🎁",
"description":"Gift",
"unicode":"U+1F381"
},{
"number":41,
"emoji":"💡",
"description":"Light Bulb",
"unicode":"U+1F4A1"
},{
"number":42,
"emoji":"📕",
"description":"Book",
"unicode":"U+1F4D5"
},{
"number":43,
"emoji":"✏️",
"description":"Pencil",
"unicode":"U+270FU+FE0F"
},{
"number":44,
"emoji":"📎",
"description":"Paperclip",
"unicode":"U+1F4CE"
},{
"number":45,
"emoji":"✂️",
"description":"Scissors",
"unicode":"U+2702U+FE0F"
},{
"number":46,
"emoji":"🔒",
"description":"Lock",
"unicode":"U+1F512"
},{
"number":47,
"emoji":"🔑",
"description":"Key",
"unicode":"U+1F511"
},{
"number":48,
"emoji":"🔨",
"description":"Hammer",
"unicode":"U+1F528"
},{
"number":49,
"emoji":"☎️",
"description":"Telephone",
"unicode":"U+260EU+FE0F"
},{
"number":50,
"emoji":"🏁",
"description":"Flag",
"unicode":"U+1F3C1"
},{
"number":51,
"emoji":"🚂",
"description":"Train",
"unicode":"U+1F682"
},{
"number":52,
"emoji":"🚲",
"description":"Bicycle",
"unicode":"U+1F6B2"
},{
"number":53,
"emoji":"✈️",
"description":"Aeroplane",
"unicode":"U+2708U+FE0F"
},{
"number":54,
"emoji":"🚀",
"description":"Rocket",
"unicode":"U+1F680"
},{
"number":55,
"emoji":"🏆",
"description":"Trophy",
"unicode":"U+1F3C6"
},{
"number":56,
"emoji":"⚽",
"description":"Ball",
"unicode":"U+26BD"
},{
"number":57,
"emoji":"🎸",
"description":"Guitar",
"unicode":"U+1F3B8"
},{
"number":58,
"emoji":"🎺",
"description":"Trumpet",
"unicode":"U+1F3BA"
},{
"number":59,
"emoji":"🔔",
"description":"Bell",
"unicode":"U+1F514"
},{
"number":60,
"emoji":"⚓",
"description":"Anchor",
"unicode":"U+2693"
},{
"number":61,
"emoji":"🎧",
"description":"Headphones",
"unicode":"U+1F3A7"
},{
"number":62,
"emoji":"📁",
"description":"Folder",
"unicode":"U+1F4C1"
},{
"number":63,
"emoji":"📌",
"description":"Pin",
"unicode":"U+1F4CC"
}]
Layout.alignment:Qt.AlignHCenter
@ -370,58 +371,52 @@ ColumnLayout {
Label{
//height:font.pixelSize*2
Layout.alignment:Qt.AlignHCenter
text:col.emoji.emoji
font.pixelSize:Qt.application.font.pixelSize*2
font.family:Settings.emojiFont
color:palette.text
font.family:Settings.emojiFont
font.pixelSize:Qt.application.font.pixelSize*2
text:col.emoji.emoji
}
Label{
Layout.alignment:Qt.AlignHCenter|Qt.AlignBottom
text:col.emoji.description
color:palette.text
text:col.emoji.description
}
}
}
}
}
Item{Layout.fillHeight:true;}
Item{
Layout.fillHeight:true
}
Label{
Layout.preferredWidth:400
Layout.fillWidth:true
wrapMode:Text.Wrap
text:qsTr("The displayed emoji might look different in different clients if a different font is used. Similarly they might be translated into different languages. Nonetheless they should depict one of 64 different objects or animals. For example a lion and a cat are different, but a cat is the same even if one client just shows a cat face, while another client shows a full cat body.")
Layout.preferredWidth:400
color:palette.text
text:qsTr("The displayed emoji might look different in different clients if a different font is used. Similarly they might be translated into different languages. Nonetheless they should depict one of 64 different objects or animals. For example a lion and a cat are different, but a cat is the same even if one client just shows a cat face, while another client shows a full cat body.")
text:qsTr("List of aliases to this room. Usually you can only add aliases on your server. You can have one canonical alias and many alternate aliases.")
text:qsTr("List of aliases to this room. Usually you can only add aliases on your server. You can have one canonical alias and many alternate aliases.")
text:summary.isKnockOnly?qsTr("This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below:"):qsTr("Do you want to join this room? You can optionally add a reason below:")
color:palette.text
Layout.fillWidth:true
color:palette.text
font.bold:true
horizontalAlignment:Text.AlignHCenter
text:summary.isKnockOnly?qsTr("This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below:"):qsTr("Do you want to join this room? You can optionally add a reason below:")
returnqsTr("You can configure when your messages will be deleted in %1. This only happens when Nheko is open and has permissions to delete messages until Matrix servers support this feature natively. In general 0 means disable.").arg(roomName);
}
else{
}else{
returnqsTr("You can configure when your messages will be deleted in all rooms unless configured otherwise. This only happens when Nheko is open and has permissions to delete messages until Matrix servers support this feature natively. In general 0 means disable.");
ToolTip.text:qsTr("If this is turned on, old state events also get redacted. The latest state event of any type+key combination is excluded from redaction to not remove the room name and similar state by accident.")
text:qsTr("Be careful when editing permissions. You can't lower the permissions of people with a same or higher level than you. Be careful when promoting others.")
text:qsTr("Be careful when editing permissions. You can't lower the permissions of people with a same or higher level than you. Be careful when promoting others.")
}
TabBar{
id: bar
Layout.preferredWidth:parent.width
NhekoTabButton{
@ -57,95 +73,95 @@ ApplicationWindow {
}
}
Rectangle{
Layout.fillWidth:true
Layout.fillHeight:true
color:palette.alternateBase
border.width:1
Layout.fillWidth:true
border.color:Nheko.theme.separator
border.width:1
color:palette.alternateBase
StackLayout{
anchors.fill:parent
anchors.margins:Nheko.paddingMedium
currentIndex:bar.currentIndex
ColumnLayout{
spacing:Nheko.paddingMedium
MatrixText{
text:qsTr("Move permissions between roles to change them")
text:qsTr("This message you are reporting will be sent to your server administrator for review. Please note that not all server administrators review reported content. You should also ask a room moderator to remove the content if necessary.")
ToolTip.text:qsTr("How much of the history is visible to joined members. Changing this won't affect the visibility of already sent messages. It only applies to new messages.")
ToolTip.text:qsTr("Your login name. A mxid should start with @ followed by the user ID. After the user ID you need to include your server name after a :.\nYou can also put your homeserver address there if your server doesn't support .well-known lookup.\nExample: @user:yourserver.example.com\nIf Nheko fails to discover your homeserver, it will show you a field to enter the server manually.")
ToolTip.text:qsTr("Your login name. A mxid should start with @ followed by the user ID. After the user ID you need to include your server name after a :.\nYou can also put your homeserver address there if your server doesn't support .well-known lookup.\nExample: @user:yourserver.example.com\nIf Nheko fails to discover your homeserver, it will show you a field to enter the server manually.")
Keys.forwardTo:[pwBtn,ssoRepeater]
onEditingFinished:login.mxid=text
}
Spinner{
Layout.preferredHeight:matrixIdLabel.height/2
Layout.alignment:Qt.AlignBottom
visible:running
running:login.lookingUpHs
Layout.preferredHeight:matrixIdLabel.height/2
foreground:palette.mid
running:login.lookingUpHs
visible:running
}
}
MatrixText{
Layout.fillWidth:true
textFormat:Text.PlainText
color:Nheko.theme.error
text:login.mxidError
textFormat:Text.PlainText
visible:text
wrapMode:TextEdit.Wrap
}
MatrixTextField{
id: passwordLabel
Keys.forwardTo:[pwBtn,ssoRepeater]
Layout.fillWidth:true
label:qsTr("Password")
echoMode:TextInput.Password
ToolTip.text:qsTr("Your password.")
echoMode:TextInput.Password
label:qsTr("Password")
visible:login.passwordSupported
Keys.forwardTo:[pwBtn,ssoRepeater]
}
MatrixTextField{
id: deviceNameLabel
Keys.forwardTo:[pwBtn,ssoRepeater]
Layout.fillWidth:true
ToolTip.text:qsTr("A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used.")
label:qsTr("Device name")
placeholderText:login.initialDeviceName()
ToolTip.text:qsTr("A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used.")
Keys.forwardTo:[pwBtn,ssoRepeater]
}
MatrixTextField{
id: hsLabel
enabled:visible
visible:login.homeserverNeeded
Keys.forwardTo:[pwBtn,ssoRepeater]
Layout.fillWidth:true
ToolTip.text:qsTr("The address that can be used to contact your homeserver's client API.\nExample: https://yourserver.example.com:8787")
ToolTip.text:qsTr("A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.")
label:qsTr("Homeserver")
placeholderText:qsTr("your.server")
onEditingFinished:regis.setServer(text)
ToolTip.text:qsTr("A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.")
onEditingFinished:regis.setServer(text)
}
Spinner{
Layout.preferredHeight:hsLabel.height/2
Layout.alignment:Qt.AlignBottom
visible:running
running:regis.lookingUpHs
Layout.preferredHeight:hsLabel.height/2
foreground:palette.mid
running:regis.lookingUpHs
visible:running
}
}
MatrixText{
Layout.fillWidth:true
textFormat:Text.PlainText
color:Nheko.theme.error
text:regis.hsError
textFormat:Text.PlainText
visible:text
wrapMode:TextEdit.Wrap
}
RowLayout{
Layout.fillWidth:true
spacing:Nheko.paddingLarge
visible:regis.supported
Layout.fillWidth:true
MatrixTextField{
id: usernameLabel
Layout.fillWidth:true
label:qsTr("Username")
ToolTip.text:qsTr("The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.")