package gui.models; import java.util.List; import java.util.Observable; import java.util.Observer; import javax.swing.DefaultComboBoxModel; import qora.account.Account; import utils.ObserverMessage; import controller.Controller; @SuppressWarnings("serial") public class AccountsComboBoxModel extends DefaultComboBoxModel<Account> implements Observer { public AccountsComboBoxModel() { //INSERT ALL ACCOUNTS List<Account> accounts = Controller.getInstance().getAccounts(); synchronized(accounts) { for(Account account: Controller.getInstance().getAccounts()) { this.addElement(account); } } Controller.getInstance().addWalletListener(this); Controller.getInstance().addObserver(this); } @Override public void update(Observable o, Object arg) { try { this.syncUpdate(o, arg); } catch(Exception e) { //GUI ERROR } } public synchronized void syncUpdate(Observable o, Object arg) { ObserverMessage message = (ObserverMessage) arg; if(message.getType() == ObserverMessage.ADD_BALANCE_TYPE || message.getType() == ObserverMessage.REMOVE_BALANCE_TYPE || message.getType() == ObserverMessage.ADD_ACCOUNT_TYPE || message.getType() == ObserverMessage.REMOVE_ACCOUNT_TYPE) { //GET SELECTED ITEM Account selected = (Account) this.getSelectedItem(); //EMPTY LIST this.removeAllElements(); //INSERT ALL ACCOUNTS List<Account> accounts = Controller.getInstance().getAccounts(); synchronized(accounts) { for(Account account: Controller.getInstance().getAccounts()) { this.addElement(account); } } //RESET SELECTED ITEM if(this.getIndexOf(selected) != -1) { this.setSelectedItem(selected); } } } public void removeObservers() { Controller.getInstance().deleteWalletObserver(this); Controller.getInstance().deleteObserver(this); } }