Overview : call page (with no call history)
New items : Vertical tab bar, search bar, numeric pad
|
|
@ -13,10 +13,38 @@ list(APPEND _LINPHONEAPP_RC_FILES data/assistant/use-app-sip-account.rc
|
|||
"data/image/eye.svg"
|
||||
"data/image/caret-down.svg"
|
||||
"data/image/caret-left.svg"
|
||||
"data/image/caret-right.svg"
|
||||
"data/image/verif_page_image.svg"
|
||||
"data/image/check.svg"
|
||||
"data/image/dialer.svg"
|
||||
"data/image/dialer-selected.svg"
|
||||
"data/image/chiffrement.svg"
|
||||
"data/image/interoperable.svg"
|
||||
"data/image/phone.svg"
|
||||
"data/image/phone-selected.svg"
|
||||
"data/image/phone-plus.svg"
|
||||
"data/image/phone-disconnect.svg"
|
||||
"data/image/address-book.svg"
|
||||
"data/image/address-book-selected.svg"
|
||||
"data/image/chat-teardrop-text.svg"
|
||||
"data/image/chat-teardrop-text-selected.svg"
|
||||
"data/image/users-three.svg"
|
||||
"data/image/users-three-selected.svg"
|
||||
"data/image/noItemImage.svg"
|
||||
"data/image/dots-three-vertical.svg"
|
||||
"data/image/plus-circle.svg"
|
||||
"data/image/microphone-stage.svg"
|
||||
"data/image/group-call.svg"
|
||||
"data/image/magnifying-glass.svg"
|
||||
"data/image/backspace-fill.svg"
|
||||
"data/image/x.svg"
|
||||
"data/image/incoming_call.svg"
|
||||
"data/image/incoming_call_missed.svg"
|
||||
"data/image/incoming_call_rejected.svg"
|
||||
"data/image/outgoing_call.svg"
|
||||
"data/image/outgoing_call_missed.svg"
|
||||
"data/image/outgoing_call_rejected.svg"
|
||||
|
||||
)
|
||||
|
||||
set(_LINPHONEAPP_RC_FILES ${_LINPHONEAPP_RC_FILES} PARENT_SCOPE)
|
||||
|
|
|
|||
17
Linphone/data/image/address-book-selected.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_4435_19461)">
|
||||
<path d="M23.42 18.4615C23.42 18.918 23.2863 19.3641 23.0358 19.7436C22.7852 20.1231 22.4291 20.4189 22.0125 20.5936C21.5959 20.7682 21.1375 20.8139 20.6952 20.7249C20.2529 20.6358 19.8467 20.4161 19.5278 20.0933C19.2089 19.7706 18.9918 19.3594 18.9038 18.9117C18.8158 18.4641 18.861 18.0001 19.0336 17.5784C19.2061 17.1567 19.4984 16.7963 19.8733 16.5428C20.2482 16.2892 20.6891 16.1538 21.14 16.1538C21.7447 16.1538 22.3246 16.397 22.7522 16.8298C23.1798 17.2625 23.42 17.8495 23.42 18.4615ZM29.5 11.5385V28.4615C29.5 28.8696 29.3399 29.2609 29.0548 29.5494C28.7697 29.8379 28.3831 30 27.98 30H14.3C13.8969 30 13.5103 29.8379 13.2252 29.5494C12.9401 29.2609 12.78 28.8696 12.78 28.4615V26.1538H11.26C11.0584 26.1538 10.8651 26.0728 10.7226 25.9285C10.5801 25.7843 10.5 25.5886 10.5 25.3846C10.5 25.1806 10.5801 24.9849 10.7226 24.8407C10.8651 24.6964 11.0584 24.6154 11.26 24.6154H12.78V20.7692H11.26C11.0584 20.7692 10.8651 20.6882 10.7226 20.5439C10.5801 20.3997 10.5 20.204 10.5 20C10.5 19.796 10.5801 19.6003 10.7226 19.4561C10.8651 19.3118 11.0584 19.2308 11.26 19.2308H12.78V15.3846H11.26C11.0584 15.3846 10.8651 15.3036 10.7226 15.1593C10.5801 15.0151 10.5 14.8194 10.5 14.6154C10.5 14.4114 10.5801 14.2157 10.7226 14.0715C10.8651 13.9272 11.0584 13.8462 11.26 13.8462H12.78V11.5385C12.78 11.1304 12.9401 10.7391 13.2252 10.4506C13.5103 10.1621 13.8969 10 14.3 10H27.98C28.3831 10 28.7697 10.1621 29.0548 10.4506C29.3399 10.7391 29.5 11.1304 29.5 11.5385ZM26.308 23.3846C25.635 22.4714 24.7376 21.7524 23.705 21.299C24.2709 20.7761 24.6674 20.0922 24.8424 19.3371C25.0174 18.582 24.9628 17.791 24.6857 17.0679C24.4086 16.3448 23.922 15.7234 23.2898 15.2852C22.6575 14.847 21.9091 14.6125 21.1428 14.6125C20.3766 14.6125 19.6282 14.847 18.9959 15.2852C18.3637 15.7234 17.8771 16.3448 17.6 17.0679C17.3229 17.791 17.2683 18.582 17.4433 19.3371C17.6183 20.0922 18.0148 20.7761 18.5807 21.299C17.546 21.7515 16.6465 22.4706 15.972 23.3846C15.9121 23.4654 15.8685 23.5574 15.8438 23.6552C15.819 23.7531 15.8135 23.8549 15.8276 23.9549C15.8418 24.0549 15.8752 24.1511 15.926 24.2381C15.9769 24.325 16.0442 24.4009 16.124 24.4615C16.2038 24.5221 16.2947 24.5662 16.3914 24.5913C16.4881 24.6164 16.5887 24.6219 16.6875 24.6077C16.7863 24.5934 16.8813 24.5595 16.9672 24.5081C17.0531 24.4566 17.1281 24.3885 17.188 24.3077C17.6481 23.6867 18.2448 23.1827 18.9308 22.8356C19.6167 22.4884 20.3731 22.3077 21.14 22.3077C21.9069 22.3077 22.6633 22.4884 23.3492 22.8356C24.0352 23.1827 24.6319 23.6867 25.092 24.3077C25.2129 24.4709 25.393 24.5788 25.5925 24.6077C25.7921 24.6365 25.9947 24.5839 26.156 24.4615C26.3173 24.3391 26.4239 24.1569 26.4524 23.9549C26.4809 23.753 26.4289 23.5478 26.308 23.3846Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_4435_19461" x="0.5" y="0" width="39" height="40" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4435_19461"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4435_19461" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
17
Linphone/data/image/chat-teardrop-text-selected.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<svg width="38" height="39" viewBox="0 0 38 39" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_4441_27383)">
|
||||
<path d="M19 10C16.6139 10.0027 14.3262 10.9913 12.6389 12.7489C10.9517 14.5065 10.0026 16.8894 10 19.375V27.2809C10.0005 27.6704 10.1492 28.0438 10.4136 28.3192C10.678 28.5946 11.0364 28.7495 11.4103 28.75H19C21.3869 28.75 23.6761 27.7623 25.364 26.0041C27.0518 24.246 28 21.8614 28 19.375C28 16.8886 27.0518 14.504 25.364 12.7459C23.6761 10.9877 21.3869 10 19 10ZM21.52 22H15.76C15.569 22 15.3859 21.921 15.2509 21.7803C15.1159 21.6397 15.04 21.4489 15.04 21.25C15.04 21.0511 15.1159 20.8603 15.2509 20.7197C15.3859 20.579 15.569 20.5 15.76 20.5H21.52C21.711 20.5 21.8941 20.579 22.0291 20.7197C22.1641 20.8603 22.24 21.0511 22.24 21.25C22.24 21.4489 22.1641 21.6397 22.0291 21.7803C21.8941 21.921 21.711 22 21.52 22ZM21.52 19H15.76C15.569 19 15.3859 18.921 15.2509 18.7803C15.1159 18.6397 15.04 18.4489 15.04 18.25C15.04 18.0511 15.1159 17.8603 15.2509 17.7197C15.3859 17.579 15.569 17.5 15.76 17.5H21.52C21.711 17.5 21.8941 17.579 22.0291 17.7197C22.1641 17.8603 22.24 18.0511 22.24 18.25C22.24 18.4489 22.1641 18.6397 22.0291 18.7803C21.8941 18.921 21.711 19 21.52 19Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_4441_27383" x="0" y="0" width="38" height="38.75" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4441_27383"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4441_27383" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
3
Linphone/data/image/dialer-selected.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="16" height="23" viewBox="0 0 16 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 18.5C6.9 18.5 6 19.4 6 20.5C6 21.6 6.9 22.5 8 22.5C9.1 22.5 10 21.6 10 20.5C10 19.4 9.1 18.5 8 18.5ZM2 0.5C0.9 0.5 0 1.4 0 2.5C0 3.6 0.9 4.5 2 4.5C3.1 4.5 4 3.6 4 2.5C4 1.4 3.1 0.5 2 0.5ZM2 6.5C0.9 6.5 0 7.4 0 8.5C0 9.6 0.9 10.5 2 10.5C3.1 10.5 4 9.6 4 8.5C4 7.4 3.1 6.5 2 6.5ZM2 12.5C0.9 12.5 0 13.4 0 14.5C0 15.6 0.9 16.5 2 16.5C3.1 16.5 4 15.6 4 14.5C4 13.4 3.1 12.5 2 12.5ZM14 4.5C15.1 4.5 16 3.6 16 2.5C16 1.4 15.1 0.5 14 0.5C12.9 0.5 12 1.4 12 2.5C12 3.6 12.9 4.5 14 4.5ZM8 12.5C6.9 12.5 6 13.4 6 14.5C6 15.6 6.9 16.5 8 16.5C9.1 16.5 10 15.6 10 14.5C10 13.4 9.1 12.5 8 12.5ZM14 12.5C12.9 12.5 12 13.4 12 14.5C12 15.6 12.9 16.5 14 16.5C15.1 16.5 16 15.6 16 14.5C16 13.4 15.1 12.5 14 12.5ZM14 6.5C12.9 6.5 12 7.4 12 8.5C12 9.6 12.9 10.5 14 10.5C15.1 10.5 16 9.6 16 8.5C16 7.4 15.1 6.5 14 6.5ZM8 6.5C6.9 6.5 6 7.4 6 8.5C6 9.6 6.9 10.5 8 10.5C9.1 10.5 10 9.6 10 8.5C10 7.4 9.1 6.5 8 6.5ZM8 0.5C6.9 0.5 6 1.4 6 2.5C6 3.6 6.9 4.5 8 4.5C9.1 4.5 10 3.6 10 2.5C10 1.4 9.1 0.5 8 0.5Z" fill="#FE5E00"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
3
Linphone/data/image/dialer.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="16" height="23" viewBox="0 0 16 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 18.5C6.9 18.5 6 19.4 6 20.5C6 21.6 6.9 22.5 8 22.5C9.1 22.5 10 21.6 10 20.5C10 19.4 9.1 18.5 8 18.5ZM2 0.5C0.9 0.5 0 1.4 0 2.5C0 3.6 0.9 4.5 2 4.5C3.1 4.5 4 3.6 4 2.5C4 1.4 3.1 0.5 2 0.5ZM2 6.5C0.9 6.5 0 7.4 0 8.5C0 9.6 0.9 10.5 2 10.5C3.1 10.5 4 9.6 4 8.5C4 7.4 3.1 6.5 2 6.5ZM2 12.5C0.9 12.5 0 13.4 0 14.5C0 15.6 0.9 16.5 2 16.5C3.1 16.5 4 15.6 4 14.5C4 13.4 3.1 12.5 2 12.5ZM14 4.5C15.1 4.5 16 3.6 16 2.5C16 1.4 15.1 0.5 14 0.5C12.9 0.5 12 1.4 12 2.5C12 3.6 12.9 4.5 14 4.5ZM8 12.5C6.9 12.5 6 13.4 6 14.5C6 15.6 6.9 16.5 8 16.5C9.1 16.5 10 15.6 10 14.5C10 13.4 9.1 12.5 8 12.5ZM14 12.5C12.9 12.5 12 13.4 12 14.5C12 15.6 12.9 16.5 14 16.5C15.1 16.5 16 15.6 16 14.5C16 13.4 15.1 12.5 14 12.5ZM14 6.5C12.9 6.5 12 7.4 12 8.5C12 9.6 12.9 10.5 14 10.5C15.1 10.5 16 9.6 16 8.5C16 7.4 15.1 6.5 14 6.5ZM8 6.5C6.9 6.5 6 7.4 6 8.5C6 9.6 6.9 10.5 8 10.5C9.1 10.5 10 9.6 10 8.5C10 7.4 9.1 6.5 8 6.5ZM8 0.5C6.9 0.5 6 1.4 6 2.5C6 3.6 6.9 4.5 8 4.5C9.1 4.5 10 3.6 10 2.5C10 1.4 9.1 0.5 8 0.5Z" fill="#4E6074"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
11
Linphone/data/image/group-call.svg
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="22" cy="22" r="22" fill="#FE5E00"/>
|
||||
<g clip-path="url(#clip0_2697_47776)">
|
||||
<path d="M22 22.75C23.63 22.75 25.07 23.14 26.24 23.65C27.32 24.13 28 25.21 28 26.38V28H16V26.39C16 25.21 16.68 24.13 17.76 23.66C18.93 23.14 20.37 22.75 22 22.75ZM14 23C15.1 23 16 22.1 16 21C16 19.9 15.1 19 14 19C12.9 19 12 19.9 12 21C12 22.1 12.9 23 14 23ZM15.13 24.1C14.76 24.04 14.39 24 14 24C13.01 24 12.07 24.21 11.22 24.58C10.48 24.9 10 25.62 10 26.43V28H14.5V26.39C14.5 25.56 14.73 24.78 15.13 24.1ZM30 23C31.1 23 32 22.1 32 21C32 19.9 31.1 19 30 19C28.9 19 28 19.9 28 21C28 22.1 28.9 23 30 23ZM34 26.43C34 25.62 33.52 24.9 32.78 24.58C31.93 24.21 30.99 24 30 24C29.61 24 29.24 24.04 28.87 24.1C29.27 24.78 29.5 25.56 29.5 26.39V28H34V26.43ZM22 16C23.66 16 25 17.34 25 19C25 20.66 23.66 22 22 22C20.34 22 19 20.66 19 19C19 17.34 20.34 16 22 16Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_2697_47776">
|
||||
<rect width="24" height="24" fill="white" transform="translate(10 10)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
65
Linphone/data/image/noItemImage.svg
Normal file
|
After Width: | Height: | Size: 25 KiB |
17
Linphone/data/image/phone-selected.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_4432_11261)">
|
||||
<path d="M27.9895 23.5972C27.829 24.8168 27.2301 25.9362 26.3046 26.7465C25.3791 27.5567 24.1903 28.0023 22.9602 28.0001C15.8141 28.0001 10 22.186 10 15.0399C9.9978 13.8098 10.4434 12.621 11.2537 11.6955C12.0639 10.77 13.1833 10.1711 14.4029 10.0106C14.7113 9.97296 15.0236 10.0361 15.2932 10.1905C15.5628 10.3449 15.7752 10.5824 15.8987 10.8674L17.7995 15.111V15.1218C17.8941 15.34 17.9332 15.5783 17.9132 15.8152C17.8933 16.0522 17.815 16.2806 17.6852 16.4799C17.669 16.5042 17.6519 16.5267 17.6339 16.5492L15.7601 18.7705C16.4342 20.1403 17.867 21.5605 19.2549 22.2364L21.4455 20.3725C21.467 20.3544 21.4896 20.3376 21.513 20.3221C21.7122 20.1893 21.9413 20.1082 22.1797 20.0862C22.4181 20.0642 22.6582 20.1019 22.8783 20.1961L22.89 20.2015L27.13 22.1014C27.4156 22.2245 27.6536 22.4368 27.8086 22.7064C27.9635 22.976 28.027 23.2885 27.9895 23.5972Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_4432_11261" x="0" y="0" width="38" height="38" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4432_11261"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4432_11261" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
17
Linphone/data/image/users-three-selected.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<svg width="40" height="36" viewBox="0 0 40 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_4441_41328)">
|
||||
<path d="M14.676 18.9716C14.6782 19.0168 14.6713 19.062 14.6555 19.1043C14.6398 19.1467 14.6156 19.1855 14.5844 19.2182C14.5532 19.251 14.5157 19.277 14.4741 19.2948C14.4326 19.3126 14.3878 19.3217 14.3426 19.3217H10.6655C10.515 19.3219 10.3688 19.2712 10.2508 19.1779C10.1328 19.0845 10.0498 18.954 10.0154 18.8075C9.99394 18.7072 9.99493 18.6034 10.0183 18.5036C10.0416 18.4037 10.0867 18.3103 10.1504 18.2299C10.7386 17.4498 11.5191 16.8355 12.4157 16.4472C12.0221 16.0883 11.7202 15.6403 11.5353 15.1408C11.3504 14.6412 11.2879 14.1047 11.3531 13.576C11.4182 13.0474 11.609 12.542 11.9096 12.1023C12.2102 11.6625 12.6118 11.3012 13.0808 11.0486C13.5497 10.796 14.0724 10.6595 14.605 10.6504C15.1375 10.6413 15.6645 10.76 16.1418 10.9964C16.6191 11.2329 17.0328 11.5803 17.3482 12.0095C17.6636 12.4388 17.8716 12.9373 17.9547 13.4635C17.9654 13.5342 17.9528 13.6065 17.9186 13.6694C17.8845 13.7323 17.8307 13.7823 17.7655 13.8118C16.8407 14.2394 16.0575 14.9225 15.5083 15.7806C14.9591 16.6388 14.6668 17.6361 14.666 18.6549C14.666 18.7616 14.666 18.8666 14.676 18.9716ZM29.8445 18.229C29.2576 17.4498 28.4789 16.8359 27.5842 16.4472C27.9778 16.0883 28.2797 15.6403 28.4646 15.1408C28.6495 14.6412 28.712 14.1047 28.6469 13.576C28.5817 13.0474 28.3909 12.542 28.0903 12.1023C27.7897 11.6625 27.3881 11.3012 26.9191 11.0486C26.4502 10.796 25.9275 10.6595 25.395 10.6504C24.8624 10.6413 24.3354 10.76 23.8581 10.9964C23.3808 11.2329 22.9671 11.5803 22.6517 12.0095C22.3363 12.4388 22.1283 12.9373 22.0452 13.4635C22.0345 13.5342 22.0472 13.6065 22.0813 13.6694C22.1155 13.7323 22.1692 13.7823 22.2344 13.8118C23.1592 14.2394 23.9424 14.9225 24.4916 15.7806C25.0408 16.6388 25.3331 17.6361 25.334 18.6549C25.334 18.7616 25.334 18.8666 25.324 18.9716C25.3217 19.0168 25.3286 19.062 25.3444 19.1043C25.3601 19.1467 25.3843 19.1855 25.4155 19.2182C25.4467 19.251 25.4842 19.277 25.5258 19.2948C25.5674 19.3126 25.6121 19.3217 25.6573 19.3217H29.3345C29.4849 19.3219 29.6311 19.2712 29.7491 19.1779C29.8671 19.0845 29.9501 18.954 29.9845 18.8075C30.0061 18.707 30.0051 18.603 29.9816 18.503C29.9581 18.403 29.9127 18.3094 29.8487 18.229H29.8445ZM22.4269 21.8278C23.0908 21.3194 23.5787 20.6157 23.822 19.8157C24.0653 19.0157 24.0517 18.1595 23.7833 17.3676C23.5149 16.5757 23.0051 15.8877 22.3255 15.4005C21.6459 14.9133 20.8307 14.6513 19.9945 14.6513C19.1583 14.6513 18.3432 14.9133 17.6636 15.4005C16.984 15.8877 16.4742 16.5757 16.2057 17.3676C15.9373 18.1595 15.9238 19.0157 16.1671 19.8157C16.4104 20.6157 16.8983 21.3194 17.5622 21.8278C16.3841 22.3383 15.4004 23.2124 14.7551 24.3223C14.6966 24.4237 14.6658 24.5387 14.6658 24.6557C14.6658 24.7728 14.6966 24.8878 14.7552 24.9891C14.8137 25.0905 14.8979 25.1747 14.9993 25.2332C15.1007 25.2917 15.2157 25.3225 15.3327 25.3224H24.6672C24.7843 25.3225 24.8993 25.2917 25.0006 25.2332C25.102 25.1747 25.1862 25.0905 25.2447 24.9891C25.3033 24.8878 25.3341 24.7728 25.3341 24.6557C25.3341 24.5387 25.3033 24.4237 25.2448 24.3223C24.5981 23.2117 23.6126 22.3375 22.4328 21.8278H22.4269Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_4441_41328" x="0" y="0.649902" width="40" height="34.6724" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4441_41328"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4441_41328" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -74,7 +74,6 @@ bool AccountManager::login(QString username, QString password) {
|
|||
"", // Realm.
|
||||
identity->getDomain() // Domain.
|
||||
));
|
||||
account->setParams(params);
|
||||
mAccountModel = Utils::makeQObject_ptr<AccountModel>(account);
|
||||
mAccountModel->setSelf(mAccountModel);
|
||||
connect(mAccountModel.get(), &AccountModel::registrationStateChanged, this,
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ ImageAsyncImageResponse::ImageAsyncImageResponse(const QString &id, const QSize
|
|||
QFile file(mPath);
|
||||
|
||||
if (!file.exists()) {
|
||||
qDebug() << QStringLiteral("[ImageProvider] File doesn't exist: `%1`.").arg(mPath);
|
||||
qDebug() << QStringLiteral("[ImageProvider] File doesn't exist: `%1`.").arg(path + id);
|
||||
return;
|
||||
}
|
||||
QImage originalImage(mPath);
|
||||
|
|
|
|||
|
|
@ -62,8 +62,6 @@ Item {
|
|||
|
||||
RowLayout {
|
||||
id: bottomMountains
|
||||
// RectangleTest{color: "blue"}
|
||||
// Layout.alignment: Qt.AlignBottom
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
|
|
|||
78
Linphone/view/App/Layout/MainLayout.qml
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/**
|
||||
* Qml template used for welcome and login/register pages
|
||||
**/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Controls 2.2 as Control
|
||||
|
||||
import Linphone
|
||||
|
||||
Item {
|
||||
id: mainItem
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
// spacing: 30
|
||||
anchors.topMargin: 18
|
||||
VerticalTabBar {
|
||||
id: tabbar
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: width
|
||||
model: [
|
||||
{icon: AppIcons.phone, selectedIcon: AppIcons.phoneSelected, label: qsTr("Appels")},
|
||||
{icon: AppIcons.adressBook, selectedIcon: AppIcons.adressBookSelected, label: qsTr("Contacts")},
|
||||
{icon: AppIcons.chatTeardropText, selectedIcon: AppIcons.chatTeardropTextSelected, label: qsTr("Conversations")},
|
||||
{icon: AppIcons.usersThree, selectedIcon: AppIcons.usersThreeSelected, label: qsTr("Réunions")}
|
||||
]
|
||||
}
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
RowLayout {
|
||||
Layout.leftMargin: 25
|
||||
TextInput {
|
||||
fillWidth: true
|
||||
placeholderText: qsTr("Rechercher un contact, appeler ou envoyer un message...")
|
||||
}
|
||||
Control.Button {
|
||||
Layout.preferredWidth: 30
|
||||
Layout.preferredHeight: 30
|
||||
background: Item {
|
||||
visible: false
|
||||
}
|
||||
contentItem: Image {
|
||||
//avatar
|
||||
source: AppIcons.welcomeLinphoneLogo
|
||||
// width: 30
|
||||
// height: 30
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
}
|
||||
Control.Button {
|
||||
enabled: false
|
||||
Layout.preferredWidth: 30
|
||||
Layout.preferredHeight: 30
|
||||
background: Item {
|
||||
}
|
||||
contentItem: Image {
|
||||
source: AppIcons.verticalDots
|
||||
}
|
||||
}
|
||||
}
|
||||
StackLayout {
|
||||
// width: parent.width
|
||||
// height: parent.height
|
||||
|
||||
currentIndex: tabbar.currentIndex
|
||||
|
||||
CallPage {
|
||||
}
|
||||
//ContactPage{}
|
||||
//ConversationPage{}
|
||||
//MeetingPage{}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
/**
|
||||
* Qml template used for welcome and login/register pages
|
||||
**/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Controls 2.2 as Control
|
||||
|
||||
import Linphone
|
||||
|
||||
Item {
|
||||
id: mainItem
|
||||
|
||||
RowLayout {
|
||||
spacing: 10
|
||||
Layout.fillHeight: true
|
||||
VerticalTabBar {
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
ColumnLayout {
|
||||
Layout.fillHeight: true
|
||||
TextInput {
|
||||
fillWidth: true
|
||||
placeholderText: qsTr("Rechercher un contact, appeler ou envoyer un message...")
|
||||
}
|
||||
Image {
|
||||
//avatar
|
||||
}
|
||||
Button {
|
||||
// color: DefaultStyle.moreButtonBackground
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ Window {
|
|||
if (mainWindow.firstConnection) {
|
||||
mainWindowStackView.replace(securityModePage)
|
||||
} else {
|
||||
mainWindowStackView.replace(callPage)
|
||||
mainWindowStackView.replace(mainPage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ Window {
|
|||
if (mainWindow.firstConnection) {
|
||||
mainWindowStackView.replace(securityModePage)
|
||||
} else {
|
||||
mainWindowStackView.replace(callPage)
|
||||
mainWindowStackView.replace(mainPage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -75,14 +75,21 @@ Window {
|
|||
onModeSelected: (index) => {
|
||||
var selectedMode = index == 0 ? "chiffrement" : "interoperable"
|
||||
console.debug("[SelectMode]User: User selected mode " + selectedMode)
|
||||
mainWindowStackView.replace(callPage)
|
||||
mainWindowStackView.replace(mainPage)
|
||||
}
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: callPage
|
||||
CallPage {
|
||||
id: mainPage
|
||||
MainLayout {
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: ongoingCallPage
|
||||
OngoingCallPage {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
list(APPEND _LINPHONEAPP_QML_FILES
|
||||
view/App/Main.qml
|
||||
view/App/Layout/LoginLayout.qml
|
||||
view/App/Layout/OverviewLayout.qml
|
||||
view/App/Layout/MainLayout.qml
|
||||
|
||||
view/Item/Button.qml
|
||||
view/Item/Carousel.qml
|
||||
|
|
@ -14,10 +14,13 @@ list(APPEND _LINPHONEAPP_QML_FILES
|
|||
view/Item/Notification/Notification.qml
|
||||
view/Item/Notification/NotificationReceivedCall.qml
|
||||
|
||||
view/Item/EffectImage.qml
|
||||
view/Item/NumericPad.qml
|
||||
view/Item/PhoneNumberComboBox.qml
|
||||
view/Item/PhoneNumberInput.qml
|
||||
view/Item/RadioButton.qml
|
||||
view/Item/RectangleTest.qml
|
||||
view/Item/SearchBar.qml
|
||||
view/Item/TabBar.qml
|
||||
view/Item/Text.qml
|
||||
view/Item/TextInput.qml
|
||||
|
|
@ -25,18 +28,19 @@ list(APPEND _LINPHONEAPP_QML_FILES
|
|||
view/Item/VerticalTabBar.qml
|
||||
|
||||
view/Item/Form/LoginForm.qml
|
||||
|
||||
|
||||
view/Item/Test/ItemsTest.qml
|
||||
|
||||
view/Page/Login/ChooseModePage.qml
|
||||
|
||||
view/Page/Login/LoginPage.qml
|
||||
view/Page/Login/RegisterPage.qml
|
||||
view/Page/Login/RegisterCheckingPage.qml
|
||||
view/Page/Login/SIPLoginPage.qml
|
||||
view/Page/Login/SecurityModePage.qml
|
||||
view/Page/Login/WelcomePage.qml
|
||||
|
||||
view/Page/Overview/CallPage.qml
|
||||
|
||||
view/Page/Main/AbstractMainPage.qml
|
||||
view/Page/Main/CallPage.qml
|
||||
# view/Page/Main/OngoingCallPage.qml
|
||||
|
||||
# Prototypes
|
||||
view/Prototype/PhoneNumberPrototype.qml
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2 as Control
|
||||
import QtQuick.Effects
|
||||
import Linphone
|
||||
|
||||
Control.Button {
|
||||
|
|
@ -8,22 +9,36 @@ Control.Button {
|
|||
property bool inversedColors: false
|
||||
property int textSize: DefaultStyle.buttonTextSize
|
||||
property bool boldText: true
|
||||
property bool shadowEnabled: false
|
||||
hoverEnabled: true
|
||||
|
||||
background: Rectangle {
|
||||
color: inversedColors
|
||||
? mainItem.pressed
|
||||
? DefaultStyle.buttonPressedInversedBackground
|
||||
: DefaultStyle.buttonInversedBackground
|
||||
: mainItem.pressed
|
||||
? DefaultStyle.buttonPressedBackground
|
||||
: DefaultStyle.buttonBackground
|
||||
radius: 24
|
||||
border.color: inversedColors ? DefaultStyle.buttonBackground : DefaultStyle.buttonInversedBackground
|
||||
|
||||
MouseArea {
|
||||
background: Item {
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: hovered ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
id: buttonBackground
|
||||
color: inversedColors
|
||||
? mainItem.pressed
|
||||
? DefaultStyle.buttonPressedInversedBackground
|
||||
: DefaultStyle.buttonInversedBackground
|
||||
: mainItem.pressed
|
||||
? DefaultStyle.buttonPressedBackground
|
||||
: DefaultStyle.buttonBackground
|
||||
radius: 24
|
||||
border.color: inversedColors ? DefaultStyle.buttonBackground : DefaultStyle.buttonInversedBackground
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: hovered ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
}
|
||||
}
|
||||
MultiEffect {
|
||||
enabled: mainItem.shadowEnabled
|
||||
anchors.fill: buttonBackground
|
||||
source: buttonBackground
|
||||
shadowEnabled: mainItem.shadowEnabled
|
||||
shadowColor: "black"//DefaultStyle.numericPadShadowColor
|
||||
shadowHorizontalOffset: 1.0
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,6 +60,4 @@ Control.Button {
|
|||
capitalization: mainItem.capitalization
|
||||
}
|
||||
}
|
||||
|
||||
hoverEnabled: true
|
||||
}
|
||||
|
|
|
|||
29
Linphone/view/Item/EffectImage.qml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Controls 2.2 as Control
|
||||
import QtQuick.Effects
|
||||
|
||||
import Linphone
|
||||
|
||||
Item {
|
||||
id: mainItem
|
||||
property alias image: image
|
||||
property alias effect: effect
|
||||
width: image.width
|
||||
height: image.height
|
||||
|
||||
Image {
|
||||
id: image
|
||||
width: 20
|
||||
height: 20
|
||||
sourceSize.width: 20
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
MultiEffect {
|
||||
id: effect
|
||||
anchors.fill: image
|
||||
source: image
|
||||
maskSource: image
|
||||
}
|
||||
}
|
||||
|
|
@ -75,14 +75,14 @@ ColumnLayout {
|
|||
username.errorMessage = ""
|
||||
password.errorMessage = ""
|
||||
|
||||
if (username.inputText.length == 0 || password.inputText.length == 0) {
|
||||
if (username.inputText.length == 0)
|
||||
if (username.text.length == 0 || password.text.length == 0) {
|
||||
if (username.text.length == 0)
|
||||
username.errorMessage = qsTr("You must enter a username")
|
||||
if (password.inputText.length == 0)
|
||||
if (password.text.length == 0)
|
||||
password.errorMessage = qsTr("You must enter a password")
|
||||
return
|
||||
}
|
||||
LoginPageCpp.login(username.inputText, password.inputText)
|
||||
LoginPageCpp.login(username.text, password.text)
|
||||
}
|
||||
}
|
||||
Button {
|
||||
|
|
|
|||
163
Linphone/view/Item/NumericPad.qml
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2 as Control
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Effects
|
||||
import Linphone
|
||||
|
||||
Control.Popup {
|
||||
clip: true
|
||||
id: mainItem
|
||||
signal buttonPressed(string text)
|
||||
signal wipe()
|
||||
closePolicy: Control.Popup.CloseOnEscape
|
||||
leftPadding: closeButton.width
|
||||
rightPadding: closeButton.width
|
||||
rightInset: closeButton.width
|
||||
topPadding: closeButton.height
|
||||
background: Item {
|
||||
anchors.fill: parent
|
||||
Rectangle {
|
||||
id: numPadBackground
|
||||
anchors.fill: parent
|
||||
color: DefaultStyle.numericPadBackgroundColor
|
||||
radius: 10
|
||||
}
|
||||
MultiEffect {
|
||||
id: effect
|
||||
anchors.fill: parent
|
||||
source: numPadBackground
|
||||
shadowEnabled: true
|
||||
shadowColor: DefaultStyle.numericPadShadowColor
|
||||
}
|
||||
Button {
|
||||
id: closeButton
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
background: Item {
|
||||
anchors.fill: parent
|
||||
visible: false
|
||||
}
|
||||
contentItem: Image {
|
||||
anchors.centerIn: parent
|
||||
source: AppIcons.closeX
|
||||
width: 10
|
||||
sourceSize.width: 10
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
onClicked: mainItem.close()
|
||||
}
|
||||
}
|
||||
contentItem: GridLayout {
|
||||
columns: 3
|
||||
columnSpacing: 3
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Repeater {
|
||||
model: 9
|
||||
Button {
|
||||
id: numPadButton
|
||||
required property int index
|
||||
implicitWidth: 40
|
||||
implicitHeight: 40
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
color: numPadButton.down ? DefaultStyle.numericPadPressedButtonColor : DefaultStyle.numericPadButtonColor
|
||||
radius: 20
|
||||
}
|
||||
contentItem: Text {
|
||||
id: innerText
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
anchors.fill: parent
|
||||
anchors.centerIn: parent
|
||||
text: index + 1
|
||||
font.pointSize: DefaultStyle.numericPadButtonTextSize
|
||||
}
|
||||
onClicked: {
|
||||
mainItem.buttonPressed(innerText.text)
|
||||
}
|
||||
}
|
||||
}
|
||||
Repeater {
|
||||
model: [
|
||||
{pressText: "*"},
|
||||
{pressText: "0", longPressText: "+"},
|
||||
{pressText: "#"}
|
||||
]
|
||||
Button {
|
||||
id: digitButton
|
||||
shadowEnabled: true
|
||||
implicitWidth: 40
|
||||
implicitHeight: 40
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
color: digitButton.down ? DefaultStyle.numericPadPressedButtonColor : DefaultStyle.numericPadButtonColor
|
||||
radius: 20
|
||||
}
|
||||
contentItem: Item {
|
||||
anchors.fill: parent
|
||||
anchors.centerIn: parent
|
||||
Text {
|
||||
id: pressText
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
width: parent.width
|
||||
text: modelData.pressText
|
||||
font.pointSize: DefaultStyle.numericPadButtonTextSize
|
||||
}
|
||||
Text {
|
||||
id: longPressText
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: pressText.bottom
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
visible: modelData.longPressText ? modelData.longPressText.length > 0 : false
|
||||
text: modelData.longPressText ? modelData.longPressText : ""
|
||||
font.pointSize: DefaultStyle.numericPadButtonSubtextSize
|
||||
}
|
||||
}
|
||||
onClicked: mainItem.buttonPressed(pressText.text)
|
||||
onPressAndHold: mainItem.buttonPressed(longPressText.text)
|
||||
}
|
||||
}
|
||||
Item {
|
||||
// Invisible item to move the last two buttons to the right
|
||||
}
|
||||
Button {
|
||||
leftPadding: 20
|
||||
rightPadding: 20
|
||||
topPadding: 15
|
||||
bottomPadding: 15
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
color: DefaultStyle.numericPadLaunchCallButtonColor
|
||||
radius: 15
|
||||
}
|
||||
contentItem: EffectImage {
|
||||
id: buttonIcon
|
||||
image.source: AppIcons.phone
|
||||
anchors.fill: parent
|
||||
anchors.centerIn: parent
|
||||
width: 20
|
||||
height: 20
|
||||
image.fillMode: Image.PreserveAspectFit
|
||||
effect.brightness: 1.0
|
||||
}
|
||||
}
|
||||
Button {
|
||||
leftPadding: 5
|
||||
rightPadding: 5
|
||||
topPadding: 5
|
||||
bottomPadding: 5
|
||||
background: Item {
|
||||
visible: false
|
||||
}
|
||||
contentItem: Image {
|
||||
source: AppIcons.backspaceFill
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
onClicked: mainItem.wipe()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -97,11 +97,11 @@ ColumnLayout {
|
|||
}
|
||||
|
||||
delegate: Item {
|
||||
width:combobox.width;
|
||||
height: combobox.height;
|
||||
width:combobox.width
|
||||
height: combobox.height
|
||||
|
||||
Text {
|
||||
id: delegateImg;
|
||||
id: delegateImg
|
||||
visible: text.length > 0
|
||||
text: $modelData.flag
|
||||
font.family: DefaultStyle.emojiFont
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import QtQuick
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts 1.0
|
||||
import Linphone
|
||||
|
|
@ -11,7 +11,8 @@ ColumnLayout {
|
|||
property string placeholderText : ""
|
||||
property bool mandatory: false
|
||||
property int textInputWidth: 200
|
||||
readonly property string phoneNumber: textField.inputText
|
||||
property string initialPhoneNumber
|
||||
readonly property string phoneNumber: textField.text
|
||||
readonly property string countryCode: combobox.currentText
|
||||
|
||||
Text {
|
||||
|
|
@ -54,6 +55,7 @@ ColumnLayout {
|
|||
placeholderText: mainItem.placeholderText
|
||||
enableBackgroundColors: false
|
||||
fillWidth: true
|
||||
initialText: initialPhoneNumber
|
||||
validator: IntValidator{}
|
||||
}
|
||||
}
|
||||
|
|
@ -66,7 +68,6 @@ ColumnLayout {
|
|||
color: DefaultStyle.errorMessageColor
|
||||
elide: Text.ElideRight
|
||||
wrapMode: Text.Wrap
|
||||
// maximumLineCount: 1
|
||||
font {
|
||||
pointSize: DefaultStyle.defaultTextSize
|
||||
family: DefaultStyle.defaultFont
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ import QtQuick 2.7
|
|||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "red"
|
||||
color: "blue"
|
||||
opacity: 0.2
|
||||
border.color: "green"
|
||||
border.width: 2
|
||||
}
|
||||
|
|
|
|||
85
Linphone/view/Item/SearchBar.qml
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
import QtQuick
|
||||
import QtQuick.Controls as Control
|
||||
import QtQuick.Layouts 1.0
|
||||
import Linphone
|
||||
|
||||
|
||||
Rectangle {
|
||||
id: mainItem
|
||||
property string placeholderText: ""
|
||||
property int textInputWidth: 350
|
||||
property var validator: RegularExpressionValidator{}
|
||||
property string text: textField.text
|
||||
property alias numericPadButton: dialerButton
|
||||
readonly property bool hasActiveFocus: textField.activeFocus
|
||||
property var numericPad
|
||||
signal numericPadButtonPressed(bool checked)
|
||||
|
||||
onVisibleChanged: if (!visible && numericPad) numericPad.close()
|
||||
|
||||
Connections {
|
||||
enabled: numericPad != undefined
|
||||
target: numericPad ? numericPad : null
|
||||
onAboutToHide: { searchBar.numericPadButton.checked = false }
|
||||
onAboutToShow: { searchBar.numericPadButton.checked = true }
|
||||
onButtonPressed: (text) => {
|
||||
textField.text += text
|
||||
}
|
||||
onWipe: textField.text = textField.text.slice(0, -1)
|
||||
}
|
||||
|
||||
implicitWidth: mainItem.textInputWidth
|
||||
implicitHeight: 30
|
||||
radius: 20
|
||||
color: DefaultStyle.formItemBackgroundColor
|
||||
border.color: textField.activeFocus ? DefaultStyle.searchBarFocusBorderColor : "transparent"
|
||||
Image {
|
||||
id: magnifier
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.leftMargin: 10
|
||||
source: AppIcons.magnifier
|
||||
}
|
||||
Control.TextField {
|
||||
id: textField
|
||||
anchors.left: magnifier.right
|
||||
anchors.right: dialerButton.visible ? dialerButton.left : parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
placeholderText: mainItem.placeholderText
|
||||
echoMode: (mainItem.hidden && !dialerButton.checked) ? TextInput.Password : TextInput.Normal
|
||||
font.family: DefaultStyle.defaultFont
|
||||
font.pointSize: DefaultStyle.defaultFontPointSize
|
||||
color: DefaultStyle.formItemLabelColor
|
||||
selectByMouse: true
|
||||
validator: mainItem.validator
|
||||
background: Item {
|
||||
opacity: 0.
|
||||
}
|
||||
cursorDelegate: Rectangle {
|
||||
visible: textField.activeFocus
|
||||
color: DefaultStyle.formItemFocusBorderColor
|
||||
width: 2
|
||||
}
|
||||
}
|
||||
Control.Button {
|
||||
id: dialerButton
|
||||
visible: numericPad != undefined
|
||||
checkable: true
|
||||
checked: false
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
}
|
||||
contentItem: Image {
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: dialerButton.checked ? AppIcons.dialerSelected : AppIcons.dialer
|
||||
}
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 10
|
||||
onCheckedChanged: {
|
||||
if (checked) mainItem.numericPad.open()
|
||||
else mainItem.numericPad.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -15,9 +15,19 @@ ColumnLayout {
|
|||
property var validator: RegularExpressionValidator{}
|
||||
property bool fillWidth: false
|
||||
property bool enableBackgroundColors: true
|
||||
property string inputText: textField.text
|
||||
property string initialText
|
||||
readonly property string text: textField.text
|
||||
readonly property bool hasActiveFocus: textField.activeFocus
|
||||
|
||||
Component.onCompleted: setText(initialText)
|
||||
|
||||
function setText(text) {
|
||||
textField.text = text
|
||||
}
|
||||
function resetText() {
|
||||
setText(initialText)
|
||||
}
|
||||
|
||||
Text {
|
||||
visible: mainItem.label.length > 0
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
|
|
|||
|
|
@ -1,59 +1,100 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Controls 2.2 as Control
|
||||
import QtQuick.Effects
|
||||
|
||||
import Linphone
|
||||
|
||||
|
||||
Control.TabBar {
|
||||
id: mainItem
|
||||
spacing: 40
|
||||
property color tabBarColor: DefaultStyle.verticalTabBarColor
|
||||
spacing: 15
|
||||
topPadding: 20
|
||||
// leftPadding: 15
|
||||
// rightPadding: 15
|
||||
|
||||
function appendTab(label) {
|
||||
var newTab = tab.createObject(mainItem, {title: label, index: mainItem.count})
|
||||
}
|
||||
property var model
|
||||
|
||||
contentItem: ListView {
|
||||
model: mainItem.contentModel
|
||||
currentIndex: mainItem.currentIndex
|
||||
|
||||
spacing: mainItem.spacing
|
||||
orientation: ListView.Vertical
|
||||
model: mainItem.model
|
||||
// boundsBehavior: Flickable.StopAtBounds
|
||||
flickableDirection: Flickable.AutoFlickIfNeeded
|
||||
// snapMode: ListView.SnapToItem
|
||||
|
||||
// highlightMoveDuration: 0
|
||||
// highlightRangeMode: ListView.ApplyRange
|
||||
// preferredHighlightBegin: 40
|
||||
// preferredHighlightEnd: width - 40
|
||||
}
|
||||
|
||||
background: Item {
|
||||
id: background
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
id: barBG
|
||||
height: 4
|
||||
color: mainItem.tabBarColor
|
||||
anchors.bottom: parent.bottom
|
||||
width: parent.width
|
||||
anchors.fill: parent
|
||||
color: DefaultStyle.verticalTabBarColor
|
||||
radius: 25
|
||||
}
|
||||
Rectangle {
|
||||
color: DefaultStyle.verticalTabBarColor
|
||||
anchors.left: parent.left
|
||||
anchors.top: parent.top
|
||||
width: parent.width/2
|
||||
height: parent.height/2
|
||||
}
|
||||
Rectangle {
|
||||
color: DefaultStyle.verticalTabBarColor
|
||||
x: parent.x + parent.width/2
|
||||
y: parent.y + parent.height/2
|
||||
width: parent.width/2
|
||||
height: parent.height/2
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: tab
|
||||
Repeater {
|
||||
model: mainItem.model
|
||||
Control.TabButton {
|
||||
property string title
|
||||
property int index
|
||||
width: txtMeter. advanceWidth
|
||||
id: tabButton
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
background: Item {
|
||||
visible: false
|
||||
}
|
||||
|
||||
contentItem: Text {
|
||||
id: tabText
|
||||
contentItem: ColumnLayout {
|
||||
anchors.fill: parent
|
||||
font.bold: true
|
||||
font.pointSize: DefaultStyle.tabButtonTextSize
|
||||
text: txtMeter.text
|
||||
bottomPadding: 5
|
||||
width: txtMeter.advanceWidth
|
||||
EffectImage {
|
||||
id: buttonIcon
|
||||
image.source: mainItem.currentIndex === index ? modelData.selectedIcon : modelData.icon
|
||||
Layout.preferredWidth: 20
|
||||
Layout.preferredHeight: 20
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
image.sourceSize.width: 20
|
||||
image.fillMode: Image.PreserveAspectFit
|
||||
effect.brightness: 1.0
|
||||
}
|
||||
Text {
|
||||
id: buttonText
|
||||
text: modelData.label
|
||||
font.bold: mainItem.currentIndex === index
|
||||
font.pointSize: DefaultStyle.verticalTabButtonTextSize
|
||||
color: DefaultStyle.verticalTabBarTextColor
|
||||
Layout.preferredWidth: txtMeter.width
|
||||
Layout.preferredHeight: txtMeter.height
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
leftPadding: 3
|
||||
rightPadding: 3
|
||||
}
|
||||
}
|
||||
|
||||
TextMetrics {
|
||||
id: txtMeter
|
||||
font: tabText.font
|
||||
text: title
|
||||
text: modelData.label
|
||||
font: buttonText.font
|
||||
Component.onCompleted: mainItem.width = Math.max(mainItem.width, advanceWidth)
|
||||
}
|
||||
|
||||
background: Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,70 +0,0 @@
|
|||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.0
|
||||
import QtQuick.Controls as Control
|
||||
import Linphone
|
||||
|
||||
LoginLayout {
|
||||
id: mainItem
|
||||
signal modeChosen(int index)
|
||||
|
||||
titleContent: RowLayout {
|
||||
Image {
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: AppIcons.profile
|
||||
}
|
||||
ColumnLayout {
|
||||
Text {
|
||||
text: qsTr("Choisir votre mode")
|
||||
font.pointSize: DefaultStyle.title2FontPointSize
|
||||
font.bold: true
|
||||
scaleLettersFactor: 1.1
|
||||
}
|
||||
Text {
|
||||
text: qsTr("Vous pourrez changer de mode plus tard.")
|
||||
font.bold: true
|
||||
scaleLettersFactor: 1.1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
centerContent: ColumnLayout {
|
||||
spacing: 80
|
||||
Layout.topMargin: 70
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
RowLayout {
|
||||
id: radioButtonsLayout
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
spacing: 70
|
||||
Repeater {
|
||||
model: [
|
||||
{checked: true, title: qsTr("Chiffrement de bout en bout"), text: qsTr("Ce mode vous garanti la confidentialité de tous vos échanges. Notre technologie de chiffrement de bout en bout assure un niveau de sécurité maximal pour tous vos échanges."), imgUrl: AppIcons.chiffrement},
|
||||
{checked: false, title: qsTr("Interoperable"), text: qsTr("Ce mode vous permet de profiter de toute les fonctionnalités de Linphone, toute en restant interopérable avec n’importe qu’elle autre service SIP."), imgUrl: AppIcons.interoperable}
|
||||
]
|
||||
RadioButton {
|
||||
title: modelData.title
|
||||
contentText: modelData.text
|
||||
imgUrl: modelData.imgUrl
|
||||
checked: modelData.checked
|
||||
onCheckedChanged: {
|
||||
if (checked) continueButton.chosenIndex = index
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Button {
|
||||
id: continueButton
|
||||
property int chosenIndex: 0
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
leftPadding: 100
|
||||
rightPadding: 100
|
||||
text: qsTr("Continuer")
|
||||
onClicked: mainItem.modeChosen(chosenIndex)
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +39,6 @@ LoginLayout {
|
|||
}
|
||||
}
|
||||
centerContent: ColumnLayout {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
|
||||
RowLayout {
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ LoginLayout {
|
|||
signal registerCalled(countryCode: string, phoneNumber: string, email: string)
|
||||
readonly property string countryCode: phoneNumberInput.countryCode
|
||||
readonly property string phoneNumber: phoneNumberInput.phoneNumber
|
||||
readonly property string email: emailInput.inputText
|
||||
readonly property string email: emailInput.text
|
||||
|
||||
titleContent: RowLayout {
|
||||
Image {
|
||||
|
|
@ -214,12 +214,12 @@ LoginLayout {
|
|||
Button {
|
||||
text: "Register"
|
||||
onClicked:{
|
||||
console.log("[RegisterPage] User: Call register with email", emailInput.inputText)
|
||||
if (emailInput.inputText.length == 0) {
|
||||
console.log("[RegisterPage] User: Call register with email", emailInput.text)
|
||||
if (emailInput.text.length == 0) {
|
||||
emailInput.errorMessage = "You must enter an email"
|
||||
return
|
||||
}
|
||||
mainItem.registerCalled("", "", emailInput.inputText)
|
||||
mainItem.registerCalled("", "", emailInput.text)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -226,4 +226,4 @@ LoginLayout {
|
|||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
105
Linphone/view/Page/Main/AbstractMainPage.qml
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/**
|
||||
* Qml template used for overview pages : Calls, Contacts, Conversations, Meetings
|
||||
**/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Controls as Control
|
||||
|
||||
import Linphone
|
||||
|
||||
|
||||
Item {
|
||||
id: mainItem
|
||||
property string noItemButtonText
|
||||
property string newItemIconSource
|
||||
property string emptyListText
|
||||
property alias leftPanelContent: leftPanel.children
|
||||
property Component rightPanelContent
|
||||
property bool showDefaultItem: true
|
||||
onShowDefaultItemChanged: stackView.replace(showDefaultItem ? defaultItem : rightPanel)
|
||||
signal noItemButtonPressed()
|
||||
|
||||
Control.SplitView {
|
||||
id: splitView
|
||||
anchors.fill: parent
|
||||
|
||||
handle: Rectangle {
|
||||
implicitWidth: 8
|
||||
color: Control.SplitHandle.hovered ? DefaultStyle.splitViewHoveredHandleColor : DefaultStyle.splitViewHandleColor
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
leftPanel.implicitWidth = 280
|
||||
}
|
||||
ColumnLayout {
|
||||
id: leftPanel
|
||||
}
|
||||
Rectangle {
|
||||
id: rightPanel
|
||||
clip: true
|
||||
color: DefaultStyle.mainPageRightPanelBackgroundColor
|
||||
Control.StackView {
|
||||
id: stackView
|
||||
initialItem: defaultItem
|
||||
anchors.fill: parent
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
Component {
|
||||
id: defaultItem
|
||||
ColumnLayout {
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
ColumnLayout {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
visible: mainItem.showDefaultItem
|
||||
// anchors.centerIn: parent
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
spacing: 25
|
||||
Image {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
source: AppIcons.noItemImage
|
||||
Layout.preferredWidth: 250
|
||||
Layout.preferredHeight: 250
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
Text {
|
||||
text: mainItem.emptyListText
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
font.bold: true
|
||||
}
|
||||
Button {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
contentItem: RowLayout {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
EffectImage {
|
||||
effect.brightness: 1
|
||||
image.source: mainItem.newItemIconSource
|
||||
image.width: 20
|
||||
image.fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
Text {
|
||||
text: mainItem.noItemButtonText
|
||||
wrapMode: Text.WordWrap
|
||||
color: DefaultStyle.buttonTextColor
|
||||
font {
|
||||
bold: true
|
||||
pointSize: DefaultStyle.buttonTextSize
|
||||
family: DefaultStyle.defaultFont
|
||||
}
|
||||
}
|
||||
}
|
||||
onPressed: mainItem.noItemButtonPressed()
|
||||
}
|
||||
}
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
256
Linphone/view/Page/Main/CallPage.qml
Normal file
|
|
@ -0,0 +1,256 @@
|
|||
import QtQuick 2.15
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls as Control
|
||||
import Linphone
|
||||
|
||||
AbstractMainPage {
|
||||
id: mainItem
|
||||
noItemButtonText: qsTr("Nouvel appel")
|
||||
emptyListText: qsTr("Historique d'appel vide")
|
||||
newItemIconSource: AppIcons.newCall
|
||||
|
||||
onNoItemButtonPressed: listStackView.push(newCallItem)
|
||||
|
||||
leftPanelContent: Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Control.StackView {
|
||||
id: listStackView
|
||||
initialItem: listItem
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 25
|
||||
anchors.rightMargin: 25
|
||||
}
|
||||
Component {
|
||||
id: listItem
|
||||
|
||||
ColumnLayout {
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Text {
|
||||
text: qsTr("Appels")
|
||||
color: DefaultStyle.mainPageTitleColor
|
||||
font.pointSize: DefaultStyle.mainPageTitleSize
|
||||
font.bold: true
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Control.Button {
|
||||
enabled: false
|
||||
background: Item {
|
||||
}
|
||||
contentItem: Image {
|
||||
source: AppIcons.verticalDots
|
||||
}
|
||||
}
|
||||
Control.Button {
|
||||
|
||||
background: Item {
|
||||
visible: false
|
||||
}
|
||||
contentItem: Image {
|
||||
source: AppIcons.newCall
|
||||
width: 30
|
||||
sourceSize.width: 30
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
onClicked: {
|
||||
console.log("[CallPage]User: create new call")
|
||||
listStackView.push(newCallItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
Control.Control {
|
||||
id: listLayout
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
}
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
SearchBar {
|
||||
id: searchBar
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.fillWidth: true
|
||||
placeholderText: qsTr("Rechercher un appel")
|
||||
}
|
||||
ColumnLayout {
|
||||
Text {
|
||||
text: qsTr("Aucun appel")
|
||||
font.bold: true
|
||||
visible: listView.count === 0
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.topMargin: 30
|
||||
}
|
||||
ListView {
|
||||
id: listView
|
||||
clip: true
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
model: 0
|
||||
currentIndex: 0
|
||||
|
||||
delegate: Item {
|
||||
required property int index
|
||||
width:listView.width
|
||||
height: 30
|
||||
// RectangleTest{}
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
Image {
|
||||
source: AppIcons.info
|
||||
}
|
||||
ColumnLayout {
|
||||
Text {
|
||||
text: "John Doe"
|
||||
}
|
||||
// RowLayout {
|
||||
// Image {
|
||||
// source: AppIcons.incomingCall
|
||||
// }
|
||||
// Text {
|
||||
// text: "info sur l'appel"
|
||||
// }
|
||||
// }
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Control.Button {
|
||||
implicitWidth: 30
|
||||
implicitHeight: 30
|
||||
background: Item {
|
||||
visible: false
|
||||
}
|
||||
contentItem: Image {
|
||||
source: AppIcons.phone
|
||||
width: 20
|
||||
sourceSize.width: 20
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
}
|
||||
}
|
||||
MouseArea {
|
||||
hoverEnabled: true
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
opacity: 0.1
|
||||
radius: 15
|
||||
color: DefaultStyle.comboBoxHoverColor
|
||||
visible: parent.containsMouse
|
||||
}
|
||||
onPressed: listView.currentIndex = parent.index
|
||||
}
|
||||
}
|
||||
|
||||
onCountChanged: mainItem.showDefaultItem = listView.count === 0
|
||||
|
||||
Control.ScrollIndicator.vertical: Control.ScrollIndicator { }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: newCallItem
|
||||
ColumnLayout {
|
||||
RowLayout {
|
||||
Control.Button {
|
||||
background: Item {
|
||||
}
|
||||
contentItem: Image {
|
||||
source: AppIcons.returnArrow
|
||||
}
|
||||
onClicked: {
|
||||
console.debug("[CallPage]User: return to call history")
|
||||
listStackView.pop()
|
||||
}
|
||||
}
|
||||
Text {
|
||||
text: qsTr("Nouvel appel")
|
||||
color: DefaultStyle.mainPageTitleColor
|
||||
font.pointSize: DefaultStyle.mainPageTitleSize
|
||||
font.bold: true
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
Control.Control {
|
||||
id: listLayout
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
}
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
SearchBar {
|
||||
id: searchBar
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.fillWidth: true
|
||||
placeholderText: qsTr("Rechercher un appel")
|
||||
numericPad: numPad
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
leftPadding: 0
|
||||
topPadding: 0
|
||||
rightPadding: 0
|
||||
bottomPadding: 0
|
||||
background: Rectangle {
|
||||
color: DefaultStyle.groupCallButtonColor
|
||||
anchors.fill: parent
|
||||
radius: 50
|
||||
}
|
||||
contentItem: RowLayout {
|
||||
Image {
|
||||
source: AppIcons.groupCall
|
||||
Layout.preferredWidth: 35
|
||||
sourceSize.width: 35
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
Text {
|
||||
text: "Appel de groupe"
|
||||
font.bold: true
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Image {
|
||||
source: AppIcons.rightArrow
|
||||
}
|
||||
}
|
||||
}
|
||||
ColumnLayout {
|
||||
ListView {
|
||||
Layout.fillHeight: true
|
||||
// call history
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
height: numPad.height
|
||||
NumericPad {
|
||||
id: numPad
|
||||
// anchors.centerIn: parent
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rightPanelContent: ColumnLayout {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.0
|
||||
import QtQuick.Controls as Control
|
||||
import Linphone
|
||||
|
||||
OverviewLayout {
|
||||
id: mainItem
|
||||
}
|
||||
|
||||
|
|
@ -9,12 +9,39 @@ QtObject {
|
|||
property string eyeShow: "image://internal/eye-slash.svg"
|
||||
property string downArrow: "image://internal/caret-down.svg"
|
||||
property string returnArrow: "image://internal/caret-left.svg"
|
||||
property string rightArrow: "image://internal/caret-right.svg"
|
||||
property string info: "image://internal/info.svg"
|
||||
property string loginImage: "image://internal/login_image.svg"
|
||||
property string belledonne: "image://internal/belledonne.svg"
|
||||
property string profile: "image://internal/user-circle.svg"
|
||||
property string verif_page_image: "image://internal/verif_page_image.svg"
|
||||
property string check: "image://internal/check.svg"
|
||||
property string dialer: "image://internal/dialer.svg"
|
||||
property string dialerSelected: "image://internal/dialer-selected.svg"
|
||||
property string chiffrement: "image://internal/chiffrement.svg"
|
||||
property string interoperable: "image://internal/interoperable.svg"
|
||||
property string phone: "image://internal/phone.svg"
|
||||
property string phoneSelected: "image://internal/phone-selected.svg"
|
||||
property string newCall: "image://internal/phone-plus.svg"
|
||||
property string endCall: "image://internal/phone-disconnect.svg"
|
||||
property string adressBook: "image://internal/address-book.svg"
|
||||
property string adressBookSelected: "image://internal/address-book-selected.svg"
|
||||
property string chatTeardropText: "image://internal/chat-teardrop-text.svg"
|
||||
property string chatTeardropTextSelected: "image://internal/chat-teardrop-text-selected.svg"
|
||||
property string usersThree: "image://internal/users-three.svg"
|
||||
property string usersThreeSelected: "image://internal/users-three-selected.svg"
|
||||
property string noItemImage: "image://internal/noItemImage.svg"
|
||||
property string verticalDots: "image://internal/dots-three-vertical.svg"
|
||||
property string plusCircle: "image://internal/plus-circle.svg"
|
||||
property string micro: "image://internal/microphone-stage.svg"
|
||||
property string groupCall: "image://internal/group-call.svg"
|
||||
property string magnifier: "image://internal/magnifying-glass.svg"
|
||||
property string backspaceFill: "image://internal/backspace-fill.svg"
|
||||
property string closeX: "image://internal/x.svg"
|
||||
property string incomingCall: "image://internal/incoming_call.svg"
|
||||
property string incomingCallMissed: "image://internal/incoming_call_missed.svg"
|
||||
property string incomingCallRejected: "image://internal/incoming_call_rejected.svg"
|
||||
property string outgoingCall: "image://internal/outgoing_call.svg"
|
||||
property string outgoingCallMissed: "image://internal/outgoing_call_missed.svg"
|
||||
property string outgoingCallRejected: "image://internal/outgoing_call_rejected.svg"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ QtObject {
|
|||
|
||||
property int tabButtonTextSize: 11
|
||||
property color verticalTabBarColor: "#FE5E00"
|
||||
property color verticalTabBarTextColor: "white"
|
||||
property int verticalTabButtonTextSize: 6
|
||||
|
||||
property color comboBoxHighlightColor: "#C0D1D9"
|
||||
property color comboBoxHoverColor: "#6C7A87"
|
||||
|
|
@ -57,4 +59,23 @@ QtObject {
|
|||
property int title1FontPointSize: 50
|
||||
property int title2FontPointSize: 20
|
||||
property color titleColor: "#22334D"
|
||||
|
||||
property color mainPageRightPanelBackgroundColor: "#F9F9F9"
|
||||
property color mainPageTitleColor: "#364860"
|
||||
property int mainPageTitleSize: 15
|
||||
|
||||
property color searchBarFocusBorderColor: "#6C7A87"
|
||||
|
||||
property color numericPadBackgroundColor: "#F9F9F9"
|
||||
property color numericPadShadowColor: Qt.rgba(0.0, 0.0, 0.0, 0.1)
|
||||
property color numericPadButtonColor: "#FFFFFF"
|
||||
property int numericPadButtonTextSize: 15
|
||||
property int numericPadButtonSubtextSize: 6
|
||||
property color numericPadPressedButtonColor: "#EEF7F8"
|
||||
property color numericPadLaunchCallButtonColor: "#4FAE80"
|
||||
|
||||
property color groupCallButtonColor: "#EEF7F8"
|
||||
|
||||
property color splitViewHandleColor: "#F9F9F9"
|
||||
property color splitViewHoveredHandleColor: "#EDEDED"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,112 +0,0 @@
|
|||
###############################################################################
|
||||
# Dockerfile used to make gitlab.linphone.org:4567/bc/public/linphone-desktop/bc-dev-ubuntu-22-04-lts:20231108_new
|
||||
###############################################################################
|
||||
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ARG QT_VERSION=5.15.2
|
||||
ARG QT6_VERSION=6.5.3
|
||||
#Do not use it. It seems that it cannot be used from python command.
|
||||
#ARG QT_MODULES=qtnetworkauth qtquick3d qtmultimedia
|
||||
|
||||
MAINTAINER Julien Wadel <julien.wadel@belledonne-communications.com>
|
||||
|
||||
# Use a Swiss mirror
|
||||
RUN sed -i -E 's/(archive|security)\.ubuntu\.com/ch.archive.ubuntu.com/' /etc/apt/sources.list
|
||||
|
||||
# add fallbacks for timeout connections.
|
||||
|
||||
#France
|
||||
RUN echo "deb http://fr.archive.ubuntu.com/ubuntu/ jammy main restricted" >> /etc/apt/sources.list
|
||||
RUN echo "deb http://security.ubuntu.com/ubuntu jammy-security main restricted" >> /etc/apt/sources.list
|
||||
RUN echo "deb http://ch.archive.ubuntu.com/ubuntu/ jammy-updates main restricted" >> /etc/apt/sources.list
|
||||
#Belgium
|
||||
RUN echo "deb http://be.archive.ubuntu.com/ubuntu/ jammy main restricted" >> /etc/apt/sources.list
|
||||
RUN echo "deb http://security.ubuntu.com/ubuntu jammy-security main restricted" >> /etc/apt/sources.list
|
||||
RUN echo "deb http://be.archive.ubuntu.com/ubuntu/ jammy-updates main restricted" >> /etc/apt/sources.list
|
||||
#International
|
||||
RUN echo "deb http://archive.ubuntu.com/ubuntu/ jammy main restricted" >> /etc/apt/sources.list
|
||||
RUN echo "deb http://security.ubuntu.com/ubuntu jammy-security main restricted" >> /etc/apt/sources.list
|
||||
RUN echo "deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted" >> /etc/apt/sources.list
|
||||
|
||||
# Configure locale
|
||||
RUN apt-get update && \
|
||||
apt-get install -y locales && \
|
||||
apt-get clean && \
|
||||
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
|
||||
locale-gen
|
||||
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
|
||||
ENV TZ=Europe/Paris
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV SHELL=/bin/bash
|
||||
#ENV PS1='\[\e[33m\]\u@bc-dev-ubuntu-20-04>\[\e[0m\] '
|
||||
|
||||
# Install common general tools
|
||||
RUN apt-get update && \
|
||||
apt-get install -y nano sudo vim && \
|
||||
apt-get clean
|
||||
|
||||
# Install development tools
|
||||
RUN apt-get update && \
|
||||
apt-get install -y alien at autoconf bison ccache clang doxygen elfutils g++ gdb git graphviz intltool libtool lsb-release make ninja-build openssh-client patch perl python3-pip python3-pystache python-six python3-jsonschema python3-jinja2 meson yasm && \
|
||||
apt-get clean
|
||||
|
||||
# Install linphone & flexisip dependencies development packages
|
||||
RUN apt-get update && \
|
||||
apt-get install -y libasound2-dev libavcodec-dev libavutil-dev libbsd-dev libegl1-mesa-dev libglew-dev libgsm1-dev libjansson-dev libmariadb-dev-compat libmbedtls-dev libopus-dev libpq-dev libprotobuf-dev libpulse-dev libqt5svg5-dev libsnmp-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libsrtp2-dev libssl-dev libswscale-dev libturbojpeg0-dev libv4l-dev libvpx-dev libxerces-c-dev libxml2-dev libxv-dev protobuf-compiler qttools5-dev qttools5-dev-tools xsdcxx && \
|
||||
apt-get clean
|
||||
|
||||
# Install signing tools
|
||||
RUN sudo apt-get install -y gnupg2
|
||||
|
||||
# Install configuration tools
|
||||
RUN sudo apt-get install -y wget
|
||||
|
||||
# Configure user bc
|
||||
RUN useradd -ms /bin/bash bc && \
|
||||
echo 'bc:cotcot' | chpasswd && \
|
||||
echo 'bc ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
||||
|
||||
# Install newest cmake. Documented at https://gist.github.com/bmegli/4049b7394f9cfa016c24ed67e5041930
|
||||
RUN wget https://github.com/Kitware/CMake/releases/download/v3.25.3/cmake-3.25.3.tar.gz && \
|
||||
tar -zvxf cmake-3.25.3.tar.gz && \
|
||||
cd cmake-3.25.3 && ./bootstrap && make -j8 && \
|
||||
sudo apt-get install checkinstall && sudo checkinstall --pkgname=cmake --pkgversion="3.25-custom" --default && hash -r && \
|
||||
cd .. && sudo rm -rf cmake-3.25.3 && rm -rf cmake-3.25.3.tar.gz
|
||||
|
||||
# Install nasm from source as we need a newer version than the one being packaged
|
||||
RUN curl --fail --silent --show-error --location https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz | \
|
||||
tar --extract --gzip --file - && cd nasm-2.16.01 && \
|
||||
./configure --prefix=/usr/local && make && make install && \
|
||||
cd .. && rm -rf nasm-2.16.01
|
||||
|
||||
########### QT
|
||||
|
||||
RUN sudo apt-get update && sudo apt-get install -y libxkbcommon* flite1-dev libspeechd-dev speech-dispatcher libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libx11-xcb* libxcb* qdbus-qt5 libqt5dbus5 libdbus-1-dev libdbus-glib-1-dev libatspi2.0-0 libatspi2.0-dev
|
||||
RUN sudo apt-get update && sudo apt-get install -y libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev
|
||||
|
||||
USER bc
|
||||
WORKDIR /home/bc
|
||||
|
||||
RUN sudo pip3 install --upgrade setuptools
|
||||
RUN sudo pip3 install ez_setup
|
||||
|
||||
## Install Qt download tool
|
||||
# installation is split because there is a way where some modules are not downloaded in the first attempt.
|
||||
RUN sudo pip3 install py7zr aqtinstall
|
||||
RUN sudo python3 -m aqt install-qt linux desktop $QT_VERSION -O /opt/Qt
|
||||
RUN sudo python3 -m aqt install-qt linux desktop $QT_VERSION -O /opt/Qt --noarchives -m qtnetworkauth qtquick3d
|
||||
RUN sudo python3 -m aqt install-qt linux desktop $QT6_VERSION -O /opt/Qt
|
||||
RUN sudo python3 -m aqt install-qt linux desktop $QT6_VERSION -O /opt/Qt --noarchives -m qtnetworkauth qtquick3d qtmultimedia
|
||||
|
||||
RUN sudo chown -R bc:bc /opt/Qt/
|
||||
|
||||
RUN qtchooser -install $QT_VERSION /opt/Qt/$QT_VERSION/gcc_64/bin/qmake
|
||||
RUN qtchooser -install $QT6_VERSION /opt/Qt/$QT6_VERSION/gcc_64/bin/qmake
|
||||
|
||||
# To choose the version to use, run (for Qt6.5.3): eval "$(qtchooser -qt=6.5.3 -print-env)"; export PATH=${QTTOOLDIR}:$PATH;export Qt6_DIR=${QTLIBDIR}/cmake/Qt6;
|
||||
|
||||
|
||||
CMD bash
|
||||