KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openharmonise > him > window > outlookbar > FloatingBarPane


1 /*
2  * The contents of this file are subject to the
3  * Mozilla Public License Version 1.1 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
6  *
7  * Software distributed under the License is distributed on an "AS IS"
8  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
9  * See the License for the specific language governing rights and
10  * limitations under the License.
11  *
12  * The Initial Developer of the Original Code is Simulacra Media Ltd.
13  * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
14  *
15  * All Rights Reserved.
16  *
17  * Contributor(s):
18  */

19
20 package org.openharmonise.him.window.outlookbar;
21
22 import java.awt.Color JavaDoc;
23 import java.awt.Component JavaDoc;
24 import java.awt.Container JavaDoc;
25 import java.awt.Dimension JavaDoc;
26 import java.awt.Font JavaDoc;
27 import java.awt.IllegalComponentStateException JavaDoc;
28 import java.awt.Insets JavaDoc;
29 import java.awt.LayoutManager JavaDoc;
30 import java.awt.event.ActionEvent JavaDoc;
31 import java.awt.event.ActionListener JavaDoc;
32 import java.util.Iterator JavaDoc;
33 import java.util.Vector JavaDoc;
34
35 import javax.swing.Icon JavaDoc;
36 import javax.swing.JButton JavaDoc;
37 import javax.swing.JComponent JavaDoc;
38 import javax.swing.SwingConstants JavaDoc;
39
40 import org.openharmonise.vfs.context.*;
41
42
43 public class FloatingBarPane
44     extends JComponent JavaDoc
45     implements LayoutManager JavaDoc, ActionListener JavaDoc {
46
47     private Vector JavaDoc bars;
48     private Vector JavaDoc components;
49     private Component JavaDoc selectedComponent;
50     private Component JavaDoc previousComponent;
51     private int barHeight;
52     private int yInset;
53     private boolean animated;
54     private boolean reEntrant;
55     static int nameLessIndex = 0;
56     
57     private JComponent JavaDoc m_parent = null;
58
59     public FloatingBarPane(JComponent JavaDoc parent) {
60         reEntrant = false;
61         bars = new Vector JavaDoc();
62         components = new Vector JavaDoc();
63         yInset = 0;
64         animated = false;
65         setLayout(this);
66         m_parent = parent;
67     }
68
69     public Component JavaDoc add(Component JavaDoc component) {
70         if (!reEntrant) {
71             reEntrant = true;
72             return super.add("Bar-" + nameLessIndex++, component);
73         } else {
74             return super.add(component);
75         }
76     }
77
78     public Component JavaDoc add(Component JavaDoc component, int i) {
79         if (i < bars.size()) {
80             Vector JavaDoc vector = new Vector JavaDoc();
81             Vector JavaDoc vector1 = new Vector JavaDoc();
82             for (int j = i; j < components.size(); j++) {
83                 vector.addElement(components.elementAt(j));
84                 vector1.addElement(((JButton JavaDoc) bars.elementAt(j)).getText());
85             }
86
87             for (int k = 0; k < vector.size(); k++)
88                 remove((Component JavaDoc) vector.elementAt(k));
89
90             add(component);
91             for (int l = 0; l < vector.size(); l++)
92                 add(
93                     (String JavaDoc) vector1.elementAt(l),
94                     (Component JavaDoc) vector.elementAt(l));
95
96         } else {
97             add(component);
98         }
99         return component;
100     }
101
102     public void add(Component JavaDoc component, Object JavaDoc obj) {
103         add(component);
104     }
105
106     public void add(Component JavaDoc component, Object JavaDoc obj, int i) {
107         add(component, i);
108     }
109
110     public Component JavaDoc add(String JavaDoc s, Component JavaDoc component) {
111         reEntrant = true;
112         return super.add(s, component);
113     }
114
115     public void add(String JavaDoc s, Icon JavaDoc icon, Component JavaDoc component) {
116         add(s, component);
117         ((JButton JavaDoc) bars.elementAt(bars.size() - 1)).setIcon(icon);
118     }
119
120     public void add(String JavaDoc s, Icon JavaDoc icon, Component JavaDoc component, String JavaDoc s1) {
121         add(s, icon, component);
122         ((JComponent JavaDoc) bars.elementAt(bars.size() - 1)).setToolTipText(s1);
123     }
124     
125     public Component JavaDoc getComponent(String JavaDoc sTitle) {
126         Component JavaDoc retn = null;
127         
128         Iterator JavaDoc itor = bars.iterator();
129         while(itor.hasNext()) {
130             JButton JavaDoc button = (JButton JavaDoc)itor.next();
131             if(button.getText().equals(sTitle)) {
132                 retn = (Component JavaDoc)this.components.get( bars.indexOf(button) );
133             }
134         }
135         
136         return retn;
137     }
138
139     public boolean isAnimated() {
140         return animated;
141     }
142
143     public void setAnimated(boolean flag) {
144         animated = flag;
145     }
146
147     public void setYInset(int i) {
148         yInset = i;
149         doLayout();
150     }
151
152     public void setSelectedComponent(Component JavaDoc component) {
153         int i = components.indexOf(component);
154         if (component != selectedComponent && i > 0) {
155             previousComponent = selectedComponent;
156             selectedComponent = component;
157             if (animated)
158                  (new MoveThread()).start();
159             else
160                 doLayout();
161                 
162             ContextEvent ce = new ContextEvent(ContextType.CONTEXT_TABS, ((JButton JavaDoc)this.bars.get(i)).getText().trim());
163             ContextHandler.getInstance().fireContextEvent(ce);
164         }
165     }
166
167     public void setSelectedIndex(int i) {
168         if (i < 0 || i >= components.size())
169             return;
170         Component JavaDoc component = (Component JavaDoc) components.elementAt(i);
171         if (component != selectedComponent) {
172             previousComponent = selectedComponent;
173             selectedComponent = component;
174             if (animated)
175                  (new MoveThread()).start();
176             else
177                 doLayout();
178                 
179             ContextEvent ce = new ContextEvent(ContextType.CONTEXT_TABS, ((JButton JavaDoc)this.bars.get(i)).getText().trim());
180             ContextHandler.getInstance().fireContextEvent(ce);
181         }
182     }
183
184     public void setLayout(LayoutManager JavaDoc layoutmanager) {
185         if (layoutmanager != this) {
186             throw new IllegalComponentStateException JavaDoc("Invalid LayoutManager change");
187         } else {
188             super.setLayout(layoutmanager);
189             return;
190         }
191     }
192
193     public void setBackground(Color JavaDoc color) {
194         super.setBackground(color);
195         int i = bars.size();
196         for (int j = 0; j < i; j++)
197              ((Component JavaDoc) bars.elementAt(j)).setBackground(color);
198
199     }
200
201     public void setForeground(Color JavaDoc color) {
202         super.setForeground(color);
203         int i = bars.size();
204         for (int j = 0; j < i; j++)
205              ((Component JavaDoc) bars.elementAt(j)).setForeground(color);
206
207     }
208
209     public void addLayoutComponent(String JavaDoc s, Component JavaDoc component) {
210         JButton JavaDoc jbutton = new JButton JavaDoc(s);
211         
212         String JavaDoc fontName = "Dialog";
213         int fontSize = 11;
214         Font JavaDoc font = new Font JavaDoc(fontName, Font.PLAIN, fontSize);
215         jbutton.setFont(font);
216         
217         jbutton.setHorizontalAlignment(SwingConstants.LEFT);
218         jbutton.addActionListener(this);
219         Insets JavaDoc margin = jbutton.getMargin();
220         margin.left=1;
221         jbutton.setMargin(margin);
222         add(jbutton);
223         bars.addElement(jbutton);
224         components.addElement(component);
225         selectedComponent = component;
226         doLayout();
227         reEntrant = false;
228     }
229
230     public void removeLayoutComponent(Component JavaDoc component) {
231         int i = components.indexOf(component);
232         if (i >= 0) {
233             bars.removeElementAt(i);
234             components.removeElementAt(i);
235         }
236     }
237
238     public Dimension JavaDoc preferredLayoutSize(Container JavaDoc container) {
239         if (selectedComponent != null) {
240             Dimension JavaDoc dimension = selectedComponent.getPreferredSize();
241             return new Dimension JavaDoc(
242                 dimension.width,
243                 dimension.height + bars.size() * barHeight);
244         } else {
245             return new Dimension JavaDoc(0, 0);
246         }
247     }
248
249     public Dimension JavaDoc minimumLayoutSize(Container JavaDoc container) {
250         if (selectedComponent != null) {
251             Dimension JavaDoc dimension = selectedComponent.getMinimumSize();
252             return new Dimension JavaDoc(
253                 dimension.width,
254                 dimension.height + bars.size() * barHeight);
255         } else {
256             return new Dimension JavaDoc(0, 0);
257         }
258     }
259
260     public void layoutContainer(Container JavaDoc container) {
261         Dimension JavaDoc dim = new Dimension JavaDoc(m_parent.getWidth(), m_parent.getHeight());
262         this.setSize(dim);
263         Dimension JavaDoc dimension = getSize();
264         int i = bars.size();
265         if (i > 0) {
266             JButton JavaDoc jbutton = (JButton JavaDoc) bars.elementAt(0);
267             //jbutton.setMargin(new Insets(yInset, 0, yInset, 0));
268
barHeight = jbutton.getMinimumSize().height;
269         }
270         int j = 0;
271         for (int k = 0; k < i; k++) {
272             ((Component JavaDoc) bars.elementAt(k)).setBounds(
273                 0,
274                 j,
275                 dimension.width - 1,
276                 barHeight);
277             j += barHeight;
278             if (components.elementAt(k) == selectedComponent) {
279                 int l = dimension.height - barHeight * i;
280                 selectedComponent.setBounds(0, j, dimension.width - 1, l);
281                 selectedComponent.doLayout();
282                 selectedComponent.requestFocus();
283                 selectedComponent.setVisible(true);
284                 j += l;
285             } else {
286                 ((Component JavaDoc) components.elementAt(k)).setVisible(false);
287             }
288         }
289
290     }
291
292     public void actionPerformed(ActionEvent JavaDoc actionevent) {
293         Component JavaDoc component = (Component JavaDoc) actionevent.getSource();
294         int i = bars.size();
295         for (int j = 0; j < i; j++)
296             if (component == bars.elementAt(j)) {
297                 if (selectedComponent != components.elementAt(j)) {
298                     previousComponent = selectedComponent;
299                     selectedComponent = (Component JavaDoc) components.elementAt(j);
300                     if (animated)
301                          (new MoveThread()).start();
302                     else
303                         doLayout();
304                     ContextEvent ce = new ContextEvent(ContextType.CONTEXT_TABS, ((JButton JavaDoc)this.bars.get(j)).getText().trim());
305                     ContextHandler.getInstance().fireContextEvent(ce);
306                 } else {
307                     selectedComponent.requestFocus();
308                 }
309                 return;
310             }
311
312     }
313
314     class MoveThread extends Thread JavaDoc {
315
316         MoveThread() {
317         }
318
319         public void run() {
320             Dimension JavaDoc dimension = getSize();
321             int i = bars.size();
322             int j = components.indexOf(previousComponent);
323             int k = components.indexOf(selectedComponent);
324             int l = j >= k ? k : j;
325             int i1 = j <= k ? k : j;
326             int j1 = previousComponent.getSize().height;
327             for (double d = 0.0D; d < 1.0D; d += 0.20000000000000001D) {
328                 int k1 = barHeight * l;
329                 for (int j2 = l; j2 <= i1; j2++) {
330                     ((Component JavaDoc) bars.elementAt(j2)).setBounds(
331                         0,
332                         k1,
333                         dimension.width - 1,
334                         barHeight);
335                     k1 += barHeight;
336                     if (components.elementAt(j2) == selectedComponent) {
337                         int l1 = (int) ((double) j1 * d);
338                         selectedComponent.setBounds(
339                             0,
340                             k1,
341                             dimension.width - 1,
342                             l1);
343                         selectedComponent.setVisible(true);
344                         k1 += l1;
345                     } else if (components.elementAt(j2) == previousComponent) {
346                         int i2 = (int) ((double) j1 * (1.0D - d));
347                         previousComponent.setBounds(
348                             0,
349                             k1,
350                             dimension.width - 1,
351                             i2);
352                         k1 += i2;
353                     }
354                 }
355
356                 try {
357                     Thread.sleep(20L);
358                 } catch (Exception JavaDoc exception) {
359                 }
360             }
361
362             doLayout();
363         }
364     }
365
366 }
Popular Tags