You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/03/04 19:54:40 UTC
svn commit: r919126 - in /pivot/trunk:
wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
wtk/src/org/apache/pivot/wtk/Button.java
wtk/src/org/apache/pivot/wtk/ListView.java
wtk/src/org/apache/pivot/wtk/ListViewListener.java
Author: gbrown
Date: Thu Mar 4 18:54:40 2010
New Revision: 919126
URL: http://svn.apache.org/viewvc?rev=919126&view=rev
Log:
Add list data binding to ListView; add support for bind type.
Modified:
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java
Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java?rev=919126&r1=919125&r2=919126&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java Thu Mar 4 18:54:40 2010
@@ -27,6 +27,7 @@
import org.apache.pivot.collections.List;
import org.apache.pivot.collections.Sequence;
import org.apache.pivot.util.Filter;
+import org.apache.pivot.wtk.BindType;
import org.apache.pivot.wtk.Bounds;
import org.apache.pivot.wtk.Checkbox;
import org.apache.pivot.wtk.Component;
@@ -1065,17 +1066,50 @@
}
@Override
+ public void listDataKeyChanged(ListView listView, String previousListDataKey) {
+ // No-op
+ }
+
+ @Override
+ public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType) {
+ // No-op
+ }
+
+ @Override
+ public void listDataBindMappingChanged(ListView listView,
+ ListView.ListDataBindMapping previousListDataBindMapping) {
+ // No-op
+ }
+
+ @Override
public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
// No-op
}
@Override
+ public void selectedItemBindTypeChanged(ListView listView, BindType previousSelectedItemBindType) {
+ // No-op
+ }
+
+ @Override
+ public void selectedItemBindMappingChanged(ListView listView,
+ ListView.SelectedItemBindMapping previousSelectedItemBindMapping) {
+ // No-op
+ }
+
+ @Override
public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey) {
// No-op
}
@Override
- public void selectedItemBindMappingChanged(ListView listView, ListView.SelectedItemBindMapping previousSelectedItemBindMapping) {
+ public void selectedItemsBindTypeChanged(ListView listView, BindType previousSelectedItemsBindType) {
+ // No-op
+ }
+
+ @Override
+ public void selectedItemsBindMappingChanged(ListView listView,
+ ListView.SelectedItemBindMapping previousSelectedItemsBindMapping) {
// No-op
}
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java?rev=919126&r1=919125&r2=919126&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java Thu Mar 4 18:54:40 2010
@@ -557,6 +557,10 @@
}
public void setSelectedBindType(BindType selectedBindType) {
+ if (selectedBindType == null) {
+ throw new IllegalArgumentException();
+ }
+
BindType previousSelectedBindType = this.selectedBindType;
if (previousSelectedBindType != selectedBindType) {
@@ -596,6 +600,10 @@
}
public void setStateBindType(BindType stateBindType) {
+ if (stateBindType == null) {
+ throw new IllegalArgumentException();
+ }
+
BindType previousStateBindType = this.stateBindType;
if (previousStateBindType != stateBindType) {
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java?rev=919126&r1=919125&r2=919126&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java Thu Mar 4 18:54:40 2010
@@ -363,6 +363,25 @@
/**
* Translates between list and bind context data during data binding.
*/
+ public interface ListDataBindMapping {
+ /**
+ * Converts a context value to list data.
+ *
+ * @param value
+ */
+ public List<?> toListData(Object value);
+
+ /**
+ * Converts list data to a context value.
+ * @param list
+ * @return
+ */
+ public Object valueOf(List<?> list);
+ }
+
+ /**
+ * Translates between selection and bind context data during data binding.
+ */
public interface SelectedItemBindMapping {
/**
* Returns the index of the item in the source list.
@@ -394,8 +413,8 @@
/**
* List view listener list.
*/
- private static class ListViewListenerList extends ListenerList<ListViewListener> implements
- ListViewListener {
+ private static class ListViewListenerList extends ListenerList<ListViewListener>
+ implements ListViewListener {
@Override
public void listDataChanged(ListView listView, List<?> previousListData) {
for (ListViewListener listener : this) {
@@ -451,6 +470,28 @@
}
@Override
+ public void listDataKeyChanged(ListView listView, String previousListDataKey) {
+ for (ListViewListener listener : this) {
+ listener.listDataKeyChanged(listView, previousListDataKey);
+ }
+ }
+
+ @Override
+ public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType) {
+ for (ListViewListener listener : this) {
+ listener.listDataBindTypeChanged(listView, previousListDataBindType);
+ }
+ }
+
+ @Override
+ public void listDataBindMappingChanged(ListView listView,
+ ListView.ListDataBindMapping previousListDataBindMapping) {
+ for (ListViewListener listener : this) {
+ listener.listDataBindMappingChanged(listView, previousListDataBindMapping);
+ }
+ }
+
+ @Override
public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
for (ListViewListener listener : this) {
listener.selectedItemKeyChanged(listView, previousSelectedItemKey);
@@ -458,6 +499,21 @@
}
@Override
+ public void selectedItemBindTypeChanged(ListView listView, BindType previousSelectedItemBindType) {
+ for (ListViewListener listener : this) {
+ listener.selectedItemBindTypeChanged(listView, previousSelectedItemBindType);
+ }
+ }
+
+ @Override
+ public void selectedItemBindMappingChanged(ListView listView,
+ SelectedItemBindMapping previousSelectedItemBindMapping) {
+ for (ListViewListener listener : this) {
+ listener.selectedItemBindMappingChanged(listView, previousSelectedItemBindMapping);
+ }
+ }
+
+ @Override
public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey) {
for (ListViewListener listener : this) {
listener.selectedItemsKeyChanged(listView, previousSelectedItemsKey);
@@ -465,9 +521,17 @@
}
@Override
- public void selectedItemBindMappingChanged(ListView listView, SelectedItemBindMapping previousSelectedItemBindMapping) {
+ public void selectedItemsBindTypeChanged(ListView listView, BindType previousSelectedItemsBindType) {
for (ListViewListener listener : this) {
- listener.selectedItemBindMappingChanged(listView, previousSelectedItemBindMapping);
+ listener.selectedItemsBindTypeChanged(listView, previousSelectedItemsBindType);
+ }
+ }
+
+ @Override
+ public void selectedItemsBindMappingChanged(ListView listView,
+ SelectedItemBindMapping previousSelectedItemsBindMapping) {
+ for (ListViewListener listener : this) {
+ listener.selectedItemsBindMappingChanged(listView, previousSelectedItemsBindMapping);
}
}
}
@@ -650,9 +714,15 @@
private Filter<?> disabledItemFilter = null;
private Filter<?> disabledCheckmarkFilter = null;
+ private String listDataKey = null;
+ private BindType listDataBindType = BindType.BOTH;
+ private ListDataBindMapping listDataBindMapping = null;
private String selectedItemKey = null;
- private String selectedItemsKey = null;
+ private BindType selectedItemBindType = BindType.BOTH;
private SelectedItemBindMapping selectedItemBindMapping = null;
+ private String selectedItemsKey = null;
+ private BindType selectedItemsBindType = BindType.BOTH;
+ private SelectedItemBindMapping selectedItemsBindMapping = null;
private ListViewListenerList listViewListeners = new ListViewListenerList();
private ListViewItemListenerList listViewItemListeners = new ListViewItemListenerList();
@@ -1447,6 +1517,48 @@
}
}
+ public String getListDataKey() {
+ return listDataKey;
+ }
+
+ public void setListDataKey(String listDataKey) {
+ String previousListDataKey = this.listDataKey;
+ if (previousListDataKey != listDataKey) {
+ this.listDataKey = listDataKey;
+ listViewListeners.listDataKeyChanged(this, previousListDataKey);
+ }
+ }
+
+ public BindType getListDataBindType() {
+ return listDataBindType;
+ }
+
+ public void setListDataBindType(BindType listDataBindType) {
+ if (listDataBindType == null) {
+ throw new IllegalArgumentException();
+ }
+
+ BindType previousListDataBindType = this.listDataBindType;
+
+ if (previousListDataBindType != listDataBindType) {
+ this.listDataBindType = listDataBindType;
+ listViewListeners.listDataBindTypeChanged(this, previousListDataBindType);
+ }
+ }
+
+ public ListDataBindMapping getListDataBindMapping() {
+ return listDataBindMapping;
+ }
+
+ public void setListDataBindMapping(ListDataBindMapping listDataBindMapping) {
+ ListDataBindMapping previousListDataBindMapping = this.listDataBindMapping;
+
+ if (previousListDataBindMapping != listDataBindMapping) {
+ this.listDataBindMapping = listDataBindMapping;
+ listViewListeners.listDataBindMappingChanged(this, previousListDataBindMapping);
+ }
+ }
+
public String getSelectedItemKey() {
return selectedItemKey;
}
@@ -1460,16 +1572,19 @@
}
}
- public String getSelectedItemsKey() {
- return selectedItemsKey;
+ public BindType getSelectedItemBindType() {
+ return selectedItemBindType;
}
- public void setSelectedItemsKey(String selectedItemsKey) {
- String previousSelectedItemsKey = this.selectedItemsKey;
+ public void setSelectedItemBindType(BindType selectedItemBindType) {
+ if (selectedItemBindType == null) {
+ throw new IllegalArgumentException();
+ }
- if (previousSelectedItemsKey != selectedItemsKey) {
- this.selectedItemsKey = selectedItemsKey;
- listViewListeners.selectedItemsKeyChanged(this, previousSelectedItemsKey);
+ BindType previousSelectedItemBindType = this.selectedItemBindType;
+ if (previousSelectedItemBindType != selectedItemBindType) {
+ this.selectedItemBindType = selectedItemBindType;
+ listViewListeners.selectedItemBindTypeChanged(this, previousSelectedItemBindType);
}
}
@@ -1486,86 +1601,184 @@
}
}
+ public String getSelectedItemsKey() {
+ return selectedItemsKey;
+ }
+
+ public void setSelectedItemsKey(String selectedItemsKey) {
+ String previousSelectedItemsKey = this.selectedItemsKey;
+
+ if (previousSelectedItemsKey != selectedItemsKey) {
+ this.selectedItemsKey = selectedItemsKey;
+ listViewListeners.selectedItemsKeyChanged(this, previousSelectedItemsKey);
+ }
+ }
+
+ public BindType getSelectedItemsBindType() {
+ return selectedItemsBindType;
+ }
+
+ public void setSelectedItemsBindType(BindType selectedItemsBindType) {
+ if (selectedItemsBindType == null) {
+ throw new IllegalArgumentException();
+ }
+
+ BindType previousSelectedItemsBindType = this.selectedItemsBindType;
+ if (previousSelectedItemsBindType != selectedItemsBindType) {
+ this.selectedItemsBindType = selectedItemsBindType;
+ listViewListeners.selectedItemsBindTypeChanged(this, previousSelectedItemsBindType);
+ }
+ }
+
+ public SelectedItemBindMapping getSelectedItemsBindMapping() {
+ return selectedItemsBindMapping;
+ }
+
+ public void setSelectedItemsBindMapping(SelectedItemBindMapping selectedItemsBindMapping) {
+ SelectedItemBindMapping previousSelectedItemsBindMapping = this.selectedItemsBindMapping;
+
+ if (previousSelectedItemsBindMapping != selectedItemsBindMapping) {
+ this.selectedItemsBindMapping = selectedItemsBindMapping;
+ listViewListeners.selectedItemsBindMappingChanged(this, previousSelectedItemsBindMapping);
+ }
+ }
+
@Override
@SuppressWarnings("unchecked")
public void load(Dictionary<String, ?> context) {
- if (selectedItemKey != null
- && JSONSerializer.containsKey(context, selectedItemKey)) {
- Object item = JSONSerializer.get(context, selectedItemKey);
-
- int index;
- if (selectedItemBindMapping == null) {
- index = ((List<Object>)listData).indexOf(item);
+ // Bind to list data
+ if (listDataKey != null
+ && listDataBindType != BindType.STORE
+ && JSONSerializer.containsKey(context, listDataKey)) {
+ Object value = JSONSerializer.get(context, listDataKey);
+
+ List<?> listData;
+ if (listDataBindMapping == null) {
+ listData = (List<?>)value;
} else {
- index = selectedItemBindMapping.indexOf(listData, item);
+ listData = listDataBindMapping.toListData(value);
}
- setSelectedIndex(index);
+ setListData(listData);
}
- if (selectedItemsKey != null
- && JSONSerializer.containsKey(context, selectedItemsKey)) {
- Sequence<Object> items = (Sequence<Object>)JSONSerializer.get(context, selectedItemsKey);
-
- clearSelection();
+ switch (selectMode) {
+ case SINGLE: {
+ // Bind using selected item key
+ if (selectedItemKey != null
+ && selectedItemBindType != BindType.STORE
+ && JSONSerializer.containsKey(context, selectedItemKey)) {
+ Object item = JSONSerializer.get(context, selectedItemKey);
- for (int i = 0, n = items.getLength(); i < n; i++) {
- Object item = items.get(i);
+ int index;
+ if (selectedItemBindMapping == null) {
+ index = ((List<Object>)listData).indexOf(item);
+ } else {
+ index = selectedItemBindMapping.indexOf(listData, item);
+ }
- int index;
- if (selectedItemBindMapping == null) {
- index = ((List<Object>)listData).indexOf(item);
- } else {
- index = selectedItemBindMapping.indexOf(listData, item);
+ setSelectedIndex(index);
}
- if (index != -1) {
- addSelectedIndex(index);
+ break;
+ }
+
+ case MULTI: {
+ // Bind using selected items key
+ if (selectedItemsKey != null
+ && selectedItemsBindType != BindType.STORE
+ && JSONSerializer.containsKey(context, selectedItemsKey)) {
+ Sequence<Object> items = (Sequence<Object>)JSONSerializer.get(context, selectedItemsKey);
+
+ clearSelection();
+
+ for (int i = 0, n = items.getLength(); i < n; i++) {
+ Object item = items.get(i);
+
+ int index;
+ if (selectedItemsBindMapping == null) {
+ index = ((List<Object>)listData).indexOf(item);
+ } else {
+ index = selectedItemsBindMapping.indexOf(listData, item);
+ }
+
+ if (index != -1) {
+ addSelectedIndex(index);
+ }
+ }
}
+
+ break;
}
}
}
@Override
public void store(Dictionary<String, ?> context) {
- if (isEnabled()) {
- if (selectedItemKey != null) {
- Object item;
-
- int selectedIndex = getSelectedIndex();
- if (selectedIndex == -1) {
- item = null;
- } else {
- if (selectedItemBindMapping == null) {
- item = listData.get(selectedIndex);
- } else {
- item = selectedItemBindMapping.get(listData, selectedIndex);
- }
- }
-
- JSONSerializer.put(context, selectedItemKey, item);
+ // Bind to list data
+ if (listDataKey != null
+ && listDataBindType != BindType.LOAD) {
+
+ Object value;
+ if (listDataBindMapping == null) {
+ value = listData;
+ } else {
+ value = listDataBindMapping.valueOf(listData);
}
- if (selectedItemsKey != null) {
- ArrayList<Object> items = new ArrayList<Object>();
+ JSONSerializer.put(context, listDataKey, value);
+ }
- Sequence<Span> selectedRanges = getSelectedRanges();
- for (int i = 0, n = selectedRanges.getLength(); i < n; i++) {
- Span range = selectedRanges.get(i);
+ switch (selectMode) {
+ case SINGLE: {
+ // Bind using selected item key
+ if (selectedItemKey != null
+ && selectedItemBindType != BindType.LOAD) {
+ Object item;
- for (int index = range.start; index <= range.end; index++) {
- Object item;
+ int selectedIndex = getSelectedIndex();
+ if (selectedIndex == -1) {
+ item = null;
+ } else {
if (selectedItemBindMapping == null) {
- item = listData.get(index);
+ item = listData.get(selectedIndex);
} else {
- item = selectedItemBindMapping.get(listData, index);
+ item = selectedItemBindMapping.get(listData, selectedIndex);
}
+ }
+
+ JSONSerializer.put(context, selectedItemKey, item);
+ }
+
+ break;
+ }
+
+ case MULTI: {
+ // Bind using selected items key
+ if (selectedItemsKey != null
+ && selectedItemsBindType != BindType.LOAD) {
+ ArrayList<Object> items = new ArrayList<Object>();
+
+ Sequence<Span> selectedRanges = getSelectedRanges();
+ for (int i = 0, n = selectedRanges.getLength(); i < n; i++) {
+ Span range = selectedRanges.get(i);
+
+ for (int index = range.start; index <= range.end; index++) {
+ Object item;
+ if (selectedItemsBindMapping == null) {
+ item = listData.get(index);
+ } else {
+ item = selectedItemsBindMapping.get(listData, index);
+ }
- items.add(item);
+ items.add(item);
+ }
}
+
+ JSONSerializer.put(context, selectedItemsKey, items);
}
- JSONSerializer.put(context, selectedItemsKey, items);
+ break;
}
}
}
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java?rev=919126&r1=919125&r2=919126&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java Thu Mar 4 18:54:40 2010
@@ -58,15 +58,42 @@
}
@Override
+ public void listDataKeyChanged(ListView listView, String previousListDataKey) {
+ }
+
+ @Override
+ public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType) {
+ }
+
+ @Override
+ public void listDataBindMappingChanged(ListView listView,
+ ListView.ListDataBindMapping previousListDataBindMapping) {
+ }
+
+ @Override
public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
}
@Override
+ public void selectedItemBindTypeChanged(ListView listView, BindType previousSelectedItemBindType) {
+ }
+
+ @Override
+ public void selectedItemBindMappingChanged(ListView listView,
+ ListView.SelectedItemBindMapping previousSelectedItemBindMapping) {
+ }
+
+ @Override
public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey) {
}
@Override
- public void selectedItemBindMappingChanged(ListView listView, ListView.SelectedItemBindMapping previousSelectedItemBindMapping) {
+ public void selectedItemsBindTypeChanged(ListView listView, BindType previousSelectedItemsBindType) {
+ }
+
+ @Override
+ public void selectedItemsBindMappingChanged(ListView listView,
+ ListView.SelectedItemBindMapping previousSelectedItemsBindMapping) {
}
}
@@ -127,6 +154,30 @@
Filter<?> previousDisabledCheckmarkFilter);
/**
+ * Called when a list view's list data key has changed.
+ *
+ * @param listView
+ * @param previousListDataKey
+ */
+ public void listDataKeyChanged(ListView listView, String previousListDataKey);
+
+ /**
+ * Called when a list view's list data bind type has changed.
+ *
+ * @param listView
+ * @param previousListDataBindType
+ */
+ public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType);
+
+ /**
+ * Called when a list view's list data bind mapping has changed.
+ *
+ * @param listView
+ * @param previousListDataBindMapping
+ */
+ public void listDataBindMappingChanged(ListView listView, ListView.ListDataBindMapping previousListDataBindMapping);
+
+ /**
* Called when a list view's selected item key has changed.
*
* @param listView
@@ -135,6 +186,23 @@
public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey);
/**
+ * Called when a list view's selected item bind type has changed.
+ *
+ * @param listView
+ * @param previousSelectedItemBindType
+ */
+ public void selectedItemBindTypeChanged(ListView listView, BindType previousSelectedItemBindType);
+
+ /**
+ * Called when a list view's selected item bind mapping has changed.
+ *
+ * @param listView
+ * @param previousSelectedItemBindMapping
+ */
+ public void selectedItemBindMappingChanged(ListView listView,
+ ListView.SelectedItemBindMapping previousSelectedItemBindMapping);
+
+ /**
* Called when a list view's selected items key has changed.
*
* @param listView
@@ -143,10 +211,19 @@
public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey);
/**
- * Called when a list view's bind mapping has changed.
+ * Called when a list view's selected items bind type has changed.
*
* @param listView
- * @param previousSelectedItemBindMapping
+ * @param previousSelectedItemsBindType
+ */
+ public void selectedItemsBindTypeChanged(ListView listView, BindType previousSelectedItemsBindType);
+
+ /**
+ * Called when a list view's selected items bind mapping has changed.
+ *
+ * @param listView
+ * @param previousSelectedItemsBindMapping
*/
- public void selectedItemBindMappingChanged(ListView listView, ListView.SelectedItemBindMapping previousSelectedItemBindMapping);
+ public void selectedItemsBindMappingChanged(ListView listView,
+ ListView.SelectedItemBindMapping previousSelectedItemsBindMapping);
}