blob: 2742708a12e64eb6aa2cb56ec94c5906e0ba990e [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
37SmartPanel::SmartPanel()
38{
39 InitializeComponent();
40
atraczyk2425ddd2016-09-01 13:16:22 -040041 /* connect delegates */
Nicolas Jager38f15642016-09-01 09:45:58 -040042 Configuration::UserPreferences::instance->selectIndex += ref new SelectIndex([this](int index) {
43 _accountsList_->SelectedIndex = index;
44 });
atraczyk2425ddd2016-09-01 13:16:22 -040045 Configuration::UserPreferences::instance->loadProfileImage += ref new LoadProfileImage([this]() {
46 StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
47 String^ image_path = localfolder->Path + "\\.profile\\profile_image.png";
48 auto uri = ref new Windows::Foundation::Uri(image_path);
49 _selectedAccountAvatar_->ImageSource = ref new BitmapImage(uri);
50 });
atraczyk196936e2016-09-02 15:31:53 -040051 AccountsViewModel::instance->updateScrollView += ref new UpdateScrollView([this]() {
52 _accountsListScrollView_->UpdateLayout();
53 _accountsListScrollView_->ScrollToVerticalOffset(_accountsListScrollView_->ScrollableHeight);
54 });
Nicolas Jager38f15642016-09-01 09:45:58 -040055
56 _accountsList_->ItemsSource = AccountsViewModel::instance->accountsList;
57 _smartList_->ItemsSource = ContactsViewModel::instance->contactsList;
58}
59
60void
61RingClientUWP::Views::SmartPanel::updatePageContent()
62{
63 auto account = AccountsViewModel::instance->selectedAccount;
64 if (!account)
65 return;
66
67 Configuration::UserPreferences::instance->PREF_ACCOUNT_INDEX = _accountsList_->SelectedIndex;
68 Configuration::UserPreferences::instance->save();
69 _selectedAccountName_->Text = account->name_;
70}
71
72void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e)
73{
74 _shareMenuButton_->IsChecked = false;
75 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
76 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
77}
78
79void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e)
80{
81 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
82 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
83}
84
85void RingClientUWP::Views::SmartPanel::_settings__Checked(Object^ sender, RoutedEventArgs^ e)
86{
87 _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
88 _settings_->Visibility = Windows::UI::Xaml::Visibility::Visible;
89}
90
91void RingClientUWP::Views::SmartPanel::_settings__Unchecked(Object^ sender, RoutedEventArgs^ e)
92{
93 _settings_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
94 _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
95}
96
97void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel::Mode mode)
98{
99 if (mode == RingClientUWP::Views::SmartPanel::Mode::Normal) {
100 _rowRingTxtBx_->Height = 40;
atraczyk2425ddd2016-09-01 13:16:22 -0400101 _selectedAccountAvatarContainer_->Height = 80;
Nicolas Jager38f15642016-09-01 09:45:58 -0400102 _selectedAccountAvatarColumn_->Width = 90;
103 _selectedAccountRow_->Height = 90;
104 }
105 else {
106 _rowRingTxtBx_->Height = 0;
atraczyk2425ddd2016-09-01 13:16:22 -0400107 _selectedAccountAvatarContainer_->Height = 50;
Nicolas Jager38f15642016-09-01 09:45:58 -0400108 _selectedAccountAvatarColumn_->Width = 60;
109 _selectedAccountRow_->Height = 60;
110 }
111
atraczyk2425ddd2016-09-01 13:16:22 -0400112 _selectedAccountAvatarContainer_->Width = _selectedAccountAvatarContainer_->Height;
Nicolas Jager38f15642016-09-01 09:45:58 -0400113 _settingsTBtn_->IsChecked = false;
114 _accountsMenuButton_->IsChecked = false;
115 _shareMenuButton_->IsChecked = false;
116}
117
118void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
119{
120 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
121 _accountsMenuButton_->IsChecked = false;
122}
123
124void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
125{
126 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
127}
128
129
130void RingClientUWP::Views::SmartPanel::_addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
131{
132 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
133 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
134}
135
Nicolas Jager38f15642016-09-01 09:45:58 -0400136void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
137{
atraczyk196936e2016-09-02 15:31:53 -0400138 switch (_accountTypeComboBox_->SelectedIndex)
139 {
140 case 0:
141 {
142 RingD::instance->createRINGAccount(_aliasTextBox_->Text);
143 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
144 _accountsMenuButton__Checked(nullptr, nullptr);
145 break;
146 }
147 break;
148 case 1:
149 {
150 RingD::instance->createSIPAccount(_aliasTextBox_->Text);
151 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
152 _accountsMenuButton__Checked(nullptr, nullptr);
153 break;
154 }
155 default:
156 break;
157 }
Nicolas Jager38f15642016-09-01 09:45:58 -0400158}
159
160
161void RingClientUWP::Views::SmartPanel::_createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
162{
atraczyk196936e2016-09-02 15:31:53 -0400163 _accountsMenuButton_->IsChecked = false;
164 _accountsMenuButton__Unchecked(nullptr,nullptr);
Nicolas Jager38f15642016-09-01 09:45:58 -0400165}
166
Nicolas Jager38f15642016-09-01 09:45:58 -0400167void
168SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
169{
170 auto listbox = safe_cast<ListBox^>(sender);
171 auto contact = safe_cast<Contact^>(listbox->SelectedItem);
172 ContactsViewModel::instance->selectedContact = contact;
173}
174
175void
176SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
177{
178 auto listbox = safe_cast<ListBox^>(sender);
179 auto account = safe_cast<Account^>(listbox->SelectedItem);
180 AccountsViewModel::instance->selectedAccount = account;
181 updatePageContent();
182}
183
184void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
185{
186 /* add contact, test purpose but will be reused later in some way */
187 if (e->Key == Windows::System::VirtualKey::Enter && _ringTxtBx_->Text != "") {
188 ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
189 _ringTxtBx_->Text = "";
190 }
191}