Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2009-05-17 07:45:06 +0000
committerspingel2009-05-17 07:45:06 +0000
commit03ce35c8bebd545e9f1eac7f4c39904922537e6e (patch)
tree882c3a8e4d7d5ea892c5ae2dabb8bca4c442c5ad /org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java
parent86dcd0b2007cbc7a3a25ac7d8bae6c1ec3edb09b (diff)
downloadorg.eclipse.mylyn.tasks-03ce35c8bebd545e9f1eac7f4c39904922537e6e.tar.gz
org.eclipse.mylyn.tasks-03ce35c8bebd545e9f1eac7f4c39904922537e6e.tar.xz
org.eclipse.mylyn.tasks-03ce35c8bebd545e9f1eac7f4c39904922537e6e.zip
ASSIGNED - bug 212209: provide a flexible bug reporting facility
https://bugs.eclipse.org/bugs/show_bug.cgi?id=212209
Diffstat (limited to 'org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java')
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java354
1 files changed, 354 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java
new file mode 100644
index 000000000..c38ec9ca6
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java
@@ -0,0 +1,354 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.bugs.wizards;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.IOpenListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.OpenEvent;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.mylyn.internal.commons.ui.ControlListItem;
+import org.eclipse.mylyn.internal.commons.ui.ControlListViewer;
+import org.eclipse.mylyn.internal.commons.ui.NotificationPopupColors;
+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonFonts;
+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
+import org.eclipse.mylyn.internal.provisional.commons.ui.GradientCanvas;
+import org.eclipse.mylyn.internal.provisional.commons.ui.WorkbenchUtil;
+import org.eclipse.mylyn.internal.tasks.bugs.AbstractSupportElement;
+import org.eclipse.mylyn.internal.tasks.bugs.SupportCategory;
+import org.eclipse.mylyn.internal.tasks.bugs.SupportProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+
+/**
+ * @author Steffen Pingel
+ */
+@SuppressWarnings("restriction")
+public class SelectSupportElementPage extends WizardPage {
+
+ public class SupportElementViewer extends ControlListViewer {
+
+ public SupportElementViewer(Composite parent, int style) {
+ super(parent, style);
+ // ignore
+ }
+
+ @Override
+ protected ControlListItem doCreateItem(Composite parent, Object element) {
+ if (element instanceof SupportCategory) {
+ return new CategoryItem(parent, SWT.NONE, element);
+ }
+ return new SupportElementItem(parent, SWT.NONE, element);
+ }
+
+ }
+
+ private class CategoryItem extends ControlListItem {
+
+ private Label label;
+
+ public CategoryItem(Composite parent, int style, Object element) {
+ super(parent, style, element);
+ }
+
+ @Override
+ protected void createContent() {
+ FillLayout layout = new FillLayout();
+ setLayout(layout);
+
+ GradientCanvas canvas = new GradientCanvas(this, SWT.NONE);
+ NotificationPopupColors color = new NotificationPopupColors(getDisplay(), JFaceResources.getResources());
+ canvas.setBackgroundGradient(new Color[] { color.getGradientBegin(), color.getGradientEnd() },
+ new int[] { 100 }, true);
+ canvas.setLayout(new GridLayout(1, false));
+
+ label = new Label(canvas, SWT.NONE);
+ label.setFont(JFaceResources.getHeaderFont());
+ label.setBackground(null);
+
+ canvas.setSize(canvas.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+ refresh();
+ }
+
+ @Override
+ protected void refresh() {
+ AbstractSupportElement data = (AbstractSupportElement) getData();
+ label.setText(data.getName());
+ }
+
+ @Override
+ public void setForeground(Color color) {
+ // ignore
+ }
+
+ @Override
+ public void setBackground(Color color) {
+ // ignore
+ }
+
+ }
+
+ private class SupportElementItem extends ControlListItem {
+
+ private ToolBar toolBar;
+
+ private Label titleLabel;
+
+ private Label iconLabel;
+
+ private Label descriptionLabel;
+
+ private ToolBarManager toolBarManager;
+
+ public SupportElementItem(Composite parent, int style, Object element) {
+ super(parent, style, element);
+ }
+
+ @Override
+ protected void createContent() {
+ FormLayout layout = new FormLayout();
+ layout.marginHeight = 3;
+ layout.marginWidth = 3;
+ setLayout(layout);
+
+ iconLabel = new Label(this, SWT.NONE);
+ FormData fd = new FormData();
+ fd.left = new FormAttachment(0);
+ iconLabel.setLayoutData(fd);
+
+ titleLabel = new Label(this, SWT.NONE);
+ titleLabel.setFont(CommonFonts.BOLD);
+ fd = new FormData();
+ fd.left = new FormAttachment(iconLabel, 5);
+ titleLabel.setLayoutData(fd);
+
+ descriptionLabel = new Label(this, SWT.WRAP);
+ fd = new FormData();
+ fd.top = new FormAttachment(titleLabel, 5);
+ fd.left = new FormAttachment(iconLabel, 5);
+ descriptionLabel.setLayoutData(fd);
+
+ toolBarManager = new ToolBarManager(SWT.FLAT);
+ toolBar = toolBarManager.createControl(this);
+ fd = new FormData();
+ fd.right = new FormAttachment(100);
+ toolBar.setLayoutData(fd);
+
+ refresh();
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ toolBarManager.dispose();
+ }
+
+ @Override
+ public void setForeground(Color color) {
+ super.setForeground(color);
+ if (isSelected()) {
+ descriptionLabel.setForeground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
+ } else {
+ descriptionLabel.setForeground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
+ }
+
+ }
+
+ @Override
+ protected void refresh() {
+ AbstractSupportElement data = (AbstractSupportElement) getData();
+ iconLabel.setImage(getImage(data));
+ titleLabel.setText(data.getName());
+ descriptionLabel.setText(data.getDescription());
+
+ toolBarManager.removeAll();
+ final String url = data.getUrl();
+ if (url != null) {
+ Action action = new Action() {
+ @Override
+ public void run() {
+ WorkbenchUtil.openUrl(url, IWorkbenchBrowserSupport.AS_EXTERNAL);
+ }
+ };
+ action.setImageDescriptor(CommonImages.QUESTION);
+ toolBarManager.add(action);
+ }
+ toolBarManager.update(false);
+ }
+
+ @Override
+ public void setHot(boolean hot) {
+ super.setHot(hot);
+ updateToolBar();
+ }
+
+ @Override
+ public void setSelected(boolean select) {
+ super.setSelected(select);
+ updateToolBar();
+ }
+
+ private void updateToolBar() {
+ if (toolBar != null) {
+ toolBar.setVisible(isHot() || isSelected());
+ }
+ }
+
+ }
+
+ private static final int TABLE_HEIGHT = 200;
+
+ private AbstractSupportElement selectedElement;
+
+ private ImageRegistry imageRegistry;
+
+ private final IStructuredContentProvider contentProvider;
+
+ private Object input;
+
+ public SelectSupportElementPage(String pageName, IStructuredContentProvider contentProvider) {
+ super(pageName);
+ this.contentProvider = contentProvider;
+ setTitle(Messages.SelectFeaturePage_SELECT_FEATURE);
+ setMessage("Select a provider or product from the list.");
+ }
+
+ public Image getImage(AbstractSupportElement data) {
+ if (imageRegistry == null) {
+ imageRegistry = new ImageRegistry(getShell().getDisplay());
+ }
+ Image image = imageRegistry.get(data.getId());
+ if (image == null && data.getIcon() != null) {
+ imageRegistry.put(data.getId(), data.getIcon());
+ image = imageRegistry.get(data.getId());
+ }
+ return image;
+ }
+
+ public void setInput(Object input) {
+ this.input = input;
+ }
+
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout(1, true);
+ container.setLayout(layout);
+
+ ControlListViewer viewer = new SupportElementViewer(container, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
+ GridDataFactory.fillDefaults().grab(true, true).hint(SWT.DEFAULT, TABLE_HEIGHT).applyTo(viewer.getControl());
+ viewer.setContentProvider(contentProvider);
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+ if (!selection.isEmpty() && selection.getFirstElement() instanceof AbstractSupportElement) {
+ selectedElement = (AbstractSupportElement) selection.getFirstElement();
+ } else {
+ selectedElement = null;
+ }
+ setPageComplete(selectedElement != null);
+ }
+ });
+ viewer.addOpenListener(new IOpenListener() {
+ public void open(OpenEvent event) {
+ if (getWizard().performFinish()) {
+ ((WizardDialog) getContainer()).close();
+ }
+ }
+ });
+ viewer.setSorter(new ViewerSorter() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object o1, Object o2) {
+ int cat1 = category(o1);
+ int cat2 = category(o2);
+ if (cat1 != cat2) {
+ return cat1 - cat2;
+ }
+ if (o1 instanceof AbstractSupportElement && o2 instanceof AbstractSupportElement) {
+ return getComparator().compare(((AbstractSupportElement) o1).getName(),
+ ((AbstractSupportElement) o2).getName());
+ }
+ return super.compare(viewer, o1, o2);
+ }
+
+ @Override
+ public int category(Object element) {
+ if (element instanceof SupportCategory) {
+ return ((SupportCategory) element).getWeight() * 2;
+ } else if (element instanceof SupportProvider) {
+ return ((SupportProvider) element).getCategory().getWeight() * 2 + 1;
+ }
+ return super.category(element);
+ }
+ });
+ viewer.setInput(input);
+
+ setControl(container);
+ Dialog.applyDialogFont(container);
+ }
+
+ private boolean requiresSelection(AbstractSupportElement selectedElement) {
+ return contentProvider.getElements(selectedElement).length > 0;
+ }
+
+ @Override
+ public void dispose() {
+ if (imageRegistry != null) {
+ imageRegistry.dispose();
+ }
+ super.dispose();
+ }
+
+ public AbstractSupportElement getSelectedElement() {
+ return selectedElement;
+ }
+
+ @Override
+ public boolean canFlipToNextPage() {
+ return selectedElement != null && requiresSelection(selectedElement);
+ }
+
+ @Override
+ public IWizardPage getNextPage() {
+ if (canFlipToNextPage()) {
+ SelectSupportElementPage page = new SelectSupportElementPage(selectedElement.getId(), contentProvider);
+ page.setInput(selectedElement);
+ page.setWizard(getWizard());
+ return page;
+ }
+ return null;
+ }
+
+} \ No newline at end of file

Back to the top