diff --git a/App.xaml b/App.xaml index 665c6c02218fb909e5ec2a95d13ded691cb71c48..b1fd46861b4e831911ba62ad95dee2cac5816b45 100644 --- a/App.xaml +++ b/App.xaml @@ -21,45 +21,46 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:RingClientUWP" xmlns:views="using:RingClientUWP.Views" + xmlns:cnv="using:RingClientUWP.Converters" xmlns:uc="using:RingClientUWP.UserAndCustomControls"> <Application.Resources> <ResourceDictionary> <!-- converters --> - <views:BubbleBackground x:Key="_bubbleBackground_" /> - <views:BubbleHorizontalAlignement x:Key="_bubbleHorizontalAlignement_" /> - <views:boolToVisibility x:Key="_boolToVisibility_" /> - <views:MessageDateTimeString x:Key="_MessageDateTimeString_" /> - <views:MessageChainBreakToVisibility x:Key="_MessageChainBreakToVisibility_" /> - <views:MessageChainBreakToHeight x:Key="_MessageChainBreakToHeight_" /> - <views:CachedImageConverter x:Key="_CachedImageConverter_" /> - <views:NameToInitialConverter x:Key="_NameToInitialConverter_" /> - <views:NewMessageBubbleNotification x:Key="_NewMessageBubbleNotification_" /> - <views:NewMessageNotificationToNumber x:Key="_NewMessageNotificationToNumber_" /> - <views:IncomingVisibility x:Key="_IncomingVisibility_" /> - <views:OutGoingVisibility x:Key="_OutGoingVisibility_" /> - <views:HasAnActiveCall x:Key="_HasAnActiveCall_" /> - <views:HasAvatarToVisibility x:Key="_HasAvatarToVisibility_" /> - <views:AccountTypeToSourceImage x:Key="_AccountTypeToSourceImage_" /> - <views:RingAccountTypeToVisibility x:Key="_RingAccountTypeToVisibility_" /> - <views:AccountSelectedToVisibility x:Key="_AccountSelectedToVisibility_" /> - <views:CollapseEmptyString x:Key="_CollapseEmptyString_" /> - <views:ContactStatusNotification x:Key="_ContactStatusNotification_" /> - <views:uintToVisibility x:Key="_uintToVisibility_" /> - <views:OneToVisibility x:Key="_OneToVisibility_" /> - <views:PresenceStatus x:Key="_PresenceStatus_" /> - <views:MoreThanOneToVisibility x:Key="_MoreThanOneToVisibility_" /> - <views:MoreThanZeroToVisibility x:Key="_MoreThanZeroToVisibility_" /> - <views:UnreadAccountNotificationsString x:Key="_UnreadAccountNotificationsString_" /> - <views:PartialTrustToVisibility x:Key="_PartialTrustToVisibility_" /> - <views:TrustedToVisibility x:Key="_TrustedToVisibility_" /> - <views:SelectedAccountToVisibility x:Key="_SelectedAccountToVisibility_" /> - <views:CallStatusToSpinnerVisibility x:Key="_CallStatusToSpinnerVisibility_" /> - <views:CallStatusForIncomingCallEllipse x:Key="_CallStatusForIncomingCallEllipse_" /> - <views:AccountRegistrationStateToString x:Key="_AccountRegistrationStateToString_" /> - <views:AccountRegistrationStateToForeground x:Key="_AccountRegistrationStateToForeground_" /> - <views:ContactAccountTypeToVisibility x:Key="_ContactAccountTypeToVisibility_" /> - <views:ContactConferenceableToVisibility x:Key="_ContactConferenceableToVisibility_" /> + <cnv:BubbleBackground x:Key="_bubbleBackground_" /> + <cnv:BubbleHorizontalAlignement x:Key="_bubbleHorizontalAlignement_" /> + <cnv:boolToVisibility x:Key="_boolToVisibility_" /> + <cnv:MessageDateTimeString x:Key="_MessageDateTimeString_" /> + <cnv:MessageChainBreakToVisibility x:Key="_MessageChainBreakToVisibility_" /> + <cnv:MessageChainBreakToHeight x:Key="_MessageChainBreakToHeight_" /> + <cnv:CachedImageConverter x:Key="_CachedImageConverter_" /> + <cnv:NameToInitialConverter x:Key="_NameToInitialConverter_" /> + <cnv:NewMessageBubbleNotification x:Key="_NewMessageBubbleNotification_" /> + <cnv:NewMessageNotificationToNumber x:Key="_NewMessageNotificationToNumber_" /> + <cnv:IncomingVisibility x:Key="_IncomingVisibility_" /> + <cnv:OutGoingVisibility x:Key="_OutGoingVisibility_" /> + <cnv:HasAnActiveCall x:Key="_HasAnActiveCall_" /> + <cnv:HasAvatarToVisibility x:Key="_HasAvatarToVisibility_" /> + <cnv:AccountTypeToSourceImage x:Key="_AccountTypeToSourceImage_" /> + <cnv:RingAccountTypeToVisibility x:Key="_RingAccountTypeToVisibility_" /> + <cnv:AccountSelectedToVisibility x:Key="_AccountSelectedToVisibility_" /> + <cnv:CollapseEmptyString x:Key="_CollapseEmptyString_" /> + <cnv:ContactStatusNotification x:Key="_ContactStatusNotification_" /> + <cnv:uintToVisibility x:Key="_uintToVisibility_" /> + <cnv:OneToVisibility x:Key="_OneToVisibility_" /> + <cnv:PresenceStatus x:Key="_PresenceStatus_" /> + <cnv:MoreThanOneToVisibility x:Key="_MoreThanOneToVisibility_" /> + <cnv:MoreThanZeroToVisibility x:Key="_MoreThanZeroToVisibility_" /> + <cnv:UnreadAccountNotificationsString x:Key="_UnreadAccountNotificationsString_" /> + <cnv:PartialTrustToVisibility x:Key="_PartialTrustToVisibility_" /> + <cnv:TrustedToVisibility x:Key="_TrustedToVisibility_" /> + <cnv:SelectedAccountToVisibility x:Key="_SelectedAccountToVisibility_" /> + <cnv:CallStatusToSpinnerVisibility x:Key="_CallStatusToSpinnerVisibility_" /> + <cnv:CallStatusForIncomingCallEllipse x:Key="_CallStatusForIncomingCallEllipse_" /> + <cnv:AccountRegistrationStateToString x:Key="_AccountRegistrationStateToString_" /> + <cnv:AccountRegistrationStateToForeground x:Key="_AccountRegistrationStateToForeground_" /> + <cnv:ContactAccountTypeToVisibility x:Key="_ContactAccountTypeToVisibility_" /> + <cnv:ContactConferenceableToVisibility x:Key="_ContactConferenceableToVisibility_" /> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="ms-appx:///Styles.xaml"/> diff --git a/Converters.cpp b/Converters.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f39710d02fcca601f3a410ad37b983e4b9c2fed8 --- /dev/null +++ b/Converters.cpp @@ -0,0 +1,506 @@ +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com> * +* Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com> * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 3 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program. If not, see <http://www.gnu.org/licenses/>. * +**************************************************************************/ + +#include "pch.h" +#include "Converters.h" + +using namespace RingClientUWP; +using namespace Converters; +using namespace ViewModel; + +Object^ +BubbleBackground::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto c1 = Utils::ColorFromString("#ffebefef"); + auto c2 = Utils::ColorFromString("#ffcfebf5"); + return ((bool)value) ? ref new SolidColorBrush(c1) : ref new SolidColorBrush(c2); +} + +Object^ +BubbleHorizontalAlignement::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + return ((bool)value) ? Windows::UI::Xaml::HorizontalAlignment::Left : Windows::UI::Xaml::HorizontalAlignment::Right; +} + +Object^ +IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto state = static_cast<CallStatus>(value); + + if (state == CallStatus::INCOMING_RINGING) + return Windows::UI::Xaml::Visibility::Visible; + else + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +OutGoingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto state = static_cast<CallStatus>(value); + + if (state == CallStatus::SEARCHING + || state == CallStatus::OUTGOING_RINGING + || state == CallStatus::OUTGOING_REQUESTED) + return Windows::UI::Xaml::Visibility::Visible; + else + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +HasAnActiveCall::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto state = static_cast<CallStatus>(value); + + if (state == CallStatus::NONE || state == CallStatus::ENDED) + return Windows::UI::Xaml::Visibility::Collapsed; + else + return Windows::UI::Xaml::Visibility::Visible; +} + +Object^ +NewMessageBubbleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto unreadMessages = static_cast<uint32>(value); + + if (unreadMessages > 0) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +NewMessageNotificationToNumber::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto unreadMessages = static_cast<uint32>(value); + + if (unreadMessages > 9) + return "9+"; + + return unreadMessages.ToString(); +} + +Object^ +AccountTypeToSourceImage::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto accountType = dynamic_cast<String^>(value); + Uri^ uri = (accountType == "RING") + ? ref new Uri("ms-appx:///Assets/AccountTypeRING.png") + : ref new Uri("ms-appx:///Assets/AccountTypeSIP.png"); + + return ref new BitmapImage(uri); +} + +Object^ +RingAccountTypeToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if (dynamic_cast<String^>(value) == "RING") + return VIS::Visible; + return VIS::Collapsed; +} + +Object^ +AccountSelectedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if ((bool)value == true) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +CollapseEmptyString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto stringValue = dynamic_cast<String^>(value); + + return (stringValue->IsEmpty()) + ? Windows::UI::Xaml::Visibility::Collapsed + : Windows::UI::Xaml::Visibility::Visible; +} + +Object^ +ContactStatusNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto contactStatus = static_cast<ContactStatus>(value); + + if (contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) + return Windows::UI::Xaml::Visibility::Visible; + else + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +boolToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto direction = static_cast<String^>(parameter); + Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible; + Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed; + if (static_cast<bool>(value)) + return if_true; + return if_false; +} + +Object^ +uintToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if (static_cast<unsigned>(value)) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +OneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if (static_cast<unsigned>(value) == 1) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +UnreadAccountNotificationsString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto account = static_cast<Account^>(value); + String^ notificationString; + std::string notification_string; + std::string description; + if (static_cast<String^>(parameter) == "Summary") { + notification_string = std::to_string(account->_unreadMessages + account->_unreadContactRequests); + } + else { + if (account->_unreadMessages) { + description = account->_unreadMessages == 1 ? " Message" : " Messages"; + notification_string.append(std::to_string(account->_unreadMessages) + description); + } + if (account->_unreadContactRequests) { + if (account->_unreadMessages) + notification_string.append(", "); + description = account->_unreadContactRequests == 1 ? " Contact request" : " Contact requests"; + notification_string.append(std::to_string(account->_unreadContactRequests) + description); + } + } + return Utils::toPlatformString(notification_string); +} + +Object^ +MoreThanOneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if (static_cast<unsigned>(value) > 1) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +MoreThanZeroToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if (static_cast<unsigned>(value) > 0) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +PartialTrustToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto direction = static_cast<String^>(parameter); + Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible; + Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed; + if (static_cast<TrustStatus>(value) == TrustStatus::CONTACT_REQUEST_SENT) + return if_true; + return if_false; +} + +Object^ +TrustedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + if (static_cast<Contact^>(value)->_isTrusted) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +SelectedAccountToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto contact = static_cast<Contact^>(value); + auto callStatus = SmartPanelItemsViewModel::instance->findItem(contact)->_callStatus; + auto isCall = (callStatus != CallStatus::NONE && callStatus != CallStatus::ENDED) ? true : false; + + if (contact->_accountIdAssociated == AccountListItemsViewModel::instance->getSelectedAccountId() || isCall) + return Windows::UI::Xaml::Visibility::Visible; + + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +CallStatusToSpinnerVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto callStatus = static_cast<CallStatus>(value); + + if (callStatus == CallStatus::INCOMING_RINGING + || callStatus == CallStatus::OUTGOING_REQUESTED + || callStatus == CallStatus::OUTGOING_RINGING + || callStatus == CallStatus::SEARCHING) + return Windows::UI::Xaml::Visibility::Visible; + else + return Windows::UI::Xaml::Visibility::Collapsed; +} + +Object^ +CallStatusForIncomingCallEllipse::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) +{ + auto direction = static_cast<String^>(parameter); + Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible; + Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed; + + auto callStatus = static_cast<CallStatus>(value); + + if (callStatus == CallStatus::INCOMING_RINGING) { + return if_true; + } + else { + return if_false; + } +} + +Object^ +ContactAccountTypeToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto contact = static_cast<Contact^>(value); + auto parameterString = static_cast<String^>(parameter); + auto associatedAccount = AccountsViewModel::instance->findItem(contact->_accountIdAssociated); + if (associatedAccount->accountType_ == parameterString) + return VIS::Visible; + return VIS::Collapsed; +} + +Object^ +ContactConferenceableToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + // Hide the option until more or less fully functional + return VIS::Collapsed; + + auto contact = static_cast<Contact^>(value); + if (SmartPanelItemsViewModel::instance->isInCall()) { + auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem; + if (contact != selectedItem->_contact) { + return VIS::Visible; + } + } + return VIS::Collapsed; +} + +Object^ +CachedImageConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto path = static_cast<String^>(value); + if (path == nullptr) + return nullptr; + return RingClientUWP::ResourceMananger::instance->imageFromRelativePath(path); +} + +Object^ +NameToInitialConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto name = static_cast<String^>(value); + return Utils::getUpperInitial(name); +} + +Object^ +HasAvatarToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto contact = static_cast<Contact^>(value); + auto parameterString = static_cast<String^>(parameter); + auto positiveResult = parameterString != "Inverted" ? VIS::Visible : VIS::Collapsed; + auto negtiveResult = parameterString != "Inverted" ? VIS::Collapsed : VIS::Visible; + return contact->_avatarImage != L" " ? positiveResult : negtiveResult; +} + +Object^ +AccountRegistrationStateToString::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto account = static_cast<Account^>(value); + auto registrationState = account->_registrationState; + + if (account->accountType_ == "SIP") + return "Ready"; + + if (registrationState == RegistrationState::REGISTERED) { + return "Online"; + } + return "Offline"; +} + +Object^ +AccountRegistrationStateToForeground::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto account = static_cast<Account^>(value); + auto registrationState = account->_registrationState; + + if (registrationState == RegistrationState::REGISTERED || account->accountType_ == "SIP") { + return ref new SolidColorBrush(Utils::ColorFromString(SuccessColor)); + } + return ref new SolidColorBrush(Utils::ColorFromString(ErrorColor)); +} + +// This converter will be used to determine the visibility of the +// message bubble spikes. +Object^ +MessageChainBreakToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + if (SmartPanelItemsViewModel::instance->_selectedItem) { + auto msgIndex = static_cast<int>(value); + auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages; + + if (!messages->Size) + return VIS::Collapsed; + + auto message = messages->GetAt(msgIndex); + auto parameterString = static_cast<String^>(parameter); + + if (parameterString == "First") { + // The converter is being used to determine if this message is the first + // of a series. If it is the first message of the chain, return visible, + // otherwise, return collapsed. + bool isFirstofSequence = false; + if (messages->Size) { + if (msgIndex == 0) { + isFirstofSequence = true; + } + else { + auto previousMessage = messages->GetAt(msgIndex - 1); + if (message->FromContact != previousMessage->FromContact) + isFirstofSequence = true; + } + } + if (isFirstofSequence) + return VIS::Visible; + } + else if (parameterString == "Last") { + // The converter is being used to determine if this message is the last + // of a series. If it is the last message of the chain, return visible, + // otherwise, return collapsed. + bool isLastofSequence = false; + if (msgIndex < messages->Size) { + if (msgIndex == messages->Size - 1) { + isLastofSequence = true; + } + else { + auto nextMessage = messages->GetAt(msgIndex + 1); + if (message->FromContact != nextMessage->FromContact) + isLastofSequence = true; + } + } + if (isLastofSequence) + return VIS::Visible; + } + } + + return VIS::Collapsed; +} + +// This converter is being used to determine if this message is the last +// of a series. If it is the last message of the chain, return a positive +// GridLength otherwise, return a GridLength of 0. +Object^ +MessageChainBreakToHeight::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + if (SmartPanelItemsViewModel::instance->_selectedItem) { + auto msgIndex = static_cast<int>(value); + auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages; + if (!messages->Size) + return GridLength(0.0); + + auto message = messages->GetAt(msgIndex); + + // If this is the last message in the list, then make it visible by returning + // a positive GridLength + bool isLastofSequence = false; + if (msgIndex < messages->Size) { + if (msgIndex == messages->Size - 1) { + isLastofSequence = true; + } + else { + auto nextMessage = messages->GetAt(msgIndex + 1); + if (message->FromContact != nextMessage->FromContact) + isLastofSequence = true; + } + } + if (isLastofSequence) + return GridLength(14.0); + } + + return GridLength(0.0); +} + +Object^ +MessageDateTimeString::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + if (SmartPanelItemsViewModel::instance->_selectedItem) { + auto msgIndex = static_cast<int>(value); + auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages; + if (!messages->Size) + return "Now"; + + auto message = messages->GetAt(msgIndex); + + bool isLastofSequence = false; + if (msgIndex < messages->Size) { + if (msgIndex == messages->Size - 1) { + isLastofSequence = true; + } + else { + auto nextMessage = messages->GetAt(msgIndex + 1); + if (message->FromContact != nextMessage->FromContact) + isLastofSequence = true; + } + } + + if (message && isLastofSequence) { + auto messageDateTime = Utils::time::epochToDateTime(message->TimeReceived); + auto currentDateTime = Utils::time::currentDateTime(); + auto currentDay = Utils::time::dateTimeToString(currentDateTime, "shortdate"); + auto messageDay = Utils::time::dateTimeToString(messageDateTime, "shortdate"); + if (messageDay != currentDay) + return Utils::time::dateTimeToString(messageDateTime, "dayofweek"); + else if (Utils::time::currentTimestamp() - message->TimeReceived > 60) + return Utils::time::dateTimeToString(messageDateTime, "hour minute"); + } + } + return "Now"; +} + +Object^ +PresenceStatus::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) +{ + auto parameterString = static_cast<String^>(parameter); + auto presenceStatus = static_cast<int>(value); + + auto offlineColor = ref new SolidColorBrush(Utils::ColorFromString("#00000000")); + SolidColorBrush^ onlineColor; + + if (parameterString == "Border") { + onlineColor = ref new SolidColorBrush(Utils::ColorFromString("#ffffffff")); + } + else + onlineColor = ref new SolidColorBrush(Utils::ColorFromString(SuccessColor)); + + return presenceStatus <= 0 ? offlineColor : onlineColor; +} \ No newline at end of file diff --git a/Converters.h b/Converters.h new file mode 100644 index 0000000000000000000000000000000000000000..cf43db42dcc1cfa67011a9fb25aee8d3007bf944 --- /dev/null +++ b/Converters.h @@ -0,0 +1,280 @@ +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com> * +* Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com> * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 3 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program. If not, see <http://www.gnu.org/licenses/>. * +**************************************************************************/ +#pragma once + +using namespace Platform; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Interop; +using namespace Windows::UI::Xaml::Documents; + +#define NOTIMPLEMENTED \ + { \ + throw ref new Platform::NotImplementedException(); \ + }; \ + +namespace RingClientUWP +{ + +namespace Converters +{ + +public ref class BubbleBackground sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + BubbleBackground() {}; +}; + +public ref class BubbleHorizontalAlignement sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + BubbleHorizontalAlignement() {}; +}; + +public ref class ContactAccountTypeToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + ContactAccountTypeToVisibility() {}; +}; + +public ref class ContactConferenceableToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + ContactConferenceableToVisibility() {}; +}; + +public ref class CachedImageConverter sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + CachedImageConverter() {}; +}; + +public ref class NameToInitialConverter sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + NameToInitialConverter() {}; +}; + +public ref class HasAvatarToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + HasAvatarToVisibility() {}; +}; + +public ref class AccountRegistrationStateToString sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + AccountRegistrationStateToString() {}; +}; + +public ref class AccountRegistrationStateToForeground sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + AccountRegistrationStateToForeground() {}; +}; + +public ref class MessageChainBreakToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + MessageChainBreakToVisibility() {}; +}; + +public ref class MessageChainBreakToHeight sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + MessageChainBreakToHeight() {}; +}; + +public ref class MessageDateTimeString sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + MessageDateTimeString() {}; +}; + +public ref class IncomingVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + IncomingVisibility() {}; +}; + +public ref class PresenceStatus sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + PresenceStatus() {}; +}; + +public ref class OutGoingVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + OutGoingVisibility() {}; +}; + +public ref class HasAnActiveCall sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + HasAnActiveCall() {}; +}; + +public ref class AccountTypeToSourceImage sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + AccountTypeToSourceImage() {}; +}; + +public ref class RingAccountTypeToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + RingAccountTypeToVisibility() {}; +}; + +public ref class AccountSelectedToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + AccountSelectedToVisibility() {}; +}; + +public ref class NewMessageNotificationToNumber sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + NewMessageNotificationToNumber() {}; +}; + +public ref class NewMessageBubbleNotification sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + NewMessageBubbleNotification() {}; +}; + +public ref class CollapseEmptyString sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + CollapseEmptyString() {}; +}; + +public ref class ContactStatusNotification sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + ContactStatusNotification() {}; +}; + +public ref class boolToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + boolToVisibility() {}; +}; + +public ref class uintToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + uintToVisibility() {}; +}; + +public ref class OneToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + OneToVisibility() {}; +}; + +public ref class UnreadAccountNotificationsString sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + UnreadAccountNotificationsString() {}; +}; + +public ref class MoreThanOneToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + MoreThanOneToVisibility() {}; +}; + +public ref class MoreThanZeroToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + MoreThanZeroToVisibility() {}; +}; + +public ref class PartialTrustToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + PartialTrustToVisibility() {}; +}; + +public ref class TrustedToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + TrustedToVisibility() {}; +}; + +public ref class SelectedAccountToVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + SelectedAccountToVisibility() {}; +}; + +public ref class CallStatusToSpinnerVisibility sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + CallStatusToSpinnerVisibility() {}; +}; + +public ref class CallStatusForIncomingCallEllipse sealed : IValueConverter { +public: + virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); + virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) NOTIMPLEMENTED + CallStatusForIncomingCallEllipse() {}; +}; + +}/* using namespace Converters */ + +}/* using namespace RingClientUWP */ \ No newline at end of file diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp index fdbcd65c33e6116763a80a8964c0f37ab81f9764..0da822d57283dca192205d518da75bb4c3c8c39d 100644 --- a/MessageTextPage.xaml.cpp +++ b/MessageTextPage.xaml.cpp @@ -237,37 +237,6 @@ RingClientUWP::Views::MessageTextPage::sendMessage() } } -Object ^ RingClientUWP::Views::BubbleBackground::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto c1 = Utils::ColorFromString("#ffebefef"); - auto c2 = Utils::ColorFromString("#ffcfebf5"); - return ((bool)value) ? ref new SolidColorBrush(c1) : ref new SolidColorBrush(c2); -} - -// we only do OneWay so the next function is not used -Object ^ RingClientUWP::Views::BubbleBackground::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::BubbleBackground::BubbleBackground() -{} - -Object ^ RingClientUWP::Views::BubbleHorizontalAlignement::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - return ((bool)value) ? Windows::UI::Xaml::HorizontalAlignment::Left : Windows::UI::Xaml::HorizontalAlignment::Right; -} - -// we only do OneWay so the next function is not used -Object ^ RingClientUWP::Views::BubbleHorizontalAlignement::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::BubbleHorizontalAlignement::BubbleHorizontalAlignement() -{} - - void RingClientUWP::Views::MessageTextPage::OnincomingMessage(Platform::String ^callId, Platform::String ^payload) { scrollDown(); diff --git a/MessageTextPage.xaml.h b/MessageTextPage.xaml.h index d5e70c6b95f799603488ced8b7dbe7d3016d4aa9..6e6334de38efa3a974d6fb47c743182a3a55f597 100644 --- a/MessageTextPage.xaml.h +++ b/MessageTextPage.xaml.h @@ -28,20 +28,6 @@ delegate void CloseMessageTextPage(); namespace Views { -public ref class BubbleBackground sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language); - BubbleBackground(); -}; - -public ref class BubbleHorizontalAlignement sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language); - BubbleHorizontalAlignement(); -}; - public ref class MessageTextPage sealed { public: diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp index 667561e7ab0a19dcc58e550a9291d29eb15497e4..0ff8eaa7a76abfef570ea1db62559f812e631898 100644 --- a/SmartPanel.xaml.cpp +++ b/SmartPanel.xaml.cpp @@ -745,83 +745,8 @@ void RingClientUWP::Views::SmartPanel::showLinkThisDeviceStep1() _addAccountNo_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; } -Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto state = static_cast<CallStatus>(value); - - if (state == CallStatus::INCOMING_RINGING) - return Windows::UI::Xaml::Visibility::Visible; - else - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object ^ RingClientUWP::Views::IncomingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::IncomingVisibility::IncomingVisibility() -{} -Object ^ RingClientUWP::Views::OutGoingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto state = static_cast<CallStatus>(value); - - if (state == CallStatus::SEARCHING - || state == CallStatus::OUTGOING_RINGING - || state == CallStatus::OUTGOING_REQUESTED) - return Windows::UI::Xaml::Visibility::Visible; - else - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object ^ RingClientUWP::Views::OutGoingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::OutGoingVisibility::OutGoingVisibility() -{} - -Object ^ RingClientUWP::Views::HasAnActiveCall::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto state = static_cast<CallStatus>(value); - - if (state == CallStatus::NONE || state == CallStatus::ENDED) - return Windows::UI::Xaml::Visibility::Collapsed; - else - return Windows::UI::Xaml::Visibility::Visible; -} - -Object ^ RingClientUWP::Views::HasAnActiveCall::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::HasAnActiveCall::HasAnActiveCall() -{} - -Object ^ RingClientUWP::Views::NewMessageBubbleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto unreadMessages = static_cast<uint32>(value); - - if (unreadMessages > 0) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object ^ RingClientUWP::Views::NewMessageNotificationToNumber::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto unreadMessages = static_cast<uint32>(value); - - if (unreadMessages > 9) - return "9+"; - - return unreadMessages.ToString(); -} - void RingClientUWP::Views::SmartPanel::_addDevice__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; @@ -894,48 +819,6 @@ void RingClientUWP::Views::SmartPanel::_closePin__Click(Platform::Object^ sender _waitingAndResult_->Text = loader->GetString("_accountsWaitingAndResult_.Text"); } -Object ^ RingClientUWP::Views::AccountTypeToSourceImage::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto accountType = dynamic_cast<String^>(value); - Uri^ uri = (accountType == "RING") - ? ref new Uri("ms-appx:///Assets/AccountTypeRING.png") - : ref new Uri("ms-appx:///Assets/AccountTypeSIP.png"); - - return ref new BitmapImage(uri); -} - -Object ^ RingClientUWP::Views::RingAccountTypeToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if (dynamic_cast<String^>(value) == "RING") - return VIS::Visible; - return VIS::Collapsed; -} - -Object ^ RingClientUWP::Views::AccountTypeToSourceImage::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::AccountTypeToSourceImage::AccountTypeToSourceImage() -{} - -Object ^ RingClientUWP::Views::AccountSelectedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if ((bool)value == true) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object ^ RingClientUWP::Views::AccountSelectedToVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::AccountSelectedToVisibility::AccountSelectedToVisibility() -{} - - void RingClientUWP::Views::SmartPanel::_editAccountMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { _scrollViewerEditionMenu_->UpdateLayout(); @@ -1076,9 +959,6 @@ void RingClientUWP::Views::SmartPanel::_accountTypeComboBox__SelectionChanged(Pl } } - - - void RingClientUWP::Views::SmartPanel::_accountAliasTextBox__TextChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::TextChangedEventArgs^ e) { checkStateAddAccountMenu(); @@ -1089,24 +969,6 @@ void RingClientUWP::Views::SmartPanel::_accountAliasTextBoxEdition__TextChanged( checkStateEditionMenu(); } -Object ^ RingClientUWP::Views::CollapseEmptyString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto stringValue = dynamic_cast<String^>(value); - - return (stringValue->IsEmpty()) - ? Windows::UI::Xaml::Visibility::Collapsed - : Windows::UI::Xaml::Visibility::Visible; -} - -Object ^ RingClientUWP::Views::CollapseEmptyString::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::CollapseEmptyString::CollapseEmptyString() -{} - - void RingClientUWP::Views::SmartPanel::_selectedAccountAvatarContainer__PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e) { _photoboothIcon_->Visibility = Windows::UI::Xaml::Visibility::Visible; @@ -1658,25 +1520,6 @@ void RingClientUWP::Views::SmartPanel::OncontactDataModified(Platform::String ^a updateNotificationsState(); } -Object ^ RingClientUWP::Views::ContactStatusNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto contactStatus = static_cast<ContactStatus>(value); - - if (contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) - return Windows::UI::Xaml::Visibility::Visible; - else - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object ^ RingClientUWP::Views::ContactStatusNotification::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::ContactStatusNotification::ContactStatusNotification() -{} - - void RingClientUWP::Views::SmartPanel::selectMenu(MenuOpen menu) { /* manage the video preview */ @@ -1798,115 +1641,6 @@ SmartPanel::updateContactNotificationsState(Contact^ contact) AccountListItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyAccountItem); } -Object ^ RingClientUWP::Views::boolToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto direction = static_cast<String^>(parameter); - Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible; - Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed; - if (static_cast<bool>(value)) - return if_true; - return if_false; -} - -Object ^ RingClientUWP::Views::boolToVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -Object^ -uintToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if (static_cast<unsigned>(value)) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object^ -OneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if (static_cast<unsigned>(value) == 1) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object^ -UnreadAccountNotificationsString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto account = static_cast<Account^>(value); - String^ notificationString; - std::string notification_string; - std::string description; - if (static_cast<String^>(parameter) == "Summary") { - notification_string = std::to_string(account->_unreadMessages + account->_unreadContactRequests); - } - else { - if (account->_unreadMessages) { - description = account->_unreadMessages == 1 ? " Message" : " Messages"; - notification_string.append(std::to_string(account->_unreadMessages) + description); - } - if (account->_unreadContactRequests) { - if (account->_unreadMessages) - notification_string.append(", "); - description = account->_unreadContactRequests == 1 ? " Contact request" : " Contact requests"; - notification_string.append(std::to_string(account->_unreadContactRequests) + description); - } - } - return Utils::toPlatformString(notification_string); -} - -Object^ -MoreThanOneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if (static_cast<unsigned>(value) > 1) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object^ -MoreThanZeroToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if (static_cast<unsigned>(value) > 0) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object^ -PartialTrustToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto direction = static_cast<String^>(parameter); - Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible; - Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed; - if (static_cast<TrustStatus>(value) == TrustStatus::CONTACT_REQUEST_SENT) - return if_true; - return if_false; -} - -Object^ -TrustedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - if (static_cast<Contact^>(value)->_isTrusted) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object^ -SelectedAccountToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto contact = static_cast<Contact^>(value); - auto callStatus = SmartPanelItemsViewModel::instance->findItem(contact)->_callStatus; - auto isCall = ( callStatus != CallStatus::NONE && callStatus != CallStatus::ENDED ) ? true : false; - - if (contact->_accountIdAssociated == AccountListItemsViewModel::instance->getSelectedAccountId() || isCall) - return Windows::UI::Xaml::Visibility::Visible; - - return Windows::UI::Xaml::Visibility::Collapsed; -} - void RingClientUWP::Views::SmartPanel::OnincomingAccountMessage(Platform::String ^accountId, Platform::String ^from, Platform::String ^payload) { auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId)); @@ -1934,48 +1668,6 @@ void RingClientUWP::Views::SmartPanel::OnincomingAccountMessage(Platform::String } } -Object ^ RingClientUWP::Views::CallStatusToSpinnerVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto callStatus = static_cast<CallStatus>(value); - - if (callStatus == CallStatus::INCOMING_RINGING - || callStatus == CallStatus::OUTGOING_REQUESTED - || callStatus == CallStatus::OUTGOING_RINGING - || callStatus == CallStatus::SEARCHING) - return Windows::UI::Xaml::Visibility::Visible; - else - return Windows::UI::Xaml::Visibility::Collapsed; -} - -Object ^ RingClientUWP::Views::CallStatusToSpinnerVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - -RingClientUWP::Views::CallStatusToSpinnerVisibility::CallStatusToSpinnerVisibility() -{} - -Object ^ RingClientUWP::Views::CallStatusForIncomingCallEllipse::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - auto direction = static_cast<String^>(parameter); - Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible; - Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed; - - auto callStatus = static_cast<CallStatus>(value); - - if (callStatus == CallStatus::INCOMING_RINGING) { - return if_true; - } - else { - return if_false; - } -} - -Object ^ RingClientUWP::Views::CallStatusForIncomingCallEllipse::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language) -{ - throw ref new Platform::NotImplementedException(); -} - void SmartPanel::addToContactList(String^ name) { @@ -2283,230 +1975,6 @@ SmartPanel::OnnewBuddyNotification(const std::string& accountId, const std::stri } } -Object^ -ContactAccountTypeToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto contact = static_cast<Contact^>(value); - auto parameterString = static_cast<String^>(parameter); - auto associatedAccount = AccountsViewModel::instance->findItem(contact->_accountIdAssociated); - if (associatedAccount->accountType_ == parameterString) - return VIS::Visible; - return VIS::Collapsed; -} - -Object^ -ContactConferenceableToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - // Hide the option until more or less fully functional - return VIS::Collapsed; - - auto contact = static_cast<Contact^>(value); - if (SmartPanelItemsViewModel::instance->isInCall()) { - auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem; - if (contact != selectedItem->_contact) { - return VIS::Visible; - } - } - return VIS::Collapsed; -} - -Object^ -CachedImageConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto path = static_cast<String^>(value); - if (path == nullptr) - return nullptr; - return RingClientUWP::ResourceMananger::instance->imageFromRelativePath(path); -} - -Object^ -NameToInitialConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto name = static_cast<String^>(value); - return Utils::getUpperInitial(name); -} - -Object^ -HasAvatarToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto contact = static_cast<Contact^>(value); - auto parameterString = static_cast<String^>(parameter); - auto positiveResult = parameterString != "Inverted" ? VIS::Visible : VIS::Collapsed; - auto negtiveResult = parameterString != "Inverted" ? VIS::Collapsed : VIS::Visible; - return contact->_avatarImage != L" " ? positiveResult : negtiveResult; -} - -Object^ -AccountRegistrationStateToString::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto account = static_cast<Account^>(value); - auto registrationState = account->_registrationState; - - if (account->accountType_ == "SIP") - return "Ready"; - - if (registrationState == RegistrationState::REGISTERED) { - return "Online"; - } - return "Offline"; -} - -Object^ -AccountRegistrationStateToForeground::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto account = static_cast<Account^>(value); - auto registrationState = account->_registrationState; - - if (registrationState == RegistrationState::REGISTERED || account->accountType_ == "SIP") { - return ref new SolidColorBrush(Utils::ColorFromString(SuccessColor)); - } - return ref new SolidColorBrush(Utils::ColorFromString(ErrorColor)); -} - -// This converter will be used to determine the visibility of the -// message bubble spikes. -Object^ -MessageChainBreakToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - if (SmartPanelItemsViewModel::instance->_selectedItem) { - auto msgIndex = static_cast<int>(value); - auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages; - - if (!messages->Size) - return VIS::Collapsed; - - auto message = messages->GetAt(msgIndex); - auto parameterString = static_cast<String^>(parameter); - - if (parameterString == "First") { - // The converter is being used to determine if this message is the first - // of a series. If it is the first message of the chain, return visible, - // otherwise, return collapsed. - bool isFirstofSequence = false; - if (messages->Size) { - if (msgIndex == 0) { - isFirstofSequence = true; - } - else { - auto previousMessage = messages->GetAt(msgIndex - 1); - if (message->FromContact != previousMessage->FromContact) - isFirstofSequence = true; - } - } - if (isFirstofSequence) - return VIS::Visible; - } - else if (parameterString == "Last") { - // The converter is being used to determine if this message is the last - // of a series. If it is the last message of the chain, return visible, - // otherwise, return collapsed. - bool isLastofSequence = false; - if (msgIndex < messages->Size) { - if (msgIndex == messages->Size - 1) { - isLastofSequence = true; - } - else { - auto nextMessage = messages->GetAt(msgIndex + 1); - if (message->FromContact != nextMessage->FromContact) - isLastofSequence = true; - } - } - if (isLastofSequence) - return VIS::Visible; - } - } - - return VIS::Collapsed; -} - -// This converter is being used to determine if this message is the last -// of a series. If it is the last message of the chain, return a positive -// GridLength otherwise, return a GridLength of 0. -Object^ -MessageChainBreakToHeight::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - if (SmartPanelItemsViewModel::instance->_selectedItem) { - auto msgIndex = static_cast<int>(value); - auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages; - if (!messages->Size) - return GridLength(0.0); - - auto message = messages->GetAt(msgIndex); - - // If this is the last message in the list, then make it visible by returning - // a positive GridLength - bool isLastofSequence = false; - if (msgIndex < messages->Size) { - if (msgIndex == messages->Size - 1) { - isLastofSequence = true; - } - else { - auto nextMessage = messages->GetAt(msgIndex + 1); - if (message->FromContact != nextMessage->FromContact) - isLastofSequence = true; - } - } - if (isLastofSequence) - return GridLength(14.0); - } - - return GridLength(0.0); -} - -Object^ -MessageDateTimeString::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - if (SmartPanelItemsViewModel::instance->_selectedItem) { - auto msgIndex = static_cast<int>(value); - auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages; - if (!messages->Size) - return "Now"; - - auto message = messages->GetAt(msgIndex); - - bool isLastofSequence = false; - if (msgIndex < messages->Size) { - if (msgIndex == messages->Size - 1) { - isLastofSequence = true; - } - else { - auto nextMessage = messages->GetAt(msgIndex + 1); - if (message->FromContact != nextMessage->FromContact) - isLastofSequence = true; - } - } - - if (message && isLastofSequence) { - auto messageDateTime = Utils::time::epochToDateTime(message->TimeReceived); - auto currentDateTime = Utils::time::currentDateTime(); - auto currentDay = Utils::time::dateTimeToString(currentDateTime, "shortdate"); - auto messageDay = Utils::time::dateTimeToString(messageDateTime, "shortdate"); - if (messageDay != currentDay) - return Utils::time::dateTimeToString(messageDateTime, "dayofweek"); - else if (Utils::time::currentTimestamp() - message->TimeReceived > 60) - return Utils::time::dateTimeToString(messageDateTime, "hour minute"); - } - } - return "Now"; -} - -Object^ -PresenceStatus::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language) -{ - auto parameterString = static_cast<String^>(parameter); - auto presenceStatus = static_cast<int>(value); - - auto offlineColor = ref new SolidColorBrush(Utils::ColorFromString("#00000000")); - SolidColorBrush^ onlineColor; - - if (parameterString == "Border") { - onlineColor = ref new SolidColorBrush(Utils::ColorFromString("#ffffffff")); - } - else - onlineColor = ref new SolidColorBrush(Utils::ColorFromString(SuccessColor)); - - return presenceStatus <= 0 ? offlineColor : onlineColor; -} void SmartPanel::_smartList__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h index 83f3e7394d9c1924a96e25790e53080e8715ff5c..16385435a526707ccf2edda3da21535f08c8eb03 100644 --- a/SmartPanel.xaml.h +++ b/SmartPanel.xaml.h @@ -41,275 +41,6 @@ delegate void HidePreviewPage(); namespace Views { -public ref class ContactAccountTypeToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - ContactAccountTypeToVisibility() {}; -}; - -public ref class ContactConferenceableToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - ContactConferenceableToVisibility() {}; -}; - -public ref class CachedImageConverter sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - CachedImageConverter() {}; -}; - -public ref class NameToInitialConverter sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - NameToInitialConverter() {}; -}; - -public ref class HasAvatarToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - HasAvatarToVisibility() {}; -}; - -public ref class AccountRegistrationStateToString sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - AccountRegistrationStateToString() {}; -}; - -public ref class AccountRegistrationStateToForeground sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - AccountRegistrationStateToForeground() {}; -}; - -public ref class MessageChainBreakToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - MessageChainBreakToVisibility() {}; -}; - -public ref class MessageChainBreakToHeight sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - MessageChainBreakToHeight() {}; -}; - -public ref class MessageDateTimeString sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - MessageDateTimeString() {}; -}; - -public ref class IncomingVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - IncomingVisibility(); -}; - -public ref class PresenceStatus sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - PresenceStatus() {}; -}; - -public ref class OutGoingVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - OutGoingVisibility(); -}; - -public ref class HasAnActiveCall sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - HasAnActiveCall(); -}; - -public ref class AccountTypeToSourceImage sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - AccountTypeToSourceImage(); -}; - -public ref class RingAccountTypeToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - } - RingAccountTypeToVisibility() {}; -}; - -public ref class AccountSelectedToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - AccountSelectedToVisibility(); -}; - -public ref class NewMessageNotificationToNumber sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - NewMessageNotificationToNumber() {}; -}; - -public ref class NewMessageBubbleNotification sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - NewMessageBubbleNotification() {}; -}; - -public ref class CollapseEmptyString sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - CollapseEmptyString(); -}; - -public ref class ContactStatusNotification sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - ContactStatusNotification(); -}; - -public ref class boolToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - boolToVisibility() {}; -}; - -public ref class uintToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - uintToVisibility() {}; -}; - -public ref class OneToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - OneToVisibility() {}; -}; - -public ref class UnreadAccountNotificationsString sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - UnreadAccountNotificationsString() {}; -}; - -public ref class MoreThanOneToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - MoreThanOneToVisibility() {}; -}; - -public ref class MoreThanZeroToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - MoreThanZeroToVisibility() {}; -}; - -public ref class PartialTrustToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - PartialTrustToVisibility() {}; -}; - -public ref class TrustedToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - TrustedToVisibility() {}; -}; - -public ref class SelectedAccountToVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language) { - return nullptr; - }; - SelectedAccountToVisibility() {}; -}; - -public ref class CallStatusToSpinnerVisibility sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - CallStatusToSpinnerVisibility(); -}; - -public ref class CallStatusForIncomingCallEllipse sealed : IValueConverter { -public: - virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language); - virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language); - CallStatusForIncomingCallEllipse() {}; -}; - - public ref class SmartPanel sealed { public: diff --git a/pch.h b/pch.h index 777e3f335c2071a2a2f9cadc1fdfd07203ec3260..f30cab704d587d27593a48695cf9129a64d5a93e 100644 --- a/pch.h +++ b/pch.h @@ -56,6 +56,7 @@ #include "UserPreferences.h" #include "VCardUtils.h" #include "ResourceManager.h" +#include "Converters.h" /* video */ #include "Video.h" diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj index 3aff976789688fefa8134a08a804543ee13f618c..38cf3c0bb524e0a68ad8abef83095b7dadc2dda0 100644 --- a/ring-client-uwp.vcxproj +++ b/ring-client-uwp.vcxproj @@ -182,6 +182,7 @@ <ClInclude Include="ContactRequestItemsViewModel.h" /> <ClInclude Include="ContactListModel.h" /> <ClInclude Include="Conversation.h" /> + <ClInclude Include="Converters.h" /> <ClInclude Include="HttpUtils.h" /> <ClInclude Include="RingDevice.h" /> <ClInclude Include="RingDeviceItemsViewModel.h" /> @@ -195,7 +196,7 @@ <DependentUpon>MessageTextPage.xaml</DependentUpon> </ClInclude> <ClInclude Include="pch.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild> </ClInclude> <ClInclude Include="App.xaml.h"> <DependentUpon>App.xaml</DependentUpon> @@ -367,6 +368,7 @@ <ClCompile Include="ContactRequestItemsViewModel.cpp" /> <ClCompile Include="ContactListModel.cpp" /> <ClCompile Include="Conversation.cpp" /> + <ClCompile Include="Converters.cpp" /> <ClCompile Include="RingDeviceItemsViewModel.cpp" /> <ClCompile Include="RingDeviceItem.cpp" /> <ClCompile Include="LoadingPage.xaml.cpp"> diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters index d3a39c659d06bb0cc98d4b7fefd6cd398c74992c..c291cd01c59546a90b9309b844871766ecf3d841 100644 --- a/ring-client-uwp.vcxproj.filters +++ b/ring-client-uwp.vcxproj.filters @@ -94,6 +94,9 @@ <ClCompile Include="RingDeviceItem.cpp"> <Filter>Controls</Filter> </ClCompile> + <ClCompile Include="Converters.cpp"> + <Filter>Common</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="LoadingPage.xaml.h" /> @@ -202,6 +205,9 @@ <ClInclude Include="HttpUtils.h"> <Filter>Common</Filter> </ClInclude> + <ClInclude Include="Converters.h"> + <Filter>Common</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="Assets\AccountTypeRING.png">