diff -r 45b9f25ff611 -r 2fb781bbdd51 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/ObservableTreeMapAdapter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/ObservableTreeMapAdapter.java Mon Aug 06 22:39:36 2012 +0200 @@ -0,0 +1,62 @@ +package org.hedgewars.hedgeroid.netplay; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import android.database.DataSetObserver; +import android.widget.BaseAdapter; + +public abstract class ObservableTreeMapAdapter extends BaseAdapter { + private boolean sourceChanged = true; + private List entries = new ArrayList(); + private ObservableTreeMap source; + + private DataSetObserver observer = new DataSetObserver() { + @Override + public void onChanged() { + sourceChanged = true; + notifyDataSetChanged(); + } + + @Override + public void onInvalidated() { + invalidate(); + } + }; + + abstract protected Comparator getEntryOrder(); + + protected List getEntries() { + if(sourceChanged) { + entries.clear(); + entries.addAll(source.getMap().values()); + Collections.sort(entries, getEntryOrder()); + sourceChanged = false; + } + return entries; + } + + public int getCount() { + return getEntries().size(); + } + + public void setSource(ObservableTreeMap source) { + if(this.source != null) { + this.source.unregisterObserver(observer); + } + this.source = source; + this.source.registerObserver(observer); + sourceChanged = true; + notifyDataSetChanged(); + } + + public void invalidate() { + if(source != null) { + source.unregisterObserver(observer); + } + source = null; + notifyDataSetInvalidated(); + } +} \ No newline at end of file