|
From: <pat...@us...> - 2010-07-09 20:55:25
|
Revision: 1083
http://cishell.svn.sourceforge.net/cishell/?rev=1083&view=rev
Author: pataphil
Date: 2010-07-09 20:55:18 +0000 (Fri, 09 Jul 2010)
Log Message:
-----------
* Added additional ModelDataSynchronizer types + field-adding-support to GUIModel/SWT utilities.
Modified Paths:
--------------
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
Added Paths:
-----------
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/SingleListSelectionDataSynchronizer.java
trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TextDataSynchronizer.java
Modified: 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 2010-07-08 17:37:42 UTC (rev 1082)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModel.java 2010-07-09 20:55:18 UTC (rev 1083)
@@ -3,23 +3,28 @@
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.SingleListSelectionDataSynchronizer;
+import org.cishell.utilities.swt.model.datasynchronizer.TextDataSynchronizer;
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;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Widget;
public class GUIModel {
- private Map<String, GUIModelField<?>> inputFieldsByName =
- new HashMap<String, GUIModelField<?>>();
+ private Map<String, GUIModelField<?, ? extends Widget, ? extends ModelDataSynchronizer<?>>>
+ inputFieldsByName = new HashMap<
+ String, GUIModelField<?, ? extends Widget, ? extends ModelDataSynchronizer<?>>>();
public GUIModel() {
}
@@ -28,75 +33,130 @@
return this.inputFieldsByName.keySet();
}
- public Collection<GUIModelField<?>> getFields() {
+ public Collection<
+ GUIModelField<?, ? extends Widget, ? extends ModelDataSynchronizer<?>>> getFields() {
return this.inputFieldsByName.values();
}
- public GUIModelField<?> getField(String name) {
+ public GUIModelField<
+ ?, ? extends Widget, ? extends ModelDataSynchronizer<?>> getField(String name) {
return this.inputFieldsByName.get(name);
}
- public Button addCheckBox(String name, boolean on, Composite parent, int style) {
+ public GUIModelField<Boolean, Button, CheckBoxDataSynchronizer> 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);
+ CheckBoxDataSynchronizer dataSynchronizer = new CheckBoxDataSynchronizer(checkBox, on);
+ GUIModelField<Boolean, Button, CheckBoxDataSynchronizer> field =
+ new GUIModelField<Boolean, Button, CheckBoxDataSynchronizer>(
+ name, on, checkBox, dataSynchronizer);
addField(field);
- return checkBox;
+ return field;
}
- public Combo addDropDown(
+ public GUIModelField<String, Combo, DropDownDataSynchronizer> addSingleSelectionDropDown(
String name,
int selectedIndex,
Collection<String> unorderedOptionLabels,
Map<String, String> optionValuesByLabels,
Composite parent,
int style) {
- List<String> orderedOptionLabels = new ArrayList<String>(unorderedOptionLabels);
+ java.util.List<String> orderedOptionLabels = new ArrayList<String>(unorderedOptionLabels);
Combo dropDown = new Combo(parent, style | SWT.DROP_DOWN);
- ModelDataSynchronizer<String> dataSynchronizer = new DropDownDataSynchronizer(
+ DropDownDataSynchronizer dataSynchronizer = new DropDownDataSynchronizer(
dropDown, selectedIndex, orderedOptionLabels, optionValuesByLabels);
- GUIModelField<String> field = new GUIModelField<String>(
- name, orderedOptionLabels.get(selectedIndex), dropDown, dataSynchronizer);
+ GUIModelField<String, Combo, DropDownDataSynchronizer> field =
+ new GUIModelField<String, Combo, DropDownDataSynchronizer>(
+ name, orderedOptionLabels.get(selectedIndex), dropDown, dataSynchronizer);
addField(field);
- return dropDown;
+ return field;
}
+ // TODO: addMultiSelectionDropDown
+
// TODO: Test this out.
- public DateTime addDate(
+ public GUIModelField<org.joda.time.DateTime, DateTime, DateDataSynchronizer> 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);
+ DateDataSynchronizer dataSynchronizer = new DateDataSynchronizer(dateSelector, date);
+ GUIModelField<org.joda.time.DateTime, DateTime, DateDataSynchronizer> field =
+ new GUIModelField<org.joda.time.DateTime, DateTime, DateDataSynchronizer>(
+ name, date, dateSelector, dataSynchronizer);
addField(field);
- return dateSelector;
+ return field;
}
// TODO: Test this out.
- public DateTime addTime(
+ public GUIModelField<org.joda.time.DateTime, DateTime, TimeDataSynchronizer> 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);
+ TimeDataSynchronizer dataSynchronizer = new TimeDataSynchronizer(timeSelector, time);
+ GUIModelField<org.joda.time.DateTime, DateTime, TimeDataSynchronizer> field =
+ new GUIModelField<org.joda.time.DateTime, DateTime, TimeDataSynchronizer>(
+ name, time, timeSelector, dataSynchronizer);
addField(field);
- return timeSelector;
+ return field;
}
// TODO: addCalendar
-// public List addSingleSelectionList(
-// String name,
+ // TODO: Test this out.
+ public GUIModelField<String, List, SingleListSelectionDataSynchronizer> addSingleSelectionList(
+ String name,
+ int selectedIndex,
+ Collection<String> unorderedOptionLabels,
+ Map<String, String> optionValuesByLabels,
+ Composite parent,
+ int style) {
+ java.util.List<String> orderedOptionLabels = new ArrayList<String>(unorderedOptionLabels);
+ List list = new List(parent, style | SWT.SINGLE);
+ SingleListSelectionDataSynchronizer dataSynchronizer =
+ new SingleListSelectionDataSynchronizer(
+ list, selectedIndex, orderedOptionLabels, optionValuesByLabels);
+ GUIModelField<String, List, SingleListSelectionDataSynchronizer> field =
+ new GUIModelField<String, List, SingleListSelectionDataSynchronizer>(
+ name, list.getItem(selectedIndex), list, dataSynchronizer);
+ addField(field);
- public<T> void addField(GUIModelField<T> field) {
+ return field;
+ }
+
+ // TODO: addMultiSelectionList
+ // TODO: addProgressBar
+ // TODO: addSash?
+ // TODO: addSlider
+ // TODO: addScale
+ // TODO: addSpinner
+ // TODO: addStyledText
+
+ public GUIModelField<String, Text, TextDataSynchronizer> addUnstyledText(
+ String name,
+ String value,
+ boolean isMultiLined,
+ Composite parent,
+ int style) {
+ if (isMultiLined) {
+ style = style | SWT.MULTI;
+ } else {
+ style = style | SWT.SINGLE;
+ }
+
+ Text text = new Text(parent, style);
+ TextDataSynchronizer dataSynchronizer = new TextDataSynchronizer(text, value);
+ GUIModelField<String, Text, TextDataSynchronizer> field =
+ new GUIModelField<String, Text, TextDataSynchronizer>(
+ name, value, text, dataSynchronizer);
+ addField(field);
+
+ return field;
+ }
+
+ public<T> void addField(
+ GUIModelField<T, ? extends Widget, ? extends ModelDataSynchronizer<?>> field) {
String fieldName = field.getName();
if (this.inputFieldsByName.containsKey(fieldName)) {
Modified: 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 2010-07-08 17:37:42 UTC (rev 1082)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/GUIModelField.java 2010-07-09 20:55:18 UTC (rev 1083)
@@ -5,18 +5,18 @@
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Widget;
-public class GUIModelField<T> {
+public class GUIModelField<T, U extends Widget, V extends ModelDataSynchronizer<T>> {
private String name;
private T defaultValue;
private T value;
- private Widget widget;
- private ModelDataSynchronizer<T> dataSynchronizer;
+ private U widget;
+ private V dataSynchronizer;
public GUIModelField(
String name,
T defaultValue,
- Widget widget,
- ModelDataSynchronizer<T> dataSynchronizer) {
+ U widget,
+ V dataSynchronizer) {
this.name = name;
this.defaultValue = defaultValue;
this.value = this.defaultValue;
@@ -41,6 +41,14 @@
return this.value;
}
+ public U getWidget() {
+ return this.widget;
+ }
+
+ public V getDataSynchronizer() {
+ return this.dataSynchronizer;
+ }
+
public void setValue(T value) {
this.value = this.dataSynchronizer.synchronizeToGUI(value);
}
Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/SingleListSelectionDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/SingleListSelectionDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/SingleListSelectionDataSynchronizer.java 2010-07-09 20:55:18 UTC (rev 1083)
@@ -0,0 +1,53 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+import java.util.Map;
+
+import org.cishell.utilities.MapUtilities;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.List;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+
+// TODO: Make this so options can change on it.
+public class SingleListSelectionDataSynchronizer implements ModelDataSynchronizer<String> {
+ private List singleSelectionList;
+ private BiMap<Integer, String> optionLabels;
+ private Map<String, String> optionValuesByLabels;
+
+ public SingleListSelectionDataSynchronizer(
+ List singleSelectionList,
+ int selectedIndex,
+ java.util.List<String> optionLabels,
+ Map<String, String> optionValuesByLabels) {
+ this.singleSelectionList = singleSelectionList;
+ this.optionLabels = HashBiMap.create(MapUtilities.mapIndexToValues(optionLabels));
+ this.optionValuesByLabels = optionValuesByLabels;
+
+ this.singleSelectionList.setItems(optionLabels.toArray(new String[0]));
+ this.singleSelectionList.select(selectedIndex);
+ }
+
+ public int swtUpdateListenerCode() {
+ return SWT.Selection;
+ }
+
+ public String value() {
+ return this.optionValuesByLabels.get(
+ this.optionLabels.get(this.singleSelectionList.getSelectionIndex()));
+ }
+
+ public String synchronizeFromGUI() {
+ return this.optionLabels.get(this.singleSelectionList.getSelectionIndex());
+ }
+
+ public String synchronizeToGUI(String value) {
+ this.singleSelectionList.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/TextDataSynchronizer.java
===================================================================
--- trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TextDataSynchronizer.java (rev 0)
+++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/swt/model/datasynchronizer/TextDataSynchronizer.java 2010-07-09 20:55:18 UTC (rev 1083)
@@ -0,0 +1,36 @@
+package org.cishell.utilities.swt.model.datasynchronizer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Text;
+
+public class TextDataSynchronizer implements ModelDataSynchronizer<String> {
+ private Text text;
+
+ public TextDataSynchronizer(Text text, String value) {
+ this.text = text;
+
+ this.text.setText(value);
+ }
+
+ public int swtUpdateListenerCode() {
+ return SWT.Selection;
+ }
+
+ public String value() {
+ return this.text.getText();
+ }
+
+ public String synchronizeFromGUI() {
+ return value();
+ }
+
+ public String synchronizeToGUI(String value) {
+ this.text.setText(value);
+
+ return value();
+ }
+
+ public String reset(String 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.
|