summaryrefslogtreecommitdiffstats
path: root/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java')
-rw-r--r--org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java261
1 files changed, 261 insertions, 0 deletions
diff --git a/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java b/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java
new file mode 100644
index 0000000..26e58fc
--- /dev/null
+++ b/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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.widgets;
+
+import java.io.File;
+
+import org.eclipse.cdt.codan.core.model.IProblem;
+import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
+import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference;
+import org.eclipse.cdt.codan.core.param.IProblemPreference;
+import org.eclipse.cdt.codan.core.param.IProblemPreferenceCompositeDescriptor;
+import org.eclipse.cdt.codan.core.param.ListProblemPreference;
+import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.FileFieldEditor;
+import org.eclipse.jface.preference.ListEditor;
+import org.eclipse.jface.preference.PreferenceStore;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.window.Window;
+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;
+
+/**
+ * Composite to show problem preferences
+ *
+ */
+public class ParametersComposite extends Composite {
+ private FieldEditorPreferencePage page;
+ private IProblem problem;
+ private PreferenceStore prefStore;
+
+ /**
+ * @param parent
+ * @param problem
+ * @param style
+ */
+ 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.prefStore = new PreferenceStore();
+ page = new FieldEditorPreferencePage() {
+ @Override
+ protected void createFieldEditors() {
+ noDefaultAndApplyButton();
+ IProblemPreference pref = problem.getPreference();
+ createFieldEditorsForParameters(pref);
+ }
+
+ /**
+ * @param info
+ */
+ private void createFieldEditorsForParameters(
+ final IProblemPreference info) {
+ if (info == null)
+ return;
+ if (info.getKey() == FileScopeProblemPreference.KEY)
+ return; // skip the scope
+ switch (info.getType()) {
+ case TYPE_STRING: {
+ StringFieldEditor fe = new StringFieldEditor(
+ info.getQualifiedKey(), info.getLabel(),
+ getFieldEditorParent());
+ addField(fe);
+ break;
+ }
+ case TYPE_BOOLEAN: {
+ BooleanFieldEditor fe = new BooleanFieldEditor(
+ info.getQualifiedKey(), info.getLabel(),
+ getFieldEditorParent());
+ addField(fe);
+ break;
+ }
+ case TYPE_LIST:
+ ListEditor le = new ListEditor(info.getQualifiedKey(),
+ info.getLabel(), getFieldEditorParent()) {
+ @Override
+ protected String[] parseString(String stringList) {
+ ListProblemPreference list = (ListProblemPreference) info;
+ IProblemPreference[] childDescriptors = list
+ .getChildDescriptors();
+ if (childDescriptors.length == 0)
+ return new String[0];
+ String res[] = new String[childDescriptors.length];
+ for (int i = 0; i < childDescriptors.length; i++) {
+ IProblemPreference item = childDescriptors[i];
+ res[i] = String.valueOf(item.getValue());
+ }
+ return res;
+ }
+
+ @Override
+ protected String getNewInputObject() {
+ ListProblemPreference list = (ListProblemPreference) info;
+ String label = list.getChildDescriptor()
+ .getLabel();
+ InputDialog dialog = new InputDialog(
+ getShell(),
+ CodanUIMessages.ParametersComposite_NewValue,
+ label, "", null); //$NON-NLS-1$
+ if (dialog.open() == Window.OK) {
+ return dialog.getValue();
+ }
+ return null;
+ }
+
+ @Override
+ protected String createList(String[] items) {
+ ListProblemPreference list = (ListProblemPreference) info
+ .clone();
+ list.clear();
+ for (int i = 0; i < items.length; i++) {
+ String val = items[i];
+ list.addChildValue(val);
+ }
+ return list.exportValue();
+ }
+ };
+ addField(le);
+ break;
+ case TYPE_MAP:
+ IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) info)
+ .getChildDescriptors();
+ for (int i = 0; i < childrenDescriptor.length; i++) {
+ IProblemPreference desc = childrenDescriptor[i];
+ createFieldEditorsForParameters(desc);
+ }
+ break;
+ case TYPE_CUSTOM: {
+ StringFieldEditor fe = new StringFieldEditor(
+ info.getQualifiedKey(), info.getLabel(),
+ getFieldEditorParent());
+ addField(fe);
+ break;
+ }
+ case TYPE_FILE: {
+ FileFieldEditor fe = new FileFieldEditor(
+ info.getQualifiedKey(), info.getLabel(),
+ getFieldEditorParent());
+ addField(fe);
+ break;
+ }
+ default:
+ throw new UnsupportedOperationException(info.getType()
+ .toString());
+ }
+ }
+ };
+ IProblemPreference info = problem.getPreference();
+ if (info == null) {
+ Label label = new Label(this, 0);
+ label.setText(CodanUIMessages.ParametersComposite_None);
+ } else {
+ initPrefStore(info);
+ }
+ page.setPreferenceStore(prefStore);
+ page.createControl(parent);
+ page.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+ }
+
+ public void save(IProblemWorkingCopy problem) {
+ page.performOk();
+ savePrefStore(problem.getPreference());
+ }
+
+ private void savePrefStore(IProblemPreference desc) {
+ if (desc == null)
+ return;
+ String key = desc.getQualifiedKey();
+ switch (desc.getType()) {
+ case TYPE_STRING:
+ desc.setValue(prefStore.getString(key));
+ break;
+ case TYPE_BOOLEAN:
+ desc.setValue(prefStore.getBoolean(key));
+ break;
+ case TYPE_INTEGER:
+ desc.setValue(prefStore.getInt(key));
+ break;
+ case TYPE_FILE:
+ desc.setValue(new File(prefStore.getString(key)));
+ break;
+ case TYPE_LIST:
+ desc.importValue(prefStore.getString(key));
+ break;
+ case TYPE_CUSTOM:
+ desc.importValue(prefStore.getString(key));
+ break;
+ case TYPE_MAP:
+ IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
+ .getChildDescriptors();
+ for (int i = 0; i < childrenDescriptor.length; i++) {
+ IProblemPreference chi = childrenDescriptor[i];
+ savePrefStore(chi);
+ }
+ break;
+ default:
+ throw new UnsupportedOperationException(desc.getType()
+ .toString());
+ }
+ }
+
+ private void initPrefStore(IProblemPreference desc) {
+ if (desc == null)
+ return;
+ String key = desc.getQualifiedKey();
+ switch (desc.getType()) {
+ case TYPE_STRING:
+ prefStore.setValue(key, (String) desc.getValue());
+ break;
+ case TYPE_BOOLEAN:
+ prefStore.setValue(key, (Boolean) desc.getValue());
+ break;
+ case TYPE_INTEGER:
+ prefStore.setValue(key, (Integer) desc.getValue());
+ break;
+ case TYPE_FILE:
+ prefStore.setValue(key, ((File) desc.getValue()).getPath());
+ break;
+ case TYPE_LIST:
+ prefStore.setValue(key, desc.exportValue());
+ break;
+ case TYPE_CUSTOM:
+ prefStore.setValue(key, desc.exportValue());
+ break;
+ case TYPE_MAP:
+ IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
+ .getChildDescriptors();
+ for (int i = 0; i < childrenDescriptor.length; i++) {
+ IProblemPreference chi = childrenDescriptor[i];
+ initPrefStore(chi);
+ }
+ break;
+ default:
+ throw new UnsupportedOperationException(desc.getType()
+ .toString());
+ }
+ }
+
+ /**
+ * @return the problem
+ */
+ public IProblem getProblem() {
+ return problem;
+ }
+}