eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java -text
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/Perspective.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.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/model/NameEditorInput.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameTreeContentProvider.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/PropertySheetNode.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/BotanicalNameDetailsPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorDetailsPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMasterDetailsBlock.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EmptyEditorView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/LeftPane.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MasterDetailsPage.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MoveDialogView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorViewOld.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameListView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameViewer.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/PropertySheetViewer.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/RecentNamesTableViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/ScrolledPropertiesBlock.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TaxonomicTreeViewer.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TestDragAndDrop.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/UndoView.java -text
import java.net.URL;\r
import java.util.ResourceBundle;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.core.databinding.observable.list.WritableList;\r
import org.eclipse.core.databinding.observable.set.WritableSet;\r
import org.eclipse.core.runtime.IPath;\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
* The constructor\r
*/\r
public Activator() {\r
+ final Logger logger = Logger.getLogger(Activator.class.getName());\r
+ \r
+ logger.error("Start");\r
+// CdmApplicationController.toDelete();\r
+// HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.CREATE;\r
+// cdmApp = new CdmApplicationController(hbm2dll);\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
// \r
// BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
// botSpecies.setTitleCache("Hieracium asturianum Pau");\r
+//// botSpecies.setGenusOrUninomial("Hieracium");\r
// botSpecies.setUninomial("Hieracium");\r
// botSpecies.setSpecificEpithet("asturianum");\r
// botSpecies.setCombinationAuthorTeam(new Person());\r
//\r
// BotanicalName botSpecies2= new BotanicalName(Rank.SPECIES());\r
// botSpecies2.setTitleCache("Hieracium wolffii Zahn");\r
+//// botSpecies2.setGenusOrUninomial("Hieracium");\r
// botSpecies2.setUninomial("Hieracium");\r
// botSpecies2.setSpecificEpithet("wolffii");\r
// botSpecies2.setCombinationAuthorTeam(new Person());\r
// \r
// cdmApp.getTaxonService().saveTaxon(genusTaxon);\r
// \r
-// System.exit(-1); \r
+//// System.exit(-1); \r
}\r
\r
/*\r
/**\r
* All CDM services are called via the application controller\r
*/\r
- private CdmApplicationController cdmApp = new CdmApplicationController();\r
+ \r
+// HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.VALIDATE;\r
+// private CdmApplicationController cdmApp = new CdmApplicationController(hbm2dll);\r
+ private CdmApplicationController cdmApp;\r
\r
public CdmApplicationController getCdmApp() {\r
return cdmApp;\r
return observableSynonymSet; \r
}\r
\r
+ /* ***************************************************************************************\r
+ PROPERTY SHEET SELECTION PROVIDER\r
+ ************************************************************************************** */\r
+ \r
+ \r
/* ***************************************************************************************\r
IMAGE REGISTRY\r
************************************************************************************** */\r
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
- private static final String PERSPECTIVE_ID = "eu.etaxonomy.taxeditor.perspective";
+ private static final String PERSPECTIVE_ID = "eu.etaxonomy.taxeditor.perspective.freetextproperties";
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
configurer.setInitialSize(new Point(800, 600));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
+ configurer.setShowPerspectiveBar(true);
configurer.setTitle("EDIT Taxonomic Editor");
}
--- /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 FreetextPropertiesPerspective 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.freetextproperties";
+
+ 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);
+
+ IFolderLayout folderLayout = layout.createFolder("folder", IPageLayout.RIGHT, 0.5f, editorArea);
+ folderLayout.addView("org.eclipse.ui.views.PropertySheet");
+ 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();
+ }
+}
+++ /dev/null
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-import eu.etaxonomy.taxeditor.view.NameListView;
-
-public class Perspective implements IPerspectiveFactory {
-
- public static final String ID = "eu.etaxonomy.taxeditor.perspective";
-
- public void createInitialLayout(IPageLayout layout) {
- String editorArea = layout.getEditorArea();
- layout.addStandaloneView(NameListView.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
-// layout.addView(UndoView.ID, IPageLayout.BOTTOM, 0.8f, editorArea);
- layout.getViewLayout(NameListView.ID).setCloseable(false);
- addFastViews(layout);
- }
- private void addFastViews(IPageLayout layout) {
- System.currentTimeMillis();
- }
-}
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.view.MultiPageTaxonView;\r
+import eu.etaxonomy.taxeditor.view.MultiPageTaxonEditor;\r
import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
+import eu.etaxonomy.taxeditor.view.LeftPane;\r
import eu.etaxonomy.taxeditor.view.NameListView;\r
import eu.etaxonomy.taxeditor.view.TaxonomicTreeViewer;\r
\r
\r
public void run() {\r
\r
+ \r
// If this is a non-empty taxon being opened for the first time,\r
// add to recent names list \r
if (taxon.getName().getTitleCache() != null &&\r
// If this taxon is not visible in the tree, open node\r
((TaxonomicTreeViewer) ((NameListView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().\r
findView(NameListView.ID)).getTreeViewer()).revealTaxon(taxon);\r
- \r
+ \r
IEditorInput input = new NameEditorInput(taxon);\r
try {\r
Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().\r
- getActivePage().openEditor(input, MultiPageTaxonView.ID);\r
+ getActivePage().openEditor(input, MultiPageTaxonEditor.ID);\r
} catch (PartInitException e) {\r
// TODO Auto-generated catch block\r
e.printStackTrace();\r
// Open new node\r
// System.out.println(PlatformUI.getWorkbench().getActiveWorkbenchWindow().\r
// getActivePage().getActiveEditor().getSite().getPart()..getId());\r
-// MultiPageTaxonView mptv;\r
+// MultiPageTaxonEditor mptv;\r
// mptv.get\r
\r
\r
--- /dev/null
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.forms.IFormPart;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+\r
+public class BotanicalNameDetailsPage extends EditorDetailsPage {\r
+\r
+ private BotanicalName name;\r
+ private Text titleText;\r
+ private Text genusText;\r
+ private Text spEpText;\r
+ private Text authorText;\r
+ \r
+ @Override\r
+ public boolean isDirty() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean isStale() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public void refresh() {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
+ @Override\r
+ public void setFocus() {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
+ @Override\r
+ public boolean setFormInput(Object input) {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+ \r
+ @Override\r
+ public void selectionChanged(IFormPart part, ISelection selection) {\r
+ \r
+ IStructuredSelection ssel = (IStructuredSelection) selection;\r
+ \r
+ final TaxonBase newTaxon = (TaxonBase) ssel.getFirstElement();\r
+ BotanicalName newName = (BotanicalName) newTaxon.getName();\r
+ \r
+ if ((this.name == null) || ! newName.getRank().equals(this.name.getRank())) {\r
+ Section nameSection = createSection("Name");\r
+ titleText = (Text) createInputField(nameSection, "Full Name", newName, "titleCache");\r
+ genusText = (Text) createInputField(nameSection, "Genus", newName, "uninomial");\r
+ spEpText = (Text) createInputField(nameSection, "Specific epithet", newName, "specificEpithet");\r
+// authorText = (Text) createInputField(nameSection, "Authorship", newName, "authorshipCache");\r
+// titleText = (Text) createInputField(nameSection, "Full Name", null, null);\r
+// genusText = (Text) createInputField(nameSection, "Genus", null, null);\r
+// spEpText = (Text) createInputField(nameSection, "Specific epithet", null, null);\r
+ }\r
+ \r
+ newTaxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
+ public void propertyChange(PropertyChangeEvent e) {\r
+ BotanicalName botName = (BotanicalName) newTaxon.getName();\r
+ titleText.setText(botName.getTitleCache());\r
+ genusText.setText(botName.getUninomial());\r
+ spEpText.setText(botName.getSpecificEpithet());\r
+ }\r
+ });\r
+\r
+ if ((this.name == null) || ! newName.getAuthorshipCache().equals(this.name.getAuthorshipCache())) {\r
+ Section authorshipSection = createSection("Authorship");\r
+ } \r
+ \r
+ if ((this.name == null) || ! newName.getNomenclaturalReference().equals(this.name.getNomenclaturalReference())) {\r
+ Section nomRefSection = createSection("Nomenclatural reference");\r
+ } \r
+\r
+ if ((this.name == null) || ! newName.getHomotypicalGroup().getTypeDesignations().\r
+ equals(this.name.getHomotypicalGroup().getTypeDesignations())) {\r
+ Section typeSection = createSection("Type information");\r
+ }\r
+ \r
+ this.name = newName;\r
+ }\r
+\r
+ public void showObject() {\r
+ BotanicalName botname = (BotanicalName)name;\r
+ System.out.println("Details: " + botname.getTitleCache() + " - " + botname.getUninomial() +\r
+ " - " + botname.getSpecificEpithet() + " - " + botname.toString());\r
+ } \r
+ \r
+ @Override\r
+ public void commit(boolean onSave) {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void dispose() {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+}\r
--- /dev/null
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import org.eclipse.core.databinding.DataBindingContext;\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.jface.databinding.swt.SWTObservables;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.KeyListener;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.forms.IDetailsPage;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.events.ExpansionAdapter;\r
+import org.eclipse.ui.forms.events.ExpansionEvent;\r
+import org.eclipse.ui.forms.widgets.ColumnLayout;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+/**\r
+ * The abstract class for details, i.e. form-based editing.\r
+ * \r
+ * Implementing classes should add section and input fields in\r
+ * selectionChanged(). Content elements are null before this.\r
+ * \r
+ * Sections can be wiped clean to be re-built with disposeSectionContent(section),\r
+ * for instance, when a TaxonName changes its rank and a name consists of different\r
+ * parts. \r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public abstract class EditorDetailsPage implements IDetailsPage {\r
+\r
+ private FormToolkit toolkit;\r
+ private ScrolledForm form;\r
+ private IManagedForm mform;\r
+ private Composite detailsComposite;\r
+ private DataBindingContext bindingContext = new DataBindingContext();\r
+ \r
+ @Override\r
+ public void createContents(Composite parent) { \r
+ \r
+ detailsComposite = parent;\r
+ toolkit = mform.getToolkit();\r
+ \r
+ ColumnLayout layout = new ColumnLayout();\r
+ layout.topMargin = 0;\r
+ layout.bottomMargin = 5;\r
+ layout.leftMargin = 10;\r
+ layout.rightMargin = 10;\r
+ layout.horizontalSpacing = 10;\r
+ layout.verticalSpacing = 10;\r
+ layout.maxNumColumns = 4;\r
+ layout.minNumColumns = 1; \r
+ parent.setLayout(layout); \r
+ }\r
+\r
+ protected Section createSection(String title) {\r
+ final Section section = toolkit.createSection(detailsComposite, \r
+ Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED);\r
+ section.marginWidth = 10;\r
+ section.setText(title); //$NON-NLS-1$ \r
+ \r
+ createClient(section);\r
+ \r
+ section.addExpansionListener(new ExpansionAdapter() {\r
+ public void expansionStateChanged(ExpansionEvent e) {\r
+ form.reflow(false);\r
+ }\r
+ });\r
+ \r
+ return section;\r
+ }\r
+ \r
+ private void createClient(Section section) {\r
+\r
+ Composite client = toolkit.createComposite(section);\r
+ GridLayout gridlayout = new GridLayout();\r
+ gridlayout.marginWidth = gridlayout.marginHeight = 5;\r
+ gridlayout.numColumns = 2;\r
+ client.setLayout(gridlayout);\r
+ section.setClient(client);\r
+ \r
+ toolkit.paintBordersFor(client);\r
+ }\r
+ \r
+ protected Control createInputField(Section section, String label, \r
+ Object bindObject, String bindField) {\r
+ \r
+ Composite client = (Composite) section.getClient();\r
+ toolkit.createLabel(client, label); //$NON-NLS-1$\r
+ Text text = toolkit.createText(client, "", SWT.SINGLE );\r
+ text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); //$NON-NLS-1$\r
+ text.setData(FormToolkit.TEXT_BORDER);\r
+ \r
+ text.addKeyListener(new KeyListener() {\r
+\r
+ @Override\r
+ public void keyPressed(KeyEvent e) {\r
+ }\r
+\r
+ @Override\r
+ public void keyReleased(KeyEvent e) {\r
+ showObject();\r
+ }\r
+ \r
+ });\r
+ \r
+ if (!(bindObject == null)) {\r
+ bindingContext.bindValue(\r
+ SWTObservables.observeText(text, SWT.Modify),\r
+ BeansObservables.observeValue(bindObject, bindField),\r
+ null, null);\r
+ }\r
+ return text;\r
+ }\r
+\r
+\r
+ abstract public void showObject();\r
+ \r
+ protected void disposeSectionContent(Section section) {\r
+ section.getClient().dispose();\r
+ createClient(section);\r
+ }\r
+ \r
+ @Override\r
+ public void initialize(IManagedForm mform) {\r
+ this.mform = mform;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.DetailsPart;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.MasterDetailsBlock;\r
+import org.eclipse.ui.forms.SectionPart;\r
+import org.eclipse.ui.forms.editor.FormPage;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+import eu.etaxonomy.taxeditor.Activator;\r
+/**\r
+ * Responsible for the look and feel of freetext (master) - form (detail)\r
+ * view used when editing names / synonymy, concepts, features, etc.\r
+ * \r
+ * Should be called in the constructor of a class implementing FormPage, which then\r
+ * calls getMasterPage() to write to the master Component and registers detail pages\r
+ * via getDetails(), Ã la:\r
+ * \r
+ * block.getDetails().registerPage(BotanicalName.class, nameDetailsPage);\r
+ * \r
+ * @author p.ciardelli\r
+ */\r
+public class EditorMasterDetailsBlock extends MasterDetailsBlock {\r
+ private Composite master;\r
+ private SectionPart details;\r
+ private IManagedForm managedForm;\r
+ \r
+ /**\r
+ * @param page\r
+ */\r
+ public EditorMasterDetailsBlock(FormPage page) { }\r
+\r
+ public void createContent(IManagedForm managedForm) {\r
+ super.createContent(managedForm);\r
+ \r
+ this.managedForm = managedForm;\r
+ // After master-details have been laid out, populate details by\r
+ // firing an event\r
+// managedForm.fireSelectionChanged(details, new StructuredSelection(taxon.get));\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.forms.MasterDetailsBlock#createMasterPart(org.eclipse.ui.forms.IManagedForm, org.eclipse.swt.widgets.Composite)\r
+ */\r
+ protected void createMasterPart(final IManagedForm managedForm,\r
+ Composite parent) {\r
+ \r
+ FormToolkit toolkit = managedForm.getToolkit();\r
+ Section section = toolkit.createSection(parent, Section.NO_TITLE);\r
+ \r
+ master = toolkit.createComposite(section);\r
+ GridLayout layout = new GridLayout();\r
+ layout.marginWidth = 2;\r
+ layout.marginHeight = 2;\r
+ master.setLayout(layout);\r
+ section.setClient(master);\r
+ \r
+ // Still unclear why I can't just use DetailsPart ...\r
+ details = new SectionPart(section);\r
+ managedForm.addPart(details);\r
+ \r
+// recentNamesViewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
+// public void selectionChanged(SelectionChangedEvent event) { \r
+// managedForm.fireSelectionChanged(details, event.getSelection());\r
+// }\r
+// });\r
+ }\r
+ \r
+ protected void createToolBarActions(IManagedForm managedForm) {\r
+ final ScrolledForm form = managedForm.getForm();\r
+ Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
+ public void run() {\r
+ sashForm.setOrientation(SWT.HORIZONTAL);\r
+ form.reflow(true);\r
+ }\r
+ };\r
+ haction.setChecked(true);\r
+// haction.setToolTipText(Messages.getString("EditorMasterDetailsBlock.horizontal")); //$NON-NLS-1$\r
+ haction.setToolTipText("Align editing horizontally"); //$NON-NLS-1$\r
+ haction.setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor(Activator.IMG_HORIZONTAL));\r
+ Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
+ public void run() {\r
+ sashForm.setOrientation(SWT.VERTICAL);\r
+ form.reflow(true);\r
+ }\r
+ };\r
+ vaction.setChecked(false);\r
+// vaction.setToolTipText(Messages.getString("EditorMasterDetailsBlock.vertical")); //$NON-NLS-1$\r
+ vaction.setToolTipText("Align editing vertically"); //$NON-NLS-1$\r
+ vaction.setImageDescriptor(Activator.getDefault()\r
+ .getImageRegistry().getDescriptor(Activator.IMG_VERTICAL));\r
+ form.getToolBarManager().add(haction);\r
+ form.getToolBarManager().add(vaction);\r
+ }\r
+ protected void registerPages(DetailsPart detailsPart) {\r
+// detailsPart.setPageProvider(new IDetailsPageProvider() {\r
+//\r
+// @Override\r
+// public IDetailsPage getPage(Object key) {\r
+// return new BotanicalNameDetailsPage();\r
+// }\r
+//\r
+// @Override\r
+// public Object getPageKey(Object object) {\r
+// return null;\r
+// }\r
+// \r
+// }); \r
+// detailsPart.registerPage(TaxonNameBase.class, new BotanicalNameDetailsPage());\r
+ }\r
+ public Composite getMaster() {\r
+ return master;\r
+ }\r
+ public DetailsPart getDetails() {\r
+ return detailsPart;\r
+ }\r
+ public void setInput(Object obj) {\r
+ managedForm.fireSelectionChanged(details, new StructuredSelection(obj));\r
+ }\r
+}
\ No newline at end of file
package eu.etaxonomy.taxeditor.view;\r
\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+\r
import org.eclipse.jface.action.IMenuManager;\r
import org.eclipse.jface.action.IToolBarManager;\r
import org.eclipse.jface.viewers.ITreeViewerListener;\r
import org.eclipse.jface.viewers.TreeExpansionEvent;\r
import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ControlEvent;\r
-import org.eclipse.swt.events.ControlListener;\r
+import org.eclipse.swt.custom.SashForm;\r
import org.eclipse.swt.events.FocusEvent;\r
import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.Rectangle;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
import org.eclipse.swt.widgets.Label;\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.Sash;\r
import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.swt.widgets.TreeItem;\r
+import org.eclipse.ui.forms.FormColors;\r
+import org.eclipse.ui.forms.IFormColors;\r
import org.eclipse.ui.forms.ManagedForm;\r
import org.eclipse.ui.forms.events.ExpansionAdapter;\r
import org.eclipse.ui.forms.events.ExpansionEvent;\r
import org.eclipse.ui.forms.widgets.FormToolkit;\r
import org.eclipse.ui.forms.widgets.ScrolledForm;\r
import org.eclipse.ui.forms.widgets.Section;\r
-import org.eclipse.ui.forms.widgets.TableWrapData;\r
-import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+import org.eclipse.ui.forms.widgets.SharedScrolledComposite;\r
import org.eclipse.ui.part.ViewPart;\r
\r
import com.swtdesigner.ResourceManager;\r
private TaxonomicTreeViewer treeViewer;\r
private RecentNamesTableViewer recentNamesViewer;\r
private ManagedForm managedForm;\r
+ private SashForm sashForm;\r
\r
/**\r
* Create contents of the view part\r
layout.maxNumColumns = 4;\r
layout.minNumColumns = 1; \r
this.body.setLayout(layout);\r
+// this.body.setLayout(new FillLayout());\r
+ \r
+// this.body.setLayoutData(new ColumnLayoutData(SWT.DEFAULT, SWT.TOP));\r
\r
+ // Create non-resizable datasource element \r
createDatasourceInfo();\r
+\r
+ // Create sash form to put resizable elements on\r
+// this.sashForm = new MDSashForm(this.body, SWT.VERTICAL);\r
+// toolkit.adapt(sashForm, false, false);\r
+\r
createTaxonomicTree();\r
createRecentNames();\r
createSearch();\r
createFavorites();\r
\r
+// this.sashForm.setWeights(new int[] { 30, 20, 20, 20 });\r
+// hookResizeListener();\r
+ \r
createActions();\r
initializeToolBar();\r
initializeMenu();\r
\r
private void createTaxonomicTree() {\r
\r
- final Composite treeComp = createExpandableSection("Taxonomic tree", null);\r
+// final Composite treeComp = createExpandableSection("Taxonomic tree", null);\r
+ final Composite treeComp = createSection("Taxonomic tree", null, 1);\r
+ \r
+ treeComp.getParent().addListener(SWT.Resize, new Listener() {\r
+\r
+ @Override\r
+ public void handleEvent(Event event) {\r
+ System.out.println("resizing");\r
+ }\r
+ \r
+ });\r
+ \r
treeComp.setRedraw(true);\r
+// treeComp.setData(FormToolkit.TEXT_BORDER);\r
treeViewer = new TaxonomicTreeViewer(treeComp);\r
- treeViewer.getTree().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+// treeViewer.getTree().setLayout(new ColumnLayout());\r
+// treeViewer.getTree().setLayoutData(new ColumnLayoutData());\r
+// treeViewer.getTree().setLayoutData(new TableWrapData(\r
+// TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));\r
+ treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+// treeViewer.getTree().setData(FormToolkit.TREE_BORDER);\r
+ \r
+ treeViewer.getTree().addListener(SWT.Resize, new Listener() {\r
+\r
+ @Override\r
+ public void handleEvent(Event event) {\r
+ \r
+ if (event.item != null)\r
+ System.out.println("item " + event.item.toString());\r
+\r
+ if (event.widget != null)\r
+ System.out.println("widget " + event.widget.toString());\r
+ \r
+// event.doit;\r
+ \r
+ }\r
+ \r
+ });\r
+ \r
+ toolkit.paintBordersFor(treeComp);\r
+ toolkit.paintBordersFor(treeComp.getParent());\r
toolkit.adapt(treeViewer.getTree(), true, true);\r
+ treeViewer.getTree().addListener(SWT.Expand, new Listener() {\r
+\r
+ @Override\r
+ public void handleEvent(Event event) {\r
+ TreeItem item = (TreeItem) event.item;\r
+ int itemHeight = item.getBounds().height;\r
+ \r
+ System.out.println("Before " + treeComp.getBounds().height + " " + treeViewer.getTree().getBounds().height);\r
+ // adding elements to treeComp causes the section to resize\r
+// toolkit.createText(treeComp, "Joe mama", SWT.SINGLE );\r
+ \r
+ Rectangle rectangle3 = treeComp.getParent().getBounds();\r
+ rectangle3.height = rectangle3.height + (itemHeight * item.getItems().length); \r
+ treeComp.getParent().setBounds(rectangle3);\r
+ \r
+ Rectangle rectangle2 = treeComp.getBounds();\r
+ rectangle2.height = rectangle2.height + (itemHeight * item.getItems().length); \r
+ treeComp.setBounds(rectangle2);\r
+// \r
+//\r
+ Rectangle rectangle = treeViewer.getTree().getBounds();\r
+// System.out.println(rectangle.height);\r
+ rectangle.height = rectangle.height + (itemHeight * item.getItems().length); \r
+ treeViewer.getTree().setBounds(rectangle);\r
+// treeViewer.getTree()..redraw();\r
+// System.out.println(rectangle.height);\r
+ \r
+ System.out.println("After " + treeComp.getBounds().height + " " + treeViewer.getTree().getBounds().height);\r
+ \r
+ treeViewer.getTree().setVisible(false);\r
+// treeViewer.getTree().setVisible(true);\r
+ \r
+// treeComp.setVisible(false); \r
+// treeComp.setVisible(true);\r
+// treeViewer.getTree().g\r
+ \r
+// treeViewer.getTree().layout();\r
+// treeViewer.getTree().redraw();\r
+// treeViewer.getControl().redraw();\r
+// treeComp.layout();\r
+// treeComp.redraw(); \r
+ scrolledForm.reflow(true);\r
+// toolkit.paintBordersFor(treeComp);\r
+// toolkit.paintBordersFor(treeComp.getParent());\r
+ \r
+// System.out.println(item.getItems().length);\r
+ \r
+// System.out.println(event.widget.getClass());\r
+// System.out.println(event. .getClass());\r
+ }\r
+ \r
+ });\r
treeViewer.addTreeListener(new ITreeViewerListener() {\r
\r
@Override\r
public void treeCollapsed(TreeExpansionEvent event) {\r
+ Point point = treeViewer.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
+// SharedScrolledComposite s;\r
+// System.out.println(point);\r
// treeComp.layout();\r
// treeComp.redraw();\r
// body.redraw();\r
- System.out.println(treeViewer.getControl().getBounds().height);\r
- scrolledForm.reflow(true);\r
+// System.out.println(treeViewer.getControl().getBounds().height);\r
+// scrolledForm.reflow(true);\r
+// System.out.println(treeViewer.getTree().getItemHeight() . getVisibleExpandedElements().length);\r
}\r
\r
@Override\r
public void treeExpanded(TreeExpansionEvent event) {\r
- treeComp.layout();\r
- treeComp.redraw();\r
+ Point point = treeViewer.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
+// System.out.println(point);\r
+ \r
+// Object[] visibleElements = treeViewer.getVisibleExpandedElements();\r
+// treeViewer.getTree().setSize(treeViewer.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT));\r
+ \r
+ \r
// body.layout();\r
// body.redraw();\r
- scrolledForm.reflow(true);\r
- System.out.println("ex");\r
- treeViewer.getTree().layout();\r
- treeViewer.getTree().redraw();\r
- treeViewer.getControl().redraw();\r
- System.out.println(treeViewer.getControl().getBounds().height);\r
- scrolledForm.reflow(true);\r
- \r
+// scrolledForm.reflow(true);\r
+// treeViewer.getTree().layout();\r
+// treeViewer.getTree().redraw();\r
+// treeViewer.getControl().redraw();\r
+// treeComp.layout();\r
+// treeComp.redraw();\r
+// System.out.println(treeViewer.getControl().getBounds().height);\r
+// scrolledForm.reflow(true);\r
+ // event.getElement() -> Taxon\r
+ // event.getSource() -> TaxonomicTreeViewer\r
+// treeViewer.getTree().get\r
+// System.out.println(((Taxon) event.getElement()).get .getItemCount());\r
+// System.out.println(treeViewer.getVisibleExpandedElements().length);\r
}\r
});\r
\r
\r
private void createRecentNames() {\r
\r
- recentNamesViewer = new RecentNamesTableViewer(createExpandableSection(\r
- "Recently viewed names", null));\r
- recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+// recentNamesViewer = new RecentNamesTableViewer(createExpandableSection(\r
+// "Recently viewed names", null));\r
+ recentNamesViewer = new RecentNamesTableViewer(createSection(\r
+ "Recently viewed names", null, 1)); \r
+// recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
toolkit.adapt(recentNamesViewer.getTable(), true, true); \r
} \r
\r
\r
private void createSearch() {\r
- Composite searchComposite = createExpandableSection("Search", null);\r
- ((TableWrapLayout) searchComposite.getLayout()).numColumns = 2;\r
+// Composite searchComposite = createExpandableSection("Search", null);\r
+ Composite searchComposite = createSection("Search", null, 2);\r
+ \r
+// searchComposite.setLayout(new TableWrapLayout());\r
+// ((TableWrapLayout) searchComposite.getLayout()).numColumns = 2;\r
\r
final Text searchText = new Text(searchComposite, SWT.SINGLE);\r
searchText.setData(FormToolkit.TEXT_BORDER);\r
toolkit.paintBordersFor(searchComposite);\r
searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
searchText.setText("Use \"*\" for wildcard searching");\r
- final TableWrapData td = new TableWrapData\r
- (TableWrapData.FILL_GRAB, TableWrapData.MIDDLE);\r
- searchText.setLayoutData(td);\r
+// searchText.setLayoutData(new ColumnLayoutData());\r
+ searchText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
searchText.addFocusListener(new FocusListener() {\r
\r
public void focusGained(FocusEvent e) {\r
\r
\r
private void createFavorites() {\r
- recentNamesViewer = new RecentNamesTableViewer(createExpandableSection("Favorites", \r
- "Drag items into this area for easy access"));\r
- recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+// recentNamesViewer = new RecentNamesTableViewer(createExpandableSection("Favorites", \r
+// "Drag items into this area for easy access"));\r
+ recentNamesViewer = new RecentNamesTableViewer(createSection("Favorites", \r
+ "Drag items into this area for easy access", 1)); \r
+// recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
toolkit.adapt(recentNamesViewer.getTable(), true, true); \r
} \r
\r
- private Composite createExpandableSection(String header, String description) {\r
+// private Composite createExpandableSection(String header, String description) {\r
+// int sectionStyle = Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED;\r
+// if (description != null) sectionStyle |= Section.DESCRIPTION;\r
+// Section section = toolkit.createSection(body, sectionStyle);\r
+//// Section section = toolkit.createSection(sashForm, sectionStyle);\r
+// \r
+// section.addExpansionListener(new ExpansionAdapter() {\r
+// public void expansionStateChanged(ExpansionEvent e) {\r
+// scrolledForm.reflow(true);\r
+// }\r
+// });\r
+// \r
+// section.setText(header);\r
+// if (description != null)\r
+// section.setDescription(description);\r
+// \r
+// final Composite composite = toolkit.createComposite(section, SWT.NONE);\r
+//// composite.setLayout(new TableWrapLayout());\r
+//// composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+// toolkit.adapt(composite);\r
+// section.setClient(composite);\r
+// return composite;\r
+// \r
+// }\r
+ \r
+ private Composite createSection(String title, String desc, int numColumns) {\r
+ \r
int sectionStyle = Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED;\r
- if (description != null) sectionStyle |= Section.DESCRIPTION;\r
- Section section = toolkit.createSection(body, sectionStyle);\r
+ if (desc != null) sectionStyle |= Section.DESCRIPTION;\r
\r
+ final ScrolledForm form = managedForm.getForm();\r
+ FormToolkit toolkit = managedForm.getToolkit();\r
+ Section section = toolkit.createSection(form.getBody(), sectionStyle);\r
+ section.setText(title);\r
+ if (desc != null) section.setDescription(desc);\r
+ //toolkit.createCompositeSeparator(section);\r
+ Composite client = toolkit.createComposite(section);\r
+ GridLayout layout = new GridLayout();\r
+ layout.marginWidth = layout.marginHeight = 0;\r
+ layout.numColumns = numColumns;\r
+ client.setLayout(layout);\r
+ section.setClient(client);\r
section.addExpansionListener(new ExpansionAdapter() {\r
public void expansionStateChanged(ExpansionEvent e) {\r
- scrolledForm.reflow(true);\r
+ form.reflow(false);\r
}\r
});\r
- \r
- section.setText(header);\r
- if (description != null)\r
- section.setDescription(description);\r
-\r
- final Composite composite = toolkit.createComposite(section, SWT.NONE);\r
- composite.setLayout(new TableWrapLayout());\r
- composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
- toolkit.adapt(composite);\r
- section.setClient(composite);\r
-\r
- composite.addControlListener(new ControlListener() {\r
-\r
- @Override\r
- public void controlMoved(ControlEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- @Override\r
- public void controlResized(ControlEvent e) {\r
- System.out.println("resized");\r
- }\r
- \r
- });\r
- \r
- return composite;\r
- }\r
+ return client;\r
+ } \r
\r
/**\r
* Create the actions\r
return treeViewer;\r
}\r
\r
+ /* ***************************************************\r
+ FOLLOWING SASH BITS BORROWED FROM \r
+ org.eclipse.ui.forms.MasterDetailsBlock\r
+ *************************************************** */\r
+ \r
+ private void hookResizeListener() {\r
+ Listener listener = ((MDSashForm)sashForm).listener;\r
+ Control [] children = sashForm.getChildren();\r
+ for (int i=0; i<children.length; i++) {\r
+ if (children[i] instanceof Sash) continue;\r
+ children[i].addListener(SWT.Resize, listener);\r
+ }\r
+ }\r
+ \r
+ private void onSashPaint(Event e) {\r
+ Sash sash = (Sash)e.widget;\r
+ FormColors colors = managedForm.getToolkit().getColors();\r
+ boolean vertical = (sash.getStyle() & SWT.VERTICAL)!=0;\r
+ GC gc = e.gc;\r
+ Boolean hover = (Boolean)sash.getData("hover"); //$NON-NLS-1$\r
+ gc.setBackground(colors.getColor(IFormColors.TB_BG));\r
+ gc.setForeground(colors.getColor(IFormColors.TB_BORDER));\r
+ Point size = sash.getSize();\r
+ if (vertical) {\r
+ if (hover!=null)\r
+ gc.fillRectangle(0, 0, size.x, size.y);\r
+ //else\r
+ //gc.drawLine(1, 0, 1, size.y-1);\r
+ }\r
+ else {\r
+ if (hover!=null)\r
+ gc.fillRectangle(0, 0, size.x, size.y);\r
+ //else\r
+ //gc.drawLine(0, 1, size.x-1, 1); \r
+ }\r
+ } \r
+ \r
+ class MDSashForm extends SashForm {\r
+ ArrayList sashes = new ArrayList();\r
+ Listener listener = new Listener () {\r
+ public void handleEvent(Event e) {\r
+ switch (e.type) {\r
+ case SWT.MouseEnter:\r
+ e.widget.setData("hover", Boolean.TRUE); //$NON-NLS-1$\r
+ ((Control)e.widget).redraw();\r
+ break;\r
+ case SWT.MouseExit:\r
+ e.widget.setData("hover", null); //$NON-NLS-1$\r
+ ((Control)e.widget).redraw();\r
+ break;\r
+ case SWT.Paint:\r
+ onSashPaint(e);\r
+ break;\r
+ case SWT.Resize:\r
+ hookSashListeners();\r
+ break;\r
+ }\r
+ }\r
+ };\r
+ public MDSashForm(Composite parent, int style) {\r
+ super(parent, style);\r
+ }\r
+ \r
+ public void layout(boolean changed) {\r
+ super.layout(changed);\r
+ hookSashListeners();\r
+ }\r
+ \r
+ public void layout(Control [] children) {\r
+ super.layout(children);\r
+ hookSashListeners();\r
+ }\r
+\r
+ private void hookSashListeners() {\r
+ purgeSashes();\r
+ Control [] children = getChildren();\r
+ for (int i=0; i<children.length; i++) {\r
+ if (children[i] instanceof Sash) {\r
+ Sash sash = (Sash)children[i];\r
+ if (sashes.contains(sash))\r
+ continue;\r
+ sash.addListener(SWT.Paint, listener);\r
+ sash.addListener(SWT.MouseEnter, listener);\r
+ sash.addListener(SWT.MouseExit, listener);\r
+ sashes.add(sash);\r
+ }\r
+ }\r
+ }\r
+ private void purgeSashes() {\r
+ for (Iterator iter=sashes.iterator(); iter.hasNext();) {\r
+ Sash sash = (Sash)iter.next();\r
+ if (sash.isDisposed())\r
+ iter.remove();\r
+ }\r
+ }\r
+ }\r
+ \r
}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.editor.FormEditor;\r
-import org.eclipse.ui.forms.editor.FormPage;\r
-import org.eclipse.ui.forms.widgets.ScrolledForm;\r
-\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-/**\r
- * Template for freetext - form editing\r
- * \r
- * @author p.ciardelli\r
- */\r
-public class MasterDetailsPage extends FormPage {\r
- protected ScrolledPropertiesBlock block;\r
- public MasterDetailsPage(FormEditor editor) {\r
-// super(editor, "fourth", Messages.getString("MasterDetailsPage.label")); //$NON-NLS-1$ //$NON-NLS-2$\r
- super(editor, "fourth", "MasterDetailsPage.label"); //$NON-NLS-1$ //$NON-NLS-2$\r
- block = new ScrolledPropertiesBlock(this);\r
- }\r
- protected void createFormContent(final IManagedForm managedForm) {\r
- final ScrolledForm form = managedForm.getForm();\r
-// FormToolkit toolkit = managedForm.getToolkit();\r
-// form.setText(Messages.getString("MasterDetailsPage.title")); //$NON-NLS-1$\r
-// form.setText("MasterDetailsPage.title"); //$NON-NLS-1$\r
- form.setBackgroundImage(Activator.getDefault().getImage(\r
- Activator.IMG_FORM_BG));\r
- block.createContent(managedForm);\r
- createMasterContent();\r
- }\r
- protected void createMasterContent() { }\r
- protected Composite getMasterComposite() {\r
- return block.getClientComposite();\r
- }\r
- protected Composite getDetailComposite() {\r
- return null;\r
- }\r
-}
\ No newline at end of file
--- /dev/null
+package eu.etaxonomy.taxeditor.view;\r
+\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
+ * Generates the tabbed editor with Name view on top and tabs for\r
+ * "Facts", "Specimen", "Geography", etc.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class MultiPageTaxonEditor extends MultiPageEditorPart {\r
+//public class MultiPageTaxonEditor extends FormEditor implements IAdaptable {\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
+ try {\r
+ addPage(0, new NameEditorView(), getEditorInput());\r
+ setPageText(0, "Name");\r
+\r
+ addPage(1, new NameEditorView(), getEditorInput());\r
+ setPageText(1, "Descriptive");\r
+ \r
+ addPage(2, new NameEditorView(), getEditorInput());\r
+ setPageText(2, "Concepts");\r
+ \r
+ addPage(3, new NameEditorView(), getEditorInput());\r
+ setPageText(3, "Geographic");\r
+ \r
+ } catch (PartInitException e) { \r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ \r
+// bindPartName();\r
+ }\r
+ \r
+ @Override\r
+ public void doSave(IProgressMonitor monitor) {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void doSaveAs() {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public boolean isSaveAsAllowed() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
+ \r
+ if (!(input instanceof IEditorInput))\r
+ throw new PartInitException(\r
+ "Invalid Input: Must be IFileEditorInput");\r
+ \r
+ // Get taxon from editor input\r
+ if (input.getAdapter(Taxon.class) != null) {\r
+ taxon = (Taxon) input.getAdapter(Taxon.class);\r
+ } else {\r
+ taxon = null;\r
+ }\r
+\r
+ // Listen for name changes fired when taxon is saved; \r
+ // change tab for this taxon editor accordingly\r
+ taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
+ public void propertyChange(PropertyChangeEvent e) {\r
+ setPartName(taxon.getName().getTitleCache());\r
+ }\r
+ });\r
+\r
+ // Any taxon that has been saved will by necessity have a name;\r
+ // only a new taxon will not\r
+ if (taxon.getName().getTitleCache() == null)\r
+ setPartName("New taxon");\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
+ \r
+}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.forms.editor.FormEditor;\r
-import org.eclipse.ui.part.MultiPageEditorPart;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * \r
- * Generates the tabbed editor with Name view on top and tabs for\r
- * "Facts", "Specimen", "Geography", etc.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-//public class MultiPageTaxonView extends MultiPageEditorPart {\r
-public class MultiPageTaxonView extends FormEditor {\r
-\r
- public static final String ID = "eu.etaxonomy.taxeditor.view.multipagetaxonview";\r
- private Taxon taxon;\r
- \r
- /* \r
- * The FormEditor version\r
- * (non-Javadoc)\r
- * @see org.eclipse.ui.forms.editor.FormEditor#addPages()\r
- */\r
- protected void addPages() {\r
- try {\r
- addPage(0, new NameEditorPage(this), getEditorInput());\r
- setPageText(0, "Name");\r
- \r
- } catch (PartInitException e) { \r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- } \r
- }\r
- \r
- /* \r
- * The MultiPageEditorPart version\r
- * (non-Javadoc)\r
- * @see org.eclipse.ui.forms.editor.FormEditor#createPages()\r
- */\r
- protected void createPages_() {\r
- \r
- try {\r
- addPage(0, new MasterDetailsPage(this), getEditorInput());\r
- setPageText(0, "Name");\r
-\r
- addPage(1, new NameEditorViewOld(), getEditorInput());\r
- setPageText(1, "Descriptive");\r
-// \r
-// addPage(2, new NameEditorViewOld(), getEditorInput());\r
-// setPageText(2, "Concepts");\r
-// \r
-// addPage(3, new NameEditorViewOld(), getEditorInput());\r
-// setPageText(3, "Geographic");\r
- \r
- } catch (PartInitException e) { \r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- \r
-// bindPartName();\r
- }\r
-\r
- @Override\r
- public void doSave(IProgressMonitor monitor) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- @Override\r
- public void doSaveAs() {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- @Override\r
- public boolean isSaveAsAllowed() {\r
- // TODO Auto-generated method stub\r
- return false;\r
- }\r
-\r
- @Override\r
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
- \r
- if (!(input instanceof IEditorInput))\r
- throw new PartInitException(\r
- "Invalid Input: Must be IFileEditorInput");\r
- \r
- // Get taxon from editor input\r
- if (input.getAdapter(Taxon.class) != null) {\r
- taxon = (Taxon) input.getAdapter(Taxon.class);\r
- } else {\r
- taxon = null;\r
- }\r
-\r
- // Listen for name changes fired when taxon is saved; \r
- // change tab for this taxon editor accordingly\r
- taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent e) {\r
- setPartName(taxon.getName().getTitleCache());\r
- }\r
- });\r
-\r
- // Any taxon that has been saved will by necessity have a name;\r
- // only a new taxon will not\r
- if (taxon.getName().getTitleCache() == null)\r
- setPartName("New taxon");\r
- else\r
- setPartName(taxon.getName().getTitleCache());\r
- \r
- setSite(site);\r
- setInput(input);\r
- }\r
-}\r
import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.forms.IManagedForm;\r
import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.forms.editor.FormPage;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\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
\r
-public class NameEditorPage extends MasterDetailsPage {\r
-\r
+/**\r
+ * Creates a page with a master-details block for editing\r
+ * a taxon and its synonyms.\r
+ * \r
+ * @author p.ciardelli\r
+ */\r
+public class NameEditorPage extends FormPage {\r
+ \r
+ protected EditorMasterDetailsBlock block;\r
private Taxon taxon;\r
- private Composite nameComposite;\r
-\r
+ private Composite freeTextComposite; \r
+ private BotanicalNameDetailsPage nameDetailsPage;\r
+ private IManagedForm managedForm;\r
+ \r
public NameEditorPage(FormEditor editor) {\r
- super(editor);\r
+ super(editor, "editormasterdetailspage", "NameEditorPage"); //$NON-NLS-1$ //$NON-NLS-2$\r
+ block = new EditorMasterDetailsBlock(this); \r
}\r
+\r
+ protected void createFormContent(IManagedForm managedForm) {\r
+\r
+// form.setBackgroundImage(Activator.getDefault().getImage(\r
+// Activator.IMG_FORM_BG));\r
+ block.createContent(managedForm);\r
\r
- protected void createFormContent(final IManagedForm managedForm) {\r
- super.createFormContent(managedForm);\r
+ createMasterContent(managedForm);\r
+ createDetailsPages(managedForm);\r
+ \r
}\r
- \r
- protected void createMasterContent() {\r
- nameComposite = new Composite(getMasterComposite(), SWT.NONE);\r
- nameComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.verticalSpacing = 10;\r
- nameComposite.setLayout(gridLayout); \r
- nameComposite.setRedraw(true);\r
+\r
+ private void createMasterContent(IManagedForm managedForm) {\r
+ \r
+ this.managedForm = managedForm;\r
\r
+ freeTextComposite = block.getMaster();\r
+ freeTextComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+ freeTextComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
\r
+ GridLayout gridLayout = new GridLayout();\r
+ gridLayout.verticalSpacing = 10;\r
+ freeTextComposite.setLayout(gridLayout); \r
+ freeTextComposite.setRedraw(true);\r
+ \r
// clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
-// NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, nameComposite);\r
+// NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, freeTextComposite);\r
// acceptedNameViewer.setBindingContext(bindingContext);\r
// acceptedNameViewer.configure(new NameViewerConfig());\r
- \r
- GroupComposite homoGroupComposite = new GroupComposite(nameComposite);\r
+ \r
+ GroupComposite homoGroupComposite = new GroupComposite(freeTextComposite);\r
homoGroupComposite.setTaxon(taxon);\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
if (addition instanceof Synonym)\r
createHeterotypicalGroup((Synonym) addition);\r
}\r
- nameComposite.layout();\r
-// contentComposite.layout();\r
+ freeTextComposite.layout();\r
+ NameEditorPage.this.managedForm.getForm().reflow(true);\r
}\r
});\r
}\r
\r
+ private void createDetailsPages(IManagedForm managedForm) {\r
+ \r
+ // Tell details part to show a BotanicalNameDetailsPage when input is TaxonNameBase\r
+ nameDetailsPage = new BotanicalNameDetailsPage();\r
+// block.getDetails().registerPage(BotanicalName.class, nameDetailsPage);\r
+ block.getDetails().registerPage(TaxonBase.class, nameDetailsPage); \r
+ block.getDetails().registerPage(Taxon.class, nameDetailsPage);\r
+ block.setInput(taxon);\r
+ }\r
+ \r
private void createHeterotypicalGroup(Synonym heterosyn) {\r
\r
- GroupComposite heteroGroupComposite = new GroupComposite(nameComposite);\r
+ GroupComposite heteroGroupComposite = new GroupComposite(freeTextComposite);\r
heteroGroupComposite.setTaxon(taxon);\r
heteroGroupComposite.setNameEditorView(this);\r
\r
// taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
\r
setSite(site);\r
- setInput(input);\r
- } \r
-}\r
+ setInput(input); \r
+ }\r
+\r
+ public Composite getFreeTextComposite() {\r
+ return freeTextComposite;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package eu.etaxonomy.taxeditor.view;\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.swt.SWT;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.ManagedForm;\r
+import org.eclipse.ui.part.EditorPart;\r
+\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
+\r
+public class NameEditorView extends EditorPart {\r
+\r
+ private IManagedForm managedForm;\r
+ private Taxon taxon;\r
+ private Composite parent;\r
+ \r
+ @Override\r
+ public void doSave(IProgressMonitor monitor) {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void doSaveAs() {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void init(IEditorSite site, IEditorInput input)\r
+ throws PartInitException {\r
+ if (!(input instanceof IEditorInput))\r
+ throw new PartInitException(\r
+ "Invalid Input: Must be IFileEditorInput");\r
+ \r
+ if (input.getAdapter(Taxon.class) != null) {\r
+ taxon = (Taxon) input.getAdapter(Taxon.class);\r
+ } else {\r
+ \r
+ taxon = null;\r
+ }\r
+ \r
+ // Get parent taxon\r
+// if (taxon.getTaxonomicParent() != null)\r
+// higherTaxon = taxon.getTaxonomicParent();\r
+ \r
+ // Register listeners for any change in accepted name or set of relations\r
+// taxon.getName().addPropertyChangeListener("titleCache", taxonChangeListener);\r
+// taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
+ \r
+ setSite(site);\r
+ setInput(input); \r
+ }\r
+\r
+ @Override\r
+ public boolean isDirty() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean isSaveAsAllowed() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public void createPartControl(final Composite parent) {\r
+ \r
+ this.parent = parent;\r
+ this.managedForm = new ManagedForm(parent);\r
+ \r
+ parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+ parent.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
+ \r
+ GridLayout gridLayout = new GridLayout();\r
+ gridLayout.verticalSpacing = 10;\r
+ parent.setLayout(gridLayout); \r
+ parent.setRedraw(true);\r
+ \r
+// clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
+// NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, freeTextComposite);\r
+// acceptedNameViewer.setBindingContext(bindingContext);\r
+// acceptedNameViewer.configure(new NameViewerConfig());\r
+ \r
+ GroupComposite homoGroupComposite = new GroupComposite(parent);\r
+ homoGroupComposite.setTaxon(taxon);\r
+ homoGroupComposite.setNameEditorView(this);\r
+ \r
+ new NameComposite(homoGroupComposite, taxon).setNameEditorView(this);\r
+ \r
+ TesterooWritableSet.getInstance().addSetChangeListener\r
+ (new ISetChangeListener() {\r
+ public void handleSetChange(SetChangeEvent event) {\r
+ for ( Object addition: event.diff.getAdditions()) {\r
+ if (addition instanceof Synonym)\r
+ createHeterotypicalGroup((Synonym) addition);\r
+ }\r
+ parent.layout();\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
+ GroupComposite heteroGroupComposite = new GroupComposite(parent);\r
+ heteroGroupComposite.setTaxon(taxon);\r
+ heteroGroupComposite.setNameEditorView(this);\r
+ \r
+ NameComposite nameComposite = new NameComposite(heteroGroupComposite, heterosyn, taxon);\r
+ nameComposite.setNameEditorView(this);\r
+ nameComposite.setFocus();\r
+ } \r
+ \r
+ @Override\r
+ public void setFocus() {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ public IManagedForm getManagedForm() {\r
+ return this.managedForm;\r
+ }\r
+\r
+ public Composite getComposite() {\r
+ return parent;\r
+ }\r
+}\r
new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB)); \r
\r
this.addPainter(annotationPainter);\r
+ \r
}\r
\r
public void setShowError(boolean hasProblem) {\r
+++ /dev/null
-/*******************************************************************************\r
- * Copyright (c) 2000, 2004 IBM Corporation and others.\r
- * All rights reserved. This program and the accompanying materials \r
- * are made available under the terms of the Common Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/cpl-v10.html\r
- * \r
- * Contributors:\r
- * IBM Corporation - initial API and implementation\r
- *******************************************************************************/\r
-package eu.etaxonomy.taxeditor.view;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.SelectionChangedEvent;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.swt.SWT;\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.Table;\r
-import org.eclipse.ui.forms.DetailsPart;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.MasterDetailsBlock;\r
-import org.eclipse.ui.forms.SectionPart;\r
-import org.eclipse.ui.forms.editor.FormPage;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.eclipse.ui.forms.widgets.ScrolledForm;\r
-import org.eclipse.ui.forms.widgets.Section;\r
-\r
-import eu.etaxonomy.taxeditor.Activator;\r
-/**\r
- * Template for freetext - form editing\r
- * \r
- * @author p.ciardelli\r
- */\r
-public class ScrolledPropertiesBlock extends MasterDetailsBlock {\r
- private FormPage page;\r
- private Composite client;\r
- public ScrolledPropertiesBlock(FormPage page) {\r
- this.page = page;\r
- }\r
- /**\r
- * @param id\r
- * @param title\r
- */\r
-// class MasterContentProvider implements IStructuredContentProvider {\r
-// public Object[] getElements(Object inputElement) {\r
-// if (inputElement instanceof SimpleFormEditorInput) {\r
-// SimpleFormEditorInput input = (SimpleFormEditorInput) page\r
-// .getEditor().getEditorInput();\r
-// return input.getModel().getContents();\r
-// }\r
-// return new Object[0];\r
-// }\r
-// public void dispose() {\r
-// }\r
-// public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
-// }\r
-// }\r
-// class MasterLabelProvider extends LabelProvider\r
-// implements\r
-// ITableLabelProvider {\r
-// public String getColumnText(Object obj, int index) {\r
-// return obj.toString();\r
-// }\r
-// public Image getColumnImage(Object obj, int index) {\r
-// if (obj instanceof TypeOne) {\r
-// return PlatformUI.getWorkbench().getSharedImages().getImage(\r
-// ISharedImages.IMG_OBJ_ELEMENT);\r
-// }\r
-// if (obj instanceof TypeTwo) {\r
-// return PlatformUI.getWorkbench().getSharedImages().getImage(\r
-// ISharedImages.IMG_OBJ_FILE);\r
-// }\r
-// return null;\r
-// }\r
-// }\r
- protected void createMasterPart(final IManagedForm managedForm,\r
- Composite parent) {\r
- \r
- //final ScrolledForm form = managedForm.getForm();\r
- FormToolkit toolkit = managedForm.getToolkit();\r
- Section section = toolkit.createSection(parent, Section.DESCRIPTION | Section.TITLE_BAR);\r
-// section.setText(Messages.getString("ScrolledPropertiesBlock.sname")); //$NON-NLS-1$\r
-// section.setDescription(Messages.getString("ScrolledPropertiesBlock.sdesc")); //$NON-NLS-1$\r
-// section.setText("ScrolledPropertiesBlock.sname"); //$NON-NLS-1$\r
-// section.setDescription("ScrolledPropertiesBlock.sdesc"); //$NON-NLS-1$ \r
- section.marginWidth = 10;\r
- section.marginHeight = 5;\r
- client = toolkit.createComposite(section, SWT.WRAP);\r
- GridLayout layout = new GridLayout();\r
- layout.numColumns = 2;\r
- layout.marginWidth = 2;\r
- layout.marginHeight = 2;\r
- client.setLayout(layout);\r
- GridData gd = new GridData(GridData.FILL_BOTH);\r
- gd.heightHint = 20;\r
- toolkit.paintBordersFor(client);\r
- section.setClient(client);\r
- final SectionPart spart = new SectionPart(section);\r
- managedForm.addPart(spart);\r
- }\r
- \r
- protected void createToolBarActions(IManagedForm managedForm) {\r
- final ScrolledForm form = managedForm.getForm();\r
- Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
- public void run() {\r
- sashForm.setOrientation(SWT.HORIZONTAL);\r
- form.reflow(true);\r
- }\r
- };\r
- haction.setChecked(true);\r
-// haction.setToolTipText(Messages.getString("ScrolledPropertiesBlock.horizontal")); //$NON-NLS-1$\r
- haction.setToolTipText("ScrolledPropertiesBlock.horizontal"); //$NON-NLS-1$\r
- haction.setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor(Activator.IMG_HORIZONTAL));\r
- Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
- public void run() {\r
- sashForm.setOrientation(SWT.VERTICAL);\r
- form.reflow(true);\r
- }\r
- };\r
- vaction.setChecked(false);\r
-// vaction.setToolTipText(Messages.getString("ScrolledPropertiesBlock.vertical")); //$NON-NLS-1$\r
- vaction.setToolTipText("ScrolledPropertiesBlock.vertical"); //$NON-NLS-1$\r
- vaction.setImageDescriptor(Activator.getDefault()\r
- .getImageRegistry().getDescriptor(Activator.IMG_VERTICAL));\r
- form.getToolBarManager().add(haction);\r
- form.getToolBarManager().add(vaction);\r
- }\r
- protected void registerPages(DetailsPart detailsPart) {\r
- // TODO Register FlowPage here\r
-// detailsPart.registerPage(TypeOne.class, new TypeOneDetailsPage());\r
-// detailsPart.registerPage(TypeTwo.class, new TypeTwoDetailsPage());\r
- }\r
- public Composite getClientComposite() {\r
- return client;\r
- }\r
-}
\ No newline at end of file
import org.eclipse.swt.widgets.Tree;\r
import org.eclipse.swt.widgets.TreeItem;\r
import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
\r
import com.swtdesigner.ResourceManager;\r
\r
\r
// Tree settings\r
final Tree tree = this.getTree();\r
- tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));\r
+// tree.setLayoutData(new TableWrapData\r
+// (TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));\r
+// tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));\r
tree.setLinesVisible(false);\r
tree.setHeaderVisible(false);\r
\r
e.printStackTrace();\r
taxon = null;\r
}\r
+ \r
new ActionOpenNameEditor(taxon).run();\r
}\r
}); \r
import org.eclipse.swt.dnd.DropTargetAdapter;\r
import org.eclipse.swt.dnd.DropTargetEvent;\r
import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.graphics.GC;\r
-import org.eclipse.swt.graphics.Rectangle;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
import eu.etaxonomy.taxeditor.view.NameEditorPage;\r
-import eu.etaxonomy.taxeditor.view.NameEditorViewOld;\r
+import eu.etaxonomy.taxeditor.view.NameEditorView;\r
\r
public class GroupComposite extends Composite {\r
\r
Taxon taxon;\r
- Rectangle rectangle;\r
HomotypicalGroup homotypicalGroup;\r
boolean acceptedGroup;\r
- private NameEditorPage nameEditorView;\r
+ private NameEditorView nameEditor;\r
+ private IManagedForm managedForm;\r
\r
public void setTaxon(Taxon taxon) {\r
this.taxon = taxon;\r
this.setLayout(gridLayout);\r
this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- \r
-// this.addListener(SWT.Resize, new Listener() {\r
-// public void handleEvent(Event event) {\r
-// GC gc = new GC(GroupComposite.this);\r
-// rectangle = GroupComposite.this.getClientArea();\r
-// gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
-// gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
-// System.out.println(rectangle.height);\r
-// }\r
-// }); \r
- \r
+ \r
// Drop functionality\r
Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
target.addDropListener(new DropTargetAdapter() {\r
\r
public void dragEnter(DropTargetEvent event) {\r
- \r
- \r
- \r
-// for (Control child : GroupComposite.this.getChildren()) {\r
-// if (child.getClass() != NameComposite.class) continue;\r
-//// System.out.println(child.getClass() + " " + event.data.getClass());\r
-// \r
-// if (((NameComposite) child).getName() == TaxonTransfer.getInstance().getTaxon().getName()) {\r
-// event.detail = DND.DROP_NONE;\r
-// return;\r
-// }\r
-// }\r
- \r
-// if (((NameComposite) event.widget).getParent() == GroupComposite.this)\r
-// event.detail = DND.DROP_NONE;\r
-// rectangle = GroupComposite.this.getClientArea();\r
-// GC gc = new GC(GroupComposite.this);\r
-// rectangle = GroupComposite.this.getClientArea();\r
-// gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
-// gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
- \r
-// rectangle.draw(Display.getDefault().getSystemColor\r
-// (SWT.COLOR_BLACK));\r
+ showBorder();\r
}\r
\r
public void dragLeave(DropTargetEvent event) {\r
-// rectangle.draw(Display.getDefault().getSystemColor\r
-// (SWT.COLOR_GRAY));\r
+ hideBorder();\r
}\r
\r
public void drop(DropTargetEvent event) {\r
});\r
}\r
\r
- public void drawRect() {\r
- GC gc = new GC(this);\r
- Rectangle rect = this.getClientArea();\r
- gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));\r
- gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2); \r
+ protected void hideBorder() {\r
+ if (!(managedForm == null)) {\r
+ this.setData(FormToolkit.KEY_DRAW_BORDER, null);\r
+ managedForm.getToolkit().paintBordersFor(nameEditor.getComposite());\r
+ managedForm.getForm().reflow(true);\r
+ }\r
}\r
\r
+ protected void showBorder() {\r
+ if (!(managedForm == null)) {\r
+ \r
+ // To cut down on flickering, only draw border as necessary\r
+ if (this.getData(FormToolkit.KEY_DRAW_BORDER) == FormToolkit.TEXT_BORDER) return;\r
+ \r
+ this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+ managedForm.getToolkit().paintBordersFor(nameEditor.getComposite());\r
+ managedForm.getForm().reflow(true);\r
+ }\r
+ }\r
+ \r
public HomotypicalGroup getHomotypicalGroup() {\r
return homotypicalGroup;\r
}\r
this.acceptedGroup = acceptedGroup;\r
}\r
\r
- public void setNameEditorView(NameEditorPage nameEditorView) {\r
- this.nameEditorView = nameEditorView;\r
- }\r
- \r
- public NameEditorPage getNameEditorView() {\r
- return nameEditorView;\r
+ public void setNameEditorView(NameEditorView nameEditorView) {\r
+ this.nameEditor = nameEditorView;\r
+ this.managedForm = nameEditorView.getManagedForm();\r
}\r
\r
+ public NameEditorView getNameEditorView() {\r
+ return nameEditor;\r
+ } \r
}\r
import org.eclipse.swt.widgets.Label;\r
import org.eclipse.swt.widgets.Menu;\r
import org.eclipse.swt.widgets.MenuItem;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
\r
import com.swtdesigner.SWTResourceManager;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
import eu.etaxonomy.taxeditor.view.NameEditorPage;\r
-import eu.etaxonomy.taxeditor.view.NameEditorViewOld;\r
+import eu.etaxonomy.taxeditor.view.NameEditorView;\r
import eu.etaxonomy.taxeditor.view.NameViewer;\r
\r
public class NameComposite extends Composite {\r
public void createNameComposite() {\r
\r
Assert.isNotNull(taxon);\r
- \r
+ \r
// Graphic layout of composite\r
GridLayout gridLayout = new GridLayout();\r
gridLayout.verticalSpacing = 0;\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
-// if (nameEditorView != null) \r
-// nameEditorView.setPropertySheetNodes(getName());\r
+ \r
+// if (nameEditor != null) \r
+// nameEditor.setPropertySheetNodes(getName());\r
}\r
});\r
- \r
+ \r
// Listen for user selecting text\r
nameViewer.getTextWidget().addSelectionListener(new SelectionListener() {\r
\r
}\r
\r
});\r
- \r
- \r
+ \r
// Put name into name viewer, show error if parsed incorrectly\r
nameViewer.getTextWidget().setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
nameViewer.setShowError(getName().getHasProblem());\r
*/\r
DragSourceListener dragSourceListener = new DragSourceListener () {\r
\r
- CompositeRectangle rectangle;\r
- \r
public void dragStart(DragSourceEvent event) {\r
\r
- rectangle = new CompositeRectangle(NameComposite.this,\r
- Display.getDefault().getSystemColor(SWT.COLOR_GRAY));\r
+// showBorder();\r
\r
event.doit = true;\r
}\r
TaxonTransfer.getInstance().setTaxon(synonym);\r
}\r
public void dragFinished(DragSourceEvent event) {\r
+ \r
if (event.detail == DND.DROP_MOVE) {\r
Composite parent = NameComposite.this.getParent();\r
Composite grandParent = parent.getParent();\r
\r
-// rectangle.dispose();\r
NameComposite.this.dispose();\r
\r
// If this was the last child in its homo. group,\r
}\r
}\r
};\r
- private NameEditorPage nameEditorView;\r
+ private NameEditorView nameEditor;\r
+ private IManagedForm managedForm;\r
\r
- public void setName(TaxonNameBase name) {\r
+ public void setName(TaxonNameBase name) { \r
(compositeType == ACCEPTED? taxon : synonym).setName(name);\r
- nameViewer.setShowError(name.getHasProblem());\r
+ \r
+ BotanicalName botname = (BotanicalName)name; \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
+ managedForm.getForm().reflow(true);\r
+ }\r
+ }\r
+\r
public TaxonNameBase getName() {\r
return (compositeType == ACCEPTED? taxon : synonym).getName(); \r
}\r
\r
- public void setNameEditorView(NameEditorPage nameEditorView) {\r
- this.nameEditorView = nameEditorView; \r
+ public void setNameEditorView(NameEditorView nameEditorView) {\r
+ this.nameEditor = nameEditorView;\r
+ this.managedForm = nameEditorView.getManagedForm();\r
}\r
\r
private void createTempMenu() {\r
}\r
\r
public void mouseDown(MouseEvent e) {\r
- menu1.setVisible(true);\r
+ // menu1.setVisible(true);\r
}\r
\r
public void mouseUp(MouseEvent e) {\r
String widgetText = styledText.getText(); \r
int cursorPosition = styledText.getCaretOffset();\r
\r
- // Is there a line break in verifyText?\r
+ // If no line break in verifyText, Parse text normally\r
if (!verifyText.contains(System.getProperty("line.separator")))\r
- // Parse text normally\r
return;\r
\r
// Don't add verifyText without further processing\r