KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > help > ui > internal > views > IndexTypeinPart


1 /*******************************************************************************
2  * Copyright (c) 2006 Intel Corporation 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  * Intel Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.help.ui.internal.views;
12
13 import org.eclipse.help.ui.internal.IHelpUIConstants;
14 import org.eclipse.help.ui.internal.Messages;
15 import org.eclipse.jface.action.IAction;
16 import org.eclipse.jface.action.IMenuManager;
17 import org.eclipse.jface.action.IToolBarManager;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.events.KeyEvent;
20 import org.eclipse.swt.events.KeyListener;
21 import org.eclipse.swt.events.ModifyEvent;
22 import org.eclipse.swt.events.ModifyListener;
23 import org.eclipse.swt.events.SelectionAdapter;
24 import org.eclipse.swt.events.SelectionEvent;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28 import org.eclipse.swt.widgets.Text;
29 import org.eclipse.swt.widgets.Tree;
30 import org.eclipse.swt.widgets.TreeItem;
31 import org.eclipse.ui.IMemento;
32 import org.eclipse.ui.forms.AbstractFormPart;
33 import org.eclipse.ui.forms.widgets.FormText;
34 import org.eclipse.ui.forms.widgets.FormToolkit;
35 import org.eclipse.ui.forms.widgets.TableWrapData;
36 import org.eclipse.ui.forms.widgets.TableWrapLayout;
37
38
39 public class IndexTypeinPart extends AbstractFormPart implements IHelpPart, IHelpUIConstants {
40     private ReusableHelpPart parent;
41     String JavaDoc id;
42     private Composite container;
43     private FormText indexInstructions;
44     private Text indexText;
45     private Button indexButton;
46     private IndexPart indexPart;
47     private Tree indexTree;
48     private int itemCount;
49     private String JavaDoc[] rootItems;
50     private int currentIndex;
51
52     public IndexTypeinPart(Composite parent, FormToolkit toolkit, IToolBarManager tbm) {
53         container = toolkit.createComposite(parent);
54
55         TableWrapLayout layout = new TableWrapLayout();
56         layout.numColumns = 2;
57         container.setLayout(layout);
58
59         // Instructions
60
indexInstructions = toolkit.createFormText(container, false);
61         indexInstructions.setText(Messages.IndexInstructions, false, false);
62         TableWrapData td = new TableWrapData();
63         td.colspan = 2;
64         indexInstructions.setLayoutData(td);
65
66         // Index typein
67
indexText = toolkit.createText(container, null);
68         td = new TableWrapData(TableWrapData.FILL_GRAB);
69         td.maxWidth = 100;
70         td.valign = TableWrapData.MIDDLE;
71         indexText.setLayoutData(td);
72         indexButton = toolkit.createButton(container, Messages.IndexButton, SWT.PUSH);
73         indexButton.setEnabled(false);
74
75         indexText.addModifyListener(new ModifyListener() {
76             public void modifyText(ModifyEvent e) {
77                 indexButton.setEnabled(indexText.getText().length() > 0);//!!!
78
doNavigate(indexText.getText());
79             }});
80         indexText.addKeyListener(new KeyListener() {
81             public void keyReleased(KeyEvent e) {
82                 if (e.character == '\r' && indexButton.isEnabled()) {
83                         doOpen();
84                 }
85             }
86             public void keyPressed(KeyEvent e) {
87                 if (e.keyCode == SWT.ARROW_UP) {
88                     e.doit = false;
89                     doUp();
90                 } else if (e.keyCode == SWT.ARROW_DOWN) {
91                     e.doit = false;
92                     doDown();
93                 }
94             }});
95         indexButton.addSelectionListener(new SelectionAdapter() {
96             public void widgetSelected(SelectionEvent e) {
97                 doOpen();
98             }});
99
100         toolkit.paintBordersFor(container);
101
102         currentIndex = -1;
103     }
104
105     protected void doUp() {
106         checkTree();
107         if (indexTree == null) return;
108
109         int index = 0;
110         TreeItem[] items = indexTree.getSelection();
111         if (items.length > 0) {
112             index = indexTree.indexOf(items[0]) - 1;
113             if (index < 0) {
114                 return;
115             }
116         }
117         TreeItem item = indexTree.getItem(index);
118         indexTree.setSelection(new TreeItem[] { item });
119         String JavaDoc text = item.getText();
120         indexText.setText(text);
121         indexText.setSelection(0, text.length());
122     }
123
124     protected void doDown() {
125         checkTree();
126         if (indexTree == null) return;
127
128         int index = 0;
129         TreeItem[] items = indexTree.getSelection();
130         if (items.length > 0) {
131             index = indexTree.indexOf(items[0]) + 1;
132             if (index >= indexTree.getItemCount()) {
133                 return;
134             }
135         }
136         TreeItem item = indexTree.getItem(index);
137         indexTree.setSelection(new TreeItem[] { item });
138         String JavaDoc text = item.getText();
139         indexText.setText(text);
140         indexText.setSelection(0, text.length());
141     }
142
143     protected void doNavigate(String JavaDoc text) {
144         checkTree();
145         if (rootItems == null) return;
146
147         int index = searchPattern(text);
148         if (index != -1 && index != currentIndex) {
149             indexTree.setSelection(new TreeItem[] { indexTree.getItem(index) });
150             currentIndex = index;
151         }
152     }
153
154     private void checkTree() {
155         if (rootItems != null) return;
156
157         indexPart = (IndexPart)parent.findPart(HV_INDEX);
158         if (indexPart == null) return;
159
160         indexTree = indexPart.getTreeWidget();
161         if (indexTree == null) return;
162
163         itemCount = indexTree.getItemCount();
164         if (itemCount == 0) {
165             indexTree = null;
166         } else {
167             rootItems = new String JavaDoc[itemCount];
168             for (int i = 0; i < itemCount; i++) {
169                 rootItems[i] = indexTree.getItem(i).getText();
170             }
171         }
172     }
173
174     /*
175      * TODO optimize
176      */

177     private int searchPattern(String JavaDoc pattern) {
178         int from = 0;
179         int to = rootItems.length;
180         int i;
181         int res;
182
183         while (to > from) {
184             i = (to + from) / 2;
185             res = compare(rootItems[i], pattern);
186             if (res == 0) {
187                 while (i > 0) {
188                     if (compare(rootItems[--i], pattern) != 0) {
189                         i++;
190                         break;
191                     }
192                 }
193                 return i;
194             }
195
196             if (res < 0) {
197                 from = i + 1;
198             } else {
199                 to = i;
200             }
201         }
202
203         return -1;
204     }
205
206     /*
207      * TODO optimize
208      */

209     int compare(String JavaDoc keyword, String JavaDoc pattern) {
210         int kI = 0, pI = 0;
211         char kCh, pCh;
212
213         while (kI < keyword.length() && pI < pattern.length()) {
214             kCh = Character.toLowerCase(keyword.charAt(kI));
215             pCh = Character.toLowerCase(pattern.charAt(pI));
216             if (kCh > pCh) {
217                 return 1;
218             } else if (kCh < pCh) {
219                 return -1;
220             }
221             kI++;
222             pI++;
223         }
224         if (keyword.length() >= pattern.length()) {
225             return 0;
226         } else {
227             return -1;
228         }
229     }
230
231     protected void doOpen() {
232         checkTree();
233         if (indexTree == null) return;
234
235         TreeItem items[] = indexTree.getSelection();
236         if (items.length == 0) return;
237
238         Object JavaDoc obj = items[0].getData();
239         if (obj != null) {
240             indexPart.doOpen(obj);
241         }
242     }
243
244     public void init(ReusableHelpPart parent, String JavaDoc id, IMemento memento) {
245         this.parent = parent;
246         this.id = id;
247     }
248
249     public void saveState(IMemento memento) {
250     }
251
252     public Control getControl() {
253         return container;
254     }
255
256     public String JavaDoc getId() {
257         return id;
258     }
259
260     public void setVisible(boolean visible) {
261         getControl().setVisible(visible);
262     }
263
264     public boolean hasFocusControl(Control control) {
265         return false;
266     }
267
268     public boolean fillContextMenu(IMenuManager manager) {
269         return false;
270     }
271
272     public IAction getGlobalAction(String JavaDoc id) {
273         return null;
274     }
275
276     public void stop() {
277     }
278
279     public void toggleRoleFilter() {
280     }
281
282     public void refilter() {
283     }
284
285     public void setFocus() {
286         indexText.setFocus();
287     }
288
289     public Text getTextWidget() {
290         return indexText;
291     }
292 }
293
Popular Tags