upload tizen1.0 source
[sdk/ide/product.git] / org.eclipse.cdt.ui / src / org / eclipse / cdt / internal / ui / text / folding / DefaultCFoldingPreferenceBlock.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2008 QNX Software Systems and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *     Anton Leherbauer (Wind River Systems)
11  *     Elazar Leibovich (IDF) - Code folding of compound statements (bug 174597)
12  *******************************************************************************/
13
14 package org.eclipse.cdt.internal.ui.text.folding;
15
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.Iterator;
19 import java.util.Map;
20
21 import org.eclipse.jface.preference.IPreferenceStore;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.SelectionEvent;
24 import org.eclipse.swt.events.SelectionListener;
25 import org.eclipse.swt.layout.GridData;
26 import org.eclipse.swt.layout.GridLayout;
27 import org.eclipse.swt.widgets.Button;
28 import org.eclipse.swt.widgets.Composite;
29 import org.eclipse.swt.widgets.Control;
30
31 import org.eclipse.cdt.ui.CUIPlugin;
32 import org.eclipse.cdt.ui.PreferenceConstants;
33 import org.eclipse.cdt.ui.text.folding.ICFoldingPreferenceBlock;
34 import org.eclipse.cdt.utils.ui.controls.ControlFactory;
35
36 import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore;
37 import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
38
39 /**
40  */
41 public class DefaultCFoldingPreferenceBlock implements ICFoldingPreferenceBlock {
42
43         private IPreferenceStore fStore;
44         protected OverlayPreferenceStore fOverlayStore;
45         private OverlayKey[] fKeys;
46         protected Map<Button, String> fCheckBoxes= new HashMap<Button, String>();
47
48         private SelectionListener fCheckBoxListener= new SelectionListener() {
49                 public void widgetDefaultSelected(SelectionEvent e) {
50                 }
51                 public void widgetSelected(SelectionEvent e) {
52                         Button button= (Button) e.widget;
53                         String key= fCheckBoxes.get(button);
54                         fOverlayStore.setValue(key, button.getSelection());
55                         updateEnablement(key);
56                 }
57         };
58         private Button fInactiveCodeFoldingCheckBox;
59         
60
61         public DefaultCFoldingPreferenceBlock() {
62                 fStore= CUIPlugin.getDefault().getPreferenceStore();
63                 fKeys= createKeys();
64                 fOverlayStore= new OverlayPreferenceStore(fStore, fKeys);
65         }
66         
67         private OverlayKey[] createKeys() {
68                 ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
69
70                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_MACROS));
71                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_FUNCTIONS));
72                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_METHODS));
73                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_STRUCTURES));
74                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_COMMENTS));
75                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_HEADERS));
76                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_INACTIVE_CODE));
77                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_PREPROCESSOR_BRANCHES_ENABLED));
78                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_STATEMENTS));
79                 
80                 return overlayKeys.toArray(new OverlayKey[overlayKeys.size()]);
81         }
82
83         /*
84          * @see org.eclipse.cdt.internal.ui.text.folding.ICFoldingPreferences#createControl(org.eclipse.swt.widgets.Group)
85          */
86         public Control createControl(Composite composite) {
87                 fOverlayStore.load();
88                 fOverlayStore.start();
89                 
90                 Composite inner= new Composite(composite, SWT.NONE);
91                 GridLayout layout= new GridLayout(1, true);
92                 layout.verticalSpacing= 3;
93                 layout.marginWidth= 0;
94                 inner.setLayout(layout);
95
96                 addCheckBox(inner, FoldingMessages.DefaultCFoldingPreferenceBlock_preprocessor_enabled, PreferenceConstants.EDITOR_FOLDING_PREPROCESSOR_BRANCHES_ENABLED, 1);
97                 addCheckBox(inner, FoldingMessages.DefaultCFoldingPreferenceBlock_statements_enabled, PreferenceConstants.EDITOR_FOLDING_STATEMENTS, 1);
98                 ControlFactory.createEmptySpace(inner);
99
100                 Composite group= ControlFactory.createGroup(inner, FoldingMessages.DefaultCFoldingPreferenceBlock_title, 1);
101
102                 addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_macros, PreferenceConstants.EDITOR_FOLDING_MACROS, 0); 
103                 addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_functions, PreferenceConstants.EDITOR_FOLDING_FUNCTIONS, 0); 
104                 addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_methods, PreferenceConstants.EDITOR_FOLDING_METHODS, 0); 
105                 addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_structures, PreferenceConstants.EDITOR_FOLDING_STRUCTURES, 0); 
106                 addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_comments, PreferenceConstants.EDITOR_FOLDING_COMMENTS, 0); 
107                 addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_headers, PreferenceConstants.EDITOR_FOLDING_HEADERS, 0);
108                 fInactiveCodeFoldingCheckBox= addCheckBox(group, FoldingMessages.DefaultCFoldingPreferenceBlock_inactive_code, PreferenceConstants.EDITOR_FOLDING_INACTIVE_CODE, 0); 
109                 
110                 return inner;
111         }
112         
113         private Button addCheckBox(Composite parent, String label, String key, int indentation) {               
114                 Button checkBox= new Button(parent, SWT.CHECK);
115                 checkBox.setText(label);
116                 
117                 GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
118                 gd.horizontalIndent= indentation;
119                 gd.horizontalSpan= 1;
120                 gd.grabExcessVerticalSpace= false;
121                 checkBox.setLayoutData(gd);
122                 checkBox.addSelectionListener(fCheckBoxListener);
123                 
124                 fCheckBoxes.put(checkBox, key);
125                 
126                 return checkBox;
127         }
128         
129         private void initializeFields() {
130                 Iterator<Button> it= fCheckBoxes.keySet().iterator();
131                 while (it.hasNext()) {
132                         Button b= it.next();
133                         String key= fCheckBoxes.get(b);
134                         b.setSelection(fOverlayStore.getBoolean(key));
135                         updateEnablement(key);
136                 }
137         }
138
139         protected void updateEnablement(String key) {
140                 if (PreferenceConstants.EDITOR_FOLDING_PREPROCESSOR_BRANCHES_ENABLED.equals(key)) {
141                         fInactiveCodeFoldingCheckBox.setEnabled(fOverlayStore.getBoolean(key));
142                 }
143         }
144
145         /*
146          * @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#performOk()
147          */
148         public void performOk() {
149                 fOverlayStore.propagate();
150         }
151         
152         
153         /*
154          * @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#initialize()
155          */
156         public void initialize() {
157                 initializeFields();
158         }
159         
160         /*
161          * @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#performDefaults()
162          */
163         public void performDefaults() {
164                 fOverlayStore.loadDefaults();
165                 initializeFields();
166         }
167         
168         /*
169          * @see org.eclipse.cdt.internal.ui.text.folding.AbstractCFoldingPreferences#dispose()
170          */
171         public void dispose() {
172                 fOverlayStore.stop();
173         }
174
175 }