View Javadoc

1   /*
2    * Copyright 2004-2008 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.seasar.uruma.renderer.impl;
17  
18  import org.eclipse.swt.SWT;
19  import org.eclipse.swt.events.ControlEvent;
20  import org.eclipse.swt.events.ControlListener;
21  import org.eclipse.swt.graphics.Point;
22  import org.eclipse.swt.widgets.Control;
23  import org.eclipse.swt.widgets.CoolBar;
24  import org.eclipse.swt.widgets.CoolItem;
25  import org.eclipse.swt.widgets.ToolBar;
26  import org.eclipse.swt.widgets.ToolItem;
27  import org.seasar.uruma.component.jface.CoolBarComponent;
28  import org.seasar.uruma.context.PartContext;
29  import org.seasar.uruma.context.WidgetHandle;
30  
31  /**
32   * {@link CoolBar} のレンダリングを行うクラスです。<br />
33   * 
34   * @author bskuroneko
35   */
36  public class CoolBarRenderer extends
37          AbstractCompositeRenderer<CoolBarComponent, CoolBar> {
38  
39      /*
40       * @see org.seasar.uruma.renderer.impl.AbstractCompositeRenderer#doRenderComposite(org.seasar.uruma.component.jface.CompositeComponent,
41       *      org.eclipse.swt.widgets.Composite)
42       */
43      @Override
44      protected void doRenderComposite(final CoolBarComponent controlComponent,
45              final CoolBar control) {
46      }
47  
48      /*
49       * @see org.seasar.uruma.renderer.impl.AbstractWidgetRenderer#doRenderAfter(org.eclipse.swt.widgets.Widget,
50       *      org.seasar.uruma.component.UIComponent,
51       *      org.seasar.uruma.context.WidgetHandle,
52       *      org.seasar.uruma.context.PartContext)
53       */
54      @Override
55      protected void doRenderAfter(final CoolBar widget,
56              final CoolBarComponent uiComponent, final WidgetHandle parent,
57              final PartContext context) {
58          setChildlenSize(widget, uiComponent);
59          setResizeListener(widget, uiComponent);
60      }
61  
62      private void setChildlenSize(final CoolBar widget,
63              final CoolBarComponent uiComponent) {
64          for (CoolItem item : widget.getItems()) {
65              Control control = item.getControl();
66              if (control == null) {
67                  continue;
68              }
69  
70              Point controlSize = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
71              Point itemSize = item.computeSize(controlSize.x, controlSize.y);
72  
73              Point minimumSize = controlSize;
74              if (control instanceof ToolBar) {
75                  ToolBar bar = (ToolBar) control;
76                  if (bar.getItemCount() > 0) {
77                      ToolItem toolItem = bar.getItem(0);
78                      minimumSize = new Point(toolItem.getBounds().width,
79                              toolItem.getBounds().height);
80                  }
81              }
82              item.setMinimumSize(minimumSize);
83              item.setPreferredSize(itemSize);
84              item.setSize(itemSize);
85          }
86      }
87  
88      private void setResizeListener(final CoolBar widget,
89              final CoolBarComponent uiComponent) {
90          widget.addControlListener(new ControlListener() {
91              public void controlMoved(final ControlEvent event) {
92              }
93  
94              public void controlResized(final ControlEvent event) {
95                  widget.getParent().layout();
96              }
97          });
98      }
99  
100     /*
101      * @see org.seasar.uruma.renderer.impl.AbstractWidgetRenderer#getWidgetType()
102      */
103     @Override
104     protected Class<CoolBar> getWidgetType() {
105         return CoolBar.class;
106     }
107 }