From 5a197d5c9c82e380c208740b3f8c4c9cbee93171 Mon Sep 17 00:00:00 2001 From: Nicolas Jager <nicolas.jager@savoirfairelinux.com> Date: Tue, 25 Oct 2016 11:24:03 -0400 Subject: [PATCH] smartpanel : delete ring account from the panel Change-Id: Ie40094e31cfb975ea7f518f068b6c38eb5504e6b Tuleap: #1246 --- AccountListItem.h | 5 +++-- AccountListItemsViewModel.cpp | 11 +++++++++++ AccountListItemsViewModel.h | 1 + SmartPanel.xaml.cpp | 22 ++++++++++++---------- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/AccountListItem.h b/AccountListItem.h index 022c953..b8a46da 100644 --- a/AccountListItem.h +++ b/AccountListItem.h @@ -37,20 +37,21 @@ public: property bool _isSelected { void set(bool value) { isSelected_ = value; - NotifyPropertyChanged("_isSelected"); + if (!_disconnected) + NotifyPropertyChanged("_isSelected"); } bool get() { return isSelected_; } } property bool _editionMode; + property bool _disconnected; protected: void NotifyPropertyChanged(String^ propertyName); private: bool isSelected_; - }; } } diff --git a/AccountListItemsViewModel.cpp b/AccountListItemsViewModel.cpp index ce72035..c326096 100644 --- a/AccountListItemsViewModel.cpp +++ b/AccountListItemsViewModel.cpp @@ -60,3 +60,14 @@ RingClientUWP::ViewModel::AccountListItemsViewModel::findItem(String^ accountId) return nullptr; } + +void RingClientUWP::ViewModel::AccountListItemsViewModel::removeItem(AccountListItem ^ item) +{ + unsigned int index; + itemsList_->IndexOf(item, &index); + + item->_disconnected = true; // avoid disconected exception. + + itemsList_->RemoveAt(index); + +} diff --git a/AccountListItemsViewModel.h b/AccountListItemsViewModel.h index 0674557..b39eca8 100644 --- a/AccountListItemsViewModel.h +++ b/AccountListItemsViewModel.h @@ -43,6 +43,7 @@ internal: /* functions */ AccountListItem^ findItem(String^ accountId); + void removeItem(AccountListItem^ item); /* properties */ property Vector<AccountListItem^>^ itemsList diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp index 7a9029b..b8f55fa 100644 --- a/SmartPanel.xaml.cpp +++ b/SmartPanel.xaml.cpp @@ -727,6 +727,8 @@ void RingClientUWP::Views::SmartPanel::_editAccountMenuButton__Click(Platform::O auto account = AccountListItemsViewModel::instance->_selectedItem->_account; _aliasTextBoxEditionMenu_->Text = account->name_; _accountEditionMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _deleteAccountBtnEditionMenu_->IsChecked = false; + _deleteAccountBtnEditionMenu_->IsEnabled = (AccountListItemsViewModel::instance->itemsList->Size > 1)? true : false; } @@ -739,19 +741,19 @@ void RingClientUWP::Views::SmartPanel::_acceptAccountModification__Click(Platfor // mettre ca en visibility du bouton delete auto accountsListSize = dynamic_cast<Vector<AccountListItem^>^>(_accountsList_->ItemsSource)->Size; + /* if the delete button is toggled, just delete the account */ if (_deleteAccountBtnEditionMenu_->IsChecked && accountsListSize > 1) { - RingD::instance->deleteAccount(accountId); + AccountListItem^ item; + for each (item in AccountListItemsViewModel::instance->itemsList) + if (item->_account->accountID_ == accountId) + break; - /* rebuild a new list of accounts without the one to delete */ - auto newAccountList = ref new Vector<AccountListItem^>(); - for each (AccountListItem^ item in AccountListItemsViewModel::instance->itemsList) { - if (item->_account->accountID_ != accountId) - newAccountList->Append(item); - } + if (item) + AccountListItemsViewModel::instance->removeItem(item); - _accountsList_->ItemsSource = newAccountList; + RingD::instance->deleteAccount(accountId); - } else { + } else { /* otherwise edit the account */ account->name_ = _aliasTextBoxEditionMenu_->Text; account->_upnpState = _upnpState_->IsOn; @@ -774,4 +776,4 @@ void RingClientUWP::Views::SmartPanel::_cancelAccountModification__Click(Platfor void RingClientUWP::Views::SmartPanel::OnaccountUpdated(RingClientUWP::Account ^account) { updatePageContent(); -} +} \ No newline at end of file -- GitLab