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