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