blob: db4bf7958aab7ea4f5a23c7eb9f7542cee886d20 [file] [log] [blame]
Nicolas Jager38f15642016-09-01 09:45:58 -04001/***************************************************************************
2 * Copyright (C) 2016 by Savoir-faire Linux *
3 * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> *
4 * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com> *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 **************************************************************************/
19#include "pch.h"
20
21#include "SmartPanel.xaml.h"
22
23using namespace Platform;
24
25using namespace RingClientUWP;
26using namespace RingClientUWP::Views;
27using namespace RingClientUWP::ViewModel;
28using namespace Windows::Media::Capture;
29using namespace Windows::UI::Xaml;
30using namespace Windows::Storage;
31using namespace Windows::UI::Xaml::Media::Imaging;
32using namespace Windows::UI::Xaml::Shapes;
33using namespace Windows::UI::Xaml::Media;
34using namespace Concurrency;
35using namespace Windows::Foundation;
36
Nicolas Jagerf6a10322016-09-06 08:17:49 -040037using namespace Windows::ApplicationModel::Core;
38using namespace Windows::Storage;
39using namespace Windows::UI::Core;
40
Nicolas Jager38f15642016-09-01 09:45:58 -040041SmartPanel::SmartPanel()
42{
43 InitializeComponent();
44
atraczyk2425ddd2016-09-01 13:16:22 -040045 /* connect delegates */
Nicolas Jager38f15642016-09-01 09:45:58 -040046 Configuration::UserPreferences::instance->selectIndex += ref new SelectIndex([this](int index) {
47 _accountsList_->SelectedIndex = index;
48 });
atraczyk2425ddd2016-09-01 13:16:22 -040049 Configuration::UserPreferences::instance->loadProfileImage += ref new LoadProfileImage([this]() {
50 StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
51 String^ image_path = localfolder->Path + "\\.profile\\profile_image.png";
52 auto uri = ref new Windows::Foundation::Uri(image_path);
53 _selectedAccountAvatar_->ImageSource = ref new BitmapImage(uri);
54 });
atraczyk196936e2016-09-02 15:31:53 -040055 AccountsViewModel::instance->updateScrollView += ref new UpdateScrollView([this]() {
56 _accountsListScrollView_->UpdateLayout();
57 _accountsListScrollView_->ScrollToVerticalOffset(_accountsListScrollView_->ScrollableHeight);
58 });
Nicolas Jager38f15642016-09-01 09:45:58 -040059
60 _accountsList_->ItemsSource = AccountsViewModel::instance->accountsList;
61 _smartList_->ItemsSource = ContactsViewModel::instance->contactsList;
62}
63
64void
65RingClientUWP::Views::SmartPanel::updatePageContent()
66{
67 auto account = AccountsViewModel::instance->selectedAccount;
68 if (!account)
69 return;
70
71 Configuration::UserPreferences::instance->PREF_ACCOUNT_INDEX = _accountsList_->SelectedIndex;
72 Configuration::UserPreferences::instance->save();
73 _selectedAccountName_->Text = account->name_;
74}
75
76void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e)
77{
78 _shareMenuButton_->IsChecked = false;
79 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
80 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
81}
82
83void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e)
84{
85 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
86 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
87}
88
89void RingClientUWP::Views::SmartPanel::_settings__Checked(Object^ sender, RoutedEventArgs^ e)
90{
91 _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
92 _settings_->Visibility = Windows::UI::Xaml::Visibility::Visible;
93}
94
95void RingClientUWP::Views::SmartPanel::_settings__Unchecked(Object^ sender, RoutedEventArgs^ e)
96{
97 _settings_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
98 _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
99}
100
101void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel::Mode mode)
102{
103 if (mode == RingClientUWP::Views::SmartPanel::Mode::Normal) {
104 _rowRingTxtBx_->Height = 40;
atraczyk2425ddd2016-09-01 13:16:22 -0400105 _selectedAccountAvatarContainer_->Height = 80;
Nicolas Jager38f15642016-09-01 09:45:58 -0400106 _selectedAccountAvatarColumn_->Width = 90;
107 _selectedAccountRow_->Height = 90;
108 }
109 else {
110 _rowRingTxtBx_->Height = 0;
atraczyk2425ddd2016-09-01 13:16:22 -0400111 _selectedAccountAvatarContainer_->Height = 50;
Nicolas Jager38f15642016-09-01 09:45:58 -0400112 _selectedAccountAvatarColumn_->Width = 60;
113 _selectedAccountRow_->Height = 60;
114 }
115
atraczyk2425ddd2016-09-01 13:16:22 -0400116 _selectedAccountAvatarContainer_->Width = _selectedAccountAvatarContainer_->Height;
Nicolas Jager38f15642016-09-01 09:45:58 -0400117 _settingsTBtn_->IsChecked = false;
118 _accountsMenuButton_->IsChecked = false;
119 _shareMenuButton_->IsChecked = false;
120}
121
122void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
123{
124 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
125 _accountsMenuButton_->IsChecked = false;
126}
127
128void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
129{
130 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
131}
132
Nicolas Jager38f15642016-09-01 09:45:58 -0400133void RingClientUWP::Views::SmartPanel::_addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
134{
135 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
136 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
137}
138
Nicolas Jager38f15642016-09-01 09:45:58 -0400139void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
140{
atraczyk196936e2016-09-02 15:31:53 -0400141 switch (_accountTypeComboBox_->SelectedIndex)
142 {
143 case 0:
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400144 {
atraczyk1ddcb5a2016-09-07 16:18:30 -0400145 CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
146 ref new DispatchedHandler([=]() {
147 auto frame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
148 dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(true, true);
149 }));
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400150 RingD::instance->createRINGAccount(_aliasTextBox_->Text);
151 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
152 _accountsMenuButton__Checked(nullptr, nullptr);
atraczyk196936e2016-09-02 15:31:53 -0400153 break;
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400154 }
155 break;
atraczyk196936e2016-09-02 15:31:53 -0400156 case 1:
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400157 {
158 RingD::instance->createSIPAccount(_aliasTextBox_->Text);
159 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
160 _accountsMenuButton__Checked(nullptr, nullptr);
161 break;
162 }
163 default:
164 break;
atraczyk196936e2016-09-02 15:31:53 -0400165 }
atraczyk1ddcb5a2016-09-07 16:18:30 -0400166 _aliasTextBox_->Text = "";
Nicolas Jager38f15642016-09-01 09:45:58 -0400167}
168
169
170void RingClientUWP::Views::SmartPanel::_createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
171{
atraczyk196936e2016-09-02 15:31:53 -0400172 _accountsMenuButton_->IsChecked = false;
173 _accountsMenuButton__Unchecked(nullptr,nullptr);
Nicolas Jager38f15642016-09-01 09:45:58 -0400174}
175
Nicolas Jager38f15642016-09-01 09:45:58 -0400176void
177SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
178{
179 auto listbox = safe_cast<ListBox^>(sender);
180 auto contact = safe_cast<Contact^>(listbox->SelectedItem);
181 ContactsViewModel::instance->selectedContact = contact;
182}
183
184void
185SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
186{
187 auto listbox = safe_cast<ListBox^>(sender);
atraczykb0154632016-09-06 12:58:08 -0400188 // disable deselction from listbox
189 if (listbox->SelectedItem == nullptr)
190 {
191 if (e->RemovedItems->Size > 0)
192 {
193 Object^ itemToReselect = e->RemovedItems->GetAt(0);
194 for each (auto item in listbox->Items) {
195 if (item == itemToReselect) {
196 listbox->SelectedItem = itemToReselect;
197 continue;
198 }
199 }
200 }
201 }
Nicolas Jager38f15642016-09-01 09:45:58 -0400202 auto account = safe_cast<Account^>(listbox->SelectedItem);
203 AccountsViewModel::instance->selectedAccount = account;
204 updatePageContent();
205}
206
207void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
208{
209 /* add contact, test purpose but will be reused later in some way */
210 if (e->Key == Windows::System::VirtualKey::Enter && _ringTxtBx_->Text != "") {
211 ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
212 _ringTxtBx_->Text = "";
213 }
214}
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400215
216
217void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
218{
219 auto button = dynamic_cast<Button^>(e->OriginalSource);
220 auto contact = dynamic_cast<Contact^>(button->DataContext);
221 auto call = contact->_call;
222
223 call->refuse();
224 contact->_contactBarHeight = 0;
225}
226
227
228void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
229{
230 auto button = dynamic_cast<Button^>(e->OriginalSource);
231 auto contact = dynamic_cast<Contact^>(button->DataContext);
232 auto call = contact->_call;
233
234 call->accept();
235 contact->_contactBarHeight = 0;
236}