1 19 20 package org.openharmonise.him.window.outlookbar; 21 22 import java.awt.Color ; 23 import java.awt.Component ; 24 import java.awt.Container ; 25 import java.awt.Dimension ; 26 import java.awt.Font ; 27 import java.awt.IllegalComponentStateException ; 28 import java.awt.Insets ; 29 import java.awt.LayoutManager ; 30 import java.awt.event.ActionEvent ; 31 import java.awt.event.ActionListener ; 32 import java.util.Iterator ; 33 import java.util.Vector ; 34 35 import javax.swing.Icon ; 36 import javax.swing.JButton ; 37 import javax.swing.JComponent ; 38 import javax.swing.SwingConstants ; 39 40 import org.openharmonise.vfs.context.*; 41 42 43 public class FloatingBarPane 44 extends JComponent 45 implements LayoutManager , ActionListener { 46 47 private Vector bars; 48 private Vector components; 49 private Component selectedComponent; 50 private Component 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 m_parent = null; 58 59 public FloatingBarPane(JComponent parent) { 60 reEntrant = false; 61 bars = new Vector (); 62 components = new Vector (); 63 yInset = 0; 64 animated = false; 65 setLayout(this); 66 m_parent = parent; 67 } 68 69 public Component add(Component 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 add(Component component, int i) { 79 if (i < bars.size()) { 80 Vector vector = new Vector (); 81 Vector vector1 = new Vector (); 82 for (int j = i; j < components.size(); j++) { 83 vector.addElement(components.elementAt(j)); 84 vector1.addElement(((JButton ) bars.elementAt(j)).getText()); 85 } 86 87 for (int k = 0; k < vector.size(); k++) 88 remove((Component ) vector.elementAt(k)); 89 90 add(component); 91 for (int l = 0; l < vector.size(); l++) 92 add( 93 (String ) vector1.elementAt(l), 94 (Component ) vector.elementAt(l)); 95 96 } else { 97 add(component); 98 } 99 return component; 100 } 101 102 public void add(Component component, Object obj) { 103 add(component); 104 } 105 106 public void add(Component component, Object obj, int i) { 107 add(component, i); 108 } 109 110 public Component add(String s, Component component) { 111 reEntrant = true; 112 return super.add(s, component); 113 } 114 115 public void add(String s, Icon icon, Component component) { 116 add(s, component); 117 ((JButton ) bars.elementAt(bars.size() - 1)).setIcon(icon); 118 } 119 120 public void add(String s, Icon icon, Component component, String s1) { 121 add(s, icon, component); 122 ((JComponent ) bars.elementAt(bars.size() - 1)).setToolTipText(s1); 123 } 124 125 public Component getComponent(String sTitle) { 126 Component retn = null; 127 128 Iterator itor = bars.iterator(); 129 while(itor.hasNext()) { 130 JButton button = (JButton )itor.next(); 131 if(button.getText().equals(sTitle)) { 132 retn = (Component )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 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 )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 component = (Component ) 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 )this.bars.get(i)).getText().trim()); 180 ContextHandler.getInstance().fireContextEvent(ce); 181 } 182 } 183 184 public void setLayout(LayoutManager layoutmanager) { 185 if (layoutmanager != this) { 186 throw new IllegalComponentStateException ("Invalid LayoutManager change"); 187 } else { 188 super.setLayout(layoutmanager); 189 return; 190 } 191 } 192 193 public void setBackground(Color color) { 194 super.setBackground(color); 195 int i = bars.size(); 196 for (int j = 0; j < i; j++) 197 ((Component ) bars.elementAt(j)).setBackground(color); 198 199 } 200 201 public void setForeground(Color color) { 202 super.setForeground(color); 203 int i = bars.size(); 204 for (int j = 0; j < i; j++) 205 ((Component ) bars.elementAt(j)).setForeground(color); 206 207 } 208 209 public void addLayoutComponent(String s, Component component) { 210 JButton jbutton = new JButton (s); 211 212 String fontName = "Dialog"; 213 int fontSize = 11; 214 Font font = new Font (fontName, Font.PLAIN, fontSize); 215 jbutton.setFont(font); 216 217 jbutton.setHorizontalAlignment(SwingConstants.LEFT); 218 jbutton.addActionListener(this); 219 Insets 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 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 preferredLayoutSize(Container container) { 239 if (selectedComponent != null) { 240 Dimension dimension = selectedComponent.getPreferredSize(); 241 return new Dimension ( 242 dimension.width, 243 dimension.height + bars.size() * barHeight); 244 } else { 245 return new Dimension (0, 0); 246 } 247 } 248 249 public Dimension minimumLayoutSize(Container container) { 250 if (selectedComponent != null) { 251 Dimension dimension = selectedComponent.getMinimumSize(); 252 return new Dimension ( 253 dimension.width, 254 dimension.height + bars.size() * barHeight); 255 } else { 256 return new Dimension (0, 0); 257 } 258 } 259 260 public void layoutContainer(Container container) { 261 Dimension dim = new Dimension (m_parent.getWidth(), m_parent.getHeight()); 262 this.setSize(dim); 263 Dimension dimension = getSize(); 264 int i = bars.size(); 265 if (i > 0) { 266 JButton jbutton = (JButton ) bars.elementAt(0); 267 barHeight = jbutton.getMinimumSize().height; 269 } 270 int j = 0; 271 for (int k = 0; k < i; k++) { 272 ((Component ) 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 ) components.elementAt(k)).setVisible(false); 287 } 288 } 289 290 } 291 292 public void actionPerformed(ActionEvent actionevent) { 293 Component component = (Component ) 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 ) components.elementAt(j); 300 if (animated) 301 (new MoveThread()).start(); 302 else 303 doLayout(); 304 ContextEvent ce = new ContextEvent(ContextType.CONTEXT_TABS, ((JButton )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 { 315 316 MoveThread() { 317 } 318 319 public void run() { 320 Dimension 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 ) 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 exception) { 359 } 360 } 361 362 doLayout(); 363 } 364 } 365 366 } | Popular Tags |