|
From: <pat...@us...> - 2010-07-08 17:37:48
|
Revision: 1082
http://cishell.svn.sourceforge.net/cishell/?rev=1082&view=rev
Author: pataphil
Date: 2010-07-08 17:37:42 +0000 (Thu, 08 Jul 2010)
Log Message:
-----------
* Committing (partially done) GUIModel framework and additional MapUtilities.
Modified Paths:
--------------
trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF
trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java
Added Paths:
-----------
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModel.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModelField.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/ModelFieldException.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/CheckBoxDataSynchronizer.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DateDataSynchronizer.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DropDownDataSynchronizer.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/ModelDataSynchronizer.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TimeDataSynchronizer.java
Modified: trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF
===================================================================
--- trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF 2010-07-06 20:19:54 UTC (rev 1081)
+++ trunk/core/org.cishell.utilities/META-INF/MANIFEST.MF 2010-07-08 17:37:42 UTC (rev 1082)
@@ -36,6 +36,8 @@
org.cishell.utilities.mutateParameter.defaultvalue,
org.cishell.utilities.mutateParameter.dropdown,
org.cishell.utilities.osgi.logging,
- org.cishell.utilities.swt
+ org.cishell.utilities.swt,
+ org.cishell.utilities.swt.model,
+ org.cishell.utilities.swt.model.datasynchronizer
Require-Bundle: org.eclipse.ui;resolution:=optional,
org.eclipse.core.runtime;resolution:=optional
Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java 2010-07-06 20:19:54 UTC (rev 1081)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -2,6 +2,8 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class MapUtilities {
@@ -20,4 +22,44 @@
return workingKeys;
}
+
+ public static<T> Map<T, T> mirror(Collection<T> items) {
+ Map<T, T> mirroredItems = new HashMap<T, T>();
+
+ for (T item : items) {
+ mirroredItems.put(item, item);
+ }
+
+ return mirroredItems;
+ }
+
+ public static<K, V> List<K> keysWithOrder(Map<K, V> map) {
+ List<K> keys = new ArrayList<K>();
+
+ for (K key : map.keySet()) {
+ keys.add(key);
+ }
+
+ return keys;
+ }
+
+ public static<K, V> Collection<V> valuesWithPreservedOrder(Map<K, V> map, Collection<K> keys) {
+ List<V> values = new ArrayList<V>();
+
+ for (K key : keys) {
+ values.add(map.get(key));
+ }
+
+ return values;
+ }
+
+ public static<V> Map<Integer, V> mapIndexToValues(List<V> values) {
+ Map<Integer, V> valuesByIndex = new HashMap<Integer, V>();
+
+ for (int ii = 0; ii < values.size(); ii++) {
+ valuesByIndex.put(ii, values.get(ii));
+ }
+
+ return valuesByIndex;
+ }
}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModel.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModel.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModel.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,110 @@
+package org.cishell.utilities.swt.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.cishell.utilities.swt.model.datasynchronizer.CheckBoxDataSynchronizer;
+import org.cishell.utilities.swt.model.datasynchronizer.DateDataSynchronizer;
+import org.cishell.utilities.swt.model.datasynchronizer.DropDownDataSynchronizer;
+import org.cishell.utilities.swt.model.datasynchronizer.ModelDataSynchronizer;
+import org.cishell.utilities.swt.model.datasynchronizer.TimeDataSynchronizer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DateTime;
+
+public class GUIModel {
+ private Map<String, GUIModelField<?>> inputFieldsByName =
+ new HashMap<String, GUIModelField<?>>();
+
+ public GUIModel() {
+ }
+
+ public Collection<String> getFieldNames() {
+ return this.inputFieldsByName.keySet();
+ }
+
+ public Collection<GUIModelField<?>> getFields() {
+ return this.inputFieldsByName.values();
+ }
+
+ public GUIModelField<?> getField(String name) {
+ return this.inputFieldsByName.get(name);
+ }
+
+ public Button addCheckBox(String name, boolean on, Composite parent, int style) {
+ Button checkBox = new Button(parent, style | SWT.CHECK);
+ ModelDataSynchronizer<Boolean> dataSynchronizer =
+ new CheckBoxDataSynchronizer(checkBox, on);
+ GUIModelField<Boolean> field =
+ new GUIModelField<Boolean>(name, on, checkBox, dataSynchronizer);
+ addField(field);
+
+ return checkBox;
+ }
+
+ public Combo addDropDown(
+ String name,
+ int selectedIndex,
+ Collection<String> unorderedOptionLabels,
+ Map<String, String> optionValuesByLabels,
+ Composite parent,
+ int style) {
+ List<String> orderedOptionLabels = new ArrayList<String>(unorderedOptionLabels);
+ Combo dropDown = new Combo(parent, style | SWT.DROP_DOWN);
+ ModelDataSynchronizer<String> dataSynchronizer = new DropDownDataSynchronizer(
+ dropDown, selectedIndex, orderedOptionLabels, optionValuesByLabels);
+ GUIModelField<String> field = new GUIModelField<String>(
+ name, orderedOptionLabels.get(selectedIndex), dropDown, dataSynchronizer);
+ addField(field);
+
+ return dropDown;
+ }
+
+ // TODO: Test this out.
+ public DateTime addDate(
+ String name, org.joda.time.DateTime date, Composite parent, int style) {
+ DateTime dateSelector = new DateTime(parent, style | SWT.DATE);
+ ModelDataSynchronizer<org.joda.time.DateTime> dataSynchronizer =
+ new DateDataSynchronizer(dateSelector, date);
+ GUIModelField<org.joda.time.DateTime> field = new GUIModelField<org.joda.time.DateTime>(
+ name, date, dateSelector, dataSynchronizer);
+ addField(field);
+
+ return dateSelector;
+ }
+
+ // TODO: Test this out.
+ public DateTime addTime(
+ String name, org.joda.time.DateTime time, Composite parent, int style) {
+ DateTime timeSelector = new DateTime(parent, style | SWT.TIME);
+ ModelDataSynchronizer<org.joda.time.DateTime> dataSynchronizer =
+ new TimeDataSynchronizer(timeSelector, time);
+ GUIModelField<org.joda.time.DateTime> field = new GUIModelField<org.joda.time.DateTime>(
+ name, time, timeSelector, dataSynchronizer);
+ addField(field);
+
+ return timeSelector;
+ }
+
+ // TODO: addCalendar
+
+// public List addSingleSelectionList(
+// String name,
+
+ public<T> void addField(GUIModelField<T> field) {
+ String fieldName = field.getName();
+
+ if (this.inputFieldsByName.containsKey(fieldName)) {
+ String exceptionMessage =
+ "A field with the name \"" + fieldName + "\" already exists. Unable to continue.";
+ throw new ModelFieldException(exceptionMessage);
+ }
+
+ this.inputFieldsByName.put(fieldName, field);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModelField.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModelField.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModelField.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,51 @@
+package org.cishell.utilities.swt.model;
+
+import org.cishell.utilities.swt.model.datasynchronizer.ModelDataSynchronizer;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Widget;
+
+public class GUIModelField<T> {
+ private String name;
+ private T defaultValue;
+ private T value;
+ private Widget widget;
+ private ModelDataSynchronizer<T> dataSynchronizer;
+
+ public GUIModelField(
+ String name,
+ T defaultValue,
+ Widget widget,
+ ModelDataSynchronizer<T> dataSynchronizer) {
+ this.name = name;
+ this.defaultValue = defaultValue;
+ this.value = this.defaultValue;
+ this.widget = widget;
+ this.dataSynchronizer = dataSynchronizer;
+
+ this.widget.addListener(this.dataSynchronizer.swtUpdateListenerCode(), new Listener() {
+ public void handleEvent(Event event) {
+ if (event.type == GUIModelField.this.dataSynchronizer.swtUpdateListenerCode()) {
+ GUIModelField.this.value =
+ GUIModelField.this.dataSynchronizer.synchronizeFromGUI();
+ }
+ }
+ });
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public T getValue() {
+ return this.value;
+ }
+
+ public void setValue(T value) {
+ this.value = this.dataSynchronizer.synchronizeToGUI(value);
+ }
+
+ public void reset() {
+ this.value = this.dataSynchronizer.reset(this.defaultValue);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/ModelFieldException.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/ModelFieldException.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/ModelFieldException.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,21 @@
+package org.cishell.utilities.swt.model;
+
+public class ModelFieldException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ public ModelFieldException() {
+ super();
+ }
+
+ public ModelFieldException(String arg0) {
+ super(arg0);
+ }
+
+ public ModelFieldException(Throwable arg0) {
+ super(arg0);
+ }
+
+ public ModelFieldException(String arg0, Throwable arg1) {
+ super(arg0, arg1);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/CheckBoxDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/CheckBoxDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/CheckBoxDataSynchronizer.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,35 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+
+public class CheckBoxDataSynchronizer implements ModelDataSynchronizer<Boolean> {
+ private Button checkBox;
+
+ public CheckBoxDataSynchronizer(Button checkBox, boolean on) {
+ this.checkBox = checkBox;
+ this.checkBox.setSelection(on);
+ }
+
+ public int swtUpdateListenerCode() {
+ return SWT.Selection;
+ }
+
+ public Boolean value() {
+ return this.checkBox.getSelection();
+ }
+
+ public Boolean synchronizeFromGUI() {
+ return value();
+ }
+
+ public Boolean synchronizeToGUI(Boolean value) {
+ this.checkBox.setSelection(value);
+
+ return value;
+ }
+
+ public Boolean reset(Boolean defaultValue) {
+ return synchronizeToGUI(defaultValue);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DateDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DateDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DateDataSynchronizer.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,42 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.DateTime;
+
+public class DateDataSynchronizer implements ModelDataSynchronizer<org.joda.time.DateTime> {
+ private DateTime dateSelector;
+
+ public DateDataSynchronizer(DateTime dateSelector, org.joda.time.DateTime date) {
+ this.dateSelector = dateSelector;
+ synchronizeToGUI(date);
+ }
+
+ public int swtUpdateListenerCode() {
+ return SWT.Selection;
+ }
+
+ public org.joda.time.DateTime value() {
+ return new org.joda.time.DateTime(
+ this.dateSelector.getYear(),
+ this.dateSelector.getMonth(),
+ this.dateSelector.getDay(),
+ 0,
+ 0,
+ 0,
+ 0);
+ }
+
+ public org.joda.time.DateTime synchronizeFromGUI() {
+ return value();
+ }
+
+ public org.joda.time.DateTime synchronizeToGUI(org.joda.time.DateTime date) {
+ this.dateSelector.setDate(date.getYear(), date.getMonthOfYear(), date.getDayOfMonth());
+
+ return value();
+ }
+
+ public org.joda.time.DateTime reset(org.joda.time.DateTime defaultValue) {
+ return synchronizeToGUI(defaultValue);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DropDownDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DropDownDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/DropDownDataSynchronizer.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,54 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+import java.util.List;
+import java.util.Map;
+
+import org.cishell.utilities.MapUtilities;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Combo;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+
+// TODO: Make this so options can change on it.
+public class DropDownDataSynchronizer implements ModelDataSynchronizer<String> {
+ private Combo dropDown;
+ private BiMap<Integer, String> optionLabels;
+ private Map<String, String> optionValuesByLabels;
+
+ public DropDownDataSynchronizer(
+ Combo dropDown,
+ int selectedIndex,
+ List<String> optionLabels,
+ Map<String, String> optionValuesByLabels) {
+ this.dropDown = dropDown;
+ this.optionLabels = HashBiMap.create(MapUtilities.mapIndexToValues(optionLabels));
+ this.optionValuesByLabels = optionValuesByLabels;
+
+ this.dropDown.setItems(optionLabels.toArray(new String[0]));
+ this.dropDown.select(selectedIndex);
+ }
+
+ public int swtUpdateListenerCode() {
+ return SWT.Selection;
+ }
+
+ public String value() {
+ return this.optionValuesByLabels.get(
+ this.optionLabels.get(this.dropDown.getSelectionIndex()));
+ }
+
+ public String synchronizeFromGUI() {
+ return this.optionLabels.get(this.dropDown.getSelectionIndex());
+ }
+
+ public String synchronizeToGUI(String value) {
+ this.dropDown.select(this.optionLabels.inverse().get(value));
+
+ return value();
+ }
+
+ public String reset(String defaultValue) {
+ return synchronizeToGUI(defaultValue);
+ }
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/ModelDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/ModelDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/ModelDataSynchronizer.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,9 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+public interface ModelDataSynchronizer<T> {
+ public int swtUpdateListenerCode();
+ public T value();
+ public T synchronizeFromGUI();
+ public T synchronizeToGUI(T value);
+ public T reset(T defaultValue);
+}
\ No newline at end of file
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TimeDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TimeDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TimeDataSynchronizer.java 2010-07-08 17:37:42 UTC (rev 1082)
@@ -0,0 +1,43 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.DateTime;
+
+public class TimeDataSynchronizer implements ModelDataSynchronizer<org.joda.time.DateTime> {
+ private DateTime timeSelector;
+
+ public TimeDataSynchronizer(DateTime timeSelector, org.joda.time.DateTime time) {
+ this.timeSelector = timeSelector;
+ synchronizeToGUI(time);
+ }
+
+ public int swtUpdateListenerCode() {
+ return SWT.Selection;
+ }
+
+ public org.joda.time.DateTime value() {
+ return new org.joda.time.DateTime(
+ 0,
+ 0,
+ 0,
+ this.timeSelector.getHours(),
+ this.timeSelector.getMinutes(),
+ this.timeSelector.getSeconds(),
+ 0);
+ }
+
+ public org.joda.time.DateTime synchronizeFromGUI() {
+ return value();
+ }
+
+ public org.joda.time.DateTime synchronizeToGUI(org.joda.time.DateTime time) {
+ this.timeSelector.setTime(
+ time.getHourOfDay(), time.getMinuteOfHour(), time.getSecondOfMinute());
+
+ return value();
+ }
+
+ public org.joda.time.DateTime reset(org.joda.time.DateTime defaultValue) {
+ return synchronizeToGUI(defaultValue);
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|