package eu.etaxonomy.taxeditor.prototype2.controller;\r
\r
-import java.util.Set;\r
-\r
import org.eclipse.core.databinding.DataBindingContext;\r
import org.eclipse.core.databinding.beans.BeansObservables;\r
-import org.eclipse.core.databinding.observable.map.IMapChangeListener;\r
-import org.eclipse.core.databinding.observable.map.IObservableMap;\r
-import org.eclipse.core.databinding.observable.map.MapChangeEvent;\r
import org.eclipse.core.databinding.observable.value.IObservableValue;\r
+import org.eclipse.core.runtime.Assert;\r
import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.LabelProviderChangedEvent;\r
import org.eclipse.jface.viewers.ViewerCell;\r
import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.widgets.TreeItem;\r
\r
-import eu.etaxonomy.cdm.model.name.TaxonName;\r
import eu.etaxonomy.taxeditor.prototype2.model.PropertySheetNode;\r
import eu.etaxonomy.taxeditor.prototype2.view.PropertySheetViewer;\r
\r
*\r
*/\r
public class PropertySheetValueLabelProvider extends ColumnLabelProvider {\r
- /**\r
- * The attribute maps\r
- */\r
- private final IObservableMap[] attributeMaps;\r
\r
private PropertySheetViewer viewer;\r
-\r
- public TaxonName taxonname;\r
\r
- /**\r
- * Change listener to track changes\r
- */\r
- private IMapChangeListener mapChangeListener = new IMapChangeListener() {\r
- public void handleMapChange(MapChangeEvent event) {\r
- Set affectedElements = event.diff.getChangedKeys();\r
- LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(\r
- PropertySheetValueLabelProvider.this, affectedElements.toArray());\r
- fireLabelProviderChanged(newEvent);\r
- }\r
- };\r
-\r
private DataBindingContext bindingContext;\r
\r
- /**\r
- * @param attributeMap\r
- * @param templateText \r
- */\r
- public PropertySheetValueLabelProvider(IObservableMap attributeMap, PropertySheetViewer viewer) {\r
- this(new IObservableMap[] { attributeMap }, viewer);\r
- }\r
-\r
- /**\r
- * @param attributeMaps\r
- * @param templateText \r
- */\r
- public PropertySheetValueLabelProvider(IObservableMap[] attributeMaps, PropertySheetViewer viewer) {\r
- this.attributeMaps = attributeMaps;\r
- for (int i = 0; i < attributeMaps.length; i++) {\r
- attributeMaps[i].addMapChangeListener(mapChangeListener);\r
- } \r
+ public PropertySheetValueLabelProvider(PropertySheetViewer viewer) {\r
this.viewer = viewer;\r
this.bindingContext = viewer.getBindingContext();\r
}\r
\r
- public PropertySheetValueLabelProvider(IObservableMap[] attributeMaps2,\r
- PropertySheetViewer propertySheetViewer, TaxonName taxonname2) {\r
- this( attributeMaps2, propertySheetViewer);\r
- this.taxonname = taxonname2;\r
- }\r
-\r
- public void dispose() {\r
- for (int i = 0; i < attributeMaps.length; i++) {\r
- attributeMaps[i].removeMapChangeListener(mapChangeListener);\r
- }\r
- super.dispose();\r
- }\r
-\r
public Image getImage(Object element) {\r
return null;\r
}\r
\r
public String getText(Object element) {\r
-// System.out.println(BeansObservables.observeValue(this.taxonname, \r
-// ((PropertySheetNode) element).getObserveString()).getValue());\r
-// System.out.println(\r
-// ((PropertySheetNode) element).getObserveString() ); \r
-// \r
-// return ((PropertySheetNode) element).getPropertyValue();\r
- return (String) ((PropertySheetNode) element).getObserveValue().getValue();\r
+ return (String) ((PropertySheetNode) element).getPropertyValue();\r
}\r
- \r
+ \r
public void update(ViewerCell cell) {\r
- \r
+ \r
Object element = cell.getElement();\r
- \r
cell.setText(getText(element));\r
Image image = getImage(element);\r
cell.setImage(image);\r
cell.setForeground(getForeground(element));\r
cell.setFont(getFont(element));\r
\r
- // bind model element to its corresponding cell \r
- if (this.bindingContext != null) {\r
- \r
-// IObservableValue observeNodeValue = BeansObservables.observeValue(viewer.getInput(), \r
-// ((PropertySheetNode) element).getObserveString());\r
- IObservableValue observeNodeValue = ((PropertySheetNode) element).getObserveValue(); \r
- IObservableValue observeCellValue = BeansObservables.observeValue(cell, "text");\r
- bindingContext.bindValue(observeNodeValue, observeCellValue, null, null);\r
+ // if node element is observing a value, bind it to its TreeItem\r
+ IObservableValue observeNodeValue = ((PropertySheetNode) element).getObserveValue();\r
+ if (observeNodeValue != null) {\r
+ \r
+ Assert.isTrue(bindingContext != null,\r
+ "Label provider: PropertySheetViewer's binding context must be explicitly set.");\r
+ \r
+ TreeItemColumnAsBean itemColumn = new TreeItemColumnAsBean((TreeItem) cell.getItem(),1);\r
+ IObservableValue observeCellValue = BeansObservables.observeValue(itemColumn, "text");\r
+ bindingContext.bindValue(observeCellValue, observeNodeValue, null, null);\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * TreeItem returns column texts by index, i.e. getText(1) - this is a wrapper which \r
+ * allows BeansObservables to observe value with getText / setText\r
+ **/\r
+ class TreeItemColumnAsBean {\r
+\r
+ TreeItem item;\r
+ int index;\r
+ \r
+ TreeItemColumnAsBean(TreeItem item, int index) {\r
+ this.item = item;\r
+ this.index = index;\r
+ }\r
+\r
+ public String getText() {\r
+ return item.getText(index);\r
+ }\r
+\r
+ public void setText(String string) {\r
+ item.setText(index, string);\r
}\r
}\r
-}\r
+}
\ No newline at end of file
package eu.etaxonomy.taxeditor.prototype2.model;\r
\r
-import java.beans.PropertyChangeListener;\r
-import java.beans.PropertyChangeSupport;\r
import java.util.ArrayList;\r
import java.util.List;\r
\r
private PropertySheetNode parentProperty;\r
private String propertyField;\r
private String propertyValue;\r
- private IObservableValue observeValue = null;\r
+ private IObservableValue observeValue;\r
\r
public static boolean EDITABLE = true;\r
public static boolean NOTEDITABLE = false;\r
}\r
\r
public void setPropertyValue(String propertyValue) {\r
- String oldPropertyValue = this.propertyValue;\r
this.propertyValue = propertyValue;\r
- firePropertyChange("propertyValue",oldPropertyValue,propertyValue);\r
}\r
\r
public List<PropertySheetNode> getChildProperties() {\r
\r
public void setParentProperty(PropertySheetNode parentProperty) {\r
this.parentProperty = parentProperty;\r
- }\r
-\r
- // the string that will be used for all beans databinding, i.e. observeString "name" will be on\r
- // the lookout for getName() and setName()\r
-// public String getObserveString() {\r
-// return observeString;\r
-// }\r
+ } \r
\r
public IObservableValue getObserveValue() {\r
return this.observeValue;\r
}\r
- \r
- /*\r
- * do i need property change support, since the underlying model is what will actually be observed? \r
- */\r
- private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(\r
- this);\r
-\r
- public void addPropertyChangeListener(PropertyChangeListener listener) {\r
- propertyChangeSupport.addPropertyChangeListener(listener);\r
- }\r
-\r
- public void addPropertyChangeListener(String propertyName,\r
- PropertyChangeListener listener) {\r
- propertyChangeSupport.addPropertyChangeListener(propertyName,\r
- listener);\r
- }\r
-\r
- public void removePropertyChangeListener(PropertyChangeListener listener) {\r
- propertyChangeSupport.removePropertyChangeListener(listener);\r
- }\r
-\r
- public void removePropertyChangeListener(String propertyName,\r
- PropertyChangeListener listener) {\r
- propertyChangeSupport.removePropertyChangeListener(propertyName,\r
- listener);\r
- }\r
-\r
- protected void firePropertyChange(String propertyName, Object oldValue,\r
- Object newValue) {\r
- propertyChangeSupport.firePropertyChange(propertyName, oldValue,\r
- newValue);\r
- }\r
}\r
package eu.etaxonomy.taxeditor.prototype2.view;\r
\r
+import org.eclipse.core.databinding.DataBindingContext;\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.part.MultiPageEditorPart;\r
\r
import eu.etaxonomy.cdm.model.name.TaxonName;\r
-import eu.etaxonomy.taxeditor.prototype2.model.NameEditorInput;\r
\r
/**\r
* \r
\r
public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.multipagetaxonview";\r
private TaxonName taxonname;\r
+ private DataBindingContext bindingContext;\r
\r
@Override\r
protected void createPages() {\r
taxonname = null;\r
}\r
\r
- setPartName(taxonname.getName());\r
+// setPartName(taxonname.getName());\r
+\r
+ bindingContext = new DataBindingContext();\r
+ bindingContext.bindValue( BeansObservables.observeValue(this,"partName"),\r
+ BeansObservables.observeValue(taxonname,"name"),\r
+ null, null);\r
+ \r
setSite(site);\r
setInput(input);\r
}\r
package eu.etaxonomy.taxeditor.prototype2.view;\r
\r
import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
import java.util.ArrayList;\r
import java.util.List;\r
\r
import org.eclipse.core.databinding.DataBindingContext;\r
import org.eclipse.core.databinding.beans.BeansObservables;\r
-import org.eclipse.core.databinding.observable.map.IObservableMap;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.action.Action;\r
import org.eclipse.jface.databinding.swt.SWTObservables;\r
-import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
import org.eclipse.jface.text.Document;\r
-import org.eclipse.jface.text.TextViewer;\r
import org.eclipse.jface.text.source.SourceViewer;\r
import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.custom.PopupList;\r
import org.eclipse.swt.custom.StyledText;\r
-import org.eclipse.swt.events.ControlAdapter;\r
-import org.eclipse.swt.events.ControlEvent;\r
import org.eclipse.swt.events.FocusEvent;\r
import org.eclipse.swt.events.FocusListener;\r
import org.eclipse.swt.events.KeyAdapter;\r
import org.eclipse.swt.events.KeyEvent;\r
-import org.eclipse.swt.events.KeyListener;\r
-import org.eclipse.swt.events.MenuAdapter;\r
-import org.eclipse.swt.events.MenuEvent;\r
-import org.eclipse.swt.events.MouseAdapter;\r
import org.eclipse.swt.events.MouseEvent;\r
import org.eclipse.swt.events.SelectionAdapter;\r
import org.eclipse.swt.events.SelectionEvent;\r
import org.eclipse.swt.events.SelectionListener;\r
import org.eclipse.swt.graphics.Point;\r
import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.layout.FillLayout;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.CoolBar;\r
import org.eclipse.swt.widgets.CoolItem;\r
import org.eclipse.swt.widgets.Listener;\r
import org.eclipse.swt.widgets.Menu;\r
import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.Table;\r
-import org.eclipse.swt.widgets.TableColumn;\r
-import org.eclipse.swt.widgets.TableItem;\r
import org.eclipse.swt.widgets.Text;\r
import org.eclipse.swt.widgets.ToolBar;\r
import org.eclipse.swt.widgets.ToolItem;\r
import com.swtdesigner.ResourceManager;\r
import com.swtdesigner.SWTResourceManager;\r
\r
-//import org.eclipse.ui.texteditor.AbstractTextEditor;\r
-\r
-//import eu.etaxonomy.cdm.event.ICdmEventListener;\r
-//import eu.etaxonomy.cdm.event.ICdmEventListenerRegistration;\r
-//import eu.etaxonomy.cdm.model.name.TaxonName;\r
import eu.etaxonomy.cdm.model.name.TaxonName;\r
import eu.etaxonomy.taxeditor.prototype2.model.PropertySheetNode;\r
import eu.etaxonomy.taxeditor.prototype2.view.MySourceViewerConfig;\r
import eu.etaxonomy.taxeditor.prototype2.controller.PropertySheetValueLabelProvider;\r
import eu.etaxonomy.taxeditor.prototype2.controller.SaveNameAction;\r
import eu.etaxonomy.taxeditor.prototype2.Activator;\r
-import eu.etaxonomy.taxeditor.prototype2.controller.OpenNameEditorAction;\r
\r
public class NameEditorView extends EditorPart {\r
\r
\r
PropertySheetViewer propertySheetViewer = new PropertySheetViewer(composite);\r
propertySheetViewer.setBindingContext(bindingContext);\r
- propertySheetViewer.setContentProvider(new PropertySheetContentProvider());\r
\r
- IObservableMap[] attributeMaps = BeansObservables.observeMaps(\r
- ((ObservableListContentProvider) propertySheetViewer.getContentProvider()).getKnownElements(),\r
- PropertySheetNode.class, new String[] { "propertyValue" }); \r
-// propertySheetViewer.getPropertyValueColumn().setLabelProvider(\r
-// new PropertySheetValueLabelProvider(attributeMaps, propertySheetViewer, taxonname));\r
-// \r
-// propertySheetViewer.getPropertyValueColumn().setEditingSupport(\r
-// new PropertySheetValueEditingSupport(propertySheetViewer, taxonname));\r
-// propertySheetViewer.setInput(getPropertySheetNodes(taxonname));\r
+ propertySheetViewer.setContentProvider(\r
+ new PropertySheetContentProvider());\r
propertySheetViewer.getPropertyValueColumn().setLabelProvider(\r
- new PropertySheetValueLabelProvider(attributeMaps, propertySheetViewer));\r
- \r
+ new PropertySheetValueLabelProvider(propertySheetViewer));\r
propertySheetViewer.getPropertyValueColumn().setEditingSupport(\r
new PropertySheetValueEditingSupport(propertySheetViewer));\r
+ \r
propertySheetViewer.setInput(getPropertySheetNodes(taxonname));\r
\r
+ \r
// clickHereToText.addKeyListener(new KeyListener() {\r
//\r
// public void keyPressed(KeyEvent e) {\r
populateForm();\r
\r
Text testeroo = new Text(composite, SWT.BORDER);\r
+ testeroo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
\r
bindingContext.bindValue( SWTObservables.observeText(testeroo, SWT.Modify),\r
BeansObservables.observeValue(taxonname,"genus"),\r
- null, null);\r
- \r
+ null, null); \r
}\r
\r
// private void populateForm() {\r
\r
List<PropertySheetNode> propertySheetNodes = new ArrayList<PropertySheetNode>();\r
PropertySheetNode node = new PropertySheetNode("Full Name", BeansObservables.observeValue(taxonName, "name"), \r
- null, PropertySheetNode.NOTEDITABLE);\r
+ null, PropertySheetNode.EDITABLE);\r
propertySheetNodes.add(node);\r
new PropertySheetNode("Genus", BeansObservables.observeValue(taxonName, "genus"), \r
node, PropertySheetNode.EDITABLE);\r
\r
import org.eclipse.core.databinding.DataBindingContext;\r
import org.eclipse.core.databinding.UpdateValueStrategy;\r
-import org.eclipse.core.databinding.beans.BeansObservables;\r
import org.eclipse.core.databinding.observable.value.IObservableValue;\r
+import org.eclipse.core.runtime.Assert;\r
import org.eclipse.jface.databinding.swt.SWTObservables;\r
import org.eclipse.jface.viewers.CellEditor;\r
import org.eclipse.jface.viewers.EditingSupport;\r
import org.eclipse.jface.viewers.ViewerCell;\r
import org.eclipse.swt.SWT;\r
\r
-import eu.etaxonomy.cdm.model.name.TaxonName;\r
-import eu.etaxonomy.cdm.model.publication.Map;\r
import eu.etaxonomy.taxeditor.prototype2.model.PropertySheetNode;\r
\r
public class PropertySheetValueEditingSupport extends EditingSupport {\r
\r
- private TreeMap<PropertySheetNode,CellEditor> cellEditors;\r
+ private TreeMap<String,CellEditor> cellEditors;\r
private PropertySheetViewer viewer;\r
private DataBindingContext bindingContext;\r
- \r
- private CellEditor editor;\r
- \r
+ \r
public PropertySheetValueEditingSupport(PropertySheetViewer viewer) {\r
super(viewer);\r
this.viewer = viewer;\r
this.bindingContext = viewer.getBindingContext();\r
- this.cellEditors = new TreeMap<PropertySheetNode, CellEditor>();\r
- this.editor = new TextCellEditor(this.viewer.getTree());\r
- }\r
-\r
+ this.cellEditors = new TreeMap<String, CellEditor>();\r
+ } \r
+ \r
protected boolean canEdit(Object element) {\r
return ((PropertySheetNode) element).isEditable();\r
}\r
\r
protected CellEditor getCellEditor(Object element) {\r
- PropertySheetNode node = (PropertySheetNode) element;\r
- System.out.println((cellEditors.get(node) == null));\r
- if (cellEditors.get(node) == null)\r
- cellEditors.put(node, new TextCellEditor(viewer.getTree()));\r
-// System.out.println(cellEditors.size());\r
- return cellEditors.get(node);\r
-// return editor;\r
+ String elementString = element.toString();\r
+ if (cellEditors.get(elementString) == null)\r
+ cellEditors.put(elementString, new TextCellEditor(viewer.getTree()));\r
+ return cellEditors.get(elementString);\r
}\r
\r
protected Object getValue(Object element) {\r
-// return null;\r
return (PropertySheetNode) element;\r
}\r
\r
}\r
\r
protected void initializeCellEditorValue(CellEditor cellEditor, ViewerCell cell) {\r
- System.out.println("?");\r
PropertySheetNode node = (PropertySheetNode) getValue(cell.getElement());\r
cellEditor.setValue(node.getPropertyValue());\r
\r
- // TODO: put assertion re: bindingContext here\r
- if (this.bindingContext != null) {\r
+ // if node element is observing a value, bind it to its TreeItem\r
+ IObservableValue observeNodeValue = node.getObserveValue();\r
+ if (observeNodeValue != null) {\r
+ \r
+ Assert.isTrue(bindingContext != null,\r
+ "Editing support: PropertySheetViewer's binding context must be explicitly set.");\r
\r
- IObservableValue observeNodeValue = node.getObserveValue();\r
IObservableValue observeCellValue = SWTObservables.observeText(cellEditor.getControl(), SWT.Modify);\r
- bindingContext.bindValue(observeNodeValue, observeCellValue, \r
+ bindingContext.bindValue(observeNodeValue, observeCellValue,\r
new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT), null);\r
- \r
+ \r
}\r
- \r
} \r
-}\r
+}
\ No newline at end of file
\r
import org.eclipse.core.databinding.DataBindingContext;\r
import org.eclipse.jface.viewers.ColumnLabelProvider;\r
+import org.eclipse.jface.viewers.ILabelProvider;\r
+import org.eclipse.jface.viewers.IViewerLabelProvider;\r
import org.eclipse.jface.viewers.TreeViewer;\r
import org.eclipse.jface.viewers.TreeViewerColumn;\r
+import org.eclipse.jface.viewers.ViewerLabel;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.widgets.Composite;\r
public void setBindingContext(DataBindingContext bindingContext) {\r
this.bindingContext = bindingContext;\r
}\r
+\r
}
\ No newline at end of file