From: Daniel Kirschten Date: Sun, 19 May 2019 17:59:20 +0000 (+0200) Subject: Made formatting uniform - commit for SampleERCP X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=10e87495184e49c5cab906921f0afaf2473d9aed;p=Mograsim.git Made formatting uniform - commit for SampleERCP --- diff --git a/SampleERCP/.settings/org.eclipse.jdt.core.prefs b/SampleERCP/.settings/org.eclipse.jdt.core.prefs index d25d26de..3570d97f 100644 --- a/SampleERCP/.settings/org.eclipse.jdt.core.prefs +++ b/SampleERCP/.settings/org.eclipse.jdt.core.prefs @@ -31,7 +31,7 @@ org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=49 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 @@ -66,21 +66,21 @@ org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 org.eclipse.jdt.core.formatter.blank_lines_before_package=0 org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true org.eclipse.jdt.core.formatter.comment.format_block_comments=true @@ -94,7 +94,7 @@ org.eclipse.jdt.core.formatter.comment.indent_root_tags=false org.eclipse.jdt.core.formatter.comment.indent_tag_description=false org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.line_length=140 org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false @@ -127,10 +127,10 @@ org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert @@ -331,7 +331,7 @@ org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.lineSplit=140 org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 diff --git a/SampleERCP/.settings/org.eclipse.jdt.ui.prefs b/SampleERCP/.settings/org.eclipse.jdt.ui.prefs index 8f56b5bc..ef4a4910 100644 --- a/SampleERCP/.settings/org.eclipse.jdt.ui.prefs +++ b/SampleERCP/.settings/org.eclipse.jdt.ui.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 -formatter_profile=_Eclipse ajusted +formatter_profile=_ERA-MI formatter_settings_version=16 org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/SampleERCP/src/sampleercp/handlers/AboutHandler.java b/SampleERCP/src/sampleercp/handlers/AboutHandler.java index 002d74ee..210cd1f1 100644 --- a/SampleERCP/src/sampleercp/handlers/AboutHandler.java +++ b/SampleERCP/src/sampleercp/handlers/AboutHandler.java @@ -1,12 +1,14 @@ -package sampleercp.handlers; - -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Shell; - -public class AboutHandler { - @Execute - public void execute(Shell shell) { - MessageDialog.openInformation(shell, "About", "Sample RCP4"); - } -} +package sampleercp.handlers; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Shell; + +public class AboutHandler +{ + @Execute + public void execute(Shell shell) + { + MessageDialog.openInformation(shell, "About", "Sample RCP4"); + } +} diff --git a/SampleERCP/src/sampleercp/handlers/OpenHandler.java b/SampleERCP/src/sampleercp/handlers/OpenHandler.java index 5cc22038..8f788545 100644 --- a/SampleERCP/src/sampleercp/handlers/OpenHandler.java +++ b/SampleERCP/src/sampleercp/handlers/OpenHandler.java @@ -1,14 +1,16 @@ -package sampleercp.handlers; - -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Shell; - -public class OpenHandler { - - @Execute - public void execute(Shell shell) { - FileDialog dialog = new FileDialog(shell); - dialog.open(); - } -} +package sampleercp.handlers; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Shell; + +public class OpenHandler +{ + + @Execute + public void execute(Shell shell) + { + FileDialog dialog = new FileDialog(shell); + dialog.open(); + } +} diff --git a/SampleERCP/src/sampleercp/handlers/QuitHandler.java b/SampleERCP/src/sampleercp/handlers/QuitHandler.java index 4f9d9780..79ad7a5b 100644 --- a/SampleERCP/src/sampleercp/handlers/QuitHandler.java +++ b/SampleERCP/src/sampleercp/handlers/QuitHandler.java @@ -1,15 +1,18 @@ -package sampleercp.handlers; - -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.e4.ui.workbench.IWorkbench; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Shell; - -public class QuitHandler { - @Execute - public void execute(IWorkbench workbench, Shell shell) { - if (MessageDialog.openConfirm(shell, "Confirmation", "Do you want to exit?")) { - workbench.close(); - } - } -} +package sampleercp.handlers; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.workbench.IWorkbench; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Shell; + +public class QuitHandler +{ + @Execute + public void execute(IWorkbench workbench, Shell shell) + { + if (MessageDialog.openConfirm(shell, "Confirmation", "Do you want to exit?")) + { + workbench.close(); + } + } +} diff --git a/SampleERCP/src/sampleercp/handlers/SaveHandler.java b/SampleERCP/src/sampleercp/handlers/SaveHandler.java index de086e03..35f3e79c 100644 --- a/SampleERCP/src/sampleercp/handlers/SaveHandler.java +++ b/SampleERCP/src/sampleercp/handlers/SaveHandler.java @@ -1,21 +1,25 @@ -package sampleercp.handlers; - -import org.eclipse.e4.core.di.annotations.CanExecute; -import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.e4.ui.workbench.modeling.EPartService; - -public class SaveHandler { - - @CanExecute - public boolean canExecute(EPartService partService) { - if (partService != null) { - return !partService.getDirtyParts().isEmpty(); - } - return false; - } - - @Execute - public void execute(EPartService partService) { - partService.saveAll(false); - } +package sampleercp.handlers; + +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.workbench.modeling.EPartService; + +public class SaveHandler +{ + + @CanExecute + public boolean canExecute(EPartService partService) + { + if (partService != null) + { + return !partService.getDirtyParts().isEmpty(); + } + return false; + } + + @Execute + public void execute(EPartService partService) + { + partService.saveAll(false); + } } \ No newline at end of file diff --git a/SampleERCP/src/sampleercp/parts/SamplePart.java b/SampleERCP/src/sampleercp/parts/SamplePart.java index d31046f1..33618345 100644 --- a/SampleERCP/src/sampleercp/parts/SamplePart.java +++ b/SampleERCP/src/sampleercp/parts/SamplePart.java @@ -1,56 +1,61 @@ -package sampleercp.parts; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.PostConstruct; -import javax.inject.Inject; - -import org.eclipse.e4.ui.di.Focus; -import org.eclipse.e4.ui.di.Persist; -import org.eclipse.e4.ui.model.application.ui.basic.MPart; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Text; - -public class SamplePart { - - private TableViewer tableViewer; - - @Inject - private MPart part; - - @PostConstruct - public void createComposite(Composite parent) { - parent.setLayout(new GridLayout(1, false)); - - Text txtInput = new Text(parent, SWT.BORDER); - txtInput.setMessage("Enter text to mark part as dirty"); - txtInput.addModifyListener(e -> part.setDirty(true)); - txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - tableViewer = new TableViewer(parent); - - tableViewer.setContentProvider(ArrayContentProvider.getInstance()); - tableViewer.setInput(createInitialDataModel()); - tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); - } - - @Focus - public void setFocus() { - tableViewer.getTable().setFocus(); - } - - @Persist - public void save() { - part.setDirty(false); - } - - private static List createInitialDataModel() { - return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5"); - } +package sampleercp.parts; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.eclipse.e4.ui.di.Focus; +import org.eclipse.e4.ui.di.Persist; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; + +public class SamplePart +{ + + private TableViewer tableViewer; + + @Inject + private MPart part; + + @PostConstruct + public void createComposite(Composite parent) + { + parent.setLayout(new GridLayout(1, false)); + + Text txtInput = new Text(parent, SWT.BORDER); + txtInput.setMessage("Enter text to mark part as dirty"); + txtInput.addModifyListener(e -> part.setDirty(true)); + txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + tableViewer = new TableViewer(parent); + + tableViewer.setContentProvider(ArrayContentProvider.getInstance()); + tableViewer.setInput(createInitialDataModel()); + tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); + } + + @Focus + public void setFocus() + { + tableViewer.getTable().setFocus(); + } + + @Persist + public void save() + { + part.setDirty(false); + } + + private static List createInitialDataModel() + { + return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5"); + } } \ No newline at end of file diff --git a/SampleERCP/src/sampleercp/splashhandlers/ExtensibleSplashHandler.java b/SampleERCP/src/sampleercp/splashhandlers/ExtensibleSplashHandler.java index 9390d124..8285e43d 100644 --- a/SampleERCP/src/sampleercp/splashhandlers/ExtensibleSplashHandler.java +++ b/SampleERCP/src/sampleercp/splashhandlers/ExtensibleSplashHandler.java @@ -1,298 +1,328 @@ -package sampleercp.splashhandlers; - -import java.util.ArrayList; -import java.util.Iterator; - -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.eclipse.ui.splash.AbstractSplashHandler; - -/** - * @since 3.3 - * - */ -public class ExtensibleSplashHandler extends AbstractSplashHandler { - - private ArrayList fImageList; - - private ArrayList fTooltipList; - - private static final String F_SPLASH_EXTENSION_ID = "Sample.splashExtension"; // NON-NLS-1 - - private static final String F_ELEMENT_ICON = "icon"; // NON-NLS-1 - - private static final String F_ELEMENT_TOOLTIP = "tooltip"; // NON-NLS-1 - - private static final String F_DEFAULT_TOOLTIP = "Image"; // NON-NLS-1 - - private static final int F_IMAGE_WIDTH = 50; - - private static final int F_IMAGE_HEIGHT = 50; - - private static final int F_SPLASH_SCREEN_BEVEL = 5; - - private Composite fIconPanel; - - /** - * - */ - public ExtensibleSplashHandler() { - fImageList = new ArrayList<>(); - fTooltipList = new ArrayList<>(); - fIconPanel = null; - } - - /* - * (non-Javadoc) - * @see - * org.eclipse.ui.splash.AbstractSplashHandler#init(org.eclipse.swt.widgets. - * Shell) - */ - @Override - public void init(Shell splash) { - // Store the shell - super.init(splash); - // Configure the shell layout - configureUISplash(); - // Load all splash extensions - loadSplashExtensions(); - // If no splash extensions were loaded abort the splash handler - if (!hasSplashExtensions()) { - return; - } - // Create UI - createUI(); - // Configure the image panel bounds - configureUICompositeIconPanelBounds(); - // Enter event loop and prevent the RCP application from - // loading until all work is done - doEventLoop(); - } - - /** - * @return - */ - private boolean hasSplashExtensions() { - return !fImageList.isEmpty(); - } - - /** - * - */ - private void createUI() { - // Create the icon panel - createUICompositeIconPanel(); - // Create the images - createUIImages(); - } - - /** - * - */ - private void createUIImages() { - Iterator imageIterator = fImageList.iterator(); - Iterator tooltipIterator = fTooltipList.iterator(); - int i = 1; - int columnCount = ((GridLayout) fIconPanel.getLayout()).numColumns; - // Create all the images - // Abort if we run out of columns (left-over images will not fit within - // the usable splash screen width) - while (imageIterator.hasNext() && (i <= columnCount)) { - Image image = imageIterator.next(); - String tooltip = tooltipIterator.next(); - // Create the image using a label widget - createUILabel(image, tooltip); - i++; - } - } - - /** - * @param image - * @param tooltip - */ - private void createUILabel(Image image, String tooltip) { - // Create the label (no text) - Label label = new Label(fIconPanel, SWT.NONE); - label.setImage(image); - label.setToolTipText(tooltip); - } - - /** - * - */ - private void createUICompositeIconPanel() { - Shell splash = getSplash(); - // Create the composite - fIconPanel = new Composite(splash, SWT.NONE); - // Determine the maximum number of columns that can fit on the splash - // screen. One 50x50 image per column. - int maxColumnCount = getUsableSplashScreenWidth() / F_IMAGE_WIDTH; - // Limit size to the maximum number of columns if the number of images - // exceed this amount; otherwise, use the exact number of columns - // required. - int actualColumnCount = Math.min(fImageList.size(), maxColumnCount); - // Configure the layout - GridLayout layout = new GridLayout(actualColumnCount, true); - layout.horizontalSpacing = 0; - layout.verticalSpacing = 0; - layout.marginHeight = 0; - layout.marginWidth = 0; - fIconPanel.setLayout(layout); - } - - /** - * - */ - private void configureUICompositeIconPanelBounds() { - // Determine the size of the panel and position it at the bottom-right - // of the splash screen. - Point panelSize = fIconPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); - - int xCoord = getSplash().getSize().x - F_SPLASH_SCREEN_BEVEL - panelSize.x; - int yCoord = getSplash().getSize().y - F_SPLASH_SCREEN_BEVEL - panelSize.y; - int xWidth = panelSize.x; - int yWidth = panelSize.y; - - fIconPanel.setBounds(xCoord, yCoord, xWidth, yWidth); - } - - /** - * @return - */ - private int getUsableSplashScreenWidth() { - // Splash screen width minus two graphic border bevel widths - return getSplash().getSize().x - (F_SPLASH_SCREEN_BEVEL * 2); - } - - /** - * - */ - private void loadSplashExtensions() { - // Get all splash handler extensions - IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(F_SPLASH_EXTENSION_ID) - .getExtensions(); - // Process all splash handler extensions - for (int i = 0; i < extensions.length; i++) { - processSplashExtension(extensions[i]); - } - } - - /** - * @param extension - */ - private void processSplashExtension(IExtension extension) { - // Get all splash handler configuration elements - IConfigurationElement[] elements = extension.getConfigurationElements(); - // Process all splash handler configuration elements - for (int j = 0; j < elements.length; j++) { - processSplashElements(elements[j]); - } - } - - /** - * @param configurationElement - */ - private void processSplashElements(IConfigurationElement configurationElement) { - // Attribute: icon - processSplashElementIcon(configurationElement); - // Attribute: tooltip - processSplashElementTooltip(configurationElement); - } - - /** - * @param configurationElement - */ - private void processSplashElementTooltip(IConfigurationElement configurationElement) { - // Get attribute tooltip - String tooltip = configurationElement.getAttribute(F_ELEMENT_TOOLTIP); - // If a tooltip is not defined, give it a default - if ((tooltip == null) || (tooltip.length() == 0)) { - fTooltipList.add(F_DEFAULT_TOOLTIP); - } else { - fTooltipList.add(tooltip); - } - } - - /** - * @param configurationElement - */ - private void processSplashElementIcon(IConfigurationElement configurationElement) { - // Get attribute icon - String iconImageFilePath = configurationElement.getAttribute(F_ELEMENT_ICON); - // Abort if an icon attribute was not specified - if ((iconImageFilePath == null) || (iconImageFilePath.length() == 0)) { - return; - } - // Create a corresponding image descriptor - ImageDescriptor descriptor = AbstractUIPlugin - .imageDescriptorFromPlugin(configurationElement.getNamespaceIdentifier(), iconImageFilePath); - // Abort if no corresponding image was found - if (descriptor == null) { - return; - } - // Create the image - Image image = descriptor.createImage(); - // Abort if image creation failed - if (image == null) { - return; - } - // Abort if the image does not have dimensions of 50x50 - if ((image.getBounds().width != F_IMAGE_WIDTH) || (image.getBounds().height != F_IMAGE_HEIGHT)) { - // Dipose of the image - image.dispose(); - return; - } - // Store the image and tooltip - fImageList.add(image); - } - - /** - * - */ - private void configureUISplash() { - // Configure layout - GridLayout layout = new GridLayout(1, true); - getSplash().setLayout(layout); - // Force shell to inherit the splash background - getSplash().setBackgroundMode(SWT.INHERIT_DEFAULT); - } - - /** - * - */ - private void doEventLoop() { - Shell splash = getSplash(); - if (!splash.getDisplay().readAndDispatch()) { - splash.getDisplay().sleep(); - } - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.splash.AbstractSplashHandler#dispose() - */ - @Override - public void dispose() { - super.dispose(); - // Check to see if any images were defined - if ((fImageList == null) || fImageList.isEmpty()) { - return; - } - // Dispose of all the images - Iterator iterator = fImageList.iterator(); - while (iterator.hasNext()) { - Image image = iterator.next(); - image.dispose(); - } - } -} +package sampleercp.splashhandlers; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.splash.AbstractSplashHandler; + +/** + * @since 3.3 + * + */ +public class ExtensibleSplashHandler extends AbstractSplashHandler +{ + + private ArrayList fImageList; + + private ArrayList fTooltipList; + + private static final String F_SPLASH_EXTENSION_ID = "Sample.splashExtension"; // NON-NLS-1 + + private static final String F_ELEMENT_ICON = "icon"; // NON-NLS-1 + + private static final String F_ELEMENT_TOOLTIP = "tooltip"; // NON-NLS-1 + + private static final String F_DEFAULT_TOOLTIP = "Image"; // NON-NLS-1 + + private static final int F_IMAGE_WIDTH = 50; + + private static final int F_IMAGE_HEIGHT = 50; + + private static final int F_SPLASH_SCREEN_BEVEL = 5; + + private Composite fIconPanel; + + /** + * + */ + public ExtensibleSplashHandler() + { + fImageList = new ArrayList<>(); + fTooltipList = new ArrayList<>(); + fIconPanel = null; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.splash.AbstractSplashHandler#init(org.eclipse.swt.widgets. Shell) + */ + @Override + public void init(Shell splash) + { + // Store the shell + super.init(splash); + // Configure the shell layout + configureUISplash(); + // Load all splash extensions + loadSplashExtensions(); + // If no splash extensions were loaded abort the splash handler + if (!hasSplashExtensions()) + { + return; + } + // Create UI + createUI(); + // Configure the image panel bounds + configureUICompositeIconPanelBounds(); + // Enter event loop and prevent the RCP application from + // loading until all work is done + doEventLoop(); + } + + /** + * @return + */ + private boolean hasSplashExtensions() + { + return !fImageList.isEmpty(); + } + + /** + * + */ + private void createUI() + { + // Create the icon panel + createUICompositeIconPanel(); + // Create the images + createUIImages(); + } + + /** + * + */ + private void createUIImages() + { + Iterator imageIterator = fImageList.iterator(); + Iterator tooltipIterator = fTooltipList.iterator(); + int i = 1; + int columnCount = ((GridLayout) fIconPanel.getLayout()).numColumns; + // Create all the images + // Abort if we run out of columns (left-over images will not fit within + // the usable splash screen width) + while (imageIterator.hasNext() && (i <= columnCount)) + { + Image image = imageIterator.next(); + String tooltip = tooltipIterator.next(); + // Create the image using a label widget + createUILabel(image, tooltip); + i++; + } + } + + /** + * @param image + * @param tooltip + */ + private void createUILabel(Image image, String tooltip) + { + // Create the label (no text) + Label label = new Label(fIconPanel, SWT.NONE); + label.setImage(image); + label.setToolTipText(tooltip); + } + + /** + * + */ + private void createUICompositeIconPanel() + { + Shell splash = getSplash(); + // Create the composite + fIconPanel = new Composite(splash, SWT.NONE); + // Determine the maximum number of columns that can fit on the splash + // screen. One 50x50 image per column. + int maxColumnCount = getUsableSplashScreenWidth() / F_IMAGE_WIDTH; + // Limit size to the maximum number of columns if the number of images + // exceed this amount; otherwise, use the exact number of columns + // required. + int actualColumnCount = Math.min(fImageList.size(), maxColumnCount); + // Configure the layout + GridLayout layout = new GridLayout(actualColumnCount, true); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 0; + layout.marginHeight = 0; + layout.marginWidth = 0; + fIconPanel.setLayout(layout); + } + + /** + * + */ + private void configureUICompositeIconPanelBounds() + { + // Determine the size of the panel and position it at the bottom-right + // of the splash screen. + Point panelSize = fIconPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); + + int xCoord = getSplash().getSize().x - F_SPLASH_SCREEN_BEVEL - panelSize.x; + int yCoord = getSplash().getSize().y - F_SPLASH_SCREEN_BEVEL - panelSize.y; + int xWidth = panelSize.x; + int yWidth = panelSize.y; + + fIconPanel.setBounds(xCoord, yCoord, xWidth, yWidth); + } + + /** + * @return + */ + private int getUsableSplashScreenWidth() + { + // Splash screen width minus two graphic border bevel widths + return getSplash().getSize().x - (F_SPLASH_SCREEN_BEVEL * 2); + } + + /** + * + */ + private void loadSplashExtensions() + { + // Get all splash handler extensions + IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(F_SPLASH_EXTENSION_ID).getExtensions(); + // Process all splash handler extensions + for (int i = 0; i < extensions.length; i++) + { + processSplashExtension(extensions[i]); + } + } + + /** + * @param extension + */ + private void processSplashExtension(IExtension extension) + { + // Get all splash handler configuration elements + IConfigurationElement[] elements = extension.getConfigurationElements(); + // Process all splash handler configuration elements + for (int j = 0; j < elements.length; j++) + { + processSplashElements(elements[j]); + } + } + + /** + * @param configurationElement + */ + private void processSplashElements(IConfigurationElement configurationElement) + { + // Attribute: icon + processSplashElementIcon(configurationElement); + // Attribute: tooltip + processSplashElementTooltip(configurationElement); + } + + /** + * @param configurationElement + */ + private void processSplashElementTooltip(IConfigurationElement configurationElement) + { + // Get attribute tooltip + String tooltip = configurationElement.getAttribute(F_ELEMENT_TOOLTIP); + // If a tooltip is not defined, give it a default + if ((tooltip == null) || (tooltip.length() == 0)) + { + fTooltipList.add(F_DEFAULT_TOOLTIP); + } else + { + fTooltipList.add(tooltip); + } + } + + /** + * @param configurationElement + */ + private void processSplashElementIcon(IConfigurationElement configurationElement) + { + // Get attribute icon + String iconImageFilePath = configurationElement.getAttribute(F_ELEMENT_ICON); + // Abort if an icon attribute was not specified + if ((iconImageFilePath == null) || (iconImageFilePath.length() == 0)) + { + return; + } + // Create a corresponding image descriptor + ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(configurationElement.getNamespaceIdentifier(), + iconImageFilePath); + // Abort if no corresponding image was found + if (descriptor == null) + { + return; + } + // Create the image + Image image = descriptor.createImage(); + // Abort if image creation failed + if (image == null) + { + return; + } + // Abort if the image does not have dimensions of 50x50 + if ((image.getBounds().width != F_IMAGE_WIDTH) || (image.getBounds().height != F_IMAGE_HEIGHT)) + { + // Dipose of the image + image.dispose(); + return; + } + // Store the image and tooltip + fImageList.add(image); + } + + /** + * + */ + private void configureUISplash() + { + // Configure layout + GridLayout layout = new GridLayout(1, true); + getSplash().setLayout(layout); + // Force shell to inherit the splash background + getSplash().setBackgroundMode(SWT.INHERIT_DEFAULT); + } + + /** + * + */ + private void doEventLoop() + { + Shell splash = getSplash(); + if (!splash.getDisplay().readAndDispatch()) + { + splash.getDisplay().sleep(); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.splash.AbstractSplashHandler#dispose() + */ + @Override + public void dispose() + { + super.dispose(); + // Check to see if any images were defined + if ((fImageList == null) || fImageList.isEmpty()) + { + return; + } + // Dispose of all the images + Iterator iterator = fImageList.iterator(); + while (iterator.hasNext()) + { + Image image = iterator.next(); + image.dispose(); + } + } +}