smartpanel : delete ring account from the panel

Change-Id: Ie40094e31cfb975ea7f518f068b6c38eb5504e6b
Tuleap: #1246
diff --git a/AccountListItem.h b/AccountListItem.h
index 022c953..b8a46da 100644
--- a/AccountListItem.h
+++ b/AccountListItem.h
@@ -37,20 +37,21 @@
     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 @@
 

     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 @@
 

     /* 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 @@
     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 @@
     // 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) {

+        AccountListItem^ item;

+        for each (item in AccountListItemsViewModel::instance->itemsList)

+            if (item->_account->accountID_ == accountId)

+                break;

+

+        if (item)

+            AccountListItemsViewModel::instance->removeItem(item);

+

         RingD::instance->deleteAccount(accountId);

 

-        /* 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);

-        }

-

-        _accountsList_->ItemsSource = newAccountList;

-

-    } else {

+    } else { /* otherwise edit the account */

 

         account->name_ = _aliasTextBoxEditionMenu_->Text;

         account->_upnpState = _upnpState_->IsOn;

@@ -774,4 +776,4 @@
 void RingClientUWP::Views::SmartPanel::OnaccountUpdated(RingClientUWP::Account ^account)

 {

     updatePageContent();

-}

+}
\ No newline at end of file