Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
nheko
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Nheko Reborn
nheko
Commits
d0623131
Unverified
Commit
d0623131
authored
3 years ago
by
Nicolas Werner
Committed by
GitHub
3 years ago
Browse files
Options
Downloads
Plain Diff
Merge pull request #965 from maltee1/mobile_room_settings
Mobile room settings
parents
653baa28
cb057b01
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Pipeline
#2752
passed
3 years ago
Stage: build
Stage: deploy
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
resources/qml/dialogs/RoomSettings.qml
+283
-215
283 additions, 215 deletions
resources/qml/dialogs/RoomSettings.qml
with
283 additions
and
215 deletions
resources/qml/dialogs/RoomSettings.qml
+
283
−
215
View file @
d0623131
...
...
@@ -17,8 +17,10 @@ ApplicationWindow {
property
var
roomSettings
minimumWidth
:
450
minimumHeight
:
680
minimumWidth
:
340
minimumHeight
:
450
width
:
450
height
:
680
palette
:
Nheko
.
colors
color
:
Nheko
.
colors
.
window
modality
:
Qt
.
NonModal
...
...
@@ -29,119 +31,134 @@ ApplicationWindow {
sequence
:
StandardKey
.
Cancel
onActivated
:
roomSettingsDialog
.
close
()
}
ScrollHelper
{
flickable
:
flickable
anchors.fill
:
flickable
}
Flickable
{
id
:
flickable
boundsBehavior
:
Flickable
.
StopAtBounds
anchors.fill
:
parent
clip
:
true
flickableDirection
:
Flickable
.
VerticalFlick
contentWidth
:
roomSettingsDialog
.
width
contentHeight
:
contentLayout1
.
height
ColumnLayout
{
id
:
contentLayout1
width
:
parent
.
width
spacing
:
Nheko
.
paddingMedium
ColumnLayout
{
id
:
contentLayout1
Avatar
{
Layout.topMargin
:
Nheko
.
paddingMedium
url
:
roomSettings
.
roomAvatarUrl
.
replace
(
"
mxc://
"
,
"
image://MxcImage/
"
)
roomid
:
roomSettings
.
roomId
displayName
:
roomSettings
.
roomName
height
:
130
width
:
130
Layout.alignment
:
Qt
.
AlignHCenter
onClicked
:
{
if
(
roomSettings
.
canChangeAvatar
)
roomSettings
.
updateAvatar
();
anchors.fill
:
parent
anchors.margins
:
Nheko
.
paddingMedium
spacing
:
Nheko
.
paddingMedium
Avatar
{
url
:
roomSettings
.
roomAvatarUrl
.
replace
(
"
mxc://
"
,
"
image://MxcImage/
"
)
roomid
:
roomSettings
.
roomId
displayName
:
roomSettings
.
roomName
height
:
130
width
:
130
Layout.alignment
:
Qt
.
AlignHCenter
onClicked
:
{
if
(
roomSettings
.
canChangeAvatar
)
roomSettings
.
updateAvatar
();
}
}
Spinner
{
Layout.alignment
:
Qt
.
AlignHCenter
visible
:
roomSettings
.
isLoading
foreground
:
Nheko
.
colors
.
mid
running
:
roomSettings
.
isLoading
}
}
Spinner
{
Layout.alignment
:
Qt
.
AlignHCenter
visible
:
roomSettings
.
isLoading
foreground
:
Nheko
.
colors
.
mid
running
:
roomSettings
.
isLoading
}
Text
{
id
:
errorText
Text
{
id
:
errorText
color
:
"
red
"
visible
:
opacity
>
0
opacity
:
0
Layout.alignment
:
Qt
.
AlignHCenter
wrapMode
:
Text
.
Wrap
// somehow still doesn't wrap
Layout.fillWidth
:
true
}
color
:
"
red
"
visible
:
opacity
>
0
opacity
:
0
Layout.alignment
:
Qt
.
AlignHCenter
}
SequentialAnimation
{
id
:
hideErrorAnimation
SequentialAnimation
{
id
:
hideErrorAnimation
running
:
false
running
:
false
PauseAnimation
{
duration
:
4000
}
PauseAnimation
{
duration
:
4000
}
NumberAnimation
{
target
:
errorText
property
:
'
opacity
'
to
:
0
duration
:
1000
}
NumberAnimation
{
target
:
errorText
property
:
'
opacity
'
to
:
0
duration
:
1000
}
}
Connections
{
target
:
roomSettings
function
onDisplayError
(
errorMessage
)
{
errorText
.
text
=
errorMessage
;
errorText
.
opacity
=
1
;
hideErrorAnimation
.
restart
();
Connections
{
target
:
roomSettings
function
onDisplayError
(
errorMessage
)
{
errorText
.
text
=
errorMessage
;
errorText
.
opacity
=
1
;
hideErrorAnimation
.
restart
();
}
}
}
Label
{
text
:
roomSettings
.
roomName
Layout.alignment
:
Qt
.
AlignHCenter
font.pixelSize
:
fontMetrics
.
font
.
pixelSize
*
2
Layout.fillWidth
:
true
horizontalAlignment
:
TextEdit
.
AlignHCenter
color
:
Nheko
.
colors
.
text
wrapMode
:
Text
.
Wrap
textFormat
:
Text
.
RichText
}
ColumnLayout
{
Layout.alignment
:
Qt
.
AlignHCenter
Label
{
text
:
qsTr
(
"
%n member(s)
"
,
""
,
roomSettings
.
memberCount
)
Layout.alignment
:
Qt
.
AlignHCenter
color
:
Nheko
.
colors
.
text
MatrixText
{
text
:
roomSettings
.
roomName
font.pixelSize
:
fontMetrics
.
font
.
pixelSize
*
2
Layout.fillWidth
:
true
horizontalAlignment
:
TextEdit
.
AlignHCenter
}
MatrixText
{
text
:
qsTr
(
"
%n member(s)
"
,
""
,
roomSettings
.
memberCount
)
Layout.alignment
:
Qt
.
AlignHCenter
TapHandler
{
onSingleTapped
:
TimelineManager
.
openRoomMembers
(
Rooms
.
getRoomById
(
roomSettings
.
roomId
))
}
TapHandler
{
onSingleTapped
:
TimelineManager
.
openRoomMembers
(
Rooms
.
getRoomById
(
roomSettings
.
roomId
))
}
CursorShape
{
cursorShape
:
Qt
.
PointingHandCursor
anchors.fill
:
parent
}
CursorShape
{
cursorShape
:
Qt
.
PointingHandCursor
anchors.fill
:
parent
}
ImageButton
{
Layout.alignment
:
Qt
.
AlignHCenter
image
:
"
:/icons/icons/ui/edit.svg
"
visible
:
roomSettings
.
canChangeNameAndTopic
onClicked
:
roomSettings
.
openEditModal
()
}
}
ImageButton
{
Layout.alignment
:
Qt
.
AlignHCenter
image
:
"
:/icons/icons/ui/edit.svg
"
visible
:
roomSettings
.
canChangeNameAndTopic
onClicked
:
roomSettings
.
openEditModal
()
}
ScrollView
{
Layout.fillHeight
:
true
Layout.alignment
:
Qt
.
AlignHCenter
Layout.fillWidth
:
true
Layout.leftMargin
:
Nheko
.
paddingLarge
Layout.rightMargin
:
Nheko
.
paddingLarge
TextArea
{
id
:
roomTopic
property
bool
cut
:
implicitHeight
>
100
property
bool
showMore
clip
:
true
Layout.maximumHeight
:
showMore
?
Number
.
POSITIVE_INFINITY
:
100
Layout.preferredHeight
:
implicitHeight
Layout.alignment
:
Qt
.
AlignHCenter
Layout.fillWidth
:
true
Layout.leftMargin
:
Nheko
.
paddingLarge
Layout.rightMargin
:
Nheko
.
paddingLarge
text
:
TimelineManager
.
escapeEmoji
(
roomSettings
.
roomTopic
)
wrapMode
:
TextEdit
.
WordWrap
textFormat
:
TextEdit
.
RichText
readOnly
:
true
background
:
null
selectByMouse
:
tru
e
selectByMouse
:
!
Settings
.
mobileMod
e
color
:
Nheko
.
colors
.
text
horizontalAlignment
:
TextEdit
.
AlignHCenter
onLinkActivated
:
Nheko
.
openLink
(
link
)
...
...
@@ -152,171 +169,222 @@ ApplicationWindow {
}
}
}
GridLayout
{
columns
:
2
rowSpacing
:
Nheko
.
paddingMedium
MatrixText
{
text
:
qsTr
(
"
SETTINGS
"
)
font.bold
:
true
}
Item
{
Layout.fillWidth
:
true
Layout.alignment
:
Qt
.
AlignHCenter
id
:
showMorePlaceholder
Layout.preferredHeight
:
showMoreButton
.
height
Layout.preferredWidth
:
showMoreButton
.
width
visible
:
roomTopic
.
cut
}
MatrixText
{
text
:
qsTr
(
"
Notifications
"
)
GridLayout
{
columns
:
2
rowSpacing
:
Nheko
.
paddingMedium
Layout.margins
:
Nheko
.
paddingMedium
Layout.fillWidth
:
true
}
ComboBox
{
model
:
[
qsTr
(
"
Muted
"
),
qsTr
(
"
Mentions only
"
),
qsTr
(
"
All messages
"
)]
currentIndex
:
roomSettings
.
notifications
onActivated
:
{
roomSettings
.
changeNotifications
(
index
);
Label
{
text
:
qsTr
(
"
SETTINGS
"
)
font.bold
:
true
color
:
Nheko
.
colors
.
text
}
Layout.fillWidth
:
true
}
MatrixText
{
text
:
qsTr
(
"
Room access
"
)
Layout.fillWidth
:
true
}
Item
{
Layout.fillWidth
:
true
}
ComboBox
{
enabled
:
roomSettings
.
canChangeJoinRules
model
:
{
let
opts
=
[
qsTr
(
"
Anyone and guests
"
),
qsTr
(
"
Anyone
"
),
qsTr
(
"
Invited users
"
)];
if
(
roomSettings
.
supportsKnocking
)
opts
.
push
(
qsTr
(
"
By knocking
"
));
Label
{
text
:
qsTr
(
"
Notifications
"
)
Layout.fillWidth
:
true
color
:
Nheko
.
colors
.
text
}
if
(
roomSettings
.
supportsRestricted
)
opts
.
push
(
qsTr
(
"
Restricted by membership in other rooms
"
));
ComboBox
{
model
:
[
qsTr
(
"
Muted
"
),
qsTr
(
"
Mentions only
"
),
qsTr
(
"
All messages
"
)]
currentIndex
:
roomSettings
.
notifications
onActivated
:
{
roomSettings
.
changeNotifications
(
index
);
}
Layout.fillWidth
:
true
WheelHandler
{}
// suppress scrolling changing values
}
return
opts
;
Label
{
text
:
qsTr
(
"
Room access
"
)
Layout.fillWidth
:
true
color
:
Nheko
.
colors
.
text
}
currentIndex
:
roomSettings
.
accessJoinRules
onActivated
:
{
roomSettings
.
changeAccessRules
(
index
);
ComboBox
{
enabled
:
roomSettings
.
canChangeJoinRules
model
:
{
let
opts
=
[
qsTr
(
"
Anyone and guests
"
),
qsTr
(
"
Anyone
"
),
qsTr
(
"
Invited users
"
)];
if
(
roomSettings
.
supportsKnocking
)
opts
.
push
(
qsTr
(
"
By knocking
"
));
if
(
roomSettings
.
supportsRestricted
)
opts
.
push
(
qsTr
(
"
Restricted by membership in other rooms
"
));
return
opts
;
}
currentIndex
:
roomSettings
.
accessJoinRules
onActivated
:
{
roomSettings
.
changeAccessRules
(
index
);
}
Layout.fillWidth
:
true
WheelHandler
{}
// suppress scrolling changing values
}
Layout.fillWidth
:
true
}
MatrixText
{
text
:
qsTr
(
"
Encryption
"
)
}
Label
{
text
:
qsTr
(
"
Encryption
"
)
color
:
Nheko
.
colors
.
text
}
ToggleButton
{
id
:
encryptionToggle
ToggleButton
{
id
:
encryptionToggle
checked
:
roomSettings
.
isEncryptionEnabled
onCheckedChanged
:
{
if
(
roomSettings
.
isEncryptionEnabled
)
{
checked
=
true
;
return
;
checked
:
roomSettings
.
isEncryptionEnabled
onCheckedChanged
:
{
if
(
roomSettings
.
isEncryptionEnabled
)
{
checked
=
true
;
return
;
}
confirmEncryptionDialog
.
open
();
}
confirmEncryptionDialog
.
open
();
Layout.alignment
:
Qt
.
AlignRight
}
Layout.alignment
:
Qt
.
AlignRight
}
Platform.MessageDialog
{
id
:
confirmEncryptionDialog
Platform.MessageDialog
{
id
:
confirmEncryptionDialog
title
:
qsTr
(
"
End-to-End Encryption
"
)
text
:
qsTr
(
"
Encryption is currently experimental and things might break unexpectedly. <br>
Please take note that it can't be disabled afterwards.
"
)
modality
:
Qt
.
NonModal
onAccepted
:
{
if
(
roomSettings
.
isEncryptionEnabled
)
return
;
title
:
qsTr
(
"
End-to-End Encryption
"
)
text
:
qsTr
(
"
Encryption is currently experimental and things might break unexpectedly. <br>
Please take note that it can't be disabled afterwards.
"
)
modality
:
Qt
.
NonModal
onAccepted
:
{
if
(
roomSettings
.
isEncryptionEnabled
)
return
;
roomSettings
.
enableEncryption
();
roomSettings
.
enableEncryption
();
}
onRejected
:
{
encryptionToggle
.
checked
=
false
;
}
buttons
:
Platform
.
MessageDialog
.
Ok
|
Platform
.
MessageDialog
.
Cancel
}
onRejected
:
{
encryptionToggle
.
checked
=
false
;
Label
{
text
:
qsTr
(
"
Sticker & Emote Settings
"
)
color
:
Nheko
.
colors
.
text
}
buttons
:
Platform
.
MessageDialog
.
Ok
|
Platform
.
MessageDialog
.
Cancel
}
MatrixText
{
text
:
qsTr
(
"
Sticker & Emote Settings
"
)
}
Button
{
text
:
qsTr
(
"
Change
"
)
ToolTip.text
:
qsTr
(
"
Change what packs are enabled, remove packs or create new ones
"
)
onClicked
:
TimelineManager
.
openImagePackSettings
(
roomSettings
.
roomId
)
Layout.alignment
:
Qt
.
AlignRight
}
Button
{
text
:
qsTr
(
"
Change
"
)
ToolTip.text
:
qsTr
(
"
Change what packs are enabled, remove packs or create new ones
"
)
onClicked
:
TimelineManager
.
openImagePackSettings
(
roomSettings
.
roomId
)
Layout.alignment
:
Qt
.
AlignRight
}
Label
{
text
:
qsTr
(
"
Hidden events
"
)
color
:
Nheko
.
colors
.
text
}
MatrixText
{
text
:
qsTr
(
"
Hidden events
"
)
}
HiddenEventsDialog
{
id
:
hiddenEventsDialog
roomid
:
roomSettings
.
roomId
roomName
:
roomSettings
.
roomName
}
HiddenEventsDialog
{
id
:
hiddenEventsDialog
roomid
:
roomSettings
.
roomId
roomName
:
roomSettings
.
roomName
}
Button
{
text
:
qsTr
(
"
Configure
"
)
ToolTip.text
:
qsTr
(
"
Select events to hide in this room
"
)
onClicked
:
hiddenEventsDialog
.
show
()
Layout.alignment
:
Qt
.
AlignRight
}
Button
{
text
:
qsTr
(
"
Configure
"
)
ToolTip.text
:
qsTr
(
"
Select events to hide in this room
"
)
onClicked
:
hiddenEventsDialog
.
show
()
Layout.alignment
:
Qt
.
AlignRight
}
Item
{
// for adding extra space between sections
Layout.fillWidth
:
true
}
Item
{
// for adding extra space between sections
Layout.fillWidth
:
true
}
Item
{
// for adding extra space between sections
Layout.fillWidth
:
true
}
Item
{
// for adding extra space between sections
Layout.fillWidth
:
true
}
Label
{
text
:
qsTr
(
"
INFO
"
)
font.bold
:
true
color
:
Nheko
.
colors
.
text
}
MatrixText
{
text
:
qsTr
(
"
INFO
"
)
font.bold
:
true
}
Item
{
Layout.fillWidth
:
true
}
Item
{
Layout.fillWidth
:
true
}
Label
{
text
:
qsTr
(
"
Internal ID
"
)
color
:
Nheko
.
colors
.
text
}
MatrixText
{
text
:
qsTr
(
"
Internal ID
"
)
}
AbstractButton
{
// AbstractButton does not allow setting text color
Layout.alignment
:
Qt
.
AlignRight
Layout.fillWidth
:
true
Layout.preferredHeight
:
idLabel
.
height
Label
{
// TextEdit does not trigger onClicked
id
:
idLabel
text
:
roomSettings
.
roomId
font.pixelSize
:
Math
.
floor
(
fontMetrics
.
font
.
pixelSize
*
0.8
)
color
:
Nheko
.
colors
.
text
width
:
parent
.
width
horizontalAlignment
:
Text
.
AlignRight
wrapMode
:
Text
.
WrapAnywhere
ToolTip.text
:
qsTr
(
"
Copied to clipboard
"
)
ToolTip.visible
:
toolTipTimer
.
running
}
TextEdit
{
// label does not allow selection
id
:
textEdit
visible
:
false
text
:
roomSettings
.
roomId
}
onClicked
:
{
textEdit
.
selectAll
()
textEdit
.
copy
()
toolTipTimer
.
start
()
}
Timer
{
id
:
toolTipTimer
}
}
MatrixText
{
text
:
roomSettings
.
roomId
font.pixelSize
:
Math
.
floor
(
fontMetrics
.
font
.
pixelSize
*
0.8
)
Layout.alignment
:
Qt
.
AlignRight
}
Label
{
text
:
qsTr
(
"
Room Version
"
)
color
:
Nheko
.
colors
.
text
}
MatrixText
{
text
:
qsTr
(
"
Room Version
"
)
}
Label
{
text
:
roomSettings
.
roomVersion
font.pixelSize
:
fontMetrics
.
font
.
pixelSize
Layout.alignment
:
Qt
.
AlignRight
color
:
Nheko
.
colors
.
text
}
MatrixText
{
text
:
roomSettings
.
roomVersion
font.pixelSize
:
fontMetrics
.
font
.
pixelSize
Layout.alignment
:
Qt
.
AlignRight
}
}
DialogButtonBox
{
Layout.fillWidth
:
true
standardButtons
:
DialogButtonBox
.
Ok
onAccepted
:
close
()
}
Button
{
id
:
showMoreButton
anchors.horizontalCenter
:
flickable
.
horizontalCenter
y
:
Math
.
min
(
showMorePlaceholder
.
y
+
contentLayout1
.
y
-
flickable
.
contentY
,
flickable
.
height
-
height
)
visible
:
roomTopic
.
cut
text
:
roomTopic
.
showMore
?
"
show less
"
:
"
show more
"
onClicked
:
{
roomTopic
.
showMore
=
!
roomTopic
.
showMore
console
.
log
(
flickable
.
visibleArea
)
}
}
footer
:
DialogButtonBox
{
standardButtons
:
DialogButtonBox
.
Ok
onAccepted
:
close
()
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment