import org.eclipse.core.commands.operations.IUndoContext;\r
import org.eclipse.core.commands.operations.OperationHistoryFactory;\r
import org.eclipse.jface.preference.IPreferenceStore;\r
+import org.eclipse.swt.graphics.Color;\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.Shell;\r
+import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.swt.widgets.TreeItem;\r
+import org.eclipse.ui.IActionBars;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorPart;\r
import org.eclipse.ui.IEditorReference;\r
import org.eclipse.ui.forms.IManagedForm;\r
import org.eclipse.ui.operations.IWorkbenchOperationSupport;\r
import org.eclipse.ui.views.properties.PropertySheet;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.WarningAnnotation;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;\r
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
+import eu.etaxonomy.taxeditor.propertysheet.CustomSortPropertySheetEntry;\r
\r
/**\r
* A collection of useful methods related to the UI.\r
\r
private static Set<Feature> preferredFeatureSet;\r
private static Set<Rank> preferredRankSet;\r
+ private static IViewPart treeView;\r
\r
public static IViewPart getPropertySheet() {\r
for (IViewReference reference : getActivePage().getViewReferences()) {\r
return reference.getView(false);\r
}\r
}\r
-// PropertySheet ps = new PropertySheet();\r
return null;\r
}\r
\r
+ /**\r
+ * By default, property sheet has buttons in the toolbar for \r
+ * "Show advanced properties" and "Show categories".\r
+ * <p>\r
+ * This is confusing for the user, hence a method to remove them\r
+ * until such time as advanced properties or categories are implemented.\r
+ */\r
+ public static void hidePropertySheetToolbar() {\r
+ PropertySheet propertySheet = (PropertySheet) getPropertySheet();\r
+ IActionBars actionBars = propertySheet.getViewSite().getActionBars();\r
+ actionBars.getToolBarManager().removeAll();\r
+ actionBars.getMenuManager().removeAll();\r
+ }\r
+ \r
/**\r
* The property sheet listener ensures only property sheets\r
* with data cause the Property Sheet to be updated.\r
}\r
return null;\r
}\r
+ \r
+ /**\r
+ * Returns a set of all currently open \r
+ * <code>MultiPageTaxonEditor</code>s.\r
+ * \r
+ * @return\r
+ */\r
+ public static Set<IEditorPart> getOpenTaxonEditors() {\r
+ \r
+ Set<IEditorPart> taxonEditors = new HashSet<IEditorPart>();\r
+ \r
+ for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
+ IEditorPart editor = reference.getEditor(false);\r
+ if (editor instanceof MultiPageTaxonEditor) {\r
+ taxonEditors.add(editor);\r
+ }\r
+ }\r
+ return taxonEditors;\r
+ }\r
\r
public static IEditorPart getEditorByTaxon(Taxon taxon)\r
throws PartInitException {\r
* @return\r
*/ \r
public static TaxonomicTreeView getTreeView() {\r
- IViewPart view = getViewById(TaxonomicTreeView.ID);\r
- if (view == null || !(view instanceof TaxonomicTreeView)) {\r
- return null;\r
+ if (treeView == null) {\r
+ treeView = getViewById(TaxonomicTreeView.ID);\r
+ if (!(treeView instanceof TaxonomicTreeView)) {\r
+ treeView = null;\r
+ }\r
}\r
- return (TaxonomicTreeView) view;\r
+ return (TaxonomicTreeView) treeView;\r
}\r
\r
\r
return NonViralName.NewInstance(null);\r
}\r
\r
- /**\r
- * @return\r
- */\r
- public static NomenclaturalCode getPreferredNomenclaturalCode() {\r
-\r
- String nameCodePreference = TaxEditorPlugin.getDefault().getPreferenceStore().getString(ITaxEditorConstants.CODE_PREFERENCE);\r
+ public static String getNameCodePreference() {\r
+ String nameCodePreference = getPrefStore().getString(ITaxEditorConstants.CODE_PREFERENCE);\r
\r
// Check whether name code preference needs to be initialized\r
if (nameCodePreference == null || nameCodePreference.equals("")) {\r
nameCodePreference = ITaxEditorConstants.DEFAULT_CODE_PREFERENCE;\r
- TaxEditorPlugin.getDefault().getPreferenceStore().setValue(ITaxEditorConstants.CODE_PREFERENCE, \r
- nameCodePreference);\r
+ getPrefStore().setValue(ITaxEditorConstants.CODE_PREFERENCE, nameCodePreference);\r
}\r
\r
+ return nameCodePreference;\r
+ }\r
+ \r
+ /**\r
+ * @return\r
+ */\r
+ public static NomenclaturalCode getPreferredNomenclaturalCode() {\r
+\r
+ String nameCodePreference = getNameCodePreference();\r
+ \r
if (nameCodePreference.equals(ITaxEditorConstants.CODE_PREFERENCE_ICBN)) {\r
return NomenclaturalCode.ICBN();\r
} else if (nameCodePreference.equals(ITaxEditorConstants.CODE_PREFERENCE_ICZN)) {\r
}\r
return null;\r
}\r
+\r
+ /**\r
+ * Appends the code (i.e. ICBN or ICZN) specified in the user preferences\r
+ * to a string. The result is separated by a period: "<code>key.ICBN</code>".\r
+ * \r
+ * @param key\r
+ * @return\r
+ */\r
+ public static String concatCodeMessageSuffix(String key) {\r
+ String code = getNameCodePreference();\r
+ return key + "." + code;\r
+ }\r
+ \r
+ public static void setStatusMessage(String msg) {\r
+ getPropertySheet().getViewSite().getActionBars().getStatusLineManager().setMessage(msg); \r
+ }\r
+\r
+ public static void setPropertySheetTree(Tree tree) {\r
+ TaxEditorPlugin.getDefault().setPropertySheetTree(tree); \r
+ }\r
+ \r
+ public static Tree getPropertySheetTree() {\r
+ return TaxEditorPlugin.getDefault().getPropertySheetTree(); \r
+ }\r
+\r
+ public static void setPropertySheetPage(PropertySheetPage page) {\r
+ TaxEditorPlugin.getDefault().setPropertySheetPage(page);\r
+ }\r
+ \r
+ public static PropertySheetPage getPropertySheetPage() {\r
+ return TaxEditorPlugin.getDefault().getPropertySheetPage(); \r
+ }\r
+ \r
+ /**\r
+ * UiUtil.paintPropertySheetRow(P_DATEPUBLISHED, new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB), true);\r
+ * UiUtil.unpaintPropertySheetRow(P_DATEPUBLISHED);\r
+ * \r
+ * @param id\r
+ * @param color\r
+ * @param doPaintChildren\r
+ */\r
+ public static void paintPropertySheetRow(String id, Color color, boolean doPaintChildren) {\r
+ \r
+ // Catch null property sheet name\r
+ if (id == null) {\r
+ return;\r
+ }\r
+ \r
+ // Catch uninit'ed property sheet tree\r
+ if (getPropertySheetTree() == null) {\r
+ return;\r
+ }\r
+ \r
+ paintPropertySheetRow(id, color, doPaintChildren, getPropertySheetTree());\r
+ }\r
+ \r
+ private static void paintPropertySheetRow(String id, Color color, boolean doPaintChildren, Object treeOrItem) {\r
+ \r
+ // Init items w zero-length array\r
+ TreeItem[] items = new TreeItem[]{};\r
+ \r
+ // Get child items depending to class\r
+ if (treeOrItem instanceof Tree) {\r
+ items = ((Tree) treeOrItem).getItems();\r
+ }\r
+ if (treeOrItem instanceof TreeItem) {\r
+ items = ((TreeItem) treeOrItem).getItems();\r
+ }\r
+ \r
+ // If array hasn't been populated by the above, return\r
+ if (items.length == 0) {\r
+ return;\r
+ }\r
+\r
+ // Prop. sheet id's take the form "01:xxxx" for sorting - truncate\r
+ id = CustomSortPropertySheetEntry.truncateDisplayName(id);\r
+ \r
+ // Iterate through child items\r
+ for (TreeItem item : items) {\r
+\r
+ // Item found, paint it\r
+ if (id.equals(item.getText())) {\r
+ paintItem(item, color, doPaintChildren);\r
+ return;\r
+ } \r
+\r
+ // Recursively search for item to paint in child items\r
+ if (item.getItemCount() > 0) {\r
+ paintPropertySheetRow(id, color, doPaintChildren, item);\r
+ }\r
+ } \r
+ }\r
+ \r
+ /**\r
+ * Note: children are only painted if submenu has already been created, i.e. opened once.\r
+ * \r
+ * @param item\r
+ * @param color\r
+ * @param doPaintChildren\r
+ */\r
+ private static void paintItem(TreeItem item, Color color, boolean doPaintChildren) {\r
+ \r
+ // Paint the item\r
+ item.setBackground(color);\r
+ \r
+ // Recursively paint child items if requested\r
+ if (doPaintChildren) {\r
+ for (TreeItem childItem : item.getItems()) {\r
+ paintItem(childItem, color, doPaintChildren);\r
+ }\r
+ }\r
+ }\r
+ \r
+ public static void unpaintPropertySheetRow(String id) {\r
+ \r
+ // Catch uninit'ed property sheet tree\r
+ if (getPropertySheetTree() == null) {\r
+ return;\r
+ }\r
+ \r
+ // Get tree's background color to "unpaint"\r
+ Color color = getPropertySheetTree().getBackground();\r
+ \r
+ paintPropertySheetRow(id, color, true);\r
+ }\r
}
\ No newline at end of file