001package org.vishia.gral.widget; 002 003import org.vishia.gral.base.GralPos; 004import org.vishia.gral.base.GralWidget; 005import org.vishia.gral.ifc.GralCanvasStorage; 006import org.vishia.gral.ifc.GralColor; 007import org.vishia.gral.ifc.GralRectangle; 008 009/**A widget which is a canvas to plot something. 010 * @author hartmut Schorrig 011 * 012 */ 013public class GralPlotArea extends GralWidget 014{ 015 /**Version, history and license. 016 * <ul> 017 * <li>2015-09-26 Hartmut creation. 018 * </ul> 019 * <br><br> 020 * <b>Copyright/Copyleft</b>: 021 * For this source the LGPL Lesser General Public License, 022 * published by the Free Software Foundation is valid. 023 * It means: 024 * <ol> 025 * <li> You can use this source without any restriction for any desired purpose. 026 * <li> You can redistribute copies of this source to everybody. 027 * <li> Every user of this source, also the user of redistribute copies 028 * with or without payment, must accept this license for further using. 029 * <li> But the LPGL is not appropriate for a whole software product, 030 * if this source is only a part of them. It means, the user 031 * must publish this part of source, 032 * but don't need to publish the whole source of the own product. 033 * <li> You can study and modify (improve) this source 034 * for own using or for redistribution, but you have to license the 035 * modified sources likewise under this LGPL Lesser General Public License. 036 * You mustn't delete this Copyright/Copyleft inscription in this source file. 037 * </ol> 038 * If you are intent to use this sources without publishing its usage, you can get 039 * a second license subscribing a special contract with the author. 040 * 041 * @author Hartmut Schorrig = hartmut@vishia.org 042 * 043 */ 044 public static final String sVersion = "2015-09-26"; 045 046 protected final GralCanvasStorage canvasStore = new GralCanvasStorage(); 047 048 public GralPlotArea(String posname) { 049 super(posname, 'P' ); 050 } 051 052 053 public UserUnits userUnitsPerGrid(float x0, float y0, float xSize, float ySize) { 054 return new UserUnits(x0, y0, xSize, ySize, true); 055 } 056 057 058 public void drawLine(GralColor color, UserUnits userUnits, float[][] points, int iy) { 059 canvasStore.drawLine(color, userUnits, points, iy); 060 } 061 062 063 064 065 066 public class UserUnits{ 067 /**User units for this area to draw somewhat in user units. */ 068 final public float x0, y0, xmax, ymax, fx, fy; 069 070 /**Sets the user units 071 * @param x0 origin, x-Coordinate, bottom left 072 * @param y0 origin, y-Coordinate, bottom left 073 * @param x1 x-Coordinate, right 074 * @param y1 y-Coordinate top right 075 */ 076 protected UserUnits(float x0, float y0, float x1, float y1, boolean perGridPos){ 077 this.x0 = x0; this.y0 = y0; this.xmax = x1; this.ymax = y1; 078 GralPos pos = GralPlotArea.super.pos(); 079 float height, width; 080 if(perGridPos){ 081 height= width = 1; 082 fx = height / x1; 083 fy = width / y1; 084 } else { 085 height = pos.height(); 086 width = pos.width(); 087 fx = height / (x1 - x0); 088 fy = width / (y1 - y0); 089 } 090 } 091 } 092 093 094 /**This class contains the access to the GralWidget class. It is used only as super class for the implementation level. 095 * Don't use this class from user applications! It is public only because it should be seen from the graphic implementation. 096 */ 097 public abstract class _GraphicImplAccess_ extends GralWidget.ImplAccess { 098 099 protected _GraphicImplAccess_(GralWidget widgg) 100 { 101 super(widgg); 102 } 103 104 protected GralCanvasStorage canvasStore(){ return GralPlotArea.this.canvasStore; } 105 106 @Override public boolean setFocusGThread() 107 { 108 // TODO Auto-generated method stub 109 return false; 110 } 111 112 @Override public void removeWidgetImplementation() 113 { 114 // TODO Auto-generated method stub 115 116 } 117 118 @Override public void repaintGthread() 119 { 120 // TODO Auto-generated method stub 121 122 } 123 124 @Override public Object getWidgetImplementation() 125 { 126 // TODO Auto-generated method stub 127 return null; 128 } 129 130 @Override public void setBoundsPixel(int x, int y, int dx, int dy) 131 { 132 // TODO Auto-generated method stub 133 134 } 135 136 @Override public GralRectangle getPixelPositionSize() 137 { 138 // TODO Auto-generated method stub 139 return null; 140 } 141 142 } 143 144}