From b92ea7d8bbdcb12d1262859eb50979961f3b900e Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Tue, 23 Mar 2010 03:18:38 +0000 Subject: [PATCH] - change ui for editing problem parameters and other stuff --- .../ui/dialogs/CustomizeProblemComposite.java | 79 ++++++++++ .../ui/dialogs/CustomizeProblemDialog.java | 72 +++++++++ .../ParametersComposite.java | 13 +- .../ui/preferences/CodanPreferencePage.java | 140 ++++++++++-------- 4 files changed, 234 insertions(+), 70 deletions(-) create mode 100644 codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemComposite.java create mode 100644 codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java rename codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/{preferences => dialogs}/ParametersComposite.java (92%) diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemComposite.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemComposite.java new file mode 100644 index 00000000000..b15cea95b70 --- /dev/null +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemComposite.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2009 Alena Laskavaia + * 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: + * Alena Laskavaia - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.codan.internal.ui.dialogs; + +import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; +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.Label; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; + +/** + * @author Alena + * + */ +public class CustomizeProblemComposite extends Composite { + private Composite parametersTab; + private IProblem problem; + private ParametersComposite problemsComposite; + + /** + * @param parent + * @param selectedProblem + * @param style + */ + public CustomizeProblemComposite(Composite parent, IProblem selectedProblem) { + super(parent, SWT.NONE); + + this.setLayout(new GridLayout(1, false)); + this.problem = selectedProblem; + final TabFolder tabFolder = new TabFolder(this, SWT.TOP); + tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); + // createMainTab(tabFolder); + createParamtersTab(tabFolder); + createScopeTab(tabFolder); + } + + public void save(IProblemWorkingCopy problem) { + problemsComposite.save(problem); + } + + /** + * @param tabFolder + */ + private void createParamtersTab(TabFolder tabFolder) { + TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL); + tabItem1.setText("Parameters"); + parametersTab = new Composite(tabFolder, SWT.NONE); + tabItem1.setControl(parametersTab); + parametersTab.setLayout(new GridLayout()); + problemsComposite = new ParametersComposite(parametersTab, problem); + problemsComposite.setLayoutData(new GridData(SWT.BEGINNING,SWT.BEGINNING, true, false)); + } + + /** + * @param tabFolder + */ + private void createScopeTab(TabFolder tabFolder) { + TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL); + tabItem1.setText("Scope"); + Composite comp = new Composite(tabFolder, SWT.NONE); + tabItem1.setControl(comp); + comp.setLayout(new GridLayout()); + Label label = new Label(comp, SWT.NONE); + label.setText("Scope: TODO"); + label.setLayoutData(new GridData(GridData.FILL_BOTH)); + } +} diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java new file mode 100644 index 00000000000..8852fa0750c --- /dev/null +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2009 Alena Laskavaia + * 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: + * Alena Laskavaia - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.codan.internal.ui.dialogs; + +import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; +import org.eclipse.jface.dialogs.TitleAreaDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +/** + * Dialog that allows to customise problems + * + */ +public class CustomizeProblemDialog extends TitleAreaDialog { + private CustomizeProblemComposite comp; + private IProblem problem; + + /** + * @param parentShell + * @param selectedProblem + */ + public CustomizeProblemDialog(Shell parentShell, IProblem selectedProblem) { + super(parentShell); + this.problem = selectedProblem; + setShellStyle(getShellStyle() | SWT.RESIZE); + } + + /** + * Stores edit values into problem working copy + * @param problem - problem working copy + */ + public void save(IProblemWorkingCopy problem) { + comp.save(problem); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite) + */ + @Override + protected Control createDialogArea(Composite parent) { + getShell().setText("Customize Problem..."); + setTitle(problem.getName()); + setMessage("Edit problem parameters, scope and launch options"); + Composite area = (Composite) super.createDialogArea(parent); + comp = new CustomizeProblemComposite(area, problem); + GridData ld = new GridData(GridData.FILL_BOTH); + ld.minimumHeight=300; + comp.setLayoutData(ld); + return area; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#okPressed() + */ + @Override + protected void okPressed() { + save((IProblemWorkingCopy) problem); + super.okPressed(); + } +} diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/ParametersComposite.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ParametersComposite.java similarity index 92% rename from codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/ParametersComposite.java rename to codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ParametersComposite.java index eaf4687a0b7..e9d0ef02205 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/ParametersComposite.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ParametersComposite.java @@ -8,7 +8,7 @@ * Contributors: * Alena Laskavaia - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.codan.internal.ui.preferences; +package org.eclipse.cdt.codan.internal.ui.dialogs; import org.eclipse.cdt.codan.core.model.IProblem; import org.eclipse.cdt.codan.core.model.IProblemParameterInfo; @@ -38,6 +38,8 @@ public class ParametersComposite extends Composite { */ public ParametersComposite(Composite parent, final IProblem problem) { super(parent, SWT.NONE); + if (problem == null) + throw new NullPointerException(); this.setLayout(new GridLayout(2, false)); this.problem = problem; this.pref = new PreferenceStore(); @@ -73,12 +75,11 @@ public class ParametersComposite extends Composite { if (info == null) { Label label = new Label(this, 0); label.setText("No Parameters"); - } else { - initPrefStore(info); - page.setPreferenceStore(pref); - page.createControl(parent); - page.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); } + initPrefStore(info); + page.setPreferenceStore(pref); + page.createControl(parent); + page.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); } public void save(IProblemWorkingCopy problemwc) { diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java index a32865faf95..bec47454652 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java @@ -14,21 +14,26 @@ import org.eclipse.cdt.codan.core.CodanCorePlugin; import org.eclipse.cdt.codan.core.CodanRuntime; import org.eclipse.cdt.codan.core.model.ICheckersRegistry; import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemParameterInfo; import org.eclipse.cdt.codan.core.model.IProblemProfile; -import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; +import org.eclipse.cdt.codan.internal.ui.dialogs.CustomizeProblemDialog; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.TabFolder; -import org.eclipse.swt.widgets.TabItem; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.preferences.ScopedPreferenceStore; @@ -46,24 +51,27 @@ import org.eclipse.ui.preferences.ScopedPreferenceStore; public class CodanPreferencePage extends FieldEditorOverlayPage implements IWorkbenchPreferencePage { private IProblemProfile profile; - private Composite parametersTab; private ISelectionChangedListener problemSelectionListener; private IProblem selectedProblem; + private Group info; + private Label infoMessage; + private Label infoParams; + private Button infoButton; public CodanPreferencePage() { super(GRID); setPreferenceStore(new ScopedPreferenceStore(new InstanceScope(), CodanCorePlugin.PLUGIN_ID)); - setDescription("Code Analyzers Preference Page"); + //setDescription("Code Analysis Preference Page"); problemSelectionListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { - if (parametersTab != null) { + if (info != null) { if (event.getSelection() instanceof ITreeSelection) { ITreeSelection s = (ITreeSelection) event .getSelection(); if (s.getFirstElement() instanceof IProblem) setSelectedProblem((IProblem) s.getFirstElement()); - else + else setSelectedProblem(null); } } @@ -89,6 +97,12 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements addField(checkedTreeEditor); checkedTreeEditor.getTreeViewer().addSelectionChangedListener( problemSelectionListener); + checkedTreeEditor.getTreeViewer().addDoubleClickListener( + new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + openCustomizeDialog(); + } + }); } /* @@ -101,60 +115,45 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements @Override protected Control createContents(Composite parent) { Composite comp = (Composite) super.createContents(parent); - final TabFolder tabFolder = new TabFolder(comp, SWT.TOP); - tabFolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - // createMainTab(tabFolder); - createParamtersTab(tabFolder); - createScopeTab(tabFolder); + createInfoControl(comp); return comp; } + /** + * @param comp + */ + private void createInfoControl(Composite comp) { + info = new Group(comp, SWT.NONE); + info.setLayoutData(new GridData(GridData.FILL_BOTH)); + info.setLayout(new GridLayout(2, false)); + info.setText("Info"); + infoParams = new Label(info, SWT.NONE); + infoParams.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, + false)); + infoButton = new Button(info, SWT.PUSH); + infoButton + .setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false)); + infoButton.setText("Customize..."); + infoButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + openCustomizeDialog(); + } + }); + infoMessage = new Label(info, SWT.WRAP); + GridData ld = new GridData(SWT.BEGINNING, SWT.CENTER, false, false); + ld.horizontalSpan = 2; + ld.widthHint=400; + infoMessage.setLayoutData(ld); + setSelectedProblem(null); + } + /** * @param selection */ protected void setSelectedProblem(IProblem problem) { - if (this.selectedProblem != problem) { - saveProblemEdits(); - } this.selectedProblem = problem; - Control[] children = parametersTab.getChildren(); - for (int i = 0; i < children.length; i++) { - Control control = children[i]; - control.dispose(); - } - if (problem != null) { - ParametersComposite comp = new ParametersComposite(parametersTab, - problem); - comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - parametersTab.pack(true); - getFieldEditorParent().layout(true); - getFieldEditorParent().redraw(); - } - } - - /** - * @param tabFolder - */ - private void createParamtersTab(TabFolder tabFolder) { - TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL); - tabItem1.setText("Parameters"); - parametersTab = new Composite(tabFolder, SWT.NONE); - tabItem1.setControl(parametersTab); - parametersTab.setLayout(new GridLayout()); - } - - /** - * @param tabFolder - */ - private void createScopeTab(TabFolder tabFolder) { - TabItem tabItem1 = new TabItem(tabFolder, SWT.NULL); - tabItem1.setText("Scope"); - Composite comp = new Composite(tabFolder, SWT.NONE); - tabItem1.setControl(comp); - comp.setLayout(new GridLayout()); - Label label = new Label(comp, SWT.NONE); - label.setText("Scope: TODO"); - label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + updateProblemInfo(); } /** @@ -173,24 +172,28 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements public boolean performOk() { // if (isPropertyPage()) getRegistry().updateProfile((IResource) getElement(), null); - saveProblemEdits(); return super.performOk(); } /** * */ - private void saveProblemEdits() { - if (selectedProblem == null) - return; - Control[] children = parametersTab.getChildren(); - for (int i = 0; i < children.length; i++) { - Control control = children[i]; - if (control instanceof ParametersComposite) { - ((ParametersComposite) control) - .save((IProblemWorkingCopy) selectedProblem); // XXX - } + private void updateProblemInfo() { + if (selectedProblem == null) { + infoMessage.setText(""); + infoParams.setText(""); + infoButton.setEnabled(false); + } else { + IProblemParameterInfo parameterInfo = selectedProblem + .getParameterInfo(); + String desc = selectedProblem.getDescription(); + infoMessage.setText(desc == null ? "No additional information" + : desc); + infoParams.setText(parameterInfo == null ? "No parameters" + : "This problem has parameters"); + infoButton.setEnabled(true); } + info.layout(true); } /* @@ -201,4 +204,13 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements */ public void init(IWorkbench workbench) { } + + /** + * + */ + protected void openCustomizeDialog() { + CustomizeProblemDialog d = new CustomizeProblemDialog(getShell(), + selectedProblem); + d.open(); + } } \ No newline at end of file