mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-24 07:08:07 +00:00
feat(Notifications): REEEEEEFACTORING. (And supports snapshot notification.)
This commit is contained in:
parent
ed53593e34
commit
63ea842fec
19 changed files with 311 additions and 280 deletions
13
assets/images/snapshot_sign.svg
Normal file
13
assets/images/snapshot_sign.svg
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>download_ended</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="download_ended">
|
||||
<polygon id="call_pausing_sign" fill="#4B5964" points="0 0 40 0 0 40"></polygon>
|
||||
<path d="M15.8862711,16.7118816 C15.8848622,18.47124 14.366077,19.9160243 12.4971822,19.9365977 C10.627583,19.9538529 9.11372887,18.5402605 9.1158422,16.7815657 L9.1158422,7.21360248 C9.1158422,6.03892711 10.1302442,5.0752951 11.3771133,5.06334925 C12.6225736,5.05007608 13.6292267,5.9911437 13.6292267,7.16648273 L13.6292267,16.7351096 C13.6292267,17.3224473 13.1206168,17.8022723 12.4978867,17.8095726 C11.8751565,17.8162091 11.3735911,17.3456753 11.3721822,16.7570103 L11.3721822,8.2535552 L10.24366,8.26417373 L10.24366,16.7682925 C10.24366,17.9429679 11.2524264,18.8846992 12.5,18.8727533 C13.7447558,18.8594801 14.75634,17.8978391 14.7577489,16.7244911 L14.7577489,7.15520054 C14.7598622,5.39584211 13.2460081,3.98224971 11.3757044,4.00016849 C9.50751409,4.02007824 8.00281778,5.46287161 8,7.2228937 L8,17.3231109 C8.27402943,19.4169532 10.1957577,21.0216792 12.4950689,20.9997785 C14.7971979,20.9752231 16.7217439,19.3333322 17,17.2321897 L17,6.07741929 L15.8862711,6.07741929 L15.8862711,16.7118816 Z" id="attachment_default" fill="#FFFFFF" transform="translate(12.500000, 12.500000) rotate(-315.000000) translate(-12.500000, -12.500000) "></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -170,6 +170,7 @@
|
|||
<file>assets/images/settings_sip_accounts_selected.svg</file>
|
||||
<file>assets/images/settings_video_normal.svg</file>
|
||||
<file>assets/images/settings_video_selected.svg</file>
|
||||
<file>assets/images/snapshot_sign.svg</file>
|
||||
<file>assets/images/speaker_off_hovered.svg</file>
|
||||
<file>assets/images/speaker_off_normal.svg</file>
|
||||
<file>assets/images/speaker_off_pressed.svg</file>
|
||||
|
|
@ -326,11 +327,13 @@
|
|||
<file>ui/modules/Linphone/Contact/Contact.qml</file>
|
||||
<file>ui/modules/Linphone/Contact/MessagesCounter.qml</file>
|
||||
<file>ui/modules/Linphone/Menus/SipAddressesMenu.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/NotificationBasic.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/NotificationNewVersionAvailable.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/Notification.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/NotificationReceivedCall.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/NotificationReceivedFileMessage.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/NotificationReceivedMessage.qml</file>
|
||||
<file>ui/modules/Linphone/Notifications/NotificationSnapshotWasTaken.qml</file>
|
||||
<file>ui/modules/Linphone/Presence/PresenceLevel.qml</file>
|
||||
<file>ui/modules/Linphone/qmldir</file>
|
||||
<file>ui/modules/Linphone/SmartSearchBar/SmartSearchBar.qml</file>
|
||||
|
|
@ -348,10 +351,11 @@
|
|||
<file>ui/modules/Linphone/Styles/Contact/ContactStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Contact/MessagesCounterStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Menus/SipAddressesMenuStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Notifications/NotificationNewVersionAvailableStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Notifications/NotificationBasicStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Notifications/NotificationReceivedCallStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Notifications/NotificationReceivedFileMessageStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Notifications/NotificationReceivedMessageStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Notifications/NotificationStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/qmldir</file>
|
||||
<file>ui/modules/Linphone/Styles/TelKeypad/TelKeypadStyle.qml</file>
|
||||
<file>ui/modules/Linphone/Styles/Timeline/TimelineStyle.qml</file>
|
||||
|
|
|
|||
|
|
@ -185,11 +185,9 @@ void CallModel::takeSnapshot () {
|
|||
|
||||
qInfo() << QStringLiteral("Take snapshot of call:") << this;
|
||||
|
||||
mCall->takeVideoSnapshot(
|
||||
::Utils::appStringToCoreString(
|
||||
CoreManager::getInstance()->getSettingsModel()->getSavedScreenshotsFolder() + newName
|
||||
)
|
||||
);
|
||||
const QString filePath = CoreManager::getInstance()->getSettingsModel()->getSavedScreenshotsFolder() + newName;
|
||||
mCall->takeVideoSnapshot(::Utils::appStringToCoreString(filePath));
|
||||
App::getInstance()->getNotifier()->notifySnapshotWasTaken(filePath);
|
||||
}
|
||||
|
||||
void CallModel::startRecording () {
|
||||
|
|
|
|||
|
|
@ -75,30 +75,27 @@ void setProperty (QObject &object, const char *property, const T &value) {
|
|||
// =============================================================================
|
||||
|
||||
const QHash<int, Notifier::Notification> Notifier::mNotifications = {
|
||||
{ Notifier::ReceivedMessage, { "NotificationReceivedMessage.qml", 10000 } },
|
||||
{ Notifier::ReceivedFileMessage, { "NotificationReceivedFileMessage.qml", 10000 } },
|
||||
{ Notifier::ReceivedCall, { "NotificationReceivedCall.qml", 30000 } },
|
||||
{ Notifier::NewVersionAvailable, { "NotificationNewVersionAvailable.qml", 30000 } }
|
||||
{ Notifier::ReceivedMessage, { "NotificationReceivedMessage.qml", 10 } },
|
||||
{ Notifier::ReceivedFileMessage, { "NotificationReceivedFileMessage.qml", 10 } },
|
||||
{ Notifier::ReceivedCall, { "NotificationReceivedCall.qml", 30 } },
|
||||
{ Notifier::NewVersionAvailable, { "NotificationNewVersionAvailable.qml", 30 } },
|
||||
{ Notifier::SnapshotWasTaken, { "NotificationSnapshotWasTaken.qml", 10 } }
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
Notifier::Notifier (QObject *parent) : QObject(parent) {
|
||||
// Build components.
|
||||
const int nComponents = mNotifications.size();
|
||||
mComponents = new QQmlComponent *[nComponents];
|
||||
|
||||
QQmlEngine *engine = App::getInstance()->getEngine();
|
||||
for (const auto &key : mNotifications.keys())
|
||||
mComponents[key] = new QQmlComponent(engine, QUrl(NOTIFICATIONS_PATH + Notifier::mNotifications[key].filename));
|
||||
|
||||
// Check errors.
|
||||
for (int i = 0; i < nComponents; ++i) {
|
||||
QQmlComponent *component = mComponents[i];
|
||||
if (component->isError()) {
|
||||
qWarning() << QStringLiteral("Errors found in `Notification` component %1:").arg(i) << component->errors();
|
||||
for (const auto &key : mNotifications.keys()) {
|
||||
QQmlComponent *component = new QQmlComponent(engine, QUrl(NOTIFICATIONS_PATH + Notifier::mNotifications[key].filename));
|
||||
if (Q_UNLIKELY(component->isError())) {
|
||||
qWarning() << QStringLiteral("Errors found in `Notification` component %1:").arg(key) << component->errors();
|
||||
abort();
|
||||
}
|
||||
mComponents[key] = component;
|
||||
}
|
||||
|
||||
mMutex = new QMutex();
|
||||
|
|
@ -217,7 +214,7 @@ void Notifier::deleteNotification (QVariant notification) {
|
|||
QObject * notification = createNotification(TYPE); \
|
||||
if (!notification) \
|
||||
return; \
|
||||
const int timeout = mNotifications[TYPE].timeout;
|
||||
const int timeout = mNotifications[TYPE].timeout * 1000;
|
||||
|
||||
#define SHOW_NOTIFICATION(DATA) \
|
||||
::setProperty(*notification, NOTIFICATION_PROPERTY_DATA, DATA); \
|
||||
|
|
@ -277,5 +274,14 @@ void Notifier::notifyNewVersionAvailable (const QString &version, const QString
|
|||
SHOW_NOTIFICATION(map);
|
||||
}
|
||||
|
||||
void Notifier::notifySnapshotWasTaken (const QString &filePath) {
|
||||
CREATE_NOTIFICATION(Notifier::SnapshotWasTaken);
|
||||
|
||||
QVariantMap map;
|
||||
map["filePath"] = filePath;
|
||||
|
||||
SHOW_NOTIFICATION(map);
|
||||
}
|
||||
|
||||
#undef SHOW_NOTIFICATION
|
||||
#undef CREATE_NOTIFICATION
|
||||
|
|
|
|||
|
|
@ -42,13 +42,15 @@ public:
|
|||
ReceivedMessage,
|
||||
ReceivedFileMessage,
|
||||
ReceivedCall,
|
||||
NewVersionAvailable
|
||||
NewVersionAvailable,
|
||||
SnapshotWasTaken
|
||||
};
|
||||
|
||||
void notifyReceivedMessage (const std::shared_ptr<linphone::ChatMessage> &message);
|
||||
void notifyReceivedFileMessage (const std::shared_ptr<linphone::ChatMessage> &message);
|
||||
void notifyReceivedCall (const std::shared_ptr<linphone::Call> &call);
|
||||
void notifyNewVersionAvailable (const QString &version, const QString &url);
|
||||
void notifySnapshotWasTaken (const QString &filePath);
|
||||
|
||||
public slots:
|
||||
void deleteNotification (QVariant notification);
|
||||
|
|
|
|||
|
|
@ -1,13 +1,17 @@
|
|||
import QtQuick 2.7
|
||||
|
||||
import Common 1.0
|
||||
import Linphone.Styles 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
DesktopPopup {
|
||||
id: notification
|
||||
|
||||
property alias icon: iconSign.icon
|
||||
property var notificationData: ({})
|
||||
property int overrodeHeight
|
||||
default property alias _content: content.data
|
||||
|
||||
signal deleteNotification (var notification)
|
||||
|
||||
|
|
@ -23,4 +27,32 @@ DesktopPopup {
|
|||
return (Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) |
|
||||
(Qt.platform.os === 'osx' ? Qt.Window : Qt.Popup)
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
color: NotificationStyle.color
|
||||
height: overrodeHeight || NotificationStyle.height
|
||||
width: NotificationStyle.width
|
||||
|
||||
border {
|
||||
color: NotificationStyle.border.color
|
||||
width: NotificationStyle.border.width
|
||||
}
|
||||
|
||||
Item {
|
||||
id: content
|
||||
|
||||
anchors.fill: parent
|
||||
}
|
||||
Icon {
|
||||
id: iconSign
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
}
|
||||
|
||||
iconSize: NotificationStyle.iconSize
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
45
ui/modules/Linphone/Notifications/NotificationBasic.qml
Normal file
45
ui/modules/Linphone/Notifications/NotificationBasic.qml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import QtQuick 2.7
|
||||
|
||||
import Common 1.0
|
||||
import Linphone.Styles 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
Notification {
|
||||
id: notification
|
||||
|
||||
property string message
|
||||
property var handler: (function () {})
|
||||
|
||||
overrodeHeight: NotificationBasicStyle.overrodeHeight
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Loader {
|
||||
active: Boolean(notification.message)
|
||||
anchors {
|
||||
fill: parent
|
||||
|
||||
leftMargin: NotificationBasicStyle.leftMargin
|
||||
rightMargin: NotificationBasicStyle.rightMargin
|
||||
}
|
||||
|
||||
sourceComponent: Text {
|
||||
anchors.fill: parent
|
||||
|
||||
color: NotificationBasicStyle.message.color
|
||||
font.pointSize: NotificationBasicStyle.message.pointSize
|
||||
text: notification.message
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.Wrap
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: notification._close(notification.handler)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,61 +1,7 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
import Linphone.Styles 1.0
|
||||
import Utils 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
Notification {
|
||||
id: notification
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Rectangle {
|
||||
color: NotificationNewVersionAvailableStyle.color
|
||||
height: NotificationNewVersionAvailableStyle.height
|
||||
width: NotificationNewVersionAvailableStyle.width
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
}
|
||||
|
||||
icon: 'update_sign'
|
||||
iconSize: NotificationNewVersionAvailableStyle.iconSize
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: notificationData.url.length > 0
|
||||
anchors {
|
||||
fill: parent
|
||||
|
||||
leftMargin: NotificationNewVersionAvailableStyle.leftMargin
|
||||
rightMargin: NotificationNewVersionAvailableStyle.rightMargin
|
||||
}
|
||||
|
||||
sourceComponent: Text {
|
||||
anchors.fill: parent
|
||||
|
||||
color: NotificationNewVersionAvailableStyle.message.color
|
||||
font.pointSize: NotificationNewVersionAvailableStyle.message.pointSize
|
||||
text: notificationData.message
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.Wrap
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: notification._close(function () {
|
||||
Qt.openUrlExternally(notificationData.url)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
NotificationBasic {
|
||||
icon: 'update_sign'
|
||||
message: notificationData.url
|
||||
handler: (function () {
|
||||
Qt.openUrlExternally(notificationData.url)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,87 +10,73 @@ import Linphone.Styles 1.0
|
|||
Notification {
|
||||
id: notification
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
property var _call: notificationData && notificationData.call
|
||||
icon: 'call_sign_incoming'
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Rectangle {
|
||||
color: NotificationReceivedCallStyle.color
|
||||
height: NotificationReceivedCallStyle.height
|
||||
width: NotificationReceivedCallStyle.width
|
||||
readonly property var call: notificationData && notificationData.call
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
icon: 'call_sign_incoming'
|
||||
iconSize: NotificationReceivedCallStyle.iconSize
|
||||
Loader {
|
||||
active: Boolean(notification.call)
|
||||
anchors {
|
||||
fill: parent
|
||||
|
||||
leftMargin: NotificationReceivedCallStyle.leftMargin
|
||||
rightMargin: NotificationReceivedCallStyle.rightMargin
|
||||
bottomMargin: NotificationReceivedCallStyle.bottomMargin
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: Boolean(notification._call)
|
||||
anchors {
|
||||
fill: parent
|
||||
sourceComponent: ColumnLayout {
|
||||
spacing: NotificationReceivedCallStyle.spacing
|
||||
|
||||
leftMargin: NotificationReceivedCallStyle.leftMargin
|
||||
rightMargin: NotificationReceivedCallStyle.rightMargin
|
||||
bottomMargin: NotificationReceivedCallStyle.bottomMargin
|
||||
Contact {
|
||||
Layout.fillWidth: true
|
||||
|
||||
entry: {
|
||||
var call = notification.call
|
||||
return SipAddressesModel.getSipAddressObserver(call ? call.sipAddress : '')
|
||||
}
|
||||
}
|
||||
|
||||
sourceComponent: ColumnLayout {
|
||||
spacing: NotificationReceivedCallStyle.spacing
|
||||
// ---------------------------------------------------------------------
|
||||
// Action buttons.
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
Contact {
|
||||
Layout.fillWidth: true
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
entry: {
|
||||
var call = notification._call
|
||||
return SipAddressesModel.getSipAddressObserver(call ? call.sipAddress : '')
|
||||
ActionBar {
|
||||
anchors.centerIn: parent
|
||||
iconSize: NotificationReceivedCallStyle.actionArea.iconSize
|
||||
|
||||
ActionButton {
|
||||
icon: 'video_call_accept'
|
||||
|
||||
onClicked: notification._close(notification.call.acceptWithVideo)
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon: 'call_accept'
|
||||
|
||||
onClicked: notification._close(notification.call.accept)
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Action buttons.
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
ActionBar {
|
||||
anchors.centerIn: parent
|
||||
iconSize: NotificationReceivedCallStyle.actionArea.iconSize
|
||||
|
||||
ActionButton {
|
||||
icon: 'video_call_accept'
|
||||
|
||||
onClicked: notification._close(notification._call.acceptWithVideo)
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon: 'call_accept'
|
||||
|
||||
onClicked: notification._close(notification._call.accept)
|
||||
}
|
||||
ActionBar {
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: NotificationReceivedCallStyle.actionArea.rightButtonsGroupMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
iconSize: NotificationReceivedCallStyle.actionArea.iconSize
|
||||
|
||||
ActionBar {
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: NotificationReceivedCallStyle.actionArea.rightButtonsGroupMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
iconSize: NotificationReceivedCallStyle.actionArea.iconSize
|
||||
ActionButton {
|
||||
icon: 'hangup'
|
||||
|
||||
ActionButton {
|
||||
icon: 'hangup'
|
||||
|
||||
onClicked: notification._close(notification._call.terminate)
|
||||
}
|
||||
onClicked: notification._close(notification.call.terminate)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import QtQuick 2.7
|
|||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
import Linphone.Styles 1.0
|
||||
import Utils 1.0
|
||||
|
||||
|
|
@ -11,72 +10,59 @@ import Utils 1.0
|
|||
Notification {
|
||||
id: notification
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
property string _fileUri: notificationData && notificationData.fileUri || ''
|
||||
icon: 'file_sign'
|
||||
overrodeHeight: NotificationReceivedFileMessageStyle.overrodeHeight
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Rectangle {
|
||||
color: NotificationReceivedFileMessageStyle.color
|
||||
height: NotificationReceivedFileMessageStyle.height
|
||||
width: NotificationReceivedFileMessageStyle.width
|
||||
readonly property string fileUri: notificationData && notificationData.fileUri || ''
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
icon: 'file_sign'
|
||||
iconSize: NotificationReceivedFileMessageStyle.iconSize
|
||||
Loader {
|
||||
active: Boolean(notification.fileUri)
|
||||
anchors {
|
||||
fill: parent
|
||||
|
||||
leftMargin: NotificationReceivedFileMessageStyle.leftMargin
|
||||
rightMargin: NotificationReceivedFileMessageStyle.rightMargin
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: notification._fileUri.length > 0
|
||||
anchors {
|
||||
fill: parent
|
||||
sourceComponent: RowLayout {
|
||||
anchors.fill: parent
|
||||
spacing: NotificationReceivedFileMessageStyle.spacing
|
||||
|
||||
leftMargin: NotificationReceivedFileMessageStyle.leftMargin
|
||||
rightMargin: NotificationReceivedFileMessageStyle.rightMargin
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
|
||||
color: NotificationReceivedFileMessageStyle.fileName.color
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: NotificationReceivedFileMessageStyle.fileName.pointSize
|
||||
text: Utils.basename(notification.fileUri)
|
||||
}
|
||||
|
||||
sourceComponent: RowLayout {
|
||||
anchors.fill: parent
|
||||
spacing: NotificationReceivedFileMessageStyle.spacing
|
||||
Text {
|
||||
Layout.preferredWidth: NotificationReceivedFileMessageStyle.fileSize.width
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
color: NotificationReceivedFileMessageStyle.fileSize.color
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: NotificationReceivedFileMessageStyle.fileSize.pointSize
|
||||
horizontalAlignment: Text.AlignRight
|
||||
text: Utils.formatSize(notification.notificationData.fileSize)
|
||||
}
|
||||
}
|
||||
|
||||
color: NotificationReceivedFileMessageStyle.fileName.color
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: NotificationReceivedFileMessageStyle.fileName.pointSize
|
||||
text: Utils.basename(notification._fileUri)
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: notification._close(function () {
|
||||
var uri = Utils.getUriFromSystemPath(notification.fileUri)
|
||||
if (!Qt.openUrlExternally(uri)) {
|
||||
Qt.openUrlExternally(Utils.dirname(uri))
|
||||
}
|
||||
|
||||
Text {
|
||||
Layout.preferredWidth: NotificationReceivedFileMessageStyle.fileSize.width
|
||||
|
||||
color: NotificationReceivedFileMessageStyle.fileSize.color
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: NotificationReceivedFileMessageStyle.fileSize.pointSize
|
||||
horizontalAlignment: Text.AlignRight
|
||||
text: Utils.formatSize(notification.notificationData.fileSize)
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: notification._close(function () {
|
||||
var uri = Utils.getUriFromSystemPath(notification._fileUri)
|
||||
if (!Qt.openUrlExternally(uri)) {
|
||||
Qt.openUrlExternally(Utils.dirname(uri))
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,85 +10,71 @@ import Linphone.Styles 1.0
|
|||
Notification {
|
||||
id: notification
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
property string _sipAddress: notificationData && notificationData.sipAddress || ''
|
||||
icon: 'message_sign'
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Rectangle {
|
||||
color: NotificationReceivedMessageStyle.color
|
||||
height: NotificationReceivedMessageStyle.height
|
||||
width: NotificationReceivedMessageStyle.width
|
||||
readonly property string sipAddress: notificationData && notificationData.sipAddress || ''
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
icon: 'message_sign'
|
||||
iconSize: NotificationReceivedMessageStyle.iconSize
|
||||
Loader {
|
||||
active: Boolean(notification.sipAddress)
|
||||
anchors {
|
||||
fill: parent
|
||||
|
||||
leftMargin: NotificationReceivedMessageStyle.leftMargin
|
||||
rightMargin: NotificationReceivedMessageStyle.rightMargin
|
||||
bottomMargin: NotificationReceivedMessageStyle.bottomMargin
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: notification._sipAddress.length > 0
|
||||
anchors {
|
||||
fill: parent
|
||||
sourceComponent: ColumnLayout {
|
||||
spacing: NotificationReceivedMessageStyle.spacing
|
||||
|
||||
leftMargin: NotificationReceivedMessageStyle.leftMargin
|
||||
rightMargin: NotificationReceivedMessageStyle.rightMargin
|
||||
bottomMargin: NotificationReceivedMessageStyle.bottomMargin
|
||||
Contact {
|
||||
Layout.fillWidth: true
|
||||
|
||||
entry: SipAddressesModel.getSipAddressObserver(notification.sipAddress)
|
||||
}
|
||||
|
||||
sourceComponent: ColumnLayout {
|
||||
spacing: NotificationReceivedMessageStyle.spacing
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
Contact {
|
||||
Layout.fillWidth: true
|
||||
color: NotificationReceivedMessageStyle.messageContainer.color
|
||||
radius: NotificationReceivedMessageStyle.messageContainer.radius
|
||||
|
||||
entry: SipAddressesModel.getSipAddressObserver(notification._sipAddress)
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
color: NotificationReceivedMessageStyle.messageContainer.color
|
||||
radius: NotificationReceivedMessageStyle.messageContainer.radius
|
||||
|
||||
Text {
|
||||
anchors {
|
||||
fill: parent
|
||||
margins: NotificationReceivedMessageStyle.messageContainer.margins
|
||||
}
|
||||
|
||||
color: NotificationReceivedMessageStyle.messageContainer.text.color
|
||||
elide: Text.ElideRight
|
||||
|
||||
font {
|
||||
italic: true
|
||||
pointSize: NotificationReceivedMessageStyle.messageContainer.text.pointSize
|
||||
}
|
||||
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: notification.notificationData.message
|
||||
wrapMode: Text.Wrap
|
||||
Text {
|
||||
anchors {
|
||||
fill: parent
|
||||
margins: NotificationReceivedMessageStyle.messageContainer.margins
|
||||
}
|
||||
|
||||
color: NotificationReceivedMessageStyle.messageContainer.text.color
|
||||
elide: Text.ElideRight
|
||||
|
||||
font {
|
||||
italic: true
|
||||
pointSize: NotificationReceivedMessageStyle.messageContainer.text.pointSize
|
||||
}
|
||||
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: notification.notificationData.message
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: notification._close(function () {
|
||||
notification.notificationData.window.setView('Conversation', {
|
||||
sipAddress: notification._sipAddress
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: notification._close(function () {
|
||||
notification.notificationData.window.setView('Conversation', {
|
||||
sipAddress: notification.sipAddress
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
import Utils 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
NotificationBasic {
|
||||
icon: 'snapshot_sign'
|
||||
message: notificationData.filePath
|
||||
handler: (function () {
|
||||
Qt.openUrlExternally(Utils.dirname(
|
||||
Utils.getUriFromSystemPath(notificationData.filePath)
|
||||
))
|
||||
})
|
||||
}
|
||||
|
|
@ -7,12 +7,9 @@ import Units 1.0
|
|||
// =============================================================================
|
||||
|
||||
QtObject {
|
||||
property color color: Colors.k
|
||||
property int height: 55
|
||||
property int iconSize: 40
|
||||
property int leftMargin: 30
|
||||
property int rightMargin: 15
|
||||
property int width: 300
|
||||
property int overrodeHeight: 55
|
||||
|
||||
property QtObject message: QtObject {
|
||||
property color color: Colors.h
|
||||
|
|
@ -1,16 +1,10 @@
|
|||
pragma Singleton
|
||||
import QtQml 2.2
|
||||
|
||||
import Colors 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
QtObject {
|
||||
property color color: Colors.k
|
||||
property int height: 120
|
||||
property int iconSize: 40
|
||||
property int spacing: 0
|
||||
property int width: 300
|
||||
property int bottomMargin: 15
|
||||
property int leftMargin: 15
|
||||
property int rightMargin: 15
|
||||
|
|
|
|||
|
|
@ -8,12 +8,10 @@ import Units 1.0
|
|||
|
||||
QtObject {
|
||||
property color color: Colors.k
|
||||
property int height: 55
|
||||
property int iconSize: 40
|
||||
property int leftMargin: 25
|
||||
property int overrodeHeight: 55
|
||||
property int rightMargin: 15
|
||||
property int spacing: 10
|
||||
property int width: 300
|
||||
|
||||
property QtObject fileName: QtObject {
|
||||
property color color: Colors.h
|
||||
|
|
|
|||
|
|
@ -9,12 +9,10 @@ import Units 1.0
|
|||
QtObject {
|
||||
property color color: Colors.k
|
||||
property int bottomMargin: 15
|
||||
property int iconSize: 40
|
||||
property int leftMargin: 15
|
||||
property int overrodeHeight: 55
|
||||
property int rightMargin: 15
|
||||
property int spacing: 0
|
||||
property int width: 300
|
||||
property int height: 120
|
||||
|
||||
property QtObject messageContainer: QtObject {
|
||||
property color color: Colors.m
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
pragma Singleton
|
||||
import QtQml 2.2
|
||||
|
||||
import Colors 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
QtObject {
|
||||
property color color: Colors.k
|
||||
property int height: 120
|
||||
property int iconSize: 40
|
||||
property int width: 300
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property color color: Colors.w
|
||||
property int width: 1
|
||||
}
|
||||
}
|
||||
|
|
@ -25,10 +25,11 @@ singleton MessagesCounterStyle 1.0 Contact/MessagesCounterStyle.
|
|||
|
||||
singleton SipAddressesMenuStyle 1.0 Menus/SipAddressesMenuStyle.qml
|
||||
|
||||
singleton NotificationNewVersionAvailableStyle 1.0 Notifications/NotificationNewVersionAvailableStyle.qml
|
||||
singleton NotificationBasicStyle 1.0 Notifications/NotificationBasicStyle.qml
|
||||
singleton NotificationReceivedCallStyle 1.0 Notifications/NotificationReceivedCallStyle.qml
|
||||
singleton NotificationReceivedMessageStyle 1.0 Notifications/NotificationReceivedMessageStyle.qml
|
||||
singleton NotificationReceivedFileMessageStyle 1.0 Notifications/NotificationReceivedFileMessageStyle.qml
|
||||
singleton NotificationReceivedMessageStyle 1.0 Notifications/NotificationReceivedMessageStyle.qml
|
||||
singleton NotificationStyle 1.0 Notifications/NotificationStyle.qml
|
||||
|
||||
singleton TelKeypadStyle 1.0 TelKeypad/TelKeypadStyle.qml
|
||||
|
||||
|
|
|
|||
|
|
@ -287,6 +287,10 @@ function assert (condition, message) {
|
|||
// -----------------------------------------------------------------------------
|
||||
|
||||
function basename (str) {
|
||||
if (!str) {
|
||||
return ''
|
||||
}
|
||||
|
||||
if (runOnWindows()) {
|
||||
str = str.replace(/\\/g, '/')
|
||||
}
|
||||
|
|
@ -310,6 +314,10 @@ function capitalizeFirstLetter (str) {
|
|||
// -----------------------------------------------------------------------------
|
||||
|
||||
function dirname (str) {
|
||||
if (!str) {
|
||||
return ''
|
||||
}
|
||||
|
||||
if (runOnWindows()) {
|
||||
str = str.replace(/\\/g, '/')
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue