intial source from ttp://www.sf.net/projects/wdte
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.css.ui / src / net / sourceforge / phpeclipse / css / ui / internal / preferences / AbstractConfigurationBlock.java
diff --git a/archive/net.sourceforge.phpeclipse.css.ui/src/net/sourceforge/phpeclipse/css/ui/internal/preferences/AbstractConfigurationBlock.java b/archive/net.sourceforge.phpeclipse.css.ui/src/net/sourceforge/phpeclipse/css/ui/internal/preferences/AbstractConfigurationBlock.java
new file mode 100644 (file)
index 0000000..ec72daf
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2003-2004 Christopher Lenz and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     Christopher Lenz - initial API and implementation
+ * 
+ * $Id: AbstractConfigurationBlock.java,v 1.1 2004-09-02 18:11:50 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.css.ui.internal.preferences;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * 
+ */
+abstract class AbstractConfigurationBlock {
+
+       // Instance Variables ------------------------------------------------------
+
+       private IPreferenceStore fPreferenceStore;
+
+       private Map fCheckBoxes = new HashMap();
+       private SelectionListener fCheckBoxListener = new SelectionListener() {
+               public void widgetDefaultSelected(SelectionEvent e) {
+               }
+               public void widgetSelected(SelectionEvent e) {
+                       Button button = (Button) e.widget;
+                       getPreferenceStore().setValue((String) fCheckBoxes.get(button),
+                               button.getSelection());
+               }
+       };
+
+       private Map fTextFields = new HashMap();
+       private ModifyListener fTextFieldListener = new ModifyListener() {
+               public void modifyText(ModifyEvent e) {
+                       Text text = (Text) e.widget;
+                       getPreferenceStore().setValue((String) fTextFields.get(text),
+                               text.getText());
+               }
+       };
+
+       private List fNumberFields = new ArrayList();
+       private ModifyListener fNumberFieldListener = new ModifyListener() {
+               public void modifyText(ModifyEvent e) {
+                       //numberFieldChanged((Text) e.widget);
+               }
+       };
+
+       private Map fLabels = new HashMap();
+
+       // Constructors ------------------------------------------------------------
+
+       public AbstractConfigurationBlock(IPreferenceStore store) {
+               this.fPreferenceStore = store;    
+       }
+
+       // Public Methods ----------------------------------------------------------
+
+       public void initializeFields() {
+               for (Iterator i = fCheckBoxes.keySet().iterator(); i.hasNext(); ) {
+                       Button button = (Button) i.next();
+                       String key = (String) fCheckBoxes.get(button);
+                       button.setSelection(getPreferenceStore().getBoolean(key));
+               }
+               for (Iterator i = fTextFields.keySet().iterator(); i.hasNext(); ) {
+                       Text text = (Text) i.next();
+                       String key = (String) fTextFields.get(text);
+                       text.setText(getPreferenceStore().getString(key));
+               }
+       }
+
+       // Protected Methods -------------------------------------------------------
+
+       protected final Button addBooleanField(Composite parent, String label,
+               String key, int indentation) {
+
+               Button checkBox = new Button(parent, SWT.CHECK);
+               checkBox.setText(label);
+
+               GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+               gd.horizontalIndent = indentation;
+               gd.horizontalSpan = 2;
+               checkBox.setLayoutData(gd);
+               checkBox.addSelectionListener(fCheckBoxListener);
+
+               fCheckBoxes.put(checkBox, key);
+
+               return checkBox;
+       }
+
+       protected final Control addIntegerField(Composite composite, String label,
+               String key, int textLimit, int indentation) {
+
+               Text textControl =
+                       addStringField(composite, label, textLimit, indentation);
+               fTextFields.put(textControl, key);
+               fNumberFields.add(textControl);
+               textControl.addModifyListener(fNumberFieldListener);
+
+               return textControl;
+       }
+
+       protected final Control addTextField(Composite composite, String label,
+               String key, int textLimit, int indentation) {
+
+               Text textControl =
+                       addStringField(composite, label, textLimit, indentation);
+               fTextFields.put(textControl, key);
+               textControl.addModifyListener(fTextFieldListener);
+
+               return textControl;
+       }
+
+       protected final int convertHeightInCharsToPixels(Control control,
+               int chars) {
+               GC gc = new GC(control);
+               gc.setFont(control.getFont());
+               FontMetrics fontMetrics = gc.getFontMetrics();
+               gc.dispose();
+               if (fontMetrics == null) {
+                       return 0;
+               }
+               return Dialog.convertHeightInCharsToPixels(fontMetrics, chars);
+       }
+
+       protected final int convertWidthInCharsToPixels(Control control,
+               int chars) {
+               GC gc = new GC(control);
+               gc.setFont(control.getFont());
+               FontMetrics fontMetrics = gc.getFontMetrics();
+               gc.dispose();
+               if (fontMetrics == null) {
+                       return 0;
+               }
+               return Dialog.convertWidthInCharsToPixels(fontMetrics, chars);
+       }
+
+       protected final Control getLabel(Control field) {
+               return (Control) fLabels.get(field);
+       }
+
+       protected final IPreferenceStore getPreferenceStore() {
+               return fPreferenceStore;
+       }
+
+       // Private Methods ---------------------------------------------------------
+
+       private Text addStringField(Composite composite, String label,
+               int textLimit, int indentation) {
+
+               Label labelControl = new Label(composite, SWT.NONE);
+               labelControl.setText(label);
+               GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+               gd.horizontalIndent = indentation;
+               labelControl.setLayoutData(gd);
+
+               Text textControl = new Text(composite, SWT.BORDER | SWT.SINGLE);
+               gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+               gd.widthHint = convertWidthInCharsToPixels(textControl, textLimit + 1);
+               textControl.setLayoutData(gd);
+               textControl.setTextLimit(textLimit);
+
+               fLabels.put(textControl, labelControl);
+
+               return textControl;
+       }
+
+}