diff --git a/Account.cpp b/Account.cpp new file mode 100644 index 0000000000000000000000000000000000000000..57e7da15b8e90db95634ff11f720ef66a14ff26f --- /dev/null +++ b/Account.cpp @@ -0,0 +1,46 @@ +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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 "Account.h" + +using namespace Windows::ApplicationModel::Core; +using namespace Platform; +using namespace Windows::UI::Core; + +using namespace RingClientUWP; + +Account::Account(String^ name, + String^ ringID) +{ + name_ = name; + ringID_ = ringID; +} + +void +Account::NotifyPropertyChanged(String^ propertyName) +{ + CoreApplicationView^ view = CoreApplication::MainView; + view->CoreWindow->Dispatcher->RunAsync( + CoreDispatcherPriority::Normal, + ref new DispatchedHandler([this, propertyName]() + { + PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName)); + + })); +} \ No newline at end of file diff --git a/Account.h b/Account.h new file mode 100644 index 0000000000000000000000000000000000000000..a3744d65d74cbef5b03f06f18f7a77657aeec9d0 --- /dev/null +++ b/Account.h @@ -0,0 +1,41 @@ +#pragma once +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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/>. * +**************************************************************************/ +using namespace Platform; +using namespace Windows::UI::Xaml::Data; + +namespace RingClientUWP +{ +public ref class Account sealed : public INotifyPropertyChanged +{ +public: + Account(String^ name, String^ ringID); + + + virtual event PropertyChangedEventHandler^ PropertyChanged; + + property String^ name_; + property String^ ringID_; + +protected: + void NotifyPropertyChanged(String^ propertyName); + + +}; +} + diff --git a/AccountsViewModel.cpp b/AccountsViewModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..80dfbd5f511ac89d49ee1f2f24cde865a7bc6da4 --- /dev/null +++ b/AccountsViewModel.cpp @@ -0,0 +1,32 @@ +/*************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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 "AccountsViewModel.h" + +using namespace RingClientUWP; +using namespace ViewModel; + +AccountsViewModel::AccountsViewModel() +{ + /* accountList_ should be filled with accounts saved on the disk */ + accountsList_ = ref new Vector<Account^>(); + + accountsList_->Append(ref new Account("Moi","jfdhfshfhsk")); + accountsList_->Append(ref new Account("SuperMan", "jfdhfshfhsk")); + accountsList_->Append(ref new Account("Travail", "jfdhfshfhsk")); +} \ No newline at end of file diff --git a/AccountsViewModel.h b/AccountsViewModel.h new file mode 100644 index 0000000000000000000000000000000000000000..4f89a7180c45d7b2bb63eb710518ecb31b4175b9 --- /dev/null +++ b/AccountsViewModel.h @@ -0,0 +1,56 @@ +#pragma once +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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/>. * +**************************************************************************/ +using namespace Platform::Collections; + +namespace RingClientUWP +{ + +namespace ViewModel { +public ref class AccountsViewModel sealed +{ +internal: + /* singleton */ + static property AccountsViewModel^ instance + { + AccountsViewModel^ get() + { + static AccountsViewModel^ instance_ = ref new AccountsViewModel(); + return instance_; + } + } + + /* functions */ + + /* properties */ + property Vector<Account^>^ accountsList + { + Vector<Account^>^ get() + { + return accountsList_; + } + } + + /* events */ + +private: + AccountsViewModel(); // singleton + Vector<Account^>^ accountsList_; +}; +} +} diff --git a/Contact.cpp b/Contact.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2377b9ce8810c95081b29e17421368edc67c662d --- /dev/null +++ b/Contact.cpp @@ -0,0 +1,46 @@ +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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 "Contact.h" + +using namespace Windows::ApplicationModel::Core; +using namespace Platform; +using namespace Windows::UI::Core; + +using namespace RingClientUWP; + +Contact::Contact(String^ name, + String^ ringID) +{ + name_ = name; + ringID_ = ringID; +} + +void +Contact::NotifyPropertyChanged(String^ propertyName) +{ + CoreApplicationView^ view = CoreApplication::MainView; + view->CoreWindow->Dispatcher->RunAsync( + CoreDispatcherPriority::Normal, + ref new DispatchedHandler([this, propertyName]() + { + PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName)); + + })); +} \ No newline at end of file diff --git a/Contact.h b/Contact.h new file mode 100644 index 0000000000000000000000000000000000000000..a68e57ba5cf1f92a31412477d69ca527085de7c0 --- /dev/null +++ b/Contact.h @@ -0,0 +1,41 @@ +#pragma once +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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/>. * +**************************************************************************/ +using namespace Platform; +using namespace Windows::UI::Xaml::Data; + +namespace RingClientUWP +{ +public ref class Contact sealed : public INotifyPropertyChanged +{ +public: + Contact(String^ name, String^ ringID); + + + virtual event PropertyChangedEventHandler^ PropertyChanged; + + property String^ name_; + property String^ ringID_; + +protected: + void NotifyPropertyChanged(String^ propertyName); + + +}; +} + diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..80f6f8f80d44611c550606a21cc31a330512ebc2 --- /dev/null +++ b/ContactsViewModel.cpp @@ -0,0 +1,72 @@ +/*************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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 "ContactsViewModel.h" + +using namespace RingClientUWP; +using namespace ViewModel; + +ContactsViewModel::ContactsViewModel() +{ + contactsList_ = ref new Vector<Contact^>(); + + contactsList_->Append(ref new Contact("Homer Simpson", "356373d4fh3d2032d2961f4cbd4e1b46")); + contactsList_->Append(ref new Contact("Marge Simpson", "b430222a5219a4cb119607f1cdae900e")); + contactsList_->Append(ref new Contact("Marilyn Manson", "9f9a25b6925b1244f863966f4e33798f")); + contactsList_->Append(ref new Contact("Jesus Christ", "d1da438329d38517d85d5a523b82ffa8")); + contactsList_->Append(ref new Contact("Vladimir Lenin", "e38943ae33c7c9cbd8c6512476927ba7")); + contactsList_->Append(ref new Contact("(de)-crypt master", "45527ef8d4d7b0ba2c3b66342ea0279a")); + contactsList_->Append(ref new Contact("some people", "784fe73c815b58233ba020e7ee766911")); + contactsList_->Append(ref new Contact("some people with a very very very very long name", "356373d4f63d2032d2961f4cbd4e1b46")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); + contactsList_->Append(ref new Contact("some people", "")); +} + +Contact^ +RingClientUWP::ViewModel::ContactsViewModel::findContactByName(String ^ name) +{ + for each (Contact^ contact in contactsList_) + if (contact->name_ == name) + return contact; + + return nullptr; +} + +Contact^ +RingClientUWP::ViewModel::ContactsViewModel::addNewContact(String^ name, String^ ringId) +{ + if (contactsList_ && !findContactByName(name)) { + Contact^ contact = ref new Contact(name, ringId); + contactsList_->Append(contact); + return contact; + } + + return nullptr; +} diff --git a/ContactsViewModel.h b/ContactsViewModel.h new file mode 100644 index 0000000000000000000000000000000000000000..b4757fd866df11ac9fb0f4e842cfce4f0c54ac48 --- /dev/null +++ b/ContactsViewModel.h @@ -0,0 +1,84 @@ +#pragma once +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: J�ger Nicolas <nicolas.jager@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/>. * +**************************************************************************/ +using namespace Platform::Collections; + +namespace RingClientUWP +{ + +delegate void NewContactSelected(Contact^ contact); +delegate void NoContactSelected(); + +namespace ViewModel { +public ref class ContactsViewModel sealed +{ +internal: + /* singleton */ + static property ContactsViewModel^ instance + { + ContactsViewModel^ get() + { + static ContactsViewModel^ instance_ = ref new ContactsViewModel(); + return instance_; + } + } + + /* functions */ + Contact^ findContactByName(String^ name); + + Contact^ addNewContact(String^ name, String^ ringId); + + /* properties */ + property Contact^ selectedContact + { + Contact^ get() + { + return currentItem_; + } + void set(Contact^ value) + { + oldItem_ = currentItem_; + currentItem_ = value; + if (value) + newContactSelected(currentItem_); + else + noContactSelected(); + } + } + + property Vector<Contact^>^ contactsList + { + Vector<Contact^>^ get() + { + return contactsList_; + } + } + + /* events */ + event NewContactSelected^ newContactSelected; + event NoContactSelected^ noContactSelected; + +private: + ContactsViewModel(); // singleton + Vector<Contact^>^ contactsList_; + Contact^ currentItem_; + Contact^ oldItem_; + +}; +} +} diff --git a/MainPage.xaml b/MainPage.xaml index 7f30376e44138b05339defb6137eb5cc568a4e5d..2fed2bc2a0c84917aedee5ccd1c0b04d0daff87a 100644 --- a/MainPage.xaml +++ b/MainPage.xaml @@ -55,7 +55,8 @@ </SplitView.Pane> <SplitView.Content> <SplitView x:Name="_innerSplitView_" - IsPaneOpen="False" + IsPaneOpen="True" + CompactPaneLength="60" DisplayMode="CompactInline"> <SplitView.Pane> <Frame x:Name="_smartPanel_"/> diff --git a/SmartPanel.xaml b/SmartPanel.xaml index cec3208ab7d409ec1e220efd8bae195430487faf..780d6a559109f35797186cc201629661cc3cae72 100644 --- a/SmartPanel.xaml +++ b/SmartPanel.xaml @@ -23,7 +23,338 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> + <Page.Resources> + <!-- template for contacts. --> + <DataTemplate x:Key="ContactTemplate" + x:DataType="local:Contact"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="60"/> + <!-- use the height of _contactBar_ to make it visible or collapsed. --> + <RowDefinition x:Name="_contactBar_" + Height="0"/> + </Grid.RowDefinitions> + <Grid Grid.Row="0"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="60"/> + <ColumnDefinition Width="*" + MinWidth="200"/> + </Grid.ColumnDefinitions> + <Image x:Name="_contactAvatar_" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Grid.Column="0" + Width="55" + Height="55" + Source="Assets\TESTS\contactAvatar.png"/> + <!-- visual notifications. --> + <Border x:Name="_visualNotificationVideoChat_" + Visibility="Collapsed" + Style="{StaticResource BorderStyle1}"> + <TextBlock Text="" + Style="{StaticResource TextSegoeStyle1}"/> + <Border.RenderTransform> + <TranslateTransform X="17" Y="-14"/> + </Border.RenderTransform> + </Border> + <Border x:Name="_visualNotificationNewMessage_" + Visibility="Collapsed" + Style="{StaticResource BorderStyle2}"> + <TextBlock Text="0" + Style="{StaticResource TextStyle3}"/> + <Border.RenderTransform> + <TranslateTransform X="-17" Y="-14"/> + </Border.RenderTransform> + </Border> + <!-- name of the contact. --> + <TextBlock x:Name="_contactName_" + Grid.Column="1" + FontSize="20" + Text="{x:Bind name_}"> + <TextBlock.RenderTransform> + <TranslateTransform X="8" Y="3"/> + </TextBlock.RenderTransform> + </TextBlock> + </Grid> + <!-- button bar for accept/reject or cancel call. --> + <!-- nb : dont use Visibility with the grid, use the height of the hosting row (_contactBar_). --> + <Grid Width="320" + HorizontalAlignment="Left" + Grid.Row="1" + Background="DarkGray"> + <StackPanel Orientation="Horizontal" + HorizontalAlignment="Center"> + <Button x:Name="_acceptIncomingCallBtn_" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Style="{StaticResource ButtonStyle2}" + Content=""/> + <Button x:Name="_rejectIncomingCallBtn_" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Style="{StaticResource ButtonStyle2}" + Content=""/> + </StackPanel> + <TextBlock x:Name="_contactCallStatus_" + Foreground="DarkGray" + Text="Incoming call" + HorizontalAlignment="Center"> + <TextBlock.RenderTransform> + <TranslateTransform Y="-30"/> + </TextBlock.RenderTransform> + </TextBlock> + </Grid> + </Grid> + </DataTemplate> + <!-- template for accounts. --> + <DataTemplate x:Key="AccountTemplate" + x:DataType="local:Account"> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="60"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Image x:Name="_accountAvatar_" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Grid.Column="0" + Width="55" + Height="55" + Source="Assets\TESTS\contactAvatar.png"/> + <TextBlock x:Name="_accountName_" + Grid.Column="1" + Text="{x:Bind name_}"/> + </Grid> + </DataTemplate> + </Page.Resources> + <Grid> + <Grid.RowDefinitions> + <!-- where accounts and share menu drop down are. --> + <RowDefinition Height="auto"/> + <!-- where contacts and settings are. --> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <!-- drop down menus. --> + <Grid Background="LightBlue"> + <Grid.RowDefinitions> + <!-- where the selected account is shown. --> + <RowDefinition x:Name="_selectedAccountRow_" + Height="90"/> + <!-- where the drop down menus are shown. --> + <RowDefinition Height="auto"/> + </Grid.RowDefinitions> + <!-- selected account. --> + <Grid Grid.Row="0"> + <Grid.ColumnDefinitions> + <ColumnDefinition x:Name="_selectedAccountAvatarColumn_" + Width="90"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="50"/> + </Grid.ColumnDefinitions> + <Image x:Name="_selectedAccountAvatar_" + Source="Assets\TESTS\contactAvatar.png" + Width="80" + Margin="5" + Grid.Column="0" + Height="80"/> + <StackPanel Grid.Column="1" + VerticalAlignment="Bottom"> + <TextBlock Text="TOT fdsfds fdsO" + Margin="10" + Style="{StaticResource TextStyle2}"/> + <StackPanel Orientation="Horizontal"> + <!--Content="--> + <ToggleButton x:Name="_accountsMenuButton_" + VerticalAlignment="Bottom" + Content="" + Checked="_accountsMenuButton__Checked" + Unchecked="_accountsMenuButton__Unchecked" + Style="{StaticResource ToggleButtonStyle1}"/> + <ToggleButton x:Name="_shareMenuButton_" + VerticalAlignment="Bottom" + Content="" + Checked="_shareMenuButton__Checked" + Unchecked="_shareMenuButton__Unchecked" + Style="{StaticResource ToggleButtonStyle1}"/> + </StackPanel> + </StackPanel> + <ToggleButton x:Name="_settingsTBtn_" + Grid.Column="2" + VerticalAlignment="Bottom" + Content="" + Checked="_settings__Checked" + Unchecked="_settings__Unchecked" + Style="{StaticResource ToggleButtonStyle1}"/> + </Grid> + + <!--sub menus like the accounts list or the share menu are just below, technicaly they are nested inside the + same row. To sumon them we use the visibility of their own grid, by linking it to a toggle button--> + + <!-- accounts menu. --> + <Grid x:Name="_accountsMenuGrid_" + MaxHeight="350" + Grid.Row="1" + Visibility="Collapsed" + Background="LightBlue"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <ListBox x:Name="_accountsList_" + Grid.Row="0" + ScrollViewer.HorizontalScrollBarVisibility="Auto" + ScrollViewer.HorizontalScrollMode="Enabled" + Width="320" + ItemContainerStyle="{StaticResource contactsListBoxStyle}" + Background="#FFE4F1F9" + ItemTemplate="{StaticResource AccountTemplate}"/> + <Button x:Name="_addAccountBtn_" + Grid.Row="1" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Content="" + Click="_addAccountBtn__Click" + Style="{StaticResource ButtonStyle2}"/> + </Grid> + <!-- account creation menu. --> + <Grid x:Name="_accountCreationMenuGrid_" + Grid.Row="2" + Visibility="Collapsed" + Background="LightBlue"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <StackPanel Orientation="Vertical" + Grid.Row="0" + Background="#FFE4F1F9"> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" + Text="Account type : " + Margin="10,10,0,10"/> + <ComboBox SelectedIndex="0" + Margin="10" + VerticalAlignment="Center" + Width="195"> + <ComboBoxItem Content="Ring"/> + <ComboBoxItem Content="Sip"/> + </ComboBox> + </StackPanel> + <Button x:Name="_avatarWebcamCaptureBtn_" + VerticalAlignment="Center" + Content="" + Style="{StaticResource ButtonStyle3}" + Click="_avatarWebcamCaptureBtn__Click" + HorizontalAlignment="Center"/> + <!-- RING account. --> + <StackPanel x:Name="_ringAccountCreationStack_" + Visibility="Visible"> + <TextBox Margin="10" + PlaceholderText="Enter your username"/> + <PasswordBox Margin="10" + PlaceholderText="Enter your password"/> + <PasswordBox Margin="10" + PlaceholderText="Repeat your Password"/> + </StackPanel> + <!-- SIP account. --> + <StackPanel x:Name="_sipAccountCreationStack_" + Visibility="Collapsed"> + <TextBox Margin="10" + PlaceholderText="Enter hostname"/> + <TextBox Margin="10" + PlaceholderText="Enter your username"/> + <PasswordBox Margin="10" + PlaceholderText="Enter your password"/> + <PasswordBox Margin="10" + PlaceholderText="Repeat your Password"/> + </StackPanel> + </StackPanel> + <!-- buttons yes/no to create the new account. --> + <Grid Grid.Row="1"> + <StackPanel Orientation="Horizontal" + HorizontalAlignment="Center"> + <Button x:Name="_createAccountYes_" + Grid.Row="1" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Content="" + Click="_createAccountYes__Click" + Style="{StaticResource ButtonStyle2}"/> + <Button x:Name="_createAccountNo_" + Grid.Row="1" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Content="" + Click="_createAccountNo__Click" + Style="{StaticResource ButtonStyle2}"/> + </StackPanel> + </Grid> + </Grid> + <!-- share menu. --> + <Grid x:Name="_shareMenuGrid_" + Grid.Row="2" + Visibility="Collapsed" + Background="LightBlue"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <Grid Background="#FFE4F1F9"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="auto"/> + <RowDefinition Height="auto"/> + </Grid.RowDefinitions> + <Image x:Name="_selectedAccountQrCode_" + Source="Assets\TESTS\qrcode.png" + Width="200" + Margin="5" + Grid.Row="0" + Height="200"/> + <TextBlock Text="RingId:" + Grid.Row="1" + HorizontalAlignment="Center"/> + <TextBox Style="{StaticResource TextBoxStyle2}" + HorizontalAlignment="Center" + Text="c4fc649aed8b2497a5e98fd2d856222f07020044" + Grid.Row="2"/> + </Grid> + </Grid> + </Grid> + <!-- contact list and settings. --> + <Grid Grid.Row="1"> + <!-- contacts list. --> + <Grid x:Name="_smartGrid_" + Grid.Row="0"> + <Grid.RowDefinitions> + <RowDefinition x:Name="_rowRingTxtBx_" + Height="40"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <TextBox x:Name="_ringTxtBx_" + HorizontalAlignment="Center" + VerticalAlignment="Center" + Width="320" + TextWrapping="Wrap" + Style="{StaticResource TextBoxStyle1}" + Text=""/> + <ListBox x:Name="_smartList_" + Grid.Row="1" + Margin="0" + Padding="0" + ScrollViewer.HorizontalScrollBarVisibility="Auto" + ScrollViewer.HorizontalScrollMode="Enabled" + ItemContainerStyle="{StaticResource contactsListBoxStyle}" + ItemTemplate="{StaticResource ContactTemplate}"/> + </Grid> + <!-- settings. --> + <Grid x:Name="_settings_" + Grid.Row="0" + Visibility="Collapsed"> + <TextBlock>some settings</TextBlock> + </Grid> + </Grid> </Grid> </Page> diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp index 83af9ef6b5f69745b03a81cf244d3331a37484e7..42c8415032b28ef6e0341d8b43cef33cab6db717 100644 --- a/SmartPanel.xaml.cpp +++ b/SmartPanel.xaml.cpp @@ -1,29 +1,148 @@ -/************************************************************************** -* Copyright (C) 2016 by Savoir-faire Linux * -* Author: Jäger Nicolas <nicolas.jager@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/>. * -**************************************************************************/ +/************************************************************************** + * Copyright (C) 2016 by Savoir-faire Linux * + * Author: Jäger Nicolas <nicolas.jager@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 "SmartPanel.xaml.h" +using namespace Platform; + using namespace RingClientUWP; using namespace RingClientUWP::Views; +using namespace RingClientUWP::ViewModel; +using namespace Windows::Media::Capture; +using namespace Windows::UI::Xaml; +using namespace Windows::Storage; +using namespace Windows::UI::Xaml::Media::Imaging; +using namespace Windows::UI::Xaml::Shapes; +using namespace Windows::UI::Xaml::Media; +using namespace Concurrency; +using namespace Windows::Foundation; SmartPanel::SmartPanel() { InitializeComponent(); + + _accountsList_->ItemsSource = AccountsViewModel::instance->accountsList; + _smartList_->ItemsSource = ContactsViewModel::instance->contactsList; +} + +void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e) +{ + _shareMenuButton_->IsChecked = false; + _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; +} + +void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e) +{ + _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; +} + +void RingClientUWP::Views::SmartPanel::_settings__Checked(Object^ sender, RoutedEventArgs^ e) +{ + _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _settings_->Visibility = Windows::UI::Xaml::Visibility::Visible; +} + +void RingClientUWP::Views::SmartPanel::_settings__Unchecked(Object^ sender, RoutedEventArgs^ e) +{ + _settings_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; +} + +void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel::Mode mode) +{ + if (mode == RingClientUWP::Views::SmartPanel::Mode::Normal) { + _rowRingTxtBx_->Height = 40; + _selectedAccountAvatar_->Height = 80; + _selectedAccountAvatarColumn_->Width = 90; + _selectedAccountRow_->Height = 90; + } + else { + _rowRingTxtBx_->Height = 0; + _selectedAccountAvatar_->Height = 50; + _selectedAccountAvatarColumn_->Width = 60; + _selectedAccountRow_->Height = 60; + } + + _selectedAccountAvatar_->Width = _selectedAccountAvatar_->Height; + _settingsTBtn_->IsChecked = false; + _accountsMenuButton_->IsChecked = false; + _shareMenuButton_->IsChecked = false; +} + +void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _accountsMenuButton_->IsChecked = false; +} + +void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; +} + + +void RingClientUWP::Views::SmartPanel::_addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; +} + + +void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + } + +void RingClientUWP::Views::SmartPanel::_createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + +} + + +void RingClientUWP::Views::SmartPanel::_avatarWebcamCaptureBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + CameraCaptureUI^ cameraCaptureUI = ref new CameraCaptureUI(); + cameraCaptureUI->PhotoSettings->Format = CameraCaptureUIPhotoFormat::Png; + cameraCaptureUI->PhotoSettings->CroppedSizeInPixels = Size(100, 100); + + + create_task(cameraCaptureUI->CaptureFileAsync(CameraCaptureUIMode::Photo)).then([this](StorageFile^ photo) + { + if (photo != nullptr) { + // maybe it would be possible to move some logics to the style sheet + auto brush = ref new ImageBrush(); + + auto circle = ref new Ellipse(); + circle->Height = 80; // TODO : use some global constant when ready + circle->Width = 80; + auto path = photo->Path; + auto uri = ref new Windows::Foundation::Uri(path); + auto bitmapImage = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(); + bitmapImage->UriSource = uri; + + brush->ImageSource = bitmapImage; + circle->Fill = brush; + _avatarWebcamCaptureBtn_->Content = circle; + } + }); + +} diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h index 2cdbb91c2a19a9b4fcdba31306d7d50e0d06093d..2ef2cc68e9c3c69b848141a321d6157c7ef7ab83 100644 --- a/SmartPanel.xaml.h +++ b/SmartPanel.xaml.h @@ -20,12 +20,36 @@ namespace RingClientUWP { + +delegate void ToggleSmartPan(); +delegate void SumonMessageTextPage(); +delegate void SumonVideoPage(); + namespace Views { public ref class SmartPanel sealed { public: SmartPanel(); + +internal: + enum class Mode { Minimized, Normal }; + event ToggleSmartPan^ toggleSmartPan; + event SumonMessageTextPage^ sumonMessageTextPage; + event SumonVideoPage^ sumonVideoPage; + void setMode(RingClientUWP::Views::SmartPanel::Mode mode); + +private: + void _accountsMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _accountsMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _settings__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _settings__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _createAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _avatarWebcamCaptureBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); }; } } \ No newline at end of file diff --git a/Styles.xaml b/Styles.xaml index ba4e5cdd86ae607ab9658d8357e13dfb7da39c34..4afe023f18d5c1159cbdde9034839c843f9bf8d3 100644 --- a/Styles.xaml +++ b/Styles.xaml @@ -19,7 +19,15 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> -<!-- general styles section --> + <!-- general --> + <Style x:Key="GridLightBlue" TargetType="Grid"> + <Setter Property="Background" + Value="#FFE4F1F9"/> + </Style> + <Style x:Key="StackLightBlue" TargetType="StackPanel"> + <Setter Property="Background" + Value="#FFE4F1F9"/> + </Style> <Style x:Key="TextStyle1" TargetType="TextBlock"> <Setter Property="FontSize" @@ -27,6 +35,39 @@ <Setter Property="Foreground" Value="Black"/> </Style> + <Style x:Key="TextStyle2" + TargetType="TextBlock"> + <Setter Property="FontSize" + Value="20"/> + <Setter Property="VerticalAlignment" + Value="Center"/> + <Setter Property="Foreground" + Value="White"/> + </Style> + <Style x:Key="TextStyle3" + TargetType="TextBlock"> + <Setter Property="FontSize" + Value="15"/> + <Setter Property="HorizontalAlignment" + Value="Center"/> + <Setter Property="VerticalAlignment" + Value="Center"/> + <Setter Property="Foreground" + Value="White"/> + </Style> + <Style x:Key="TextSegoeStyle1" + TargetType="TextBlock"> + <Setter Property="FontFamily" + Value="Segoe MDL2 Assets"/> + <Setter Property="FontSize" + Value="15"/> + <Setter Property="HorizontalAlignment" + Value="Center"/> + <Setter Property="VerticalAlignment" + Value="Center"/> + <Setter Property="Foreground" + Value="White"/> + </Style> <Style x:Key="ButtonStyle1" TargetType="Button"> <Setter Property="Width" @@ -39,7 +80,35 @@ Value="White"/> </Style> <Style x:Key="ButtonStyle2" + TargetType="Button"> + <Setter Property="Width" + Value="50"/> + <Setter Property="Height" + Value="30"/> + <Setter Property="FontFamily" + Value="Segoe MDL2 Assets"/> + <Setter Property="Foreground" + Value="White"/> + <Setter Property="Background" + Value="Transparent"/> + </Style> + <Style x:Key="ButtonStyle3" TargetType="Button"> + <Setter Property="Foreground" + Value="Black"/> + <Setter Property="Background" + Value="Transparent"/> + <Setter Property="FontFamily" + Value="Segoe MDL2 Assets"/> + <Setter Property="Width" + Value="80"/> + <Setter Property="Width" + Value="120"/> + <Setter Property="FontSize" + Value="70"/> + </Style> + <Style x:Key="ToggleButtonStyle1" + TargetType="ToggleButton"> <Setter Property="Width" Value="50"/> <Setter Property="Height" @@ -51,7 +120,102 @@ <Setter Property="Background" Value="Transparent"/> </Style> -<!-- styles for the console --> + <Style x:Key="TextBoxStyle1" + TargetType="TextBox"> + <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}"/> + <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}"/> + <Setter Property="Foreground" Value="Black"/> + <Setter Property="Background" Value="white"/> + <Setter Property="BorderBrush" Value="Red"/> + <Setter Property="BorderThickness" Value="0"/> + <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> + <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/> + <Setter Property="Padding" Value="4,4"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="TextBox"> + <Grid> + <Grid.Resources> + <Style x:Name="DeleteButtonStyle" TargetType="Button"> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Button"> + <Grid x:Name="ButtonLayoutGrid" + BorderThickness="5" + Background="Yellow"> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + </Grid.Resources> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Border x:Name="BackgroundElement" + Grid.Row="1" + Background="{TemplateBinding Background}" + Margin="5" + Opacity="1" + Grid.ColumnSpan="2" + Grid.RowSpan="1"/> + <ScrollViewer x:Name="ContentElement" + Grid.Row="1" + HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" + HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" + VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" + VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" + IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" + IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" + IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" + Margin="5" + Padding="{TemplateBinding Padding}" + IsTabStop="False" + AutomationProperties.AccessibilityView="Raw" + ZoomMode="Disabled"/> + + <Button x:Name="DeleteButton" + Background="Transparent" + Grid.Row="1" + FontFamily="Segoe MDL2 Assets" + Foreground="LightBlue" + Content="" + BorderThickness="{TemplateBinding BorderThickness}" + Margin="{ThemeResource HelperButtonThemePadding}" + IsTabStop="False" + Grid.Column="1" + Visibility="Visible" + FontSize="{TemplateBinding FontSize}" + MinWidth="34" + VerticalAlignment="Stretch"/> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="TextBoxStyle2" + TargetType="TextBox"> + <Setter Property="IsReadOnly" Value="True"/> + <Setter Property="FontWeight" Value="Bold"/> + <Setter Property="Foreground" Value="Black"/> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="Transparent"/> + <Setter Property="BorderThickness" Value="0"/> + <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> + <Setter Property="FontSize" Value="12"/> + </Style> + + <!-- console --> <Style x:Key="ConsoleScrollViewerStyle" TargetType="ScrollViewer"> <Setter Property="Background" @@ -87,4 +251,59 @@ Value="30"/> </Style> + <!-- smartlist --> + <Style x:Key="contactsListBoxStyle" TargetType="ListBoxItem"> + <Setter Property="MinWidth" Value="{StaticResource SplitViewCompactPaneThemeLength}"/> + <Setter Property="Height" Value="auto"/> + <Setter Property="Padding" Value="0"/> + </Style> + + <Style x:Key ="greenRoundedButtonStyle1" TargetType ="Button"> + <Setter Property="Height" Value="50"/> + <Setter Property="FontSize" Value="30"/> + + <Setter Property ="Template"> + <Setter.Value> + <ControlTemplate TargetType ="Button"> + <Grid> + <Ellipse Name ="OuterRing" Width ="50" Height ="50" Fill ="LightGreen"/> + <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key ="redRoundedButtonStyle1" TargetType ="Button"> + <Setter Property ="Foreground" Value ="Black"/> + <Setter Property ="FontWeight" Value ="Bold"/> + <Setter Property ="Template"> + <Setter.Value> + <ControlTemplate TargetType ="Button"> + <Grid> + <Ellipse Name ="OuterRing" Width ="50" Height ="50" Fill ="LightCoral"/> + <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <Style x:Key="BorderStyle1" + TargetType="Border"> + <Setter Property="Background" Value="LightBlue"/> + <Setter Property="CornerRadius" Value="6"/> + <Setter Property="Width" Value="25"/> + <Setter Property="Height" Value="23"/> + <Setter Property="Padding" Value="4"/> + </Style> + <Style x:Key="BorderStyle2" + TargetType="Border"> + <Setter Property="Background" Value="Red"/> + <Setter Property="CornerRadius" Value="6"/> + <Setter Property="Width" Value="25"/> + <Setter Property="Height" Value="23"/> + <Setter Property="Padding" Value="4"/> + </Style> + + </ResourceDictionary> diff --git a/pch.h b/pch.h index db2bead275e35080464f65f85d630ebfff2ed025..992f56cd6de6ccaa66212cb807a6f4be7075b8e6 100644 --- a/pch.h +++ b/pch.h @@ -17,4 +17,12 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * **************************************************************************/ +/* standard system include files. */ +#include <ppltasks.h> + +/* required by generated headers. */ #include "App.xaml.h" +#include "Account.h" +#include "AccountsViewModel.h" +#include "Contact.h" +#include "ContactsViewModel.h" diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj index 6398a351382b65e315eb6b2f9ac7c065d1c28b6d..1b76f4f5f1e6e67f659500f38e6364532ac444af 100644 --- a/ring-client-uwp.vcxproj +++ b/ring-client-uwp.vcxproj @@ -158,6 +158,10 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="Account.h" /> + <ClInclude Include="AccountsViewModel.h" /> + <ClInclude Include="Contact.h" /> + <ClInclude Include="ContactsViewModel.h" /> <ClInclude Include="pch.h" /> <ClInclude Include="App.xaml.h"> <DependentUpon>App.xaml</DependentUpon> @@ -226,10 +230,14 @@ <Image Include="Assets\Wide310x150Logo.scale-200.png" /> </ItemGroup> <ItemGroup> + <ClCompile Include="Account.cpp" /> + <ClCompile Include="AccountsViewModel.cpp" /> <ClCompile Include="App.xaml.cpp"> <DependentUpon>App.xaml</DependentUpon> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\ring-daemon\MSVC;..\ring-daemon\src\media;..\ring-daemon\src;..\ring-daemon\src\dring;..\ring-daemon\contrib\include;..\ring-daemon\contrib\include\pjlib;..\ring-daemon\contrib\pjproject\third_party\speex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> + <ClCompile Include="Contact.cpp" /> + <ClCompile Include="ContactsViewModel.cpp" /> <ClCompile Include="MainPage.xaml.cpp"> <DependentUpon>MainPage.xaml</DependentUpon> </ClCompile> diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters index 313f92f0e57f75626c796ddf87c38666b16e36a8..baf3a6572593aa3c740d2fba5e9b1646e14db4e4 100644 --- a/ring-client-uwp.vcxproj.filters +++ b/ring-client-uwp.vcxproj.filters @@ -29,6 +29,12 @@ <Filter Include="Assets\TESTS"> <UniqueIdentifier>{758258ab-8169-4388-a89d-a834cebce79a}</UniqueIdentifier> </Filter> + <Filter Include="ModelViews"> + <UniqueIdentifier>{c9f1f5bd-c315-4f6f-a91b-bc67fe27e0b9}</UniqueIdentifier> + </Filter> + <Filter Include="Model"> + <UniqueIdentifier>{8ea3251c-a70e-4de5-9f26-8db3df45c2c4}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ApplicationDefinition Include="App.xaml" /> @@ -40,6 +46,18 @@ <ClCompile Include="WelcomePage.xaml.cpp" /> <ClCompile Include="SmartPanel.xaml.cpp" /> <ClCompile Include="RingConsolePanel.xaml.cpp" /> + <ClCompile Include="Account.cpp"> + <Filter>Model</Filter> + </ClCompile> + <ClCompile Include="Contact.cpp"> + <Filter>Model</Filter> + </ClCompile> + <ClCompile Include="AccountsViewModel.cpp"> + <Filter>ModelViews</Filter> + </ClCompile> + <ClCompile Include="ContactsViewModel.cpp"> + <Filter>ModelViews</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="pch.h" /> @@ -48,6 +66,18 @@ <ClInclude Include="WelcomePage.xaml.h" /> <ClInclude Include="SmartPanel.xaml.h" /> <ClInclude Include="RingConsolePanel.xaml.h" /> + <ClInclude Include="Account.h"> + <Filter>Model</Filter> + </ClInclude> + <ClInclude Include="Contact.h"> + <Filter>Model</Filter> + </ClInclude> + <ClInclude Include="AccountsViewModel.h"> + <Filter>ModelViews</Filter> + </ClInclude> + <ClInclude Include="ContactsViewModel.h"> + <Filter>ModelViews</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="Assets\LockScreenLogo.scale-200.png">