eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddQuickName.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionDeleteTaxon.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/WarningAnnotation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetContentProvider.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueEditingSupport.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueLabelProvider.java -text
org.eclipse.jface.text,
org.eclipse.ui.forms,
org.eclipse.core.resources,
+ org.eclipse.ui.views,
eu.etaxonomy.cdmLibrary
Eclipse-LazyStart: true
Export-Package: com.swtdesigner,
<extension\r
point="org.eclipse.ui.perspectives">\r
<perspective\r
- class="eu.etaxonomy.taxeditor.Perspective"\r
+ class="eu.etaxonomy.taxeditor.FreetextPropertiesPerspective"\r
fixed="false"\r
- id="eu.etaxonomy.taxeditor.perspective"\r
- name="Perspective">\r
+ id="eu.etaxonomy.taxeditor.perspective.freetextproperties"\r
+ name="FreeText - Form">\r
+ </perspective>\r
+ <perspective\r
+ class="eu.etaxonomy.taxeditor.SideBySidePerspective"\r
+ id="eu.etaxonomy.taxeditor.perspective.sidebyside"\r
+ name="Edit Taxa Side-by-Side">\r
</perspective>\r
</extension>\r
<extension\r
id="eu.etaxonomy.taxeditor.view.undoview"\r
name="Recent Actions">\r
</view>\r
+ <view\r
+ class="eu.etaxonomy.taxeditor.view.LeftPane"\r
+ id="eu.etaxonomy.taxeditor.view.LeftPane"\r
+ name="New ViewPart">\r
+ </view>\r
+ <view\r
+ class="eu.etaxonomy.taxeditor.view.LeftPane"\r
+ id="eu.etaxonomy.taxeditor.view.LeftPane2"\r
+ name="New ViewPart">\r
+ </view>\r
</extension>\r
<extension\r
point="org.eclipse.ui.editors">\r
<editor\r
- class="eu.etaxonomy.taxeditor.view.MultiPageTaxonView"\r
+ class="eu.etaxonomy.taxeditor.view.MultiPageTaxonEditor"\r
icon="icons/edit_16x16.gif"\r
id="eu.etaxonomy.taxeditor.view.multipagetaxonview"\r
name="Multitabbed Taxon Editor">\r
import org.eclipse.core.runtime.Path;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.jface.resource.ImageRegistry;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
import org.eclipse.swt.graphics.Image;\r
import org.eclipse.ui.forms.FormColors;\r
+import org.eclipse.ui.part.MultiPageSelectionProvider;\r
import org.eclipse.ui.plugin.AbstractUIPlugin;\r
import org.osgi.framework.BundleContext;\r
\r
import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
import eu.etaxonomy.cdm.api.service.INameService;\r
-import eu.etaxonomy.cdm.database.CdmDataSource;\r
-import eu.etaxonomy.cdm.model.agent.Person;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
\r
/**\r
* The activator class controls the plug-in life cycle\r
cdmApp = new CdmApplicationController();\r
INameService nameService = cdmApp.getNameService();\r
\r
-// BotanicalName botName = new BotanicalName(Rank.GENUS());\r
-// botName.setTitleCache("Hieracium L.");\r
-//// botName.setGenusOrUninomial("Hieracium");\r
-// botName.setUninomial("Hieracium");\r
-// botName.setCombinationAuthorTeam(new Person());\r
-// botName.getCombinationAuthorTeam().setTitleCache("L.");\r
+// BotanicalName botanicalName = new BotanicalName(Rank.GENUS());\r
+// botanicalName.setTitleCache("Hieracium L.");\r
+//// botanicalName.setGenusOrUninomial("Hieracium");\r
+// botanicalName.setUninomial("Hieracium");\r
+// botanicalName.setCombinationAuthorTeam(new Person());\r
+// botanicalName.getCombinationAuthorTeam().setTitleCache("L.");\r
// Taxon genusTaxon = new Taxon();\r
-// genusTaxon.setName(botName);\r
+// genusTaxon.setName(botanicalName);\r
// genusTaxon.setSec(null);\r
// \r
// BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
/* ***************************************************************************************\r
PROPERTY SHEET SELECTION PROVIDER\r
************************************************************************************** */\r
- \r
+// final ISelectionProvider provider = new ISelectionProvider() {\r
+//\r
+// private ListenerList listeners = new ListenerList();\r
+// private ISelection selection;\r
+// \r
+// @Override\r
+// public void addSelectionChangedListener(\r
+// ISelectionChangedListener listener) {\r
+// listeners.add(listener);\r
+// }\r
+//\r
+// @Override\r
+// public ISelection getSelection() {\r
+// if (selection != null)\r
+// return selection;\r
+// return null;\r
+//// return new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName()));\r
+// }\r
+//\r
+// @Override\r
+// public void removeSelectionChangedListener(\r
+// ISelectionChangedListener listener) {}\r
+//\r
+// @Override\r
+// public void setSelection(ISelection selection) {\r
+// this.selection = selection;\r
+// }\r
+// };\r
+ \r
+ \r
+// public ISelectionProvider getProvider() {\r
+//// this.getWorkbench().getActiveWorkbenchWindow().getSelectionService();\r
+// return this.provider;\r
+// }\r
\r
/* ***************************************************************************************\r
IMAGE REGISTRY\r
public void initialize(IWorkbenchConfigurer configurer) {
super.initialize(configurer);
-
+
// Remembers the user's layout and window size
// for the next time application is started
// configurer.setSaveAndRestore(true);
--- /dev/null
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+import eu.etaxonomy.taxeditor.view.LeftPane;
+import eu.etaxonomy.taxeditor.view.NameListView;
+
+public class SideBySidePerspective implements IPerspectiveFactory {
+
+ /*
+ * To remember the user's layout and window sizes for the next time they
+ * start your application, add configurer.setSaveAndRestore(true); to the
+ * initialize() method of WorkbenchAdvisor.
+ */
+
+ public static final String ID = "eu.etaxonomy.taxeditor.perspective.sidebyside";
+
+ public void createInitialLayout(IPageLayout layout) {
+ String editorArea = layout.getEditorArea();
+// layout.addStandaloneView(NameListView.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
+// layout.getViewLayout(NameListView.ID).setCloseable(false);
+ layout.addStandaloneView(LeftPane.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
+ layout.getViewLayout(LeftPane.ID).setCloseable(false);
+// layout.getViewLayout("org.eclipse.ui.views.PropertySheet").setCloseable(false);
+// layout.addView(UndoView.ID, IPageLayout.BOTTOM, 0.8f, editorArea);
+ addFastViews(layout);
+
+ }
+ private void addFastViews(IPageLayout layout) {
+ System.currentTimeMillis();
+ }
+}
package eu.etaxonomy.taxeditor.controller;\r
\r
import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.viewers.ISelection;\r
\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.taxeditor.Activator;\r
\r
/**\r
- * Open up a celleditor in the taxonomic tree \r
- * to add a quickname to taxon\r
+ * Convert an object to a structured selection, pass it to the\r
+ * universal property sheet provider.\r
* \r
* @author p.ciardelli\r
*\r
*/\r
public class ActionPopulatePropertySheet extends Action {\r
TaxonNameBase name;\r
+ private ISelection selection;\r
\r
- public ActionPopulatePropertySheet(TaxonNameBase name) {\r
- this.name = name;\r
+ public ActionPopulatePropertySheet(ISelection selection) {\r
+ this.selection = selection;\r
}\r
\r
public void run() {\r
- \r
- \r
- // Open new node\r
-// System.out.println(PlatformUI.getWorkbench().getActiveWorkbenchWindow().\r
-// getActivePage().getActiveEditor().getSite().getPart()..getId());\r
-// MultiPageTaxonEditor mptv;\r
-// mptv.get\r
- \r
- \r
+ Activator.getDefault().getProvider().setSelection(this.selection);\r
}\r
}
\ No newline at end of file
\r
import java.beans.PropertyChangeEvent;\r
import java.beans.PropertyChangeListener;\r
-import java.util.Vector;\r
\r
import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.ListenerList;\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.ISelectionProvider;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.PartInitException;\r
import org.eclipse.ui.part.MultiPageEditorPart;\r
-import org.eclipse.ui.part.MultiPageSelectionProvider;\r
-import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
-import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
-import org.eclipse.ui.views.properties.IPropertySheetEntry;\r
-import org.eclipse.ui.views.properties.IPropertySheetPage;\r
-import org.eclipse.ui.views.properties.IPropertySource;\r
-import org.eclipse.ui.views.properties.PropertyDescriptor;\r
-import org.eclipse.ui.views.properties.PropertySheetEntry;\r
-import org.eclipse.ui.views.properties.PropertySheetPage;\r
-import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
\r
/**\r
*\r
*/\r
public class MultiPageTaxonEditor extends MultiPageEditorPart {\r
-//public class MultiPageTaxonEditor extends FormEditor implements IAdaptable {\r
+//public class MultiPageTaxonEditor extends FormEditor {\r
\r
public static final String ID = "eu.etaxonomy.taxeditor.view.multipagetaxonview";\r
private Taxon taxon;\r
\r
@Override\r
protected void createPages() {\r
- \r
+ \r
try {\r
addPage(0, new NameEditorView(), getEditorInput());\r
setPageText(0, "Name");\r
-\r
- addPage(1, new NameEditorView(), getEditorInput());\r
+ \r
+ addPage(1, new EmptyEditorView(), getEditorInput());\r
setPageText(1, "Descriptive");\r
\r
- addPage(2, new NameEditorView(), getEditorInput());\r
+ addPage(2, new EmptyEditorView(), getEditorInput());\r
setPageText(2, "Concepts");\r
\r
- addPage(3, new NameEditorView(), getEditorInput());\r
+ addPage(3, new EmptyEditorView(), getEditorInput());\r
setPageText(3, "Geographic");\r
- \r
- } catch (PartInitException e) { \r
- // TODO Auto-generated catch block\r
+ \r
+ } catch (PartInitException e) {\r
e.printStackTrace();\r
}\r
- \r
-// bindPartName();\r
}\r
\r
@Override\r
\r
if (!(input instanceof IEditorInput))\r
throw new PartInitException(\r
- "Invalid Input: Must be IFileEditorInput");\r
+ "Invalid Input: Must be IEditorInput");\r
\r
// Get taxon from editor input\r
if (input.getAdapter(Taxon.class) != null) {\r
else\r
setPartName(taxon.getName().getTitleCache());\r
\r
- setSite(site);\r
- setInput(input);\r
- \r
-// ISelectionProvider provider = new MultiPageSelectionProvider(this);\r
-// this.getSite().setSelectionProvider(provider);\r
-// provider.setSelection(new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName())));\r
-// this.getSite().getSelectionProvider().setSelection(new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName())));\r
- \r
- final ISelectionProvider provider = new ISelectionProvider() {\r
-\r
- private ListenerList listeners = new ListenerList();\r
- \r
- @Override\r
- public void addSelectionChangedListener(\r
- ISelectionChangedListener listener) {\r
- listeners.add(listener);\r
- }\r
-\r
- @Override\r
- public ISelection getSelection() {\r
- return new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName()));\r
- }\r
-\r
- @Override\r
- public void removeSelectionChangedListener(\r
- ISelectionChangedListener listener) {}\r
-\r
- @Override\r
- public void setSelection(ISelection selection) {\r
- \r
- }\r
- \r
- };\r
- \r
- this.getSite().setSelectionProvider(provider);\r
- \r
- }\r
- \r
- public Object getAdapter(Class type) {\r
- if (type == IPropertySheetPage.class) {\r
- PropertySheetPage page = new PropertySheetPage();\r
- \r
-// CustomSortPropertySheetEntry entry = new CustomSortPropertySheetEntry();\r
-// page.setRootEntry(entry);\r
- PropertySheetEntry entry = new PropertySheetEntry();\r
- page.setRootEntry(entry);\r
- \r
- return page;\r
- }\r
- return super.getAdapter(type);\r
- }\r
-\r
- /* ******************************************************************************************************************** */\r
- /* ******************************************************************************************************************** */\r
- /* ******************************************************************************************************************** */\r
- /* ******************************************************************************************************************** */\r
- \r
- class BotNamePropertySource implements IPropertySource {\r
- \r
- String[] ranks = new String[] {"Genus", "Species", "Subspecies"};\r
- \r
- protected Vector<PropertyDescriptor> descriptors;\r
- {\r
- descriptors = new Vector<PropertyDescriptor>();\r
- \r
- // PropertyDescriptor - uneditable cell value\r
- descriptors.addElement(\r
- new PropertyDescriptor("titleCache","a1:TitleCache"));\r
- \r
- // ComboBoxPropertyDescriptor - dropdown list, property supplied must be integer-based\r
- ComboBoxPropertyDescriptor ranksDescriptor = \r
- new ComboBoxPropertyDescriptor("rank", "a4:Rank", ranks);\r
- \r
- // if any entry has a category, all non-set default to category "Misc"\r
- ranksDescriptor.setCategory("Rank stuff");\r
- // IPropertySheetEntry.FILTER_ID_EXPERT -> \r
- // this descriptor is only available under "Show advanced properties" \r
- ranksDescriptor.setFilterFlags (new String[] { IPropertySheetEntry.FILTER_ID_EXPERT });\r
- \r
- descriptors.addElement(ranksDescriptor);\r
- }\r
- \r
- BotanicalName botName;\r
- \r
- public BotNamePropertySource(BotanicalName botName) {\r
- this.botName = botName;\r
- \r
-// botName.addPropertyChangeListener(new PropertyChangeListener() {\r
-//\r
-// @Override\r
-// public void propertyChange(PropertyChangeEvent evt) {\r
-// System.out.println(evt.getPropertyName() + ": " + evt.getNewValue());\r
-// resetPropertyValue(evt.getPropertyName()); \r
-// }\r
-// \r
-// });\r
- \r
- }\r
-\r
- @Override\r
- public Object getEditableValue() {\r
- return this;\r
- }\r
-\r
- @Override\r
- public IPropertyDescriptor[] getPropertyDescriptors() {\r
- return (IPropertyDescriptor[]) descriptors.toArray(\r
- new IPropertyDescriptor[descriptors.size()]);\r
- }\r
-\r
- @Override\r
- public Object getPropertyValue(Object id) {\r
- System.out.println("calling getPropertyValue for id " + id.toString());\r
- if (id.equals("titleCache"))\r
- // nest IPropertySource to set child nodes\r
- return new IPropertySource() {\r
-\r
- protected Vector<PropertyDescriptor> descriptors;\r
- {\r
- descriptors = new Vector<PropertyDescriptor>();\r
- \r
- // TextPropertyDescriptor - editable cell value\r
- descriptors.addElement(\r
- new TextPropertyDescriptor("uninomial","a2:Uninomial"));\r
- descriptors.addElement(\r
- new TextPropertyDescriptor("specificEpithet","a3:SpecificEpithet"));\r
- \r
- }\r
- \r
- @Override\r
- public Object getEditableValue() {\r
- return this;\r
- }\r
-\r
- @Override\r
- public IPropertyDescriptor[] getPropertyDescriptors() {\r
- return (IPropertyDescriptor[]) descriptors.toArray(\r
- new IPropertyDescriptor[descriptors.size()]);\r
- }\r
-\r
- @Override\r
- public Object getPropertyValue(Object id) {\r
- if (id.equals("uninomial"))\r
- return BotNamePropertySource.this.botName.getUninomial();\r
- if (id.equals("specificEpithet"))\r
- return BotNamePropertySource.this.botName.getSpecificEpithet();\r
- return null;\r
- }\r
-\r
- @Override\r
- public boolean isPropertySet(Object id) {\r
- return false;\r
- }\r
-\r
- @Override\r
- public void resetPropertyValue(Object id) {}\r
-\r
- @Override\r
- public void setPropertyValue(Object id, Object value) {\r
- if (id.equals("uninomial"))\r
- BotNamePropertySource.this.botName.setUninomial((String) value);\r
- if (id.equals("specificEpithet"))\r
- BotNamePropertySource.this.botName.setSpecificEpithet((String) value);\r
- }\r
- \r
- public String toString() {\r
- return BotNamePropertySource.this.botName.getTitleCache();\r
- }\r
- \r
- };\r
- if (id.equals("rank")) {\r
- System.out.println("Rank: " + this.botName.getRank().getLabel());\r
- String rank = this.botName.getRank().getLabel();\r
- for (int i = 0; i < ranks.length; i++) {\r
- if (rank.equals(ranks[i])) \r
- return i;\r
- }\r
- return 0;\r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- public boolean isPropertySet(Object id) {\r
- return false;\r
- }\r
-\r
- @Override\r
- public void resetPropertyValue(Object id) {}\r
-\r
- @Override\r
- public void setPropertyValue(Object id, Object value) {}\r
- }\r
- \r
- class NameTitleCachePropertySource extends BotNamePropertySource {\r
-\r
- {\r
- descriptors = new Vector<PropertyDescriptor>();\r
- \r
- // TextPropertyDescriptor - editable cell value\r
- descriptors.addElement(\r
- new TextPropertyDescriptor("uninomial","a2:Uninomial"));\r
- descriptors.addElement(\r
- new TextPropertyDescriptor("specificEpithet","a3:SpecificEpithet"));\r
- \r
- }\r
- \r
- public NameTitleCachePropertySource(BotanicalName botName) {\r
- super(botName);\r
- }\r
- \r
- }\r
+ super.init(site, input);\r
\r
+ } \r
}\r
import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.ListenerList;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.ui.forms.IManagedForm;\r
import org.eclipse.ui.forms.ManagedForm;\r
import org.eclipse.ui.part.EditorPart;\r
+import org.eclipse.ui.views.properties.IPropertySheetPage;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;\r
+import eu.etaxonomy.taxeditor.view.propertysheetsupport.BotanicalNamePropertySource;\r
+import eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetEntry;\r
\r
public class NameEditorView extends EditorPart {\r
\r
// taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
\r
setSite(site);\r
- setInput(input); \r
+ setInput(input);\r
+\r
+ final ISelectionProvider provider = new ISelectionProvider() {\r
+ \r
+ private ListenerList listeners = new ListenerList();\r
+ private ISelection selection;\r
+ \r
+ @Override\r
+ public void addSelectionChangedListener(\r
+ ISelectionChangedListener listener) {\r
+ listeners.add(listener);\r
+ }\r
+ \r
+ @Override\r
+ public ISelection getSelection() {\r
+ if (selection != null)\r
+ return selection;\r
+ return null;\r
+ }\r
+ \r
+ @Override\r
+ public void removeSelectionChangedListener(\r
+ ISelectionChangedListener listener) {}\r
+ \r
+ @Override\r
+ public void setSelection(ISelection selection) {\r
+ this.selection = selection;\r
+ fireSelectionChanged();\r
+ }\r
+\r
+ private void fireSelectionChanged() {\r
+ \r
+ SelectionChangedEvent event = new SelectionChangedEvent(this, selection);\r
+ \r
+ for (Object listener : listeners.getListeners()) {\r
+ if (listener instanceof ISelectionChangedListener) {\r
+ ((ISelectionChangedListener)listener).selectionChanged(event);\r
+ }\r
+ }\r
+ }\r
+ };\r
+ \r
+ this.getSite().setSelectionProvider(provider);\r
+ provider.setSelection(\r
+ new StructuredSelection(\r
+ new BotanicalNamePropertySource((BotanicalName) taxon.getName())));\r
}\r
\r
@Override\r
\r
@Override\r
public void createPartControl(final Composite parent) {\r
- \r
+ \r
this.parent = parent;\r
this.managedForm = new ManagedForm(parent);\r
- \r
+ \r
parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
parent.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
\r
homoGroupComposite.setNameEditorView(this);\r
\r
new NameComposite(homoGroupComposite, taxon).setNameEditorView(this);\r
- \r
+ \r
TesterooWritableSet.getInstance().addSetChangeListener\r
(new ISetChangeListener() {\r
public void handleSetChange(SetChangeEvent event) {\r
NameEditorView.this.managedForm.getForm().reflow(true);\r
}\r
});\r
-// System.out.println("provider class: " + this.getSite().getSelectionProvider().getClass());\r
}\r
\r
private void createHeterotypicalGroup(Synonym heterosyn) {\r
-\r
+ \r
GroupComposite heteroGroupComposite = new GroupComposite(parent);\r
heteroGroupComposite.setTaxon(taxon);\r
heteroGroupComposite.setNameEditorView(this);\r
NameComposite nameComposite = new NameComposite(heteroGroupComposite, heterosyn, taxon);\r
nameComposite.setNameEditorView(this);\r
nameComposite.setFocus();\r
+\r
+ BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
+ botSpecies.setTitleCache("Hieracium geranium Smith");\r
+ botSpecies.setUninomial("Hieracium");\r
+ botSpecies.setSpecificEpithet("geranium");\r
+ this.getSite().getSelectionProvider().setSelection\r
+ (new StructuredSelection(new BotanicalNamePropertySource(botSpecies)));\r
+\r
+ \r
} \r
\r
@Override\r
public Composite getComposite() {\r
return parent;\r
}\r
-}\r
+\r
+ public Object getAdapter(Class type) {\r
+ if (type == IPropertySheetPage.class) {\r
+ PropertySheetPage page = new PropertySheetPage();\r
+ \r
+ CustomSortPropertySheetEntry entry = new CustomSortPropertySheetEntry();\r
+ page.setRootEntry(entry);\r
+ \r
+ return page;\r
+ }\r
+ return super.getAdapter(type);\r
+ } \r
+}
\ No newline at end of file
import org.eclipse.ui.forms.widgets.FormToolkit;\r
import org.eclipse.ui.forms.widgets.ScrolledForm;\r
import org.eclipse.ui.part.ViewPart;\r
+import org.eclipse.ui.views.properties.IPropertySheetPage;\r
+import org.eclipse.ui.views.properties.PropertySheetEntry;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
\r
import com.swtdesigner.ResourceManager;\r
import com.swtdesigner.SWTResourceManager;\r
*/\r
public TreeViewer getTreeViewer() {\r
return treeViewer;\r
- }\r
- \r
+ } \r
}\r
// Listen for focus to send this name to the property sheet\r
nameViewer.getTextWidget().addFocusListener(new FocusAdapter () {\r
public void focusGained(FocusEvent e) {\r
- \r
+ showBorder();\r
// if (nameEditor != null) \r
// nameEditor.setPropertySheetNodes(getName());\r
}\r
(compositeType == ACCEPTED? taxon : synonym).setName(name);\r
\r
BotanicalName botname = (BotanicalName)name; \r
- System.out.println("Composite: " + botname.getTitleCache() + " - " + botname.getUninomial() +\r
- " - " + botname.getSpecificEpithet() + " - " + botname.toString());\r
+// System.out.println("Composite: " + botname.getTitleCache() + " - " + botname.getUninomial() +\r
+// " - " + botname.getSpecificEpithet() + " - " + botname.toString());\r
}\r
\r
protected void showBorder() {\r
if (!(managedForm == null)) {\r
- this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
- managedForm.getToolkit().paintBordersFor(this.getParent());\r
+ System.out.println("showin");\r
+ nameViewer.getTextWidget().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+ managedForm.getToolkit().paintBordersFor(this);\r
+// this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+// managedForm.getToolkit().paintBordersFor(this.getParent());\r
managedForm.getForm().reflow(true);\r
}\r
}\r
--- /dev/null
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.Vector;\r
+\r
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
+import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+\r
+/**\r
+ * Property source for Botanical Name entries.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class BotanicalNamePropertySource implements IPropertySource {\r
+\r
+ // Property unique keys\r
+ public static final String P_ID_RANK = "rank";\r
+ public static final String P_ID_TITLECACHE = "titlecache";\r
+ public static final String P_ID_UNINOMIAL = "uninomial";\r
+ public static final String P_ID_SPECIESEP = "speciesep";\r
+\r
+ // Property display keys\r
+ // Note: for an explanation of the sorting prefixes ("04:"), \r
+ // @see eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetEntry\r
+ public static final String P_RANK = "04:Rank";\r
+ public static final String P_TITLECACHE = "01:Title Cache";\r
+ public static final String P_UNINOMIAL = "02:Uninomial";\r
+ public static final String P_SPECIESEP = "03:Specific Epithet";\r
+ \r
+ String[] ranks = new String[] {"Genus", "Species", "Subspecies"};\r
+ BotanicalName botanicalName;\r
+ private String parentid;\r
+ \r
+ protected Vector<PropertyDescriptor> descriptors = new Vector<PropertyDescriptor>();\r
+ /**\r
+ * Add descriptor for a given property.\r
+ * \r
+ * Notes on Descriptor:\r
+ * \r
+ * PropertyDescriptor - uneditable cell value\r
+ * ComboBoxPropertyDescriptor - dropdown list, property supplied must be integer-based\r
+ * TextPropertyDescriptor - editable cell value\r
+ * \r
+ * If any descriptor calls setCategory, all descriptors w/out a category are put in \r
+ * category "Misc".\r
+ * \r
+ * descriptor.setFilterFlags (new String[] { IPropertySheetEntry.FILTER_ID_EXPERT }) -\r
+ * this descriptor shown under advanced properties\r
+ * \r
+ * @param id\r
+ */\r
+ private void addDescriptor(String id) {\r
+ if (id.equals(P_ID_RANK))\r
+ descriptors.addElement(\r
+ new ComboBoxPropertyDescriptor(P_ID_RANK, P_RANK, ranks));\r
+ if (id.equals(P_ID_TITLECACHE))\r
+ descriptors.addElement(\r
+ new PropertyDescriptor(P_ID_TITLECACHE, P_TITLECACHE)); \r
+ if (id.equals(P_ID_UNINOMIAL))\r
+ descriptors.addElement(\r
+ new TextPropertyDescriptor(P_ID_UNINOMIAL, P_UNINOMIAL));\r
+ if (id.equals(P_ID_SPECIESEP))\r
+ descriptors.addElement(\r
+ new TextPropertyDescriptor(P_ID_SPECIESEP, P_SPECIESEP));\r
+ }\r
+ \r
+ public BotanicalNamePropertySource(BotanicalName botanicalName) {\r
+ this(botanicalName, null, new String[] {P_ID_RANK, P_ID_TITLECACHE});\r
+ }\r
+\r
+ public BotanicalNamePropertySource(BotanicalName botanicalName, \r
+ String parentid, String[] keys) {\r
+ this.botanicalName = botanicalName;\r
+ this.parentid = parentid;\r
+ for (String key : keys)\r
+ addDescriptor(key);\r
+ }\r
+ \r
+ @Override\r
+ public Object getEditableValue() {\r
+ return this;\r
+ }\r
+\r
+ @Override\r
+ public IPropertyDescriptor[] getPropertyDescriptors() {\r
+ return (IPropertyDescriptor[]) descriptors.toArray(\r
+ new IPropertyDescriptor[descriptors.size()]);\r
+ }\r
+\r
+ @Override\r
+ public Object getPropertyValue(Object id) { \r
+ if (id.equals(P_ID_RANK)) {\r
+ String rank = this.botanicalName.getRank().getLabel();\r
+ for (int i = 0; i < ranks.length; i++) {\r
+ if (rank.equals(ranks[i])) \r
+ return i;\r
+ }\r
+ return 0;\r
+ }\r
+ if (id.equals(P_ID_TITLECACHE))\r
+ return new BotanicalNamePropertySource(botanicalName, \r
+ P_ID_TITLECACHE,\r
+ new String[] {P_ID_UNINOMIAL, P_ID_SPECIESEP});\r
+ if (id.equals(P_ID_UNINOMIAL))\r
+ return botanicalName.getUninomial();\r
+ if (id.equals(P_ID_SPECIESEP))\r
+ return botanicalName.getSpecificEpithet();\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public boolean isPropertySet(Object id) {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public void resetPropertyValue(Object id) {}\r
+\r
+ @Override\r
+ public void setPropertyValue(Object id, Object value) {}\r
+\r
+ @Override\r
+ public String toString() {\r
+ if (parentid.equals(P_ID_TITLECACHE))\r
+ return botanicalName.getTitleCache(); \r
+ return super.toString();\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import org.eclipse.ui.views.properties.PropertySheetEntry;\r
+\r
+/**\r
+ * Humiliatingly hacky override of PropertySheetEntry.\r
+ * \r
+ * GetDisplayName is called by two methods from the PropertySheetViewer, which\r
+ * a) we are not allowed to set, and\r
+ * b) uses a comparator which sorts alphabetically.\r
+ * So we set display names in the PropertySourceDescriptors as "01:Uninomial",\r
+ * "02:Specific Epithet"; if we ascertain from the stack trace that a "compare"\r
+ * method is asking for the display name, we return the uncut version for\r
+ * sorting; when any other method requests a display name, we chop off the ":"\r
+ * and everything before it.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CustomSortPropertySheetEntry extends PropertySheetEntry {\r
+ \r
+ protected PropertySheetEntry createChildEntry() {\r
+ return new CustomSortPropertySheetEntry();\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.views.properties.PropertySheetEntry#getDisplayName()\r
+ */\r
+ public String getDisplayName() {\r
+ \r
+ String displayName = super.getDisplayName();\r
+ \r
+ Thread currentThread = Thread.currentThread();\r
+ StackTraceElement stackRequestingName = currentThread.getStackTrace()[2];\r
+ // currentThread.getStackTrace()[0] = call to getStackTrace\r
+ // currentThread.getStackTrace()[1] = getDisplayName\r
+ // currentThread.getStackTrace()[2] = who is calling getDisplayName\r
+\r
+ if (stackRequestingName.toString().lastIndexOf("compare") != -1)\r
+ return displayName;\r
+ \r
+ int colon = displayName.lastIndexOf(':');\r
+ if (colon != -1)\r
+ displayName = displayName.substring(colon + 1);\r
+ return displayName;\r
+ } \r
+\r
+}
\ No newline at end of file