001package org.vishia.gral.awt;
002
003import java.awt.Color;
004import java.awt.Component;
005import java.util.LinkedList;
006import java.util.List;
007import java.awt.Container;
008import java.awt.Frame;
009import java.awt.Rectangle;
010
011import org.vishia.gral.ifc.GralColor;
012import org.vishia.gral.ifc.GralRectangle;
013
014/**The static methods of this class are called in some situations, where same functionality is need in some classes.
015 * @author Hartmut Schorrig
016 *
017 */
018public class AwtWidgetHelper
019{
020  
021  protected AwtWidgetMng mng;
022  
023  protected Component widga;  
024  
025  protected AwtWidgetHelper(Component widga, AwtWidgetMng mng)
026  { this.widga = widga;
027    this.mng = mng;
028  }
029  
030
031  public void setBoundsPixel(int x, int y, int dx, int dy)
032  { widga.setBounds(x,y,dx,dy);
033  }
034  
035  
036
037  public GralRectangle getPixelPositionSize(){
038    return getPixelPositionSize(widga);
039  }
040  
041  
042  public static GralRectangle getPixelPositionSize(Component widga){
043    int posx = 0, posy = 0;
044    Rectangle r = widga.getBounds();
045    Container parent;
046    if(widga instanceof Container){
047      parent = (Container) widga; //start with them, maybe the shell itself
048    } else {
049      parent = widga.getParent();
050    }
051    Rectangle pos;
052    while( !( parent instanceof Frame ) ){
053      pos = parent.getBounds();
054      posx += pos.x; posy += pos.y;
055      parent = parent.getParent();
056    }
057    assert(parent instanceof Frame);
058    Rectangle s = parent.getBounds();
059    pos = parent.getBounds();
060    int dframe = (pos.width - s.width) /2;   //width of the frame line.
061    posx += r.x + dframe;               //absolute position of the client area!
062    posy += r.y + (pos.height - s.height) - dframe;
063    int dx, dy;
064    if(parent == widga){
065      dx = s.width;
066      dy = s.height;
067    } else {
068      dx = r.width;
069      dy = r.height;
070    }
071    GralRectangle posSize = new GralRectangle(posx, posy, dx, dy);
072    return posSize;
073  }
074
075
076
077
078  
079  
080  public static GralColor getColor(Color awtColor)
081  {
082    int colorValue = awtColor.getBlue() << 16 + awtColor.getGreen() << 8 + awtColor.getRed();
083    return GralColor.getColor(colorValue);
084  }
085  
086  
087  public static GralColor setBackgroundColor(GralColor color, Component awtWidget)
088  { Color colorAwt = (Color)color.colorGuimpl;
089    Color colorAwtOld = awtWidget.getBackground();
090    awtWidget.setBackground(colorAwt);
091    return getColor(colorAwtOld);
092  }
093
094  
095  public static GralColor setForegroundColor(GralColor color, Component awtWidget)
096  { Color colorAwt = (Color)color.colorGuimpl;
097    Color colorAwtOld = awtWidget.getForeground();
098    awtWidget.setForeground(colorAwt);
099    return getColor(colorAwtOld);
100  }
101
102
103  
104  /**Sets the correct TabItem if any widget at this TabItem is focused. That is not done by swt graphic
105   * on Control.setFocus().
106   * @param control
107   */
108  static boolean setFocusOfTabSwt(Component control)
109  {
110    List<Component> parents = new LinkedList<Component>();
111    Component parent = control;
112    while( (parent = parent.getParent())!=null){
113      parents.add(parent);
114    }
115    for(Component parent1: parents){
116    }
117    return false; //TODOcontrol.setf();
118
119    
120  }
121  
122  
123  public boolean setFocusGThread(){ widga.setFocusable(true); return widga.isFocusOwner(); }
124
125  public void setVisibleGThread(boolean bVisible){ widga.setVisible(bVisible); }
126
127
128  public void removeWidgetImplementation()
129  {
130    if(widga !=null){ 
131      widga.removeNotify();
132      widga = null;
133    }
134  }
135
136
137  
138}