001package org.vishia.gral.swt;
002
003import org.eclipse.swt.graphics.Color;
004import org.eclipse.swt.graphics.Device;
005import org.eclipse.swt.graphics.GC;
006import org.eclipse.swt.widgets.Composite;
007import org.vishia.gral.base.GralMng;
008import org.vishia.gral.base.GralPanelContent;
009import org.vishia.gral.base.GralWidget;
010
011/**This is a org.eclipse.swt.widgets.Composite. 
012 * It can contain some GUI-Elements like Button, Text, Label, Table etc from org.eclipse.swt.widgets.
013 * But additional a grid is shown as background. 
014 * This class is imaginary for the {@link org.vishia.gral.swt.SwtMng}
015 * to show the grid for positions.
016 * 
017 * @author Hartmut Schorrig
018 *
019 */
020public class SwtGridPanel extends SwtCanvasStorePanel
021{
022        
023  /**Version, history and license.
024   * <ul>
025   * <li>2016-09-02 Hartmut chg: {@link #SwtGridPanel(GralPanelContent, Composite, int, Color, int, int, int, int, GralMng)} is no more invoked with a parent
026   *   but the parent is gotten by itself in the constructor from the pos().panel. 
027   *   Reason: The panel maybe set only after construction of the {@link GralWidget.ImplAccess}. It is not known before. 
028   * <li>2011-06-00 Hartmut created
029   * </ul>
030   * 
031   * <b>Copyright/Copyleft</b>:<br>
032   * For this source the LGPL Lesser General Public License,
033   * published by the Free Software Foundation is valid.
034   * It means:
035   * <ol>
036   * <li> You can use this source without any restriction for any desired purpose.
037   * <li> You can redistribute copies of this source to everybody.
038   * <li> Every user of this source, also the user of redistribute copies
039   *    with or without payment, must accept this license for further using.
040   * <li> But the LPGL is not appropriate for a whole software product,
041   *    if this source is only a part of them. It means, the user
042   *    must publish this part of source,
043   *    but doesn't need to publish the whole source of the own product.
044   * <li> You can study and modify (improve) this source
045   *    for own using or for redistribution, but you have to license the
046   *    modified sources likewise under this LGPL Lesser General Public License.
047   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
048   * </ol>
049   * If you intent to use this source without publishing its usage, you can get
050   * a second license subscribing a special contract with the author. 
051   * 
052   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
053   */
054  public static final String sVersion = "2016-09-02";
055
056        private static final long serialVersionUID = 6448419343757106982L;
057        
058  int xG, yG;
059        
060  int xS, yS;
061  
062        public SwtGridPanel(GralPanelContent panelg, Composite xxxparent, int style, Color backGround, int xG, int yG, int xS, int yS, GralMng gralMng)
063        { super(panelg);
064          Composite parent = (Composite)panelg.pos().panel._wdgImpl.getWidgetImplementation();  
065  
066          swtCanvas = new SwtCanvasGridPanel(this, parent, style);
067    super.panelComposite = swtCanvas;
068    swtCanvas.addControlListener(resizeItemListener);
069    swtCanvas.setData(this);
070    swtCanvas.setLayout(null);
071    currColor = swtCanvas.getForeground();
072    swtCanvas.addPaintListener(swtCanvas.paintListener);
073    swtCanvas.setBackground(backGround);
074          setGridWidth(xG, yG, xS, yS);
075        }
076        
077        public void setGridWidth(int xG, int yG, int xS, int yS)
078        {
079                this.xG = xG; this.yG = yG;
080                this.xS = xS; this.yS = yS;
081        }
082        
083        
084        
085        
086        
087        protected static class SwtCanvasGridPanel extends SwtCanvas
088        {
089          private final SwtGridPanel mng;
090          
091          SwtCanvasGridPanel(SwtGridPanel storeMng, Composite parent, int style)
092          { super(storeMng, parent, style);
093            this.mng = storeMng;
094            
095          }
096          
097          
098    @Override
099    public void drawBackground(GC g, int x, int y, int dx, int dy) {
100        //NOTE: forces stack overflow because calling of this routine recursively: super.paint(g);
101        Color colorBack = getBackground();
102        Device device = colorBack.getDevice();
103        Color color1 = new Color(device, colorBack.getRed() ^ 0x08, colorBack.getGreen() ^ 0x08, colorBack.getBlue() ^0x08);
104        Color color2 = new Color(device, colorBack.getRed() ^ 0x10, colorBack.getGreen() ^ 0x10, colorBack.getBlue() ^0x10);
105        int xGrid = mng.xG;
106        int xS1 = mng.xS;
107        while(xGrid < dx){
108                if(--xS1 <=0){
109                        xS1 = mng.xS; g.setForeground(color2);
110                } else { g.setForeground(color1);
111                }
112                g.drawLine(xGrid, 0, xGrid, dy);
113                xGrid += mng.xG;
114        }
115        int yGrid = mng.yG;
116        int yS1 = mng.yS;
117        while(yGrid < dy){
118                if(--yS1 <=0){
119                        yS1 = mng.yS; g.setForeground(color2);
120                } else { g.setForeground(color1);
121                }
122                g.drawLine(0, yGrid, dx, yGrid);
123                yGrid += mng.yG;
124        }
125        super.drawBackground(g, x, y, dx, dy);
126    }   
127        }
128        
129        
130        
131  void stop(){} //debug
132  
133}