mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-31 02:49:21 +00:00
Add debug feedback on missing colors.
Add contact URL. Change unread message count design in chat. Add page text about missing features when using third party SIP account. Add Translation link for contribution in about. Fix history view. Add delay of 500ms on message search. Fix unresponsive check update button in settings. Fix wrong characters in record name. # Conflicts: # linphone-app/cmake_builder/linphone_package/CMakeLists.txt
This commit is contained in:
parent
479369bab0
commit
92e483c855
23 changed files with 386 additions and 163 deletions
|
|
@ -7,6 +7,11 @@
|
|||
<source>ok</source>
|
||||
<translation>OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>aboutTranslation</source>
|
||||
<extracomment>'Help us translate %1' : %1 is the application name</extracomment>
|
||||
<translation>Help us translate %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ActivateAppSipAccountWithEmail</name>
|
||||
|
|
@ -2879,6 +2884,7 @@ Click here: <a href="%1">%1</a>
|
|||
<name>UseOtherSipAccount</name>
|
||||
<message>
|
||||
<source>confirmAction</source>
|
||||
<extracomment>'Use' : Popup confirmation for a form</extracomment>
|
||||
<translation>USE</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -2909,6 +2915,26 @@ Click here: <a href="%1">%1</a>
|
|||
<source>addOtherSipAccountError</source>
|
||||
<translation>Unable to add this account.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>understandAction</source>
|
||||
<extracomment>'I understand' : Popup confirmation for a warning</extracomment>
|
||||
<translation>I understand</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>warningFeatures</source>
|
||||
<extracomment>'Some features require a Linphone account, such as group messaging or ephemeral messaging.' : Warning text about features.</extracomment>
|
||||
<translation>Some features require a Linphone account, such as group messaging or ephemeral messaging.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>warningThirdParty</source>
|
||||
<extracomment>'These features are hidden when you register with a third party SIP account.' : Warning text for using third party account.</extracomment>
|
||||
<translation>These features are hidden when you register with a third party SIP account.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>warningContact</source>
|
||||
<extracomment>'To enable it in a commercial project, please contact us.' : Warning text for contacting about enabling features.</extracomment>
|
||||
<translation>To enable it in a commercial project, please contact us.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ZrtpTokenAuthentication</name>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
<source>ok</source>
|
||||
<translation>OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>aboutTranslation</source>
|
||||
<extracomment>'Help us translate %1' : %1 is the application name</extracomment>
|
||||
<translation>Contribuer aux traductions</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ActivateAppSipAccountWithEmail</name>
|
||||
|
|
@ -521,7 +526,7 @@ URL du serveur non configurée.</translation>
|
|||
<message>
|
||||
<source>Forwarded</source>
|
||||
<extracomment>'Forwarded' : Header on a message that contains a forward.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Transféré</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1579,9 +1584,9 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<message numerus="yes">
|
||||
<source>unreadMessageNotice</source>
|
||||
<extracomment>'%1 unread messages' : Little message to show on an event where unread messages begin.</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform>%1 message non lu</numerusform>
|
||||
<numerusform>%1 messages non lus</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -1639,7 +1644,7 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<message>
|
||||
<source>conversationDevicesTitle</source>
|
||||
<extracomment>'Conversation's devices' : Title of window that show all devices</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Liste des appareils</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1939,7 +1944,7 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<message>
|
||||
<source>chatNotificationsEnabledLabel</source>
|
||||
<extracomment>'Enable notifications': settings label for enabling notifications.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Activer les notifications</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -2296,7 +2301,7 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<message>
|
||||
<source>defaultDeviceNameLabel</source>
|
||||
<extracomment>'Device Name' : Label for setting the device name.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Nom de l'appareil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -2856,6 +2861,7 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<name>UseOtherSipAccount</name>
|
||||
<message>
|
||||
<source>confirmAction</source>
|
||||
<extracomment>'Use' : Popup confirmation for a form</extracomment>
|
||||
<translation>UTILISER</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -2886,6 +2892,26 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<source>addOtherSipAccountError</source>
|
||||
<translation>Impossible d'ajouter ce compte.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>understandAction</source>
|
||||
<extracomment>'I understand' : Popup confirmation for a warning</extracomment>
|
||||
<translation>J'ai compris</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>warningFeatures</source>
|
||||
<extracomment>'Some features require a Linphone account, such as group messaging or ephemeral messaging.' : Warning text about features.</extracomment>
|
||||
<translation>Certaines fonctionnalités avancées comme les messages de groupe ou les messages éphémères nécessitent un compte Linphone.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>warningThirdParty</source>
|
||||
<extracomment>'These features are hidden when you register with a third party SIP account.' : Warning text for using third party account.</extracomment>
|
||||
<translation>Elles seront masquées dans l'application si vous configurez un compte SIP tiers.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>warningContact</source>
|
||||
<extracomment>'To enable it in a commercial project, please contact us.' : Warning text for contacting about enabling features.</extracomment>
|
||||
<translation>Si vous souhaitez les activer pour un projet professionnel, contactez-nous.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ZrtpTokenAuthentication</name>
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ if (WIN32)
|
|||
file(GLOB GRAMMAR_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Belr/grammars/*")
|
||||
install(FILES ${GRAMMAR_FILES} DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/" )
|
||||
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/images" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS OPTIONAL)
|
||||
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
|
||||
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/sounds/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
|
||||
|
||||
install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Linphone/rootca.pem" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}/")
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/linphonerc-factory" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}")
|
||||
|
|
@ -192,7 +192,7 @@ elseif (APPLE)
|
|||
file(GLOB GRAMMAR_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Belr/grammars/*")
|
||||
install(FILES ${GRAMMAR_FILES} DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/belr/grammars/")
|
||||
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/images" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS OPTIONAL)
|
||||
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
|
||||
install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/sounds/linphone/" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/sounds/${EXECUTABLE_NAME}" USE_SOURCE_PERMISSIONS)
|
||||
install(FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/Linphone/rootca.pem" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}")
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../assets/linphonerc-factory" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/${CMAKE_INSTALL_DATAROOTDIR}/${EXECUTABLE_NAME}")
|
||||
|
||||
|
|
|
|||
|
|
@ -941,11 +941,10 @@ QString CallModel::generateSavedFilename () const {
|
|||
|
||||
QString CallModel::generateSavedFilename (const QString &from, const QString &to) {
|
||||
auto escape = [](const QString &str) {
|
||||
constexpr char ReservedCharacters[] = "<>:\"/\\|\\?\\*";
|
||||
constexpr char ReservedCharacters[] = "[<|>|:|\"|/|\\\\|\\?|\\*|\\+|\\|]+";
|
||||
static QRegularExpression regexp(ReservedCharacters);
|
||||
return QString(str).replace(regexp, "");
|
||||
};
|
||||
|
||||
return QStringLiteral("%1_%2_%3")
|
||||
.arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss"))
|
||||
.arg(escape(from))
|
||||
|
|
|
|||
|
|
@ -134,8 +134,6 @@ void LdapModel::unset(){
|
|||
mSipDomain = QString::fromStdString(mLdapParams->getSipDomain());
|
||||
mDebug = (int)mLdapParams->getDebugLevel();
|
||||
mVerifyServerCertificates = (int)mLdapParams->getServerCertificatesVerificationMode();
|
||||
int c = (int) mLdapParams->getAuthMethod();
|
||||
qWarning() << c;
|
||||
testServerField();
|
||||
testMaxResultsField();
|
||||
testTimeoutField();
|
||||
|
|
|
|||
|
|
@ -109,6 +109,8 @@ constexpr char Constants::VersionCheckUrl[];
|
|||
constexpr char Constants::PasswordRecoveryUrl[];
|
||||
constexpr char Constants::CguUrl[];
|
||||
constexpr char Constants::PrivatePolicyUrl[];
|
||||
constexpr char Constants::ContactUrl[];
|
||||
constexpr char Constants::TranslationUrl[];
|
||||
|
||||
|
||||
constexpr char Constants::LinphoneBZip2_exe[];
|
||||
|
|
|
|||
|
|
@ -59,6 +59,10 @@ public:
|
|||
static constexpr char PasswordRecoveryUrl[] = "https://subscribe.linphone.org/login";
|
||||
static constexpr char CguUrl[] = "https://www.linphone.org/general-terms";
|
||||
static constexpr char PrivatePolicyUrl[] = "https://www.linphone.org/privacy-policy";
|
||||
static constexpr char ContactUrl[] = "https://www.linphone.org/contact";
|
||||
static constexpr char TranslationUrl[] = "https://weblate.linphone.org/projects/linphone-desktop/";
|
||||
|
||||
|
||||
|
||||
static constexpr char LinphoneBZip2_exe[] = "http://www.linphone.org/releases/windows/tools/bzip2/bzip2.exe";
|
||||
static constexpr char LinphoneBZip2_dll[] = "http://www.linphone.org/releases/windows/tools/bzip2/bzip2.dll";
|
||||
|
|
@ -71,6 +75,9 @@ public:
|
|||
Q_PROPERTY(QString PasswordRecoveryUrl MEMBER PasswordRecoveryUrl CONSTANT)
|
||||
Q_PROPERTY(QString CguUrl MEMBER CguUrl CONSTANT)
|
||||
Q_PROPERTY(QString PrivatePolicyUrl MEMBER PrivatePolicyUrl CONSTANT)
|
||||
Q_PROPERTY(QString ContactUrl MEMBER ContactUrl CONSTANT)
|
||||
Q_PROPERTY(QString TranslationUrl MEMBER TranslationUrl CONSTANT)
|
||||
|
||||
static constexpr char DefaultAssistantRegistrationUrl[] = "https://subscribe.linphone.org/register";
|
||||
static constexpr char DefaultAssistantLoginUrl[] = "https://subscribe.linphone.org/login";
|
||||
static constexpr char DefaultAssistantLogoutUrl[] = "https://subscribe.linphone.org/logout";
|
||||
|
|
|
|||
|
|
@ -106,65 +106,81 @@ Item {
|
|||
// }
|
||||
// return wrappedButton.icon;
|
||||
}
|
||||
function getColor(color, defaultColor, debugVar){
|
||||
if(color)
|
||||
return color
|
||||
else{
|
||||
console.warn("No color defined for :"+debugVar)
|
||||
return defaultColor
|
||||
}
|
||||
}
|
||||
function getBackgroundColor(){
|
||||
var defaultColor = 'transparent'
|
||||
if(isCustom){
|
||||
if(wrappedButton.icon == '')
|
||||
return wrappedButton.colorSet.backgroundNormalColor
|
||||
return getColor(wrappedButton.colorSet.backgroundNormalColor, defaultColor, 'backgroundNormalColor')
|
||||
if (wrappedButton.updating || wrappedButton.toggled)
|
||||
return wrappedButton.colorSet.backgroundUpdatingColor
|
||||
return getColor(wrappedButton.colorSet.backgroundUpdatingColor, defaultColor, 'backgroundUpdatingColor')
|
||||
if (!useStates)
|
||||
return wrappedButton.colorSet.backgroundNormalColor
|
||||
return getColor(wrappedButton.colorSet.backgroundNormalColor, defaultColor, 'backgroundNormalColor')
|
||||
if (!wrappedButton.enabled)
|
||||
return wrappedButton.colorSet.backgroundDisabledColor
|
||||
return button.down ? wrappedButton.colorSet.backgroundPressedColor
|
||||
: (button.hovered ? wrappedButton.colorSet.backgroundHoveredColor: wrappedButton.colorSet.backgroundNormalColor)
|
||||
return getColor(wrappedButton.colorSet.backgroundDisabledColor, defaultColor, 'backgroundDisabledColor')
|
||||
return button.down ? getColor(wrappedButton.colorSet.backgroundPressedColor, defaultColor, 'backgroundPressedColor')
|
||||
: (button.hovered ? getColor(wrappedButton.colorSet.backgroundHoveredColor, defaultColor, 'backgroundHoveredColor')
|
||||
: getColor(wrappedButton.colorSet.backgroundNormalColor, defaultColor, 'backgroundNormalColor'))
|
||||
}else
|
||||
return 'transparent'
|
||||
return defaultColor
|
||||
}
|
||||
function getForegroundColor(){
|
||||
var defaultColor = 'black'
|
||||
if(isCustom){
|
||||
if(wrappedButton.icon == '')
|
||||
return wrappedButton.colorSet.foregroundNormalColor
|
||||
return getColor(wrappedButton.colorSet.foregroundNormalColor, defaultColor, 'foregroundNormalColor')
|
||||
if (wrappedButton.updating || wrappedButton.toggled)
|
||||
return wrappedButton.colorSet.foregroundUpdatingColor
|
||||
return getColor(wrappedButton.colorSet.foregroundUpdatingColor, defaultColor, 'foregroundUpdatingColor')
|
||||
if (!useStates)
|
||||
return wrappedButton.colorSet.foregroundNormalColor
|
||||
return getColor(wrappedButton.colorSet.foregroundNormalColor, defaultColor, 'foregroundNormalColor')
|
||||
if (!wrappedButton.enabled)
|
||||
return wrappedButton.colorSet.foregroundDisabledColor
|
||||
return button.down ? wrappedButton.colorSet.foregroundPressedColor
|
||||
: (button.hovered ? wrappedButton.colorSet.foregroundHoveredColor: wrappedButton.colorSet.foregroundNormalColor)
|
||||
return getColor(wrappedButton.colorSet.foregroundDisabledColor, defaultColor, 'foregroundDisabledColor')
|
||||
return button.down ? getColor(wrappedButton.colorSet.foregroundPressedColor, defaultColor, 'foregroundPressedColor')
|
||||
: (button.hovered ? getColor(wrappedButton.colorSet.foregroundHoveredColor, defaultColor, 'foregroundHoveredColor')
|
||||
: getColor(wrappedButton.colorSet.foregroundNormalColor, defaultColor, 'foregroundNormalColor'))
|
||||
}else
|
||||
return "black"
|
||||
return defaultColor
|
||||
}
|
||||
function getBackgroundHiddenPartColor(){
|
||||
var defaultColor = 'transparent'
|
||||
if(isCustom){
|
||||
if(wrappedButton.icon == '')
|
||||
return wrappedButton.backgroundHiddenPartNormalColor
|
||||
return getColor(wrappedButton.colorSet.backgroundHiddenPartNormalColor, defaultColor, 'backgroundHiddenPartNormalColor')
|
||||
if (wrappedButton.updating || wrappedButton.toggled)
|
||||
return wrappedButton.backgroundHiddenPartUpdatingColor
|
||||
return getColor(wrappedButton.colorSet.backgroundHiddenPartUpdatingColor, defaultColor, 'backgroundHiddenPartUpdatingColor')
|
||||
if (!useStates)
|
||||
return wrappedButton.backgroundHiddenPartNormalColor
|
||||
return getColor(wrappedButton.colorSet.backgroundHiddenPartNormalColor, defaultColor, 'backgroundHiddenPartNormalColor')
|
||||
if (!wrappedButton.enabled)
|
||||
return wrappedButton.backgroundHiddenPartDisabledColor
|
||||
return button.down ? wrappedButton.backgroundHiddenPartPressedColor
|
||||
: (button.hovered ? wrappedButton.backgroundHiddenPartHoveredColor: wrappedButton.backgroundHiddenPartNormalColor)
|
||||
return getColor(wrappedButton.colorSet.backgroundHiddenPartDisabledColor, defaultColor, 'backgroundHiddenPartDisabledColor')
|
||||
return button.down ? getColor(wrappedButton.colorSet.backgroundHiddenPartPressedColor, defaultColor, 'backgroundHiddenPartPressedColor')
|
||||
: (button.hovered ? getColor(wrappedButton.colorSet.backgroundHiddenPartHoveredColor, defaultColor, 'backgroundHiddenPartHoveredColor')
|
||||
: getColor(wrappedButton.colorSet.backgroundHiddenPartNormalColor, defaultColor, 'backgroundHiddenPartNormalColor'))
|
||||
}else
|
||||
return 'transparent'
|
||||
return defaultColor
|
||||
}
|
||||
function getForegroundHiddenPartColor(){
|
||||
var defaultColor = '#80FFFFFF'
|
||||
if(isCustom){
|
||||
if(wrappedButton.icon == '')
|
||||
return wrappedButton.foregroundHiddenPartNormalColor
|
||||
return getColor(wrappedButton.colorSet.foregroundHiddenPartNormalColor, defaultColor, 'foregroundHiddenPartNormalColor')
|
||||
if (wrappedButton.updating || wrappedButton.toggled)
|
||||
return wrappedButton.foregroundHiddenPartUpdatingColor
|
||||
return getColor(wrappedButton.colorSet.foregroundHiddenPartUpdatingColor, defaultColor, 'foregroundHiddenPartUpdatingColor')
|
||||
if (!useStates)
|
||||
return wrappedButton.foregroundHiddenPartNormalColor
|
||||
return getColor(wrappedButton.colorSet.foregroundHiddenPartNormalColor, defaultColor, 'foregroundHiddenPartNormalColor')
|
||||
if (!wrappedButton.enabled)
|
||||
return wrappedButton.foregroundHiddenPartDisabledColor
|
||||
return button.down ? wrappedButton.foregroundHiddenPartPressedColor
|
||||
: (button.hovered ? wrappedButton.foregroundHiddenPartHoveredColor: wrappedButton.foregroundHiddenPartNormalColor)
|
||||
return getColor(wrappedButton.colorSet.foregroundHiddenPartDisabledColor, defaultColor, 'foregroundHiddenPartDisabledColor')
|
||||
return button.down ? getColor(wrappedButton.colorSet.foregroundHiddenPartPressedColor, defaultColor, 'foregroundHiddenPartPressedColor')
|
||||
: (button.hovered ? getColor(wrappedButton.colorSet.foregroundHiddenPartHoveredColor, defaultColor, 'foregroundHiddenPartHoveredColor')
|
||||
: getColor(wrappedButton.colorSet.foregroundHiddenPartNormalColor, defaultColor, 'foregroundHiddenPartNormalColor'))
|
||||
}else
|
||||
return "#80FFFFFF"
|
||||
return defaultColor
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -187,7 +203,7 @@ Item {
|
|||
height: parent.height
|
||||
width: parent.width * ( 1 - wrappedButton.percentageDisplayed / 100 )
|
||||
id: backgroundHiddenPartColor
|
||||
color: getBackgroundHiddenPartColor()
|
||||
color: width > 0 ? getBackgroundHiddenPartColor() : 'transparent'
|
||||
}
|
||||
}
|
||||
hoverEnabled: !wrappedButton.updating//|| wrappedButton.autoIcon
|
||||
|
|
@ -199,7 +215,7 @@ Item {
|
|||
color: 'transparent'
|
||||
Rectangle{
|
||||
anchors.fill:parent
|
||||
color: getForegroundColor()
|
||||
color: getForegroundColor()
|
||||
anchors.rightMargin: parent.width * ( 1 - wrappedButton.percentageDisplayed / 100 )
|
||||
}
|
||||
}
|
||||
|
|
@ -210,7 +226,7 @@ Item {
|
|||
color: 'transparent'
|
||||
Rectangle{
|
||||
anchors.fill:parent
|
||||
color: getForegroundHiddenPartColor()
|
||||
color: percentageDisplayed != 100 ? getForegroundHiddenPartColor() : 'transparent'
|
||||
anchors.leftMargin: parent.width * wrappedButton.percentageDisplayed / 100
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -336,7 +336,7 @@ Rectangle {
|
|||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 10
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 40
|
||||
anchors.rightMargin: 35
|
||||
visible: chat.isIndexAfter(chat.count-1)
|
||||
onVisibleChanged: updateMarkAsRead()
|
||||
Component.onCompleted: updateMarkAsRead()
|
||||
|
|
@ -360,9 +360,12 @@ Rectangle {
|
|||
MessageCounter{
|
||||
anchors.left: parent.right
|
||||
anchors.bottom: parent.top
|
||||
anchors.bottomMargin: -5
|
||||
anchors.leftMargin: -5
|
||||
anchors.bottomMargin: 0
|
||||
anchors.leftMargin: -14
|
||||
count: container.proxyModel.chatRoomModel ? container.proxyModel.chatRoomModel.unreadMessagesCount : 0
|
||||
showOnlyNumber: true
|
||||
iconSize: 15
|
||||
pointSize: Units.dp * 7
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ Loader{
|
|||
property ContentModel contentModel
|
||||
property int maxWidth : parent.width
|
||||
property int fitWidth: active ? Math.max(maxWidth - ChatAudioMessageStyle.emptySpace, ChatAudioMessageStyle.minWidth) : 0
|
||||
property int fitHeight: active ? 50 : 0
|
||||
property int fitHeight: active ? 40 : 0
|
||||
|
||||
property font customFont : SettingsModel.textMessageFont
|
||||
property bool isOutgoing : contentModel && (contentModel.chatMessageModel.isOutgoing || contentModel.chatMessageModel.state == LinphoneEnums.ChatMessageStateIdle);
|
||||
|
|
@ -63,6 +63,7 @@ Loader{
|
|||
anchors.fill: parent
|
||||
spacing: 5
|
||||
ActionButton{
|
||||
id: playButton
|
||||
Layout.preferredHeight: iconSize
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.rightMargin: 5
|
||||
|
|
@ -83,8 +84,6 @@ Loader{
|
|||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.topMargin: 5
|
||||
Layout.bottomMargin: 5
|
||||
Layout.rightMargin: 15
|
||||
MediaProgressBar{
|
||||
id: mediaProgressBar
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ TextEdit {
|
|||
property ContentModel contentModel
|
||||
property string lastTextSelected : ''
|
||||
property font customFont : SettingsModel.textMessageFont
|
||||
property int fitHeight: visible ? contentHeight + padding : 0
|
||||
property int fitHeight: visible ? contentHeight + padding + 6 : 0
|
||||
property int fitWidth: visible ? implicitWidth + 2: 0 // add 2 because there is a bug on border that lead to not fit text exactly
|
||||
|
||||
signal rightClicked()
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ Item {
|
|||
|
||||
// ---------------------------------------------------------------------------
|
||||
property string lastTextSelected
|
||||
implicitHeight: (deliveryLayout.visible? deliveryLayout.height : 0) +(ephemeralTimerRow.visible? 16 : 0) + messageData.height +5
|
||||
implicitHeight: (deliveryLayout.visible? deliveryLayout.height : 0) +(ephemeralTimerRow.visible? 16 : 0) + messageData.height
|
||||
|
||||
Rectangle {
|
||||
id: rectangle
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ function loadMoreEntries () {
|
|||
if (history.atYBeginning && !history.tryToLoadMoreEntries) {
|
||||
history.tryToLoadMoreEntries = true
|
||||
history.positionViewAtBeginning()
|
||||
container.proxyModel.loadMoreEntriesAsync()
|
||||
container.proxyModel.loadMoreEntries()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ Rectangle {
|
|||
|
||||
Component.onCompleted: Logic.initView()
|
||||
|
||||
onContentYChanged: Logic.loadMoreEntriesAsync()
|
||||
onContentYChanged: Logic.loadMoreEntries()
|
||||
onMovementEnded: Logic.handleMovementEnded()
|
||||
onMovementStarted: Logic.handleMovementStarted()
|
||||
|
||||
|
|
|
|||
|
|
@ -5,30 +5,41 @@ import Linphone.Styles 1.0
|
|||
|
||||
// =============================================================================
|
||||
|
||||
Icon {
|
||||
id: messageCounter
|
||||
|
||||
property int count: 0
|
||||
|
||||
icon: 'chat_count'
|
||||
iconSize: MessageCounterStyle.iconSize.message
|
||||
visible: messageCounter.count > 0
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
horizontalCenter: parent.right
|
||||
verticalCenter: parent.bottom
|
||||
}
|
||||
|
||||
icon: 'chat_amount'
|
||||
iconSize: MessageCounterStyle.iconSize.amount
|
||||
visible: messageCounter.count > 0
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
color: MessageCounterStyle.text.color
|
||||
font.pointSize: MessageCounterStyle.text.pointSize
|
||||
text: (messageCounter.count>99 ? '+' : messageCounter.count)
|
||||
}
|
||||
}
|
||||
Item{
|
||||
id: messageCounter
|
||||
property bool showOnlyNumber: false
|
||||
property int count: 0
|
||||
property alias icon: backgroundIcon.icon
|
||||
property alias iconSize: amountIcon.iconSize
|
||||
property int pointSize: MessageCounterStyle.text.pointSize
|
||||
|
||||
visible: messageCounter.count > 0
|
||||
|
||||
height: showOnlyNumber ? amountIcon.height : backgroundIcon.height
|
||||
width: showOnlyNumber ? amountIcon.width : backgroundIcon.width
|
||||
|
||||
Icon {
|
||||
id: backgroundIcon
|
||||
icon: 'chat_count'
|
||||
iconSize: MessageCounterStyle.iconSize.message
|
||||
visible: !messageCounter.showOnlyNumber
|
||||
}
|
||||
Icon {
|
||||
id: amountIcon
|
||||
anchors {
|
||||
horizontalCenter: parent.right
|
||||
verticalCenter: parent.bottom
|
||||
}
|
||||
|
||||
icon: 'chat_amount'
|
||||
iconSize: MessageCounterStyle.iconSize.amount
|
||||
visible: messageCounter.count > 0
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
color: MessageCounterStyle.text.color
|
||||
font.pointSize: messageCounter.pointSize
|
||||
text: (messageCounter.count>99 ? '+' : messageCounter.count)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.5
|
||||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
import ConstantsCpp 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
|
|
@ -9,88 +11,173 @@ import App.Styles 1.0
|
|||
Item{
|
||||
|
||||
AssistantAbstractView {
|
||||
id: mainItem
|
||||
mainAction: requestBlock.execute
|
||||
|
||||
mainActionEnabled: username.text.length &&
|
||||
sipDomain.text.length &&
|
||||
password.text.length
|
||||
|
||||
mainActionLabel: qsTr('confirmAction')
|
||||
|
||||
//: 'I understand' : Popup confirmation for a warning
|
||||
mainActionLabel: showWarning ? qsTr('understandAction').toUpperCase()
|
||||
//: 'Use' : Popup confirmation for a form
|
||||
: qsTr('confirmAction').toUpperCase()
|
||||
|
||||
title: qsTr('useOtherSipAccountTitle')
|
||||
|
||||
|
||||
width: AssistantAbstractViewStyle.content.width
|
||||
height: AssistantAbstractViewStyle.content.height
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
|
||||
property bool showWarning : true
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
//anchors.centerIn: parent
|
||||
//anchors.horizontalCenter:parent.horizontalCenter
|
||||
Column {
|
||||
|
||||
StackView {
|
||||
id: mainStack
|
||||
anchors.fill: parent.contentItem
|
||||
width: AssistantAbstractViewStyle.content.width
|
||||
height: AssistantAbstractViewStyle.content.height
|
||||
|
||||
Form {
|
||||
orientation: Qt.Vertical
|
||||
width: parent.width
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('usernameLabel')
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
}
|
||||
}
|
||||
|
||||
FormGroup {
|
||||
label: qsTr('displayNameLabel')
|
||||
|
||||
TextField {
|
||||
id: displayName
|
||||
}
|
||||
}
|
||||
initialItem: warningComponent
|
||||
}
|
||||
Component{
|
||||
id: warningComponent
|
||||
Column{
|
||||
spacing: UseAppSipAccountStyle.warningBlock.spacing
|
||||
anchors.fill: parent.contentItem
|
||||
|
||||
Text {
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: UseAppSipAccountStyle.warningBlock.pointSize
|
||||
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
color: UseAppSipAccountStyle.warningBlock.color
|
||||
wrapMode: Text.WordWrap
|
||||
//: 'Some features require a Linphone account, such as group messaging or ephemeral messaging.' : Warning text about features.
|
||||
text: qsTr('warningFeatures')
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('sipDomainLabel')
|
||||
|
||||
TextField {
|
||||
id: sipDomain
|
||||
Text{
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: UseAppSipAccountStyle.warningBlock.pointSize
|
||||
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
color: UseAppSipAccountStyle.warningBlock.color
|
||||
wrapMode: Text.WordWrap
|
||||
//: 'These features are hidden when you register with a third party SIP account.' : Warning text for using third party account.
|
||||
text: qsTr('warningThirdParty')
|
||||
}
|
||||
Text {
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: UseAppSipAccountStyle.warningBlock.pointSize
|
||||
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
color: UseAppSipAccountStyle.warningBlock.color
|
||||
wrapMode: Text.WordWrap
|
||||
//: 'To enable it in a commercial project, please contact us.' : Warning text for contacting about enabling features.
|
||||
text: qsTr('warningContact')
|
||||
}
|
||||
Text {
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: UseAppSipAccountStyle.warningBlock.contactUrl.pointSize
|
||||
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
wrapMode: Text.WordWrap
|
||||
color: UseAppSipAccountStyle.warningBlock.color
|
||||
linkColor: UseAppSipAccountStyle.warningBlock.contactUrl.color
|
||||
text: '<a href="'+ConstantsCpp.ContactUrl+'">'+ConstantsCpp.ContactUrl+'</a>'
|
||||
|
||||
visible: ConstantsCpp.ContactUrl != ''
|
||||
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.NoButton
|
||||
cursorShape: parent.hoveredLink
|
||||
? Qt.PointingHandCursor
|
||||
: Qt.IBeamCursor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Component {
|
||||
id: formComponent
|
||||
Column {
|
||||
anchors.fill: parent.contentItem
|
||||
width: AssistantAbstractViewStyle.content.width
|
||||
height: AssistantAbstractViewStyle.content.height
|
||||
|
||||
Form {
|
||||
orientation: Qt.Vertical
|
||||
width: parent.width
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('usernameLabel')
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
}
|
||||
}
|
||||
|
||||
FormGroup {
|
||||
label: qsTr('displayNameLabel')
|
||||
|
||||
TextField {
|
||||
id: displayName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('passwordLabel')
|
||||
|
||||
PasswordField {
|
||||
id: password
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('sipDomainLabel')
|
||||
|
||||
TextField {
|
||||
id: sipDomain
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('transportLabel')
|
||||
|
||||
ComboBox {
|
||||
id: transport
|
||||
model: [ 'UDP', 'TCP', 'TLS']
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('passwordLabel')
|
||||
|
||||
PasswordField {
|
||||
id: password
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('transportLabel')
|
||||
|
||||
ComboBox {
|
||||
id: transport
|
||||
model: [ 'UDP', 'TCP', 'TLS']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RequestBlock {
|
||||
id: requestBlock
|
||||
width: parent.width
|
||||
|
||||
action: (function () {
|
||||
}
|
||||
|
||||
RequestBlock {
|
||||
id: requestBlock
|
||||
width: parent.width
|
||||
|
||||
action: (function () {
|
||||
if(mainItem.showWarning) {
|
||||
mainItem.showWarning = false
|
||||
mainStack.replace(formComponent);
|
||||
requestBlock.stop('')
|
||||
}else{
|
||||
if (!assistantModel.addOtherSipAccount({
|
||||
username: username.text,
|
||||
displayName: displayName.text,
|
||||
|
|
@ -103,8 +190,8 @@ Item{
|
|||
requestBlock.stop('')
|
||||
window.setView('Home')
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
AssistantModel {
|
||||
id: assistantModel
|
||||
|
|
|
|||
|
|
@ -507,12 +507,21 @@ ColumnLayout {
|
|||
//: 'Search in messages' : this is a placeholder when searching something in the timeline list
|
||||
placeholderText: qsTr('searchMessagesPlaceholder')
|
||||
|
||||
onTextChanged: chatRoomProxyModel.filterText = text
|
||||
onTextChanged: searchDelay.restart()
|
||||
onIconClicked: {
|
||||
searchView.visible = false
|
||||
chatRoomProxyModel.filterText = ''
|
||||
}
|
||||
font.pointSize: ConversationStyle.filters.pointSize
|
||||
|
||||
Timer{
|
||||
id: searchDelay
|
||||
interval: 500
|
||||
running: false
|
||||
onTriggered: if( searchView.visible){
|
||||
chatRoomProxyModel.filterText = searchBar.text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import QtQuick.Layouts 1.3
|
|||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
import ConstantsCpp 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
|
|
@ -100,6 +101,29 @@ DialogPlus {
|
|||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
Text {
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: AboutStyle.copyrightBlock.url.pointSize
|
||||
color: AboutStyle.copyrightBlock.url.color
|
||||
linkColor: AboutStyle.copyrightBlock.url.color
|
||||
//: 'Help us translate %1' : %1 is the application name
|
||||
text: '<a href="'+ConstantsCpp.TranslationUrl+'" style="text-decoration:none;color:'+AboutStyle.copyrightBlock.url.color+'">'+qsTr('aboutTranslation').arg(applicationName)+'</a>'
|
||||
textFormat: Text.RichText
|
||||
|
||||
width: parent.width
|
||||
visible: ConstantsCpp.TranslationUrl != ''
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.NoButton
|
||||
cursorShape: parent.hoveredLink
|
||||
? Qt.PointingHandCursor
|
||||
: Qt.IBeamCursor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,11 @@ ColumnLayout {
|
|||
Layout.preferredHeight: HistoryViewStyle.bar.avatarSize
|
||||
Layout.preferredWidth: HistoryViewStyle.bar.avatarSize
|
||||
|
||||
image: peerAddress?Logic.getAvatar():null
|
||||
image: peerAddress ?
|
||||
(historyView._sipAddressObserver.contact
|
||||
? historyView._sipAddressObserver.contact
|
||||
: null)
|
||||
:null
|
||||
|
||||
presenceLevel: historyView._sipAddressObserver?Presence.getPresenceLevel(
|
||||
historyView._sipAddressObserver.presenceStatus
|
||||
|
|
|
|||
|
|
@ -224,24 +224,23 @@ TabContainer {
|
|||
}
|
||||
}
|
||||
FormLine {
|
||||
maxItemWidth: parent.width
|
||||
FormGroup {
|
||||
//: 'Check for updates' : Label switch for enabling check for updates
|
||||
label: qsTr('checkForUpdateLabel')
|
||||
maxWidth: 150
|
||||
width: 150
|
||||
Switch {
|
||||
checked: SettingsModel.checkForUpdateEnabled
|
||||
|
||||
onClicked: SettingsModel.checkForUpdateEnabled = !checked
|
||||
}
|
||||
}
|
||||
FormGroup {
|
||||
maxWidth: parent.width - 200
|
||||
width: parent.width - 200
|
||||
TextField {
|
||||
text: SettingsModel.versionCheckUrl
|
||||
|
||||
onEditingFinished: SettingsModel.versionCheckUrl = text
|
||||
|
||||
RowLayout{
|
||||
Switch {
|
||||
checked: SettingsModel.checkForUpdateEnabled
|
||||
|
||||
onClicked: SettingsModel.checkForUpdateEnabled = !checked
|
||||
}
|
||||
TextField {
|
||||
Layout.fillWidth: true
|
||||
text: SettingsModel.versionCheckUrl
|
||||
|
||||
onEditingFinished: SettingsModel.versionCheckUrl = text
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,23 @@
|
|||
pragma Singleton
|
||||
import QtQml 2.2
|
||||
|
||||
import ColorsList 1.0
|
||||
import Units 1.0
|
||||
// =============================================================================
|
||||
|
||||
QtObject {
|
||||
property QtObject checkBox: QtObject {
|
||||
property int width: 300
|
||||
}
|
||||
property string sectionName: 'UseAppSipAccount'
|
||||
property QtObject checkBox: QtObject {
|
||||
property int width: 300
|
||||
}
|
||||
property QtObject warningBlock: QtObject {
|
||||
property int spacing: 10
|
||||
property int pointSize: Units.dp * 10
|
||||
property color color: ColorsList.add(sectionName+'_description', 'g').color
|
||||
|
||||
property QtObject contactUrl: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_url', 'i').color
|
||||
property int pointSize: Units.dp * 9
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import Units 1.0
|
|||
|
||||
QtObject {
|
||||
property string sectionName: 'About'
|
||||
property int height: 225
|
||||
property int height: 255
|
||||
property int spacing: 20
|
||||
property int width: 400
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit e9ce4178eb91013d23f9aef6c080a8c9b2c978c9
|
||||
Subproject commit b9c4a6d464bcead4ad40aa652933d84c29a4194b
|
||||
Loading…
Add table
Reference in a new issue