001package org.vishia.gral.swt; 002 003 004import java.awt.Component; 005import java.awt.Dimension; 006 007import org.eclipse.swt.events.ControlEvent; 008import org.eclipse.swt.events.ControlListener; 009import org.eclipse.swt.graphics.Rectangle; 010import org.eclipse.swt.widgets.Composite; 011import org.eclipse.swt.widgets.Control; 012import org.eclipse.swt.widgets.Shell; 013import org.eclipse.swt.widgets.TabItem; 014import org.eclipse.swt.widgets.Widget; 015import org.vishia.gral.base.GralWidget; 016import org.vishia.gral.base.GralMng; 017import org.vishia.gral.base.GralPanelContent; 018import org.vishia.gral.ifc.GralColor; 019import org.vishia.gral.ifc.GralPrimaryWindow_ifc; 020import org.vishia.gral.ifc.GralRectangle; 021 022public class SwtPanel extends GralPanelContent.ImplAccess 023{ 024 025 /**Version history: 026 * <ul> 027 * <li>2011-11-19 Hartmut chg: {@link #itsTabSwt} with correct type moved from {@link GralPanelContent}. 028 * <li>2011-09-25 Hartmut creation: Common class for all Swt implementations of Panels. 029 * This class can implement the abstract methods from {@link GralPanelContent} for the implementation 030 * in a common form. 031 * </ul> 032 * 033 */ 034 @SuppressWarnings("hiding") 035 public final static int version = 0x20111119; 036 037 038 /**It is either a Composite or a SwtCanvas 039 * 040 */ 041 public Composite panelComposite; 042 043 /**The associated tab in a TabFolder if this panel is the main panel of the TabItem, or null 044 * if it isn't a main panel of a tab in a tabbed panel. 045 * <br><br> 046 * Note: can't be final because it may be unknown on calling constructor. The property whether 047 * a panel is a tab-panel can't be presented with an extra subclass, because this class is the subclass 048 * of several Swt panel types. Use the aggregation principle instead multi-inheritance. 049 */ 050 public TabItem itsTabSwt; 051 052 053 //protected Composite panelSwt; 054 055 private SwtPanel(GralPanelContent panelg) 056 { super(panelg); 057 panelComposite = null; 058 } 059 060 /**Constructs a panel 061 * @param name of panel. 062 * @param mng The widget manager 063 * @param panelSwt may be null, then the {@link GralPanelContent#panelComposite} should be set 064 * after construction of a derived class. 065 */ 066 public SwtPanel(GralPanelContent panelg, Composite panelSwt) 067 { super(panelg); 068 panelComposite = panelSwt; 069 if(panelSwt !=null){ 070 panelSwt.addControlListener(resizeItemListener); 071 } 072 } 073 074 /* 075 @Override public Composite getPanelImpl() 076 { 077 return (Composite)panelComposite; 078 }*/ 079 080 081 082 083 @Override public GralRectangle getPixelPositionSize(){ return SwtWidgetHelper.getPixelPositionSize((Composite)panelComposite); } 084 085 086 @Override public GralRectangle getPixelSize(){ 087 Rectangle r = ((Composite)panelComposite).getClientArea(); 088 GralRectangle posSize = new GralRectangle(0, 0, r.width, r.height); 089 return posSize; 090 } 091 092 093 @Override public void setBoundsPixel(int x, int y, int dx, int dy) 094 { ((Composite)panelComposite).setBounds(x,y,dx,dy); 095 } 096 097 098 099 @Override public void repaintGthread(){ 100 if(panelComposite !=null){ 101 ((Composite)panelComposite).redraw(); 102 } 103 } 104 105 106 107 108 @Override public void removeWidgetImplementation() 109 { if(panelComposite !=null){ 110 ((Composite)panelComposite).dispose(); 111 panelComposite = null; 112 } 113 } 114 115 116 //@Override 117 public boolean remove(){ 118 119 //super.remove(); 120 if(itsTabSwt !=null){ 121 itsTabSwt.dispose(); 122 itsTabSwt = null; 123 } 124 if(panelComposite !=null){ 125 panelComposite.dispose(); 126 } 127 return true; 128 } 129 130 131 132 protected ControlListener resizeItemListener = new ControlListener() 133 { @Override public void controlMoved(ControlEvent e) 134 { //do nothing if moved. 135 } 136 137 @Override public void controlResized(ControlEvent e) 138 { 139 Widget wparent = e.widget; //it is the SwtCanvas because this method is assigned only there. 140 //Control parent = wparent; 141 for(GralWidget widg1: ((GralPanelContent)widgg).widgetsToResize){ 142 widg1.gralMng().resizeWidget(widg1, 0, 0); 143 } 144 //validateFrameAreas(); //calculates the size of the areas newly and redraw. 145 } 146 147 }; 148 149 150 @Override public boolean setFocusGThread() 151 { 152 setVisibleGThread(true); 153 boolean bRet = panelComposite.setFocus(); 154 return bRet; 155 } 156 157 @Override public void setVisibleGThread(boolean bVisible) { super.setVisibleState(bVisible); panelComposite.setVisible(bVisible); } 158 159 160 @Override public Object getWidgetImplementation() 161 { 162 // TODO Auto-generated method stub 163 return panelComposite; 164 } 165 166 167 168 169 170}