ChatViewFooter: apply the new design
GitLab: #1067 Change-Id: Ia80f85c678cb202d8e91cb3efe83d9ea82c40ae6
16
resources/icons/Bold_Black_24dp.svg
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?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">
|
||||
<style type="text/css">
|
||||
.st0{fill:#030504;}
|
||||
</style>
|
||||
<g id="Bold" transform="translate(-456.251 -437.592)">
|
||||
<path id="Path_265" class="st0" d="M467,459.6c-1.1,0-2.1,0-3.2-0.1c-1.1-0.1-2.2-0.2-3.3-0.5v-18.9c1-0.2,2-0.3,3-0.4
|
||||
c1.1-0.1,2.1-0.1,3-0.1c1.1,0,2.3,0.1,3.4,0.3c0.9,0.1,1.9,0.5,2.7,0.9c0.7,0.4,1.3,1,1.8,1.7c0.4,0.8,0.7,1.7,0.6,2.6
|
||||
c0,1.6-0.9,3-2.3,3.7c1,0.3,1.9,1,2.5,1.9c0.5,0.8,0.7,1.8,0.7,2.7c0.1,1.8-0.7,3.6-2.2,4.6C471.7,459.2,469.4,459.7,467,459.6z
|
||||
M464.8,447.5h2.1c1,0.1,2-0.1,2.9-0.5c0.6-0.3,0.9-1,0.9-1.7c0.1-0.7-0.3-1.3-0.9-1.7c-0.8-0.4-1.7-0.5-2.6-0.5
|
||||
c-0.4,0-0.8,0-1.2,0c-0.4,0-0.8,0-1.2,0.1L464.8,447.5z M464.8,450.8v5c0.3,0,0.7,0.1,1,0.1c0.4,0,0.8,0,1.2,0
|
||||
c1.1,0,2.2-0.1,3.2-0.6c0.8-0.4,1.3-1.2,1.2-2.1c0.1-0.8-0.3-1.5-1-1.9c-0.9-0.4-1.9-0.6-2.9-0.6L464.8,450.8z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
19
resources/icons/Bullet-number_Black_24dp.svg
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?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">
|
||||
<style type="text/css">
|
||||
.st0{font-family:'Ubuntu-Bold';}
|
||||
.st1{font-size:5.8624px;}
|
||||
</style>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M8.2,6.8H21c0.6,0,1-0.5,1-1s-0.5-1-1-1H8.2c-0.6,0-1,0.5-1,1S7.6,6.8,8.2,6.8z"/>
|
||||
<path d="M21,10.8H8.2c-0.6,0-1,0.5-1,1c0,0.6,0.5,1,1,1H21c0.6,0,1-0.5,1-1C22,11.2,21.5,10.8,21,10.8z"/>
|
||||
<path d="M21,16.8H8.2c-0.6,0-1,0.5-1,1c0,0.6,0.5,1,1,1H21c0.6,0,1-0.5,1-1C22,17.3,21.5,16.8,21,16.8z"/>
|
||||
</g>
|
||||
<text transform="matrix(1 0 0 1 2.0002 7.9709)" class="st0 st1">1</text>
|
||||
<text transform="matrix(1 0 0 1 2.0002 13.8333)" class="st0 st1">2</text>
|
||||
<text transform="matrix(1 0 0 1 2.0002 19.6956)" class="st0 st1">3</text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 993 B |
18
resources/icons/Bullet-point_Black_24dp.svg
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?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>
|
||||
<path id="Path_247" d="M4,4.1c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1c0-0.6-0.2-1.1-0.6-1.5
|
||||
C5.1,4.4,4.6,4.1,4,4.1z"/>
|
||||
<path id="Path_248" d="M4,9.9c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1c0-0.6-0.2-1.1-0.6-1.5
|
||||
C5.1,10.1,4.6,9.9,4,9.9z"/>
|
||||
<path id="Path_249" d="M4,15.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1c0-0.6-0.2-1.1-0.6-1.5
|
||||
C5.1,15.8,4.6,15.6,4,15.6z"/>
|
||||
<g>
|
||||
<path d="M9,7.3h12.1c0.5,0,1-0.4,1-1s-0.4-1-1-1H9c-0.5,0-1,0.4-1,1S8.5,7.3,9,7.3z"/>
|
||||
<path d="M21.2,11H9c-0.5,0-1,0.4-1,1s0.4,1,1,1h12.1c0.5,0,1-0.4,1-1S21.7,11,21.2,11z"/>
|
||||
<path d="M21.2,16.8H9c-0.5,0-1,0.4-1,1c0,0.5,0.4,1,1,1h12.1c0.5,0,1-0.4,1-1C22.1,17.2,21.7,16.8,21.2,16.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
9
resources/icons/Code_Black_24dp.svg
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?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">
|
||||
<path id="Code" d="M7.7,5.9C7.5,5.9,7.3,6,7.1,6.2l-4.8,5.2l0,0c-0.3,0.4-0.3,0.9,0,1.2l4.8,5.2c0.3,0.4,0.9,0.5,1.3,0.2
|
||||
c0.4-0.3,0.5-0.9,0.2-1.3c0,0-0.1-0.1-0.1-0.1L4.2,12l4.3-4.5c0.3-0.4,0.3-0.9,0-1.3C8.2,6,8,5.9,7.7,5.9z M16.2,5.9L16.2,5.9
|
||||
c-0.5,0-0.9,0.5-0.8,1c0,0.2,0.1,0.4,0.2,0.5l4.3,4.5l-4.3,4.5c-0.4,0.3-0.4,0.9-0.1,1.3c0.3,0.4,0.9,0.4,1.3,0.1
|
||||
c0,0,0.1-0.1,0.1-0.1l4.8-5.2c0.3-0.4,0.3-0.9,0-1.2l-4.8-5.2C16.7,6,16.4,5.9,16.2,5.9L16.2,5.9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 803 B |
11
resources/icons/Italic_Black_24dp.svg
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?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">
|
||||
<style type="text/css">
|
||||
.st0{fill:#030504;}
|
||||
</style>
|
||||
<g id="Italic" transform="translate(-500.334 -437.712)">
|
||||
<path id="Path_266" class="st0" d="M513.3,439.7h2.8l-4.8,20h-2.8L513.3,439.7z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 550 B |
13
resources/icons/Link_Web_Black_24dp.svg
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?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="Link">
|
||||
<path d="M10.9,8.7c-1.2,0-2.3,0.5-3.1,1.3l-4.6,4.6C2.5,15.4,2,16.5,2,17.6c0,1.2,0.5,2.3,1.3,3.1S5.2,22,6.3,22s2.3-0.5,3.1-1.3
|
||||
l3.3-3.3c-0.7,0-1.3-0.2-1.9-0.4l-2.6,2.6c-1.1,1.1-2.8,1.1-3.8,0l-0.1-0.1l0,0c-0.4-0.5-0.7-1.1-0.7-1.8c0-0.7,0.3-1.4,0.8-1.9
|
||||
l0,0L9,11.1c1-1,2.8-1,3.8,0c0.3,0.3,0.9,0.3,1.2,0c0.2-0.2,0.2-0.4,0.2-0.6S14.2,10.1,14,10C13.2,9.2,12.1,8.7,10.9,8.7z
|
||||
M10.6,12.6c-0.2,0-0.4,0.1-0.6,0.2c-0.3,0.3-0.3,0.9,0,1.2c1.7,1.7,4.5,1.7,6.1,0l4.6-4.6C21.5,8.6,22,7.5,22,6.4
|
||||
s-0.5-2.3-1.3-3.1c-1.7-1.7-4.5-1.7-6.1,0l-3.3,3.3c0.7,0,1.3,0.2,1.9,0.4l2.6-2.6c0.5-0.5,1.2-0.8,1.9-0.8c0.7,0,1.4,0.3,1.9,0.8
|
||||
c0.5,0.5,0.8,1.2,0.8,1.9s-0.3,1.4-0.8,1.9L15,12.9c-1,1-2.8,1.1-3.8,0C11,12.7,10.8,12.6,10.6,12.6z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
13
resources/icons/Quote_Black_24dp.svg
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?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="Quote" transform="translate(-119.998 -268.136)">
|
||||
<path id="Path_245" d="M140.3,278.1h-3.3c-0.2-1.5,0.1-3,0.9-4.2c0.1-0.2,0.1-0.5-0.1-0.6c-0.1-0.1-0.3-0.1-0.4,0
|
||||
c-0.6,0.3-1.2,0.6-1.7,1.1c-1.4,1.4-2.3,3.2-2.4,5.1c0,0.2,0,0.3,0,0.4v5.5c0,1,0.8,1.7,1.7,1.7h5.5c1,0,1.7-0.8,1.8-1.7
|
||||
c0,0,0,0,0,0v-5.5C142,278.9,141.2,278.1,140.3,278.1z"/>
|
||||
<path id="Path_246" d="M129.2,278.1h-3.3c-0.1-0.9-0.1-1.8,0.2-2.7c0.2-0.5,0.4-1.1,0.7-1.5c0.1-0.2,0.1-0.5-0.1-0.6
|
||||
c-0.1-0.1-0.3-0.1-0.4,0c-0.6,0.3-1.2,0.6-1.7,1.1c-1.4,1.4-2.3,3.2-2.4,5.1c0,0.2,0,0.3,0,0.4v5.5c0,1,0.8,1.7,1.7,1.8
|
||||
c0,0,0,0,0,0h5.5c1,0,1.7-0.8,1.8-1.7c0,0,0,0,0,0v-5.5C131,278.9,130.2,278.1,129.2,278.1L129.2,278.1z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1 KiB |
16
resources/icons/S-Barre_Black_24dp.svg
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?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="Barre" transform="translate(-538.1 -437.472)">
|
||||
<path id="Path_267" d="M549.6,457.1c2.8,0,4.2-1,4.2-2.9c0-0.5-0.1-1-0.4-1.5c-0.3-0.4-0.6-0.8-1-1.1c-0.5-0.3-0.9-0.6-1.5-0.8
|
||||
c-0.5-0.2-1.1-0.4-1.7-0.7c-0.7-0.2-1.3-0.5-2-0.8c-0.6-0.3-1.1-0.6-1.6-1.1c-0.5-0.4-0.8-0.9-1.1-1.5c-0.3-0.7-0.4-1.4-0.4-2.1
|
||||
c-0.1-1.5,0.6-3,1.7-3.9c1.4-1,3-1.5,4.7-1.4c1.1,0,2.1,0.1,3.2,0.4c0.7,0.2,1.4,0.4,2.1,0.8l-0.9,2.2c-0.5-0.3-1.1-0.5-1.7-0.7
|
||||
c-0.9-0.2-1.8-0.4-2.7-0.3c-0.5,0-1,0.1-1.4,0.2c-0.4,0.1-0.8,0.3-1.2,0.5c-0.3,0.2-0.6,0.5-0.8,0.8c-0.2,0.4-0.3,0.8-0.3,1.2
|
||||
c0,0.5,0.1,0.9,0.3,1.3c0.2,0.4,0.5,0.7,0.9,0.9c0.4,0.3,0.8,0.5,1.3,0.7c0.5,0.2,1,0.4,1.6,0.7c0.8,0.3,1.6,0.7,2.3,1
|
||||
c0.7,0.3,1.3,0.7,1.8,1.2c0.5,0.5,0.9,1,1.2,1.6c0.3,0.7,0.4,1.5,0.4,2.3c0.1,1.5-0.6,3-1.8,3.9c-1.5,1-3.4,1.5-5.2,1.4
|
||||
c-0.7,0-1.4,0-2.1-0.2c-0.6-0.1-1.1-0.2-1.7-0.4c-0.4-0.1-0.9-0.3-1.3-0.4c-0.4-0.2-0.6-0.3-0.8-0.4l0.8-2.2
|
||||
c0.6,0.3,1.3,0.6,1.9,0.8C547.4,457,548.5,457.2,549.6,457.1z"/>
|
||||
<path id="Path_268" d="M542.8,453v-2.2h14.7v2.2H542.8z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
26
resources/icons/Text-Edit_Black_24dp.svg
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?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-text-edit-1483720" transform="translate(-240 -240)">
|
||||
<g id="Path_259">
|
||||
<path d="M252.6,242v3.6h-1.3v-1.8v-0.5h-0.5h-2.3H248v0.5v11.7v0.5h0.5h1.8v1.3h-6V256h1.8h0.5v-0.5v-11.7v-0.5h-0.5h-2.3h-0.5
|
||||
v0.5v1.8H242V242H252.6"/>
|
||||
</g>
|
||||
<g id="Path_260">
|
||||
<path d="M262,256v1.3h-6V256H262"/>
|
||||
</g>
|
||||
<g id="Path_261">
|
||||
<path d="M262,260.7v1.3h-20v-1.3H262"/>
|
||||
</g>
|
||||
<g id="Path_262">
|
||||
<path d="M257.3,251.4v1.3H256v-1.3H257.3"/>
|
||||
</g>
|
||||
<g id="Path_263">
|
||||
<path d="M262,246.7v1.3h-6v-1.3H262"/>
|
||||
</g>
|
||||
<g id="Path_264">
|
||||
<path d="M259.7,242v1.3H256V242H259.7"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 937 B |
11
resources/icons/Title_Black_24dp.svg
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?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">
|
||||
<style type="text/css">
|
||||
.st0{fill:#030504;}
|
||||
</style>
|
||||
<g id="Title" transform="translate(-579.093 -437.712)">
|
||||
<path id="Path_269" class="st0" d="M596,439.7h2.8v20H596v-9.2h-9.8v9.2h-2.8v-20h2.8v8.3h9.8V439.7z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 570 B |
|
@ -58,7 +58,9 @@ extern const QString defaultDownloadPath;
|
|||
X(LANG, "SYSTEM") \
|
||||
X(PositionShareDuration, 15) \
|
||||
X(PositionShareLimit, true) \
|
||||
X(FlipSelf, true)
|
||||
X(FlipSelf, true) \
|
||||
X(ShowMardownOption, false) \
|
||||
X(ShowSendOption, false)
|
||||
|
||||
/*
|
||||
* A class to expose settings keys in both c++ and QML.
|
||||
|
|
95
src/app/commoncomponents/MarkdownPopup.qml
Normal file
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Copyright (C) 2023 Savoir-faire Linux Inc.
|
||||
* Author: Franck Laurent <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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.platform
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import "../mainview/components"
|
||||
|
||||
Popup {
|
||||
id: root
|
||||
padding: 0
|
||||
property list<Action> menuTypoActionsSecond
|
||||
|
||||
contentItem: ListView {
|
||||
id: listViewTypoSecond
|
||||
|
||||
width: contentWidth + leftMargin
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
orientation: ListView.Horizontal
|
||||
interactive: false
|
||||
leftMargin: 10
|
||||
spacing: 10
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
radius: 5
|
||||
z: -1
|
||||
}
|
||||
|
||||
model: menuTypoActionsSecond
|
||||
|
||||
delegate: PushButton {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
preferredSize: JamiTheme.chatViewFooterRealButtonSize
|
||||
imageContainerWidth: 20
|
||||
imageContainerHeight: 20
|
||||
radius: 5
|
||||
|
||||
toolTipText: modelData.toolTip
|
||||
source: modelData.iconSrc
|
||||
|
||||
normalColor: JamiTheme.chatViewFooterListColor
|
||||
imageColor: JamiTheme.chatViewFooterImgColor
|
||||
hoveredColor: JamiTheme.showMoreButtonOpenColor
|
||||
pressedColor: hoveredColor
|
||||
|
||||
action: modelData
|
||||
}
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
radius: 5
|
||||
z: -1
|
||||
}
|
||||
|
||||
enter: Transition {
|
||||
NumberAnimation {
|
||||
properties: "opacity"
|
||||
from: 0.0
|
||||
to: 1.0
|
||||
duration: JamiTheme.shortFadeDuration
|
||||
}
|
||||
}
|
||||
exit: Transition {
|
||||
NumberAnimation {
|
||||
properties: "opacity"
|
||||
from: 1.0
|
||||
to: 0.0
|
||||
duration: JamiTheme.shortFadeDuration
|
||||
}
|
||||
}
|
||||
}
|
|
@ -169,7 +169,7 @@ AbstractButton {
|
|||
},
|
||||
State {
|
||||
name: "hovered"
|
||||
when: hovered || root.focus
|
||||
when: hovered || root.activeFocus
|
||||
PropertyChanges {
|
||||
target: background
|
||||
color: hoveredColor
|
||||
|
@ -177,7 +177,7 @@ AbstractButton {
|
|||
},
|
||||
State {
|
||||
name: "forceHovered"
|
||||
when: forceHovered || root.focus
|
||||
when: forceHovered || root.activeFocus
|
||||
PropertyChanges {
|
||||
target: background
|
||||
color: hoveredColor
|
||||
|
|
|
@ -790,6 +790,21 @@ Item {
|
|||
property string sendFile: qsTr("Send file")
|
||||
property string leaveAudioMessage: qsTr("Leave audio message")
|
||||
property string leaveVideoMessage: qsTr("Leave video message")
|
||||
property string showMore: qsTr("Show more")
|
||||
property string showLess: qsTr("Show less")
|
||||
|
||||
property string bold: qsTr("Bold")
|
||||
property string italic: qsTr("Italic")
|
||||
property string barre: qsTr("Barre")
|
||||
property string title: qsTr("Title")
|
||||
property string link: qsTr("Link")
|
||||
property string code: qsTr("Code")
|
||||
property string quote: qsTr("Quote")
|
||||
property string bulletPoint: qsTr("Bullet Point")
|
||||
property string bulletNumber: qsTr("Bullet Number")
|
||||
property string showFormating: qsTr("Show Formating")
|
||||
property string hideFormating: qsTr("Hide Formating")
|
||||
|
||||
property string send: qsTr("Send")
|
||||
property string remove: qsTr("Remove")
|
||||
property string replyTo: qsTr("Reply to")
|
||||
|
|
|
@ -231,6 +231,14 @@ Item {
|
|||
property color messageWebViewFooterButtonImageColor: darkTheme ? "#838383" : "#656565"
|
||||
property color chatviewUsernameColor: "#A7A7A7"
|
||||
|
||||
//ChatView Footer
|
||||
property color chatViewFooterListColor: darkTheme ? blackColor : "#E5E5E5"
|
||||
property color chatViewFooterImgColor: darkTheme ? whiteColor : blackColor
|
||||
property color showMoreButtonOpenColor: darkTheme ? "#123F4A" : "#CCCCCC"
|
||||
property color chatViewFooterSeparateLineColor: darkTheme ? "#5c5c5c" : "#929292"
|
||||
property color chatViewFooterSendButtonColor: darkTheme ? "#03B9E9" : "#005699"
|
||||
property color chatViewFooterSendButtonImgColor: darkTheme ? blackColor : whiteColor
|
||||
|
||||
//mapPosition
|
||||
property color mapButtonsOverlayColor: darkTheme ? "#000000" : "#f0f0f0"
|
||||
property color mapButtonColor: darkTheme ? "#f0f0f0" : "#000000"
|
||||
|
@ -429,8 +437,9 @@ Item {
|
|||
property real chatViewHeaderPreferredHeight: 64
|
||||
property real chatViewFooterPreferredHeight: 50
|
||||
property real chatViewFooterMaximumHeight: 280
|
||||
property real chatViewFooterRowSpacing: 1
|
||||
property real chatViewFooterRowSpacing: 4
|
||||
property real chatViewFooterButtonSize: 36
|
||||
property real chatViewFooterRealButtonSize: 26
|
||||
property real chatViewFooterButtonIconSize: 48
|
||||
property real chatViewFooterButtonRadius: 5
|
||||
property real chatViewFooterTextAreaMaximumHeight: 130
|
||||
|
|
|
@ -66,7 +66,7 @@ Rectangle {
|
|||
Shortcut {
|
||||
sequence: "Ctrl+M"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(SettingsView.Media)
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(12)
|
||||
}
|
||||
|
||||
WheelHandler {
|
||||
|
@ -119,19 +119,19 @@ Rectangle {
|
|||
Shortcut {
|
||||
sequence: "Ctrl+G"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(SettingsView.General)
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(5)
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Ctrl+I"
|
||||
sequence: "Ctrl+Alt+I"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(SettingsView.Account)
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(0)
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Ctrl+P"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(SettingsView.Plugin)
|
||||
onActivated: JamiQmlUtils.settingsPageRequested(15)
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
|
|
|
@ -130,7 +130,6 @@ Rectangle {
|
|||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.preferredWidth: footerColumnLayout.width
|
||||
Layout.preferredHeight: implicitHeight
|
||||
property var emojiPicker
|
||||
|
||||
Connections {
|
||||
|
@ -157,17 +156,16 @@ Rectangle {
|
|||
}
|
||||
|
||||
function setXposition() {
|
||||
return messageBar.width - JamiTheme.emojiPickerWidth; //- JamiTheme.emojiMargins
|
||||
return messageBar.width - JamiTheme.emojiPickerWidth;
|
||||
}
|
||||
|
||||
function setYposition() {
|
||||
return -JamiTheme.emojiPickerHeight; //- JamiTheme.emojiMargins
|
||||
return -JamiTheme.emojiPickerHeight;
|
||||
}
|
||||
|
||||
sendButtonVisibility: text || dataTransferSendContainer.filesToSendCount
|
||||
|
||||
onEmojiButtonClicked: {
|
||||
JamiQmlUtils.updateMessageBarButtonsPoints();
|
||||
openEmojiPicker();
|
||||
}
|
||||
|
||||
|
@ -185,6 +183,16 @@ Rectangle {
|
|||
});
|
||||
}
|
||||
|
||||
onVideoRecordMessageButtonClicked: {
|
||||
recordBox.y = -recordBox.height;
|
||||
recordBox.openRecorder(true);
|
||||
}
|
||||
|
||||
onAudioRecordMessageButtonClicked: {
|
||||
recordBox.y = -recordBox.height;
|
||||
recordBox.openRecorder(false);
|
||||
}
|
||||
|
||||
onSendMessageButtonClicked: {
|
||||
// Send file messages
|
||||
var fileCounts = dataTransferSendContainer.filesToSendListModel.rowCount();
|
||||
|
@ -205,32 +213,6 @@ Rectangle {
|
|||
messageBar.textAreaObj.clearText();
|
||||
MessagesAdapter.replyToId = "";
|
||||
}
|
||||
onVideoRecordMessageButtonClicked: {
|
||||
JamiQmlUtils.updateMessageBarButtonsPoints();
|
||||
recordBox.parent = JamiQmlUtils.mainViewRectObj;
|
||||
recordBox.x = Qt.binding(function () {
|
||||
var buttonCenterX = JamiQmlUtils.videoRecordMessageButtonInMainViewPoint.x + JamiQmlUtils.videoRecordMessageButtonObj.width / 2;
|
||||
return buttonCenterX - recordBox.width / 2;
|
||||
});
|
||||
recordBox.y = Qt.binding(function () {
|
||||
var buttonY = JamiQmlUtils.videoRecordMessageButtonInMainViewPoint.y;
|
||||
return buttonY - recordBox.height - recordBox.spikeHeight;
|
||||
});
|
||||
recordBox.openRecorder(true);
|
||||
}
|
||||
onAudioRecordMessageButtonClicked: {
|
||||
JamiQmlUtils.updateMessageBarButtonsPoints();
|
||||
recordBox.parent = JamiQmlUtils.mainViewRectObj;
|
||||
recordBox.x = Qt.binding(function () {
|
||||
var buttonCenterX = JamiQmlUtils.audioRecordMessageButtonInMainViewPoint.x + JamiQmlUtils.audioRecordMessageButtonObj.width / 2;
|
||||
return buttonCenterX - recordBox.width / 2;
|
||||
});
|
||||
recordBox.y = Qt.binding(function () {
|
||||
var buttonY = JamiQmlUtils.audioRecordMessageButtonInMainViewPoint.y;
|
||||
return buttonY - recordBox.height - recordBox.spikeHeight;
|
||||
});
|
||||
recordBox.openRecorder(false);
|
||||
}
|
||||
}
|
||||
|
||||
FilesToSendContainer {
|
||||
|
|
|
@ -151,7 +151,7 @@ Window {
|
|||
description: qsTr("General settings")
|
||||
}
|
||||
ListElement {
|
||||
shortcut: "Ctrl + I"
|
||||
shortcut: "Ctrl + Alt + I"
|
||||
shortcut2: ""
|
||||
description: qsTr("Account settings")
|
||||
}
|
||||
|
|
|
@ -17,8 +17,11 @@
|
|||
*/
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import SortFilterProxyModel 0.2
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Constants 1.1
|
||||
import "../../commoncomponents"
|
||||
|
||||
|
@ -30,6 +33,11 @@ ColumnLayout {
|
|||
property real marginSize: JamiTheme.messageBarMarginSize
|
||||
property bool sendButtonVisibility: false
|
||||
property bool animate: false
|
||||
property bool showDefault: !UtilsAdapter.getAppValue(Settings.Key.ShowSendOption)
|
||||
property bool showTypo: UtilsAdapter.getAppValue(Settings.Key.ShowMardownOption)
|
||||
property bool showTypoSecond: false
|
||||
|
||||
property int messageBarLayoutMaximumWidth: 486
|
||||
|
||||
signal sendMessageButtonClicked
|
||||
signal sendFileButtonClicked
|
||||
|
@ -38,9 +46,7 @@ ColumnLayout {
|
|||
signal showMapClicked
|
||||
signal emojiButtonClicked
|
||||
|
||||
implicitHeight: messageBarRowLayout.height
|
||||
|
||||
spacing: 0
|
||||
spacing: 5
|
||||
|
||||
Rectangle {
|
||||
id: messageBarHairLine
|
||||
|
@ -52,188 +58,796 @@ ColumnLayout {
|
|||
color: JamiTheme.tabbarBorderColor
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: messageBarRowLayout
|
||||
MessageBarTextArea {
|
||||
id: textArea
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
objectName: "messageBarTextArea"
|
||||
|
||||
// forward activeFocus to the actual text area object
|
||||
onActiveFocusChanged: {
|
||||
if (activeFocus)
|
||||
textAreaObj.forceActiveFocus();
|
||||
}
|
||||
|
||||
placeholderText: JamiStrings.writeTo.arg(CurrentConversation.title)
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.maximumWidth: JamiTheme.chatViewMaximumWidth
|
||||
|
||||
spacing: JamiTheme.chatViewFooterRowSpacing
|
||||
|
||||
PushButton {
|
||||
id: showMapButton
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.leftMargin: marginSize
|
||||
Layout.preferredWidth: JamiTheme.chatViewFooterButtonSize
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
visible: WITH_WEBENGINE && !CurrentConversation.isSip
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize
|
||||
|
||||
toolTipText: JamiStrings.shareLocation
|
||||
|
||||
source: JamiResources.share_location_svg
|
||||
|
||||
normalColor: JamiTheme.primaryBackgroundColor
|
||||
imageColor: JamiTheme.messageWebViewFooterButtonImageColor
|
||||
|
||||
onClicked: root.showMapClicked()
|
||||
Layout.leftMargin: marginSize / 2
|
||||
Layout.rightMargin: marginSize / 2
|
||||
Layout.preferredHeight: {
|
||||
return JamiTheme.chatViewFooterPreferredHeight > contentHeight ? JamiTheme.chatViewFooterPreferredHeight : contentHeight;
|
||||
}
|
||||
Layout.maximumHeight: JamiTheme.chatViewFooterTextAreaMaximumHeight - marginSize / 2
|
||||
|
||||
PushButton {
|
||||
id: sendFileButton
|
||||
onSendMessagesRequired: root.sendMessageButtonClicked()
|
||||
onTextChanged: MessagesAdapter.userIsComposing(text ? true : false)
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredWidth: JamiTheme.chatViewFooterButtonSize
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize - 6
|
||||
|
||||
toolTipText: JamiStrings.sendFile
|
||||
visible: !CurrentConversation.isSip
|
||||
|
||||
source: JamiResources.link_black_24dp_svg
|
||||
|
||||
normalColor: JamiTheme.primaryBackgroundColor
|
||||
imageColor: JamiTheme.messageWebViewFooterButtonImageColor
|
||||
|
||||
onClicked: root.sendFileButtonClicked()
|
||||
}
|
||||
|
||||
PushButton {
|
||||
id: audioRecordMessageButton
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredWidth: JamiTheme.chatViewFooterButtonSize
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize
|
||||
|
||||
toolTipText: JamiStrings.leaveAudioMessage
|
||||
visible: !CurrentConversation.isSip
|
||||
|
||||
source: JamiResources.message_audio_black_24dp_svg
|
||||
|
||||
normalColor: JamiTheme.primaryBackgroundColor
|
||||
imageColor: JamiTheme.messageWebViewFooterButtonImageColor
|
||||
|
||||
onClicked: root.audioRecordMessageButtonClicked()
|
||||
|
||||
Component.onCompleted: JamiQmlUtils.audioRecordMessageButtonObj = audioRecordMessageButton
|
||||
}
|
||||
|
||||
PushButton {
|
||||
id: videoRecordMessageButton
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredWidth: JamiTheme.chatViewFooterButtonSize
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
visible: VideoDevices.listSize !== 0 && !CurrentConversation.isSip
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize
|
||||
|
||||
toolTipText: JamiStrings.leaveVideoMessage
|
||||
|
||||
source: JamiResources.message_video_black_24dp_svg
|
||||
|
||||
normalColor: JamiTheme.primaryBackgroundColor
|
||||
imageColor: JamiTheme.messageWebViewFooterButtonImageColor
|
||||
|
||||
onClicked: root.videoRecordMessageButtonClicked()
|
||||
|
||||
Component.onCompleted: JamiQmlUtils.videoRecordMessageButtonObj = videoRecordMessageButton
|
||||
}
|
||||
|
||||
MessageBarTextArea {
|
||||
id: textArea
|
||||
|
||||
objectName: "messageBarTextArea"
|
||||
|
||||
// forward activeFocus to the actual text area object
|
||||
onActiveFocusChanged: {
|
||||
if (activeFocus)
|
||||
textAreaObj.forceActiveFocus();
|
||||
property var markdownShortCut: {
|
||||
"Bold": function () {
|
||||
listViewTypoFirst.itemAtIndex(0).action.triggered();
|
||||
},
|
||||
"Italic": function () {
|
||||
listViewTypoFirst.itemAtIndex(1).action.triggered();
|
||||
},
|
||||
"Barre": function () {
|
||||
listViewTypoFirst.itemAtIndex(2).action.triggered();
|
||||
},
|
||||
"Heading": function () {
|
||||
listViewTypoFirst.itemAtIndex(3).action.triggered();
|
||||
},
|
||||
"Link": function () {
|
||||
listViewTypoSecond.itemAtIndex(0).action.triggered();
|
||||
},
|
||||
"Code": function () {
|
||||
listViewTypoSecond.itemAtIndex(1).action.triggered();
|
||||
},
|
||||
"Quote": function () {
|
||||
listViewTypoSecond.itemAtIndex(2).action.triggered();
|
||||
},
|
||||
"Bulleted List": function () {
|
||||
listViewTypoSecond.itemAtIndex(3).action.triggered();
|
||||
},
|
||||
"Numbered List": function () {
|
||||
listViewTypoSecond.itemAtIndex(4).action.triggered();
|
||||
}
|
||||
}
|
||||
|
||||
placeholderText: JamiStrings.writeTo.arg(CurrentConversation.title)
|
||||
Shortcut {
|
||||
sequence: "Ctrl+B"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Bold"]()
|
||||
}
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.fillWidth: true
|
||||
Layout.margins: marginSize / 2
|
||||
Layout.preferredHeight: {
|
||||
return JamiTheme.chatViewFooterPreferredHeight > contentHeight ? JamiTheme.chatViewFooterPreferredHeight : contentHeight;
|
||||
Shortcut {
|
||||
sequence: "Ctrl+I"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Italic"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Shift+Alt+X"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Barre"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Ctrl+Alt+H"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Heading"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Ctrl+Alt+K"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Link"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Ctrl+Alt+C"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Code"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Shift+Alt+9"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Quote"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Shift+Alt+8"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Bulleted List"]()
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Shift+Alt+7"
|
||||
context: Qt.ApplicationShortcut
|
||||
onActivated: textArea.markdownShortCut["Numbered List"]()
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: messageBar
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
Layout.leftMargin: marginSize
|
||||
Layout.bottomMargin: marginSize
|
||||
|
||||
onWidthChanged: {
|
||||
if (width < messageBarRowLayout.width + sendButtonRow.width + 2 * JamiTheme.preferredMarginSize) {
|
||||
showTypoSecond = false;
|
||||
} else {
|
||||
if (width > 2 * messageBarRowLayout.width) {
|
||||
showTypoSecond = true;
|
||||
}
|
||||
}
|
||||
Layout.maximumHeight: JamiTheme.chatViewFooterTextAreaMaximumHeight - marginSize / 2
|
||||
|
||||
onSendMessagesRequired: root.sendMessageButtonClicked()
|
||||
onTextChanged: MessagesAdapter.userIsComposing(text ? true : false)
|
||||
}
|
||||
|
||||
PushButton {
|
||||
id: emojiButton
|
||||
visible: WITH_WEBENGINE
|
||||
RowLayout {
|
||||
id: messageBarRowLayout
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.rightMargin: sendMessageButton.visible ? 0 : marginSize
|
||||
Layout.preferredWidth: JamiTheme.chatViewFooterButtonSize
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
spacing: JamiTheme.chatViewFooterRowSpacing
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize
|
||||
Row {
|
||||
|
||||
toolTipText: JamiStrings.addEmoji
|
||||
PushButton {
|
||||
id: typoButton
|
||||
|
||||
source: JamiResources.emoji_black_24dp_svg
|
||||
preferredSize: JamiTheme.chatViewFooterButtonSize
|
||||
imageContainerWidth: 24
|
||||
imageContainerHeight: 24
|
||||
|
||||
normalColor: JamiTheme.primaryBackgroundColor
|
||||
imageColor: JamiTheme.messageWebViewFooterButtonImageColor
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
|
||||
onClicked: root.emojiButtonClicked()
|
||||
toolTipText: showTypo ? JamiStrings.hideFormating : JamiStrings.showFormating
|
||||
source: JamiResources.text_edit_black_24dp_svg
|
||||
|
||||
Component.onCompleted: JamiQmlUtils.emojiPickerButtonObj = emojiButton
|
||||
}
|
||||
normalColor: !showTypo ? JamiTheme.chatViewFooterListColor : JamiTheme.showMoreButtonOpenColor
|
||||
imageColor: JamiTheme.chatViewFooterImgColor
|
||||
pressedColor: JamiTheme.showMoreButtonOpenColor
|
||||
hoveredColor: JamiTheme.showMoreButtonOpenColor
|
||||
|
||||
PushButton {
|
||||
id: sendMessageButton
|
||||
onClicked: {
|
||||
showTypo = !showTypo;
|
||||
if (messageBar.width < messageBarLayoutMaximumWidth + sendButtonRow.width + 2 * JamiTheme.preferredMarginSize)
|
||||
showTypoSecond = false;
|
||||
if (!showDefault)
|
||||
showDefault = true;
|
||||
UtilsAdapter.setAppValue(Settings.Key.ShowMardownOption, showTypo);
|
||||
UtilsAdapter.setAppValue(Settings.Key.ShowSendOption, !showDefault);
|
||||
}
|
||||
|
||||
objectName: "sendMessageButton"
|
||||
Rectangle {
|
||||
visible: showTypo
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.rightMargin: visible ? marginSize : 0
|
||||
Layout.preferredWidth: scale * JamiTheme.chatViewFooterButtonSize
|
||||
Layout.preferredHeight: JamiTheme.chatViewFooterButtonSize
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 3
|
||||
anchors.rightMargin: -5
|
||||
color: JamiTheme.showMoreButtonOpenColor
|
||||
z: -2
|
||||
}
|
||||
}
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize - 6
|
||||
Row {
|
||||
id: listViewTypo
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
toolTipText: JamiStrings.send
|
||||
function addStyle(text, start, end, char1, char2) {
|
||||
// get the selected text with markdown effect
|
||||
var selectedText = text.substring(start - char1.length, end + char2.length);
|
||||
if (selectedText.startsWith(char1) && selectedText.endsWith(char2)) {
|
||||
// If the selected text is already formatted with the given characters, remove them
|
||||
selectedText = text.substring(start, end);
|
||||
root.text = text.substring(0, start - char1.length) + selectedText + text.substring(end + char2.length);
|
||||
textArea.selectText(start - char1.length, end - char1.length);
|
||||
} else {
|
||||
// Otherwise, add the formatting characters to the selected text
|
||||
root.text = text.substring(0, start) + char1 + text.substring(start, end) + char2 + text.substring(end);
|
||||
textArea.selectText(start + char1.length, end + char1.length);
|
||||
}
|
||||
}
|
||||
|
||||
source: JamiResources.send_black_24dp_svg
|
||||
function addPrefixStyle(message, selectionStart, selectionEnd, delimiter, isBulletNumber) {
|
||||
|
||||
normalColor: JamiTheme.primaryBackgroundColor
|
||||
imageColor: JamiTheme.messageWebViewFooterButtonImageColor
|
||||
//represents all the selected lines
|
||||
var multilineSelection;
|
||||
var newPrefix;
|
||||
var newSuffix;
|
||||
var newStartPos;
|
||||
var newEndPos;
|
||||
function nextIndexOf(text, char1, startPos) {
|
||||
return text.indexOf(char1, startPos + 1);
|
||||
}
|
||||
|
||||
opacity: sendButtonVisibility ? 1 : 0
|
||||
visible: opacity
|
||||
scale: opacity
|
||||
//get the previous index of the multilineSelection text
|
||||
if (message[selectionStart] === "\n")
|
||||
newStartPos = message.lastIndexOf('\n', selectionStart - 1);
|
||||
else
|
||||
newStartPos = message.lastIndexOf('\n', selectionStart);
|
||||
|
||||
Behavior on opacity {
|
||||
enabled: animate
|
||||
NumberAnimation {
|
||||
duration: JamiTheme.shortFadeDuration
|
||||
easing.type: Easing.InOutQuad
|
||||
//get the next index of the multilineSelection text
|
||||
if (message[selectionEnd] === "\n" || message[selectionEnd] === undefined)
|
||||
newEndPos = selectionEnd;
|
||||
else
|
||||
newEndPos = nextIndexOf(message, "\n", selectionEnd);
|
||||
|
||||
//if the text is empty
|
||||
if (newStartPos === -1)
|
||||
newStartPos = 0;
|
||||
newPrefix = message.slice(0, newStartPos);
|
||||
multilineSelection = message.slice(newStartPos, newEndPos);
|
||||
newSuffix = message.slice(newEndPos);
|
||||
var isFirstLineSelected = !multilineSelection.startsWith('\n') || newPrefix === "";
|
||||
var getDelimiter_counter = 1;
|
||||
function getDelimiter() {
|
||||
return `${getDelimiter_counter++}. `;
|
||||
}
|
||||
function getHasCurrentMarkdown() {
|
||||
const linesQuantity = (multilineSelection.match(/\n/g) || []).length;
|
||||
const newLinesWithDelimitersQuantity = (multilineSelection.match(new RegExp(`\n${delimiter}`, 'g')) || []).length;
|
||||
if (newLinesWithDelimitersQuantity === linesQuantity && !isFirstLineSelected)
|
||||
return true;
|
||||
return linesQuantity === newLinesWithDelimitersQuantity && multilineSelection.startsWith(delimiter);
|
||||
}
|
||||
function getHasCurrentMarkdownBullet() {
|
||||
const linesQuantity = (multilineSelection.match(/\n/g) || []).length;
|
||||
const newLinesWithDelimitersQuantity = (multilineSelection.match(/\n\d+\. /g) || []).length;
|
||||
if (newLinesWithDelimitersQuantity === linesQuantity && !isFirstLineSelected)
|
||||
return true;
|
||||
return linesQuantity === newLinesWithDelimitersQuantity && (/^\d\. /).test(multilineSelection);
|
||||
}
|
||||
var newValue;
|
||||
var newStart;
|
||||
var newEnd;
|
||||
var count;
|
||||
var startPos;
|
||||
var multilineSelectionLength;
|
||||
if (!isBulletNumber) {
|
||||
if (getHasCurrentMarkdown()) {
|
||||
|
||||
// clear first line from delimiter
|
||||
if (isFirstLineSelected)
|
||||
multilineSelection = multilineSelection.slice(delimiter.length);
|
||||
newValue = newPrefix + multilineSelection.replace(new RegExp(`\n${delimiter}`, 'g'), '\n') + newSuffix;
|
||||
count = 0;
|
||||
if (isFirstLineSelected)
|
||||
count++;
|
||||
count += (multilineSelection.match(/\n/g) || []).length;
|
||||
newStart = Math.max(selectionStart - delimiter.length, 0);
|
||||
newEnd = Math.max(selectionEnd - (delimiter.length * count), 0);
|
||||
} else {
|
||||
newValue = newPrefix + multilineSelection.replace(/\n/g, `\n${delimiter}`) + newSuffix;
|
||||
count = 0;
|
||||
if (isFirstLineSelected) {
|
||||
newValue = delimiter + newValue;
|
||||
count++;
|
||||
}
|
||||
count += (multilineSelection.match(new RegExp('\\n', 'g')) || []).length;
|
||||
newStart = selectionStart + delimiter.length;
|
||||
newEnd = selectionEnd + (delimiter.length * count);
|
||||
}
|
||||
} else if (getHasCurrentMarkdownBullet()) {
|
||||
if (message[selectionStart] === "\n")
|
||||
startPos = message.lastIndexOf('\n', selectionStart - 1) + 1;
|
||||
else
|
||||
startPos = message.lastIndexOf('\n', selectionStart) + 1;
|
||||
newStart = startPos;
|
||||
multilineSelection = multilineSelection.replace(/^\d+\.\s/gm, '');
|
||||
newValue = newPrefix + multilineSelection + newSuffix;
|
||||
multilineSelectionLength = multilineSelection.length;
|
||||
|
||||
//if the first line is not selected, we need to remove the first "\n" of multilineSelection
|
||||
if (newStart)
|
||||
multilineSelectionLength = multilineSelection.length - 1;
|
||||
newEnd = Math.max(newStart + multilineSelectionLength, 0);
|
||||
} else {
|
||||
if (message[selectionStart] === "\n")
|
||||
startPos = message.lastIndexOf('\n', selectionStart - 1) + 1;
|
||||
else
|
||||
startPos = message.lastIndexOf('\n', selectionStart) + 1;
|
||||
newStart = startPos;
|
||||
|
||||
// if no text is selected
|
||||
if (selectionStart === selectionEnd)
|
||||
newStart = newStart + 3;
|
||||
if (isFirstLineSelected)
|
||||
multilineSelection = getDelimiter() + multilineSelection;
|
||||
const selectionArr = Array.from(multilineSelection);
|
||||
for (var i = 0; i < selectionArr.length; i++) {
|
||||
if (selectionArr[i] === '\n')
|
||||
selectionArr[i] = `\n${getDelimiter()}`;
|
||||
}
|
||||
multilineSelection = selectionArr.join('');
|
||||
newValue = newPrefix + multilineSelection + newSuffix;
|
||||
multilineSelectionLength = multilineSelection.length;
|
||||
|
||||
//if the first line is not selected, we meed to remove the first "\n" of multilineSelection
|
||||
if (startPos)
|
||||
multilineSelectionLength = multilineSelection.length - 1;
|
||||
newEnd = Math.max(startPos + multilineSelectionLength, 0);
|
||||
}
|
||||
root.text = newValue;
|
||||
textArea.selectText(newStart, newEnd);
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: listViewTypoFirst
|
||||
|
||||
objectName: "listViewTypoFirst"
|
||||
|
||||
visible: width > 0
|
||||
width: showTypo ? contentWidth + 2 * leftMargin : 0
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: JamiTheme.longFadeDuration
|
||||
}
|
||||
}
|
||||
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
orientation: ListView.Horizontal
|
||||
interactive: false
|
||||
leftMargin: 10
|
||||
rightMargin: 10
|
||||
spacing: 10
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
z: -1
|
||||
}
|
||||
|
||||
property list<Action> menuTypoActionsFirst: [
|
||||
Action {
|
||||
id: boldAction
|
||||
property var iconSrc: JamiResources.bold_black_24dp_svg
|
||||
property var toolTip: JamiStrings.bold
|
||||
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "**", "**");
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: italicAction
|
||||
property var iconSrc: JamiResources.italic_black_24dp_svg
|
||||
property var toolTip: JamiStrings.italic
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "*", "*");
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: barreAction
|
||||
property var iconSrc: JamiResources.s_barre_black_24dp_svg
|
||||
property var toolTip: JamiStrings.barre
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "~~", "~~");
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: titleAction
|
||||
property var iconSrc: JamiResources.title_black_24dp_svg
|
||||
property var toolTip: JamiStrings.title
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addPrefixStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "### ", false);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
model: menuTypoActionsFirst
|
||||
|
||||
delegate: PushButton {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
preferredSize: JamiTheme.chatViewFooterRealButtonSize
|
||||
imageContainerWidth: 15
|
||||
imageContainerHeight: 15
|
||||
radius: 5
|
||||
|
||||
toolTipText: modelData.toolTip
|
||||
source: modelData.iconSrc
|
||||
|
||||
normalColor: JamiTheme.chatViewFooterListColor
|
||||
imageColor: JamiTheme.chatViewFooterImgColor
|
||||
hoveredColor: JamiTheme.showMoreButtonOpenColor
|
||||
pressedColor: hoveredColor
|
||||
|
||||
action: modelData
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
visible: width > 0
|
||||
width: showTypo && showTypoSecond ? 2 : 0
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: JamiTheme.longFadeDuration
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: 2
|
||||
height: JamiTheme.chatViewFooterButtonSize / 2
|
||||
color: JamiTheme.chatViewFooterSeparateLineColor
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
z: -1
|
||||
radius: 0
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
width: JamiTheme.chatViewFooterButtonSize
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
visible: showTypo && !showTypoSecond
|
||||
|
||||
ComboBox {
|
||||
id: showMoreTypoButton
|
||||
width: JamiTheme.chatViewFooterRealButtonSize
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
MaterialToolTip {
|
||||
id: toolTip
|
||||
|
||||
parent: showMoreTypoButton
|
||||
visible: showMoreTypoButton.hovered && (text.length > 0)
|
||||
delay: Qt.styleHints.mousePressAndHoldInterval
|
||||
text: JamiStrings.showMore
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
implicitWidth: showMoreTypoButton.width
|
||||
implicitHeight: showMoreTypoButton.height
|
||||
radius: 5
|
||||
color: showMoreTypoButton.popup.opened || showMoreTypoButton.hovered ? JamiTheme.showMoreButtonOpenColor : JamiTheme.chatViewFooterListColor
|
||||
}
|
||||
|
||||
indicator: ResponsiveImage {
|
||||
containerHeight: 20
|
||||
containerWidth: 20
|
||||
width: 18
|
||||
height: 18
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
source: JamiResources.more_vert_24dp_svg
|
||||
|
||||
color: JamiTheme.chatViewFooterImgColor
|
||||
}
|
||||
|
||||
popup: MarkdownPopup {
|
||||
y: 1.5 * parent.height
|
||||
x: -parent.width * 3
|
||||
width: 190
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
menuTypoActionsSecond: listViewTypoSecond.menuTypoActionsSecond
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: listViewTypoSecond
|
||||
visible: width > 0
|
||||
width: showTypo && showTypoSecond ? contentWidth + 2 * leftMargin : 0
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: JamiTheme.longFadeDuration
|
||||
}
|
||||
}
|
||||
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
orientation: ListView.Horizontal
|
||||
interactive: false
|
||||
leftMargin: 10
|
||||
rightMargin: 10
|
||||
spacing: 10
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
z: -1
|
||||
}
|
||||
|
||||
property list<Action> menuTypoActionsSecond: [
|
||||
Action {
|
||||
id: linkAction
|
||||
property var iconSrc: JamiResources.link_web_black_24dp_svg
|
||||
property var toolTip: JamiStrings.link
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "[", "](url)");
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: codeAction
|
||||
property var iconSrc: JamiResources.code_black_24dp_svg
|
||||
property var toolTip: JamiStrings.code
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "```", "```");
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: quoteAction
|
||||
property var iconSrc: JamiResources.quote_black_24dp_svg
|
||||
property var toolTip: JamiStrings.quote
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addPrefixStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "> ", false);
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: bulletPointAction
|
||||
property var iconSrc: JamiResources.bullet_point_black_24dp_svg
|
||||
property var toolTip: JamiStrings.bulletPoint
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addPrefixStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "- ", false);
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: bulletNumberAction
|
||||
property var iconSrc: JamiResources.bullet_number_black_24dp_svg
|
||||
property var toolTip: JamiStrings.bulletNumber
|
||||
onTriggered: function clickAction() {
|
||||
listViewTypo.addPrefixStyle(root.text, textArea.selectionStart, textArea.selectionEnd, "", true);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
model: menuTypoActionsSecond
|
||||
|
||||
delegate: PushButton {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
preferredSize: JamiTheme.chatViewFooterRealButtonSize
|
||||
imageContainerWidth: 20
|
||||
imageContainerHeight: 20
|
||||
radius: 5
|
||||
|
||||
toolTipText: modelData.toolTip
|
||||
source: modelData.iconSrc
|
||||
|
||||
normalColor: JamiTheme.chatViewFooterListColor
|
||||
imageColor: JamiTheme.chatViewFooterImgColor
|
||||
hoveredColor: JamiTheme.showMoreButtonOpenColor
|
||||
pressedColor: hoveredColor
|
||||
|
||||
action: modelData
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: root.sendMessageButtonClicked()
|
||||
Row {
|
||||
|
||||
ListView {
|
||||
id: listViewAction
|
||||
|
||||
width: contentWidth + 2 * leftMargin
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: JamiTheme.longFadeDuration
|
||||
}
|
||||
}
|
||||
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
orientation: ListView.Horizontal
|
||||
interactive: false
|
||||
|
||||
leftMargin: 10
|
||||
rightMargin: 10
|
||||
spacing: 10
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: JamiTheme.chatViewFooterListColor
|
||||
z: -1
|
||||
}
|
||||
|
||||
property list<Action> menuActions: [
|
||||
Action {
|
||||
id: sendFile
|
||||
property var iconSrc: JamiResources.link_black_24dp_svg
|
||||
property var toolTip: JamiStrings.sendFile
|
||||
property bool show: true
|
||||
property bool needWebEngine: false
|
||||
property bool needVideoDevice: false
|
||||
property bool noSip: false
|
||||
onTriggered: function clickAction() {
|
||||
sendFileButtonClicked();
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: addEmoji
|
||||
property var iconSrc: JamiResources.emoji_black_24dp_svg
|
||||
property var toolTip: JamiStrings.addEmoji
|
||||
property bool show: true
|
||||
property bool needWebEngine: true
|
||||
property bool needVideoDevice: false
|
||||
property bool noSip: true
|
||||
onTriggered: function clickAction() {
|
||||
emojiButtonClicked();
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: leaveAudioMessage
|
||||
property var iconSrc: JamiResources.message_audio_black_24dp_svg
|
||||
property var toolTip: JamiStrings.leaveAudioMessage
|
||||
property bool show: false
|
||||
property bool needWebEngine: false
|
||||
property bool needVideoDevice: false
|
||||
property bool noSip: false
|
||||
onTriggered: function clickAction() {
|
||||
audioRecordMessageButtonClicked();
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: leaveVideoMessage
|
||||
property var iconSrc: JamiResources.message_video_black_24dp_svg
|
||||
property var toolTip: JamiStrings.leaveVideoMessage
|
||||
property bool show: false
|
||||
property bool needWebEngine: false
|
||||
property bool needVideoDevice: true
|
||||
property bool noSip: false
|
||||
onTriggered: function clickAction() {
|
||||
videoRecordMessageButtonClicked();
|
||||
}
|
||||
},
|
||||
Action {
|
||||
id: shareLocation
|
||||
property var iconSrc: JamiResources.localisation_sharing_send_pin_svg
|
||||
property var toolTip: JamiStrings.shareLocation
|
||||
property bool show: false
|
||||
property bool needWebEngine: false
|
||||
property bool needVideoDevice: false
|
||||
property bool noSip: false
|
||||
onTriggered: function clickAction() {
|
||||
showMapClicked();
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
ListModel {
|
||||
id: listActions
|
||||
Component.onCompleted: {
|
||||
for (var i = 0; i < listViewAction.menuActions.length; i++) {
|
||||
append({
|
||||
"menuAction": listViewAction.menuActions[i]
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model: SortFilterProxyModel {
|
||||
sourceModel: listActions
|
||||
filters: [
|
||||
ExpressionFilter {
|
||||
expression: menuAction.show === true
|
||||
enabled: root.showDefault
|
||||
},
|
||||
ExpressionFilter {
|
||||
expression: menuAction.needWebEngine === false
|
||||
enabled: !WITH_WEBENGINE
|
||||
},
|
||||
ExpressionFilter {
|
||||
expression: menuAction.noSip === true
|
||||
enabled: CurrentConversation.isSip
|
||||
},
|
||||
ExpressionFilter {
|
||||
expression: menuAction.needVideoDevice === false
|
||||
enabled: VideoDevices.listSize === 0
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
delegate: PushButton {
|
||||
id: buttonDelegate
|
||||
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||
preferredSize: JamiTheme.chatViewFooterRealButtonSize
|
||||
imageContainerWidth: 20
|
||||
imageContainerHeight: 20
|
||||
radius: 5
|
||||
|
||||
toolTipText: modelData.toolTip
|
||||
source: modelData.iconSrc
|
||||
|
||||
normalColor: JamiTheme.chatViewFooterListColor
|
||||
imageColor: JamiTheme.chatViewFooterImgColor
|
||||
hoveredColor: JamiTheme.showMoreButtonOpenColor
|
||||
pressedColor: hoveredColor
|
||||
|
||||
action: modelData
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
z: -1
|
||||
radius: 0
|
||||
color: showMoreButton.normalColor
|
||||
width: JamiTheme.chatViewFooterButtonSize / 2
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
PushButton {
|
||||
id: showMoreButton
|
||||
anchors.left: parent.left
|
||||
|
||||
preferredSize: JamiTheme.chatViewFooterButtonSize
|
||||
imageContainerWidth: 20
|
||||
imageContainerHeight: 20
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
|
||||
toolTipText: showDefault ? JamiStrings.showMore : JamiStrings.showLess
|
||||
|
||||
source: JamiResources.more_vert_24dp_svg
|
||||
|
||||
normalColor: showDefault ? JamiTheme.chatViewFooterListColor : JamiTheme.showMoreButtonOpenColor
|
||||
imageColor: JamiTheme.chatViewFooterImgColor
|
||||
pressedColor: JamiTheme.showMoreButtonOpenColor
|
||||
hoveredColor: JamiTheme.showMoreButtonOpenColor
|
||||
|
||||
onClicked: {
|
||||
showDefault = !showDefault;
|
||||
if (showTypo)
|
||||
showTypo = false;
|
||||
UtilsAdapter.setAppValue(Settings.Key.ShowMardownOption, showTypo);
|
||||
UtilsAdapter.setAppValue(Settings.Key.ShowSendOption, !showDefault);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: JamiQmlUtils.messageBarButtonsRowObj = messageBarRowLayout
|
||||
Row {
|
||||
id: sendButtonRow
|
||||
spacing: JamiTheme.chatViewFooterRowSpacing
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: sendMessageButton.visible ? marginSize : 0
|
||||
|
||||
PushButton {
|
||||
id: sendMessageButton
|
||||
|
||||
objectName: "sendMessageButton"
|
||||
|
||||
width: scale * JamiTheme.chatViewFooterButtonSize
|
||||
height: JamiTheme.chatViewFooterButtonSize
|
||||
|
||||
radius: JamiTheme.chatViewFooterButtonRadius
|
||||
preferredSize: JamiTheme.chatViewFooterButtonIconSize - 6
|
||||
imageContainerWidth: 25
|
||||
imageContainerHeight: 25
|
||||
|
||||
toolTipText: JamiStrings.send
|
||||
|
||||
source: JamiResources.send_black_24dp_svg
|
||||
|
||||
normalColor: JamiTheme.chatViewFooterSendButtonColor
|
||||
imageColor: JamiTheme.chatViewFooterSendButtonImgColor
|
||||
hoveredColor: JamiTheme.buttonTintedBlueHovered
|
||||
pressedColor: hoveredColor
|
||||
|
||||
opacity: sendButtonVisibility ? 1 : 0
|
||||
visible: opacity
|
||||
scale: opacity
|
||||
|
||||
Behavior on opacity {
|
||||
enabled: animate
|
||||
NumberAnimation {
|
||||
duration: JamiTheme.shortFadeDuration
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: root.sendMessageButtonClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,12 +27,19 @@ JamiFlickable {
|
|||
property alias text: textArea.text
|
||||
property var textAreaObj: textArea
|
||||
property alias placeholderText: textArea.placeholderText
|
||||
property alias selectedText: textArea.selectedText
|
||||
property alias selectionStart: textArea.selectionStart
|
||||
property alias selectionEnd: textArea.selectionEnd
|
||||
|
||||
ScrollBar.vertical.visible: textArea.text
|
||||
ScrollBar.horizontal.visible: textArea.text
|
||||
|
||||
signal sendMessagesRequired
|
||||
|
||||
function selectText(start, end) {
|
||||
textArea.select(start, end);
|
||||
}
|
||||
|
||||
function insertText(text) {
|
||||
textArea.insert(textArea.cursorPosition, text);
|
||||
}
|
||||
|
@ -68,6 +75,8 @@ JamiFlickable {
|
|||
topPadding: 0
|
||||
bottomPadding: 0
|
||||
|
||||
persistentSelection: true
|
||||
|
||||
verticalAlignment: TextEdit.AlignVCenter
|
||||
|
||||
font.pointSize: JamiTheme.textFontSize + 2
|
||||
|
|
|
@ -55,7 +55,8 @@ SidePanelBase {
|
|||
target: JamiQmlUtils
|
||||
function onSettingsPageRequested(index) {
|
||||
viewCoordinator.present("SettingsView");
|
||||
buttonGroup.checkedButton = buttonGroup.buttons[index];
|
||||
root.indexSelected(index);
|
||||
root.currentIndex = index;
|
||||
}
|
||||
}
|
||||
|
||||
|
|