home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / allaire / controls / CFGRIDCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-03-31  |  27.2 KB  |  2,381 lines

  1. package allaire.controls;
  2.  
  3. import allaire.util.Format;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.Dimension;
  8. import java.awt.Event;
  9. import java.awt.Font;
  10. import java.awt.FontMetrics;
  11. import java.awt.Frame;
  12. import java.awt.Graphics;
  13. import java.awt.Image;
  14. import java.awt.MediaTracker;
  15. import java.awt.Panel;
  16. import java.awt.Point;
  17. import java.awt.Rectangle;
  18. import java.awt.TextField;
  19. import java.awt.image.ImageObserver;
  20. import java.util.Vector;
  21.  
  22. class CFGRIDCanvas extends Panel {
  23.    private static final int NO_CHANGE = 0;
  24.    private static final int SELECTION_CHANGE = 1;
  25.    private static final int ALL_CHANGE = 2;
  26.    private static final int UPDATE_NOW = 4;
  27.    private static final int OFF = 0;
  28.    private static final int MAYBE = 1;
  29.    // $FF: renamed from: ON int
  30.    private static final int field_0 = 2;
  31.    private int updateStatus;
  32.    private Point mainOrigo;
  33.    boolean rowHeaderDefined;
  34.    boolean colHeaderDefined;
  35.    private boolean autoScrollbars = true;
  36.    private CFGRIDList rowList;
  37.    private CFGRIDList colProps;
  38.    private CFGRIDRow row;
  39.    private int rowQty;
  40.    private int colQty;
  41.    int gridRows;
  42.    int gridCols;
  43.    private int currentRow;
  44.    private int currentCol;
  45.    private int selectionMode;
  46.    private Rectangle selection = new Rectangle(0, 0, 0, 0);
  47.    private Rectangle visibleSelection = new Rectangle(0, 0, 0, 0);
  48.    private Rectangle editSelection = new Rectangle(0, 0, 0, 0);
  49.    private Color bgSelection;
  50.    private Color bgRegular;
  51.    private int firstGridRow;
  52.    private int firstGridCol;
  53.    private int firstVisibleRow;
  54.    private int firstVisibleCol;
  55.    private int lastVisibleRow;
  56.    private int lastVisibleCol;
  57.    private Dimension totalGridSize;
  58.    private int headerVertMarg;
  59.    private int gridVertMarg;
  60.    private int gridMinRowHeight;
  61.    private boolean normalized;
  62.    private boolean updateDisplay;
  63.    private boolean gridLines;
  64.    private static final long DOUBLE_CLICK_SPAN = 300L;
  65.    private Image offscreen;
  66.    private Dimension offscreensize;
  67.    private Graphics offgraphics;
  68.    private CFGRIDTextAttributes textAttri;
  69.    private Font defFont;
  70.    // $FF: renamed from: fm java.awt.FontMetrics
  71.    private FontMetrics field_1;
  72.    // $FF: renamed from: fa int
  73.    private int field_2;
  74.    // $FF: renamed from: fd int
  75.    private int field_3;
  76.    // $FF: renamed from: gs allaire.controls.CFGRID
  77.    private CFGRID field_4;
  78.    private long lastTime;
  79.    private Point mouseDownPos;
  80.    private static final int resizeMargin = 2;
  81.    private Frame parentFrame;
  82.    private int resizeCursor;
  83.    private int resizedCol;
  84.    private int resizedX;
  85.    private int gridDisplayHeight;
  86.    private int gap;
  87.    private int horzBorder;
  88.    private int vertBorder;
  89.    private boolean reversevideo;
  90.    private Rectangle editRectangle;
  91.    private TextField editField;
  92.    private boolean editSelectionChanged;
  93.    private boolean editFieldOff;
  94.    CFGRIDImage[] imageObject;
  95.    MediaTracker imageTracker;
  96.    int imageNDX;
  97.    int numimages;
  98.    int maximages;
  99.    boolean imageDrawn;
  100.  
  101.    synchronized void setColType(int var1, int var2) {
  102.       if (var2 >= 0) {
  103.          var2 += this.firstGridCol;
  104.          if (var2 < this.colQty) {
  105.             this.colProps.getProp(var2).gridAttri.setType(var1);
  106.             this.fixUpdate(true, 2);
  107.          }
  108.       }
  109.    }
  110.  
  111.    synchronized void setColImage(boolean var1, int var2) {
  112.       if (var2 >= 0) {
  113.          var2 += this.firstGridCol;
  114.          if (var2 < this.colQty) {
  115.             this.colProps.getProp(var2).gridAttri.setImage(var1);
  116.             this.fixUpdate(true, 2);
  117.          }
  118.       }
  119.    }
  120.  
  121.    private synchronized void smallUpdate(Graphics var1) {
  122.       for(int var2 = this.firstVisibleCol; var2 <= this.lastVisibleCol; ++var2) {
  123.          CFGRIDColProperties var3 = this.colProps.getProp(var2);
  124.          this.setTextAttributes(var3.gridAttri);
  125.  
  126.          for(int var4 = this.firstVisibleRow; var4 <= this.lastVisibleRow; ++var4) {
  127.             CFGRIDCell var5 = this.getDisplayCell(var4, var2);
  128.             if (var5 != null && var5.dirty) {
  129.                this.paintCell(var4, var2, var3.xBase, this.rowList.getRow(var4).yBase);
  130.             }
  131.          }
  132.       }
  133.  
  134.       this.offgraphics.setColor(Color.black);
  135.       if (this.vertBorder > 0) {
  136.          this.offgraphics.drawLine(this.offscreensize.width - 1, 0, this.offscreensize.width - 1, this.vertBorder);
  137.       }
  138.  
  139.       if (this.horzBorder > 0) {
  140.          this.offgraphics.drawLine(0, this.offscreensize.height - 1, this.horzBorder, this.offscreensize.height - 1);
  141.       }
  142.  
  143.       var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
  144.    }
  145.  
  146.    void internalSetColWidth(boolean var1, int var2, int var3) {
  147.       CFGRIDColProperties var4 = this.colProps.getProp(var3);
  148.       var4.modeAuto = var1;
  149.       var4.width = var2;
  150.       this.fixUpdate(true, 2);
  151.    }
  152.  
  153.    synchronized void setColHeaderVertMargin(int var1) {
  154.       this.headerVertMarg = var1;
  155.       this.fixUpdate(true, 2);
  156.    }
  157.  
  158.    synchronized void setGridVertMargin(int var1) {
  159.       this.gridVertMarg = var1;
  160.       this.fixUpdate(true, 2);
  161.    }
  162.  
  163.    synchronized void setRowHeaderWidth(boolean var1, int var2) {
  164.       if (this.rowHeaderDefined) {
  165.          this.internalSetColWidth(var1, var2, 0);
  166.       }
  167.    }
  168.  
  169.    synchronized void setColWidth(boolean var1, int var2, int var3) {
  170.       if (var3 >= 0) {
  171.          var3 += this.firstGridCol;
  172.          if (var3 < this.colQty) {
  173.             this.internalSetColWidth(var1, var2, var3);
  174.          }
  175.       }
  176.    }
  177.  
  178.    synchronized void setColWidth(boolean var1, int var2) {
  179.       for(int var3 = this.firstGridCol; var3 < this.colQty; ++var3) {
  180.          CFGRIDColProperties var4 = this.colProps.getProp(var3);
  181.          var4.modeAuto = var1;
  182.          var4.width = var2;
  183.       }
  184.  
  185.       this.fixUpdate(true, 2);
  186.    }
  187.  
  188.    private CFGRIDTextAttributes getRowHeaderAttri() {
  189.       return this.rowHeaderDefined ? this.colProps.getProp(0).headerAttri : null;
  190.    }
  191.  
  192.    private CFGRIDTextAttributes getColHeaderAttri(int var1) {
  193.       if (var1 >= 0 && var1 < this.colQty) {
  194.          if (this.rowHeaderDefined) {
  195.             if (var1 > 0) {
  196.                var1 += this.firstVisibleCol - 1;
  197.             }
  198.          } else {
  199.             var1 += this.firstVisibleCol;
  200.          }
  201.  
  202.          return this.colProps.getProp(var1).headerAttri;
  203.       } else {
  204.          return null;
  205.       }
  206.    }
  207.  
  208.    synchronized void setGridMinRowHeight(int var1) {
  209.       this.gridMinRowHeight = var1;
  210.       this.fixUpdate(true, 2);
  211.    }
  212.  
  213.    synchronized void clearSelection() {
  214.       this.setSelection(0, 0, 0, 0);
  215.       this.editFieldOff = true;
  216.    }
  217.  
  218.    public void addImage(String var1, Image var2) {
  219.       if (this.imageObject == null) {
  220.          this.imageObject = new CFGRIDImage[this.maximages];
  221.          this.imageTracker = new MediaTracker(this);
  222.       }
  223.  
  224.       if (this.getImageNDX(var1) == -1) {
  225.          if (this.numimages >= this.maximages) {
  226.             CFGRIDImage[] var3 = new CFGRIDImage[this.maximages * 2];
  227.  
  228.             for(int var4 = 0; var4 < this.maximages; ++var4) {
  229.                var3[var4] = this.imageObject[var4];
  230.             }
  231.  
  232.             this.maximages *= 2;
  233.             this.imageObject = var3;
  234.          }
  235.  
  236.          this.imageObject[this.numimages] = new CFGRIDImage(var1, var2);
  237.          this.imageTracker.addImage(this.imageObject[this.numimages].image, this.numimages);
  238.  
  239.          try {
  240.             this.imageTracker.waitForID(this.numimages);
  241.             this.imageObject[this.numimages].width = this.imageObject[this.numimages].image.getWidth((ImageObserver)null);
  242.             this.imageObject[this.numimages].height = this.imageObject[this.numimages].image.getHeight((ImageObserver)null);
  243.             ++this.numimages;
  244.          } catch (InterruptedException var5) {
  245.             this.imageObject[this.numimages++].invalid = true;
  246.          }
  247.       }
  248.    }
  249.  
  250.    void bufferImage(int var1) {
  251.       Image var2 = ((Component)this).createImage(1, 1);
  252.       Graphics var3 = var2.getGraphics();
  253.       var3.drawImage(this.imageObject[var1].image, 0, 0, (ImageObserver)null);
  254.       var3.dispose();
  255.       this.imageObject[this.imageNDX].buffered = true;
  256.    }
  257.  
  258.    synchronized void insertRowAt(int var1) {
  259.       if (var1 >= 0) {
  260.          var1 += this.firstGridRow;
  261.          if (var1 <= this.rowQty) {
  262.             CFGRIDRow var2 = new CFGRIDRow();
  263.             ((Vector)var2).setSize(this.colQty);
  264.             if (var1 == this.rowQty) {
  265.                this.rowList.addElement(var2);
  266.             } else {
  267.                this.rowList.insertElementAt(var2, var1);
  268.             }
  269.  
  270.             ++this.rowQty;
  271.             ++this.gridRows;
  272.             if (var1 <= this.selection.y) {
  273.                ++this.selection.y;
  274.             }
  275.  
  276.             this.adjustSelection();
  277.             this.fixUpdate(true, 2);
  278.          }
  279.       }
  280.    }
  281.  
  282.    synchronized void setGridColor(Color var1) {
  283.       this.bgRegular = var1;
  284.       this.fixUpdate(true, 2);
  285.    }
  286.  
  287.    synchronized void setSelectionColor(Color var1) {
  288.       this.bgSelection = var1;
  289.       this.fixUpdate(false, 1);
  290.    }
  291.  
  292.    synchronized void setColTextColor(Color var1, int var2) {
  293.       if (var2 >= 0) {
  294.          var2 += this.firstGridCol;
  295.          if (var2 < this.colQty) {
  296.             this.colProps.getProp(var2).gridAttri.setColor(var1);
  297.             this.fixUpdate(true, 2);
  298.          }
  299.       }
  300.    }
  301.  
  302.    private void makeVisible(int var1, int var2, int var3, int var4) {
  303.       Dimension var5 = ((Component)this).size();
  304.       boolean var6 = false;
  305.       if (var5.width > this.mainOrigo.x && var5.height > this.mainOrigo.y) {
  306.          if (this.selectionMode != 102) {
  307.             CFGRIDColProperties var7 = this.colProps.getProp(var2);
  308.             if (var2 == this.lastVisibleCol && var7.xBase + var7.width > var5.width) {
  309.                if (this.firstVisibleCol < this.lastVisibleCol) {
  310.                   ++this.firstVisibleCol;
  311.                }
  312.  
  313.                var6 = true;
  314.             } else if (var2 < this.firstVisibleCol || var2 > this.lastVisibleCol) {
  315.                if ((this.firstVisibleCol = var2 - var4) < this.firstGridCol) {
  316.                   this.firstVisibleCol = this.firstGridCol;
  317.                }
  318.  
  319.                var6 = true;
  320.             }
  321.          }
  322.  
  323.          if (this.selectionMode != 103) {
  324.             CFGRIDRow var8 = this.rowList.getRow(this.lastVisibleRow);
  325.             if (var1 == this.lastVisibleRow && var8.yBase + var8.height > var5.height) {
  326.                if (this.firstVisibleRow < this.lastVisibleRow) {
  327.                   ++this.firstVisibleRow;
  328.                }
  329.  
  330.                var6 = true;
  331.             } else if (var1 < this.firstVisibleRow || var1 > this.lastVisibleRow) {
  332.                if ((this.firstVisibleRow = var1 - var3) < this.firstGridRow) {
  333.                   this.firstVisibleRow = this.firstGridRow;
  334.                }
  335.  
  336.                var6 = true;
  337.             }
  338.          }
  339.  
  340.          if (var6) {
  341.             this.fixUpdate(true, 2);
  342.          }
  343.  
  344.       }
  345.    }
  346.  
  347.    public synchronized boolean isVisible(int var1, int var2) {
  348.       var2 = this.rowHeaderDefined ? var2 + 1 : var2;
  349.       var1 = this.colHeaderDefined ? var1 + 1 : var1;
  350.       return var2 >= this.firstVisibleCol && var2 <= this.lastVisibleCol && var1 >= this.firstVisibleRow && var1 <= this.lastVisibleRow;
  351.    }
  352.  
  353.    private synchronized Point pickCell(int var1, int var2) {
  354.       if (this.gridRows > 0 && this.gridCols > 0 && var1 >= this.mainOrigo.x && var2 >= this.mainOrigo.y) {
  355.          int var4;
  356.          for(var4 = this.firstVisibleRow; var4 <= this.lastVisibleRow; ++var4) {
  357.             CFGRIDRow var3 = this.rowList.getRow(var4);
  358.             if (var2 <= var3.yBase + var3.height) {
  359.                break;
  360.             }
  361.          }
  362.  
  363.          int var5;
  364.          for(var5 = this.firstVisibleCol; var5 <= this.lastVisibleCol && var1 > this.colProps.getProp(var5).xBase + this.colProps.getProp(var5).width; ++var5) {
  365.          }
  366.  
  367.          if (var4 < this.rowQty && var5 < this.colQty && this.colProps.getProp(var5).gridAttri.allowSelect) {
  368.             this.updateStatus |= 4;
  369.             switch (this.selectionMode) {
  370.                case 101:
  371.                case 104:
  372.                   this.setSelection(var5, var4, 1, 1);
  373.                   break;
  374.                case 102:
  375.                   this.setSelection(this.firstGridCol, var4, this.colQty, 1);
  376.                   break;
  377.                case 103:
  378.                   this.setSelection(var5, this.firstGridRow, 1, this.rowQty);
  379.                   break;
  380.                case 105:
  381.                   this.setEditSelection(var5, var4);
  382.                   this.setSelection(var5, var4, 1, 1);
  383.             }
  384.  
  385.             return new Point(var5, var4);
  386.          }
  387.  
  388.          if (this.reversevideo && var4 < this.rowQty && var5 < this.colQty) {
  389.             this.updateStatus |= 4;
  390.             this.clearSelection();
  391.             return new Point(var5, var4);
  392.          }
  393.       }
  394.  
  395.       return null;
  396.    }
  397.  
  398.    synchronized void setDisplayOrigo(int var1, int var2) {
  399.       if (var1 >= 0 && var2 >= 0) {
  400.          var1 += this.firstGridRow;
  401.          var2 += this.firstGridCol;
  402.          if (var1 < this.rowQty && var2 < this.colQty) {
  403.             if (this.firstVisibleRow != var1 || this.firstVisibleCol != var2) {
  404.                this.firstVisibleRow = var1;
  405.                this.firstVisibleCol = var2;
  406.                this.fixUpdate(true, 2);
  407.             }
  408.  
  409.          }
  410.       }
  411.    }
  412.  
  413.    Point getDisplayOrigo() {
  414.       return new Point(this.firstVisibleCol - this.firstGridCol, this.firstVisibleRow - this.firstGridRow);
  415.    }
  416.  
  417.    synchronized void deleteRow(int var1) {
  418.       if (var1 >= 0) {
  419.          var1 += this.firstGridRow;
  420.          if (var1 < this.rowQty) {
  421.             this.rowList.removeElementAt(var1);
  422.             this.rowQty += -1;
  423.             this.gridRows += -1;
  424.             if (this.selectionMode == 105) {
  425.                this.editFieldOff = true;
  426.                this.hideEditColumn();
  427.             }
  428.  
  429.             if (this.firstVisibleRow > var1) {
  430.                this.firstVisibleRow += -1;
  431.             }
  432.  
  433.             if (this.firstVisibleRow >= this.rowQty) {
  434.                this.firstVisibleRow = this.rowQty - 1;
  435.             }
  436.  
  437.             if (this.firstVisibleRow < 1) {
  438.                this.firstVisibleRow = 1;
  439.             }
  440.  
  441.             if (var1 < this.selection.y) {
  442.                Rectangle var10000 = this.selection;
  443.                var10000.y += -1;
  444.             } else if (var1 == this.selection.y) {
  445.                this.selection.width = this.selection.height = 0;
  446.             }
  447.  
  448.             this.adjustSelection();
  449.             this.fixUpdate(true, 2);
  450.          }
  451.       }
  452.    }
  453.  
  454.    synchronized void setReverseVideo(int var1, int var2, int var3, int var4) {
  455.       if (!this.reversevideo || var1 != this.selection.x || var2 != this.selection.y || var3 != this.selection.width || var4 != this.selection.height) {
  456.          this.reversevideo = true;
  457.          this.markDirty(this.selection);
  458.          int var5 = this.selection.x >= this.firstVisibleCol && this.selection.x <= this.lastVisibleCol ? this.selection.x - this.firstVisibleCol : 0;
  459.          int var6 = this.selection.y >= this.firstVisibleRow && this.selection.y <= this.lastVisibleRow ? this.selection.y - this.firstVisibleRow : 0;
  460.          this.selection.x = var1;
  461.          this.selection.y = var2;
  462.          this.selection.width = var3;
  463.          this.selection.height = var4;
  464.          this.markDirty(this.selection);
  465.          this.makeVisible(var2, var1, var6, var5);
  466.          this.fixUpdate(false, 1);
  467.       }
  468.  
  469.    }
  470.  
  471.    private int fixAutoScrollbars(Graphics var1, Dimension var2) {
  472.       int var3 = 0;
  473.       Dimension var4 = this.field_4.size();
  474.       Dimension var5 = this.field_4.horz.size();
  475.       Dimension var6 = this.field_4.vert.size();
  476.       int var7 = var4.height - this.totalGridSize.height;
  477.       int var8 = var4.width - this.totalGridSize.width;
  478.       byte var10;
  479.       if (var7 < 0) {
  480.          var10 = 2;
  481.       } else if (var7 > var5.height) {
  482.          var10 = 0;
  483.       } else {
  484.          var10 = 1;
  485.       }
  486.  
  487.       byte var9;
  488.       if (var8 < 0) {
  489.          var9 = 2;
  490.       } else if (var8 > var6.width) {
  491.          var9 = 0;
  492.       } else {
  493.          var9 = 1;
  494.       }
  495.  
  496.       if (var10 == 1) {
  497.          var10 = var9 == 1 ? 2 : var9;
  498.       }
  499.  
  500.       if (var9 == 1) {
  501.          var9 = var10 == 1 ? 2 : var10;
  502.       }
  503.  
  504.       if (this.field_4.vert.isVisible() && var10 == 0 || !this.field_4.vert.isVisible() && var10 == 2 || this.field_4.horz.isVisible() && var9 == 0 || !this.field_4.horz.isVisible() && var9 == 2) {
  505.          int var11 = var4.width - 2 * this.gap;
  506.          if (var10 == 2) {
  507.             var11 -= var6.width;
  508.          }
  509.  
  510.          int var12 = var4.height - 2 * this.gap;
  511.          if (var9 == 2) {
  512.             var12 -= var5.height;
  513.          }
  514.  
  515.          if (!this.field_4.vert.isVisible() && var10 == 2) {
  516.             this.field_4.vert.show();
  517.          } else if (this.field_4.vert.isVisible() && var10 == 0) {
  518.             this.field_4.vert.hide();
  519.             this.firstVisibleRow = this.firstGridRow;
  520.          }
  521.  
  522.          if (!this.field_4.horz.isVisible() && var9 == 2) {
  523.             this.field_4.horz.show();
  524.          } else if (this.field_4.horz.isVisible() && var9 == 0) {
  525.             this.field_4.horz.hide();
  526.             this.firstVisibleCol = this.firstGridCol;
  527.          }
  528.  
  529.          ((Component)this).resize(var11, var12);
  530.          this.field_4.repaint();
  531.          Dimension var13 = ((Component)this).size();
  532.          this.fixOffscreenBuffer(var13);
  533.          if ((var3 = this.normalize(this.offgraphics, var13)) > 0) {
  534.             return var3;
  535.          }
  536.       }
  537.  
  538.       return var3;
  539.    }
  540.  
  541.    public synchronized void flushEditField() {
  542.       if (this.editField != null && !this.editFieldOff) {
  543.          Rectangle var1 = this.getEditSelection();
  544.          if (var1 != null) {
  545.             int var2 = this.firstGridCol + var1.x;
  546.             int var3 = this.firstGridRow + var1.y;
  547.             if (var3 >= this.rowQty || var3 < 0 || var2 >= this.colQty || var2 < 0) {
  548.                return;
  549.             }
  550.  
  551.             if (this.rowList.getRow(var3).getCell(var2) == null) {
  552.                this.rowList.getRow(var3).setCell(var3, var2);
  553.             }
  554.  
  555.             this.rowList.getRow(var3).getCell(var2).set(this.editField.getText() == null ? "" : this.editField.getText());
  556.             if (this.field_4.caller != null) {
  557.                this.field_4.caller.CFGRIDMessage(this.field_4, 550, this.getSelection());
  558.             }
  559.          }
  560.  
  561.       }
  562.    }
  563.  
  564.    private boolean colOnDisplay(int var1) {
  565.       return var1 >= this.firstVisibleCol && var1 <= this.lastVisibleCol;
  566.    }
  567.  
  568.    private synchronized boolean fastPaintOK(Graphics var1) {
  569.       Dimension var2 = ((Component)this).size();
  570.       if (this.updateStatus == 0 && this.offscreen != null && var2.width == this.offscreensize.width && var2.height == this.offscreensize.height) {
  571.          var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
  572.          if (this.resizedCol >= 0 && this.gridLines) {
  573.             var1.setColor(Color.black);
  574.             var1.drawLine(this.resizedX, 0, this.resizedX, this.gridDisplayHeight);
  575.          }
  576.  
  577.          return true;
  578.       } else {
  579.          return false;
  580.       }
  581.    }
  582.  
  583.    synchronized void setCols(int var1) {
  584.       if (var1 >= 0) {
  585.          var1 += this.firstGridCol;
  586.          if (var1 != this.colQty) {
  587.             if (this.rowQty == 0 && this.rowHeaderDefined) {
  588.                this.rowList.getRow(0).setSize(var1);
  589.             } else {
  590.                for(int var3 = 0; var3 < this.rowQty; ++var3) {
  591.                   this.rowList.getRow(var3).setSize(var1);
  592.                }
  593.             }
  594.  
  595.             for(int var2 = this.colQty; var2 < var1; ++var2) {
  596.                this.colProps.addElement(new CFGRIDColProperties());
  597.             }
  598.  
  599.             this.colQty = this.gridCols = var1;
  600.             this.gridCols -= this.firstGridCol;
  601.             this.colProps.setSize(var1);
  602.             if (this.firstVisibleCol >= this.colQty) {
  603.                this.firstVisibleCol = this.firstGridCol;
  604.             }
  605.  
  606.             this.adjustSelection();
  607.             this.fixUpdate(true, 2);
  608.          }
  609.       }
  610.    }
  611.  
  612.    private CFGRIDCell getDisplayCell(int var1, int var2) {
  613.       return var1 >= 0 && var1 < this.rowQty && var2 >= 0 && var2 < this.colQty ? this.rowList.getRow(var1).getCell(var2) : null;
  614.    }
  615.  
  616.    synchronized void setGridLines(boolean var1) {
  617.       this.gridLines = var1;
  618.       this.fixUpdate(true, 2);
  619.    }
  620.  
  621.    synchronized Rectangle getSelection() {
  622.       return this.selection.width > 0 && this.selection.height > 0 ? new Rectangle(this.rowHeaderDefined ? this.selection.x - 1 : this.selection.x, this.colHeaderDefined ? this.selection.y - 1 : this.selection.y, this.selection.width, this.selection.height) : null;
  623.    }
  624.  
  625.    synchronized void setSelection(int var1, int var2) {
  626.       if (this.gridRows != 0 && this.gridCols != 0 && var1 >= 0 && var2 >= 0) {
  627.          var2 += this.firstGridCol;
  628.          var1 += this.firstGridRow;
  629.          if (var1 < this.rowQty && var2 < this.colQty) {
  630.             int var3 = 1;
  631.             int var4 = 1;
  632.             if (this.selectionMode == 102) {
  633.                var2 = this.firstGridCol;
  634.                var3 = this.colQty;
  635.             } else if (this.selectionMode == 103) {
  636.                var1 = this.firstGridRow;
  637.                var4 = this.rowQty;
  638.             } else if (this.selectionMode == 105) {
  639.                this.setEditSelection(var2, var1);
  640.             }
  641.  
  642.             this.setSelection(var2, var1, var3, var4);
  643.          }
  644.       }
  645.    }
  646.  
  647.    synchronized void setSelection(int var1, int var2, int var3, int var4) {
  648.       if (this.reversevideo || var1 != this.selection.x || var2 != this.selection.y || var3 != this.selection.width || var4 != this.selection.height) {
  649.          this.reversevideo = false;
  650.          this.markDirty(this.selection);
  651.          int var5 = this.selection.x >= this.firstVisibleCol && this.selection.x <= this.lastVisibleCol ? this.selection.x - this.firstVisibleCol : 0;
  652.          int var6 = this.selection.y >= this.firstVisibleRow && this.selection.y <= this.lastVisibleRow ? this.selection.y - this.firstVisibleRow : 0;
  653.          this.selection.x = var1;
  654.          this.selection.y = var2;
  655.          this.selection.width = var3;
  656.          this.selection.height = var4;
  657.          this.markDirty(this.selection);
  658.          this.makeVisible(var2, var1, var6, var5);
  659.          this.fixUpdate(false, 1);
  660.       }
  661.  
  662.    }
  663.  
  664.    private void setTextAttributes(CFGRIDTextAttributes var1) {
  665.       this.textAttri = var1;
  666.       this.offgraphics.setFont(var1.font);
  667.       this.field_1 = var1.fm;
  668.       this.field_2 = var1.fontAsc;
  669.       this.field_3 = var1.fontDesc;
  670.       this.offgraphics.setColor(var1.textColor);
  671.    }
  672.  
  673.    CFGRIDCanvas(CFGRID var1, Point var2, boolean var3, int var4) {
  674.       this.bgSelection = Color.pink;
  675.       this.bgRegular = new Color(255, 255, 225);
  676.       this.totalGridSize = new Dimension(0, 0);
  677.       this.headerVertMarg = 2;
  678.       this.gridVertMarg = 2;
  679.       this.updateDisplay = true;
  680.       this.gridLines = true;
  681.       this.mouseDownPos = new Point(0, 0);
  682.       this.resizeCursor = 10;
  683.       this.resizedCol = -1;
  684.       this.maximages = 100;
  685.       this.field_4 = var1;
  686.       this.mainOrigo = var2;
  687.       this.gap = var4;
  688.       if (this.mainOrigo.y > 0) {
  689.          this.firstGridRow = this.firstVisibleRow = 1;
  690.          this.colHeaderDefined = true;
  691.          this.rowQty = 1;
  692.       }
  693.  
  694.       if (this.mainOrigo.x > 0) {
  695.          this.firstGridCol = this.firstVisibleCol = 1;
  696.          this.rowHeaderDefined = true;
  697.          this.colQty = 1;
  698.       }
  699.  
  700.       this.rowList = new CFGRIDList();
  701.       this.colProps = new CFGRIDList();
  702.       if (this.rowHeaderDefined || this.colHeaderDefined) {
  703.          CFGRIDRow var5 = new CFGRIDRow();
  704.          var5.addCell(0, 0);
  705.          this.rowList.addElement(var5);
  706.          this.colProps.addElement(new CFGRIDColProperties());
  707.       }
  708.  
  709.       this.selectionMode = 101;
  710.       this.autoScrollbars = var3;
  711.    }
  712.  
  713.    synchronized void setEditSelection(int var1, int var2) {
  714.       if (this.editSelection.x == var1 && this.editSelection.y == var2 && !this.editFieldOff) {
  715.          this.editField.select(0, 0);
  716.       } else {
  717.          this.resetElement(this.colHeaderDefined ? this.editSelection.y - 1 : this.editSelection.y, this.rowHeaderDefined ? this.editSelection.x - 1 : this.editSelection.x);
  718.          this.editSelection.x = var1;
  719.          this.editSelection.y = var2;
  720.          this.editSelection.width = 1;
  721.          this.editSelection.height = 1;
  722.          this.editSelectionChanged = true;
  723.          this.setEditColumn(this.colHeaderDefined ? this.editSelection.y - 1 : this.editSelection.y, this.rowHeaderDefined ? this.editSelection.x - 1 : this.editSelection.x);
  724.       }
  725.    }
  726.  
  727.    public boolean handleEvent(Event var1) {
  728.       switch (var1.id) {
  729.          case 401:
  730.             if (var1.key == 9) {
  731.                this.moveSelection((var1.modifiers & 1) != 0 ? 413 : 414);
  732.             }
  733.             break;
  734.          case 402:
  735.             if (var1.key == 10 && this.field_4.caller != null) {
  736.                this.field_4.caller.CFGRIDMessage(this.field_4, 500, this.getSelection());
  737.             }
  738.             break;
  739.          case 403:
  740.             short var2 = 400;
  741.             boolean var3 = false;
  742.             switch (var1.key) {
  743.                case 1000:
  744.                   if (this.selectionMode != 105) {
  745.                      if (this.colProps.getProp(this.firstGridCol).gridAttri.allowSelect) {
  746.                         var3 = true;
  747.                      } else {
  748.                         var3 = false;
  749.                      }
  750.  
  751.                      var2 = 409;
  752.                   } else if ((var1.modifiers & 8) != 0) {
  753.                      if (this.colProps.getProp(this.firstGridCol).gridAttri.allowSelect) {
  754.                         var3 = true;
  755.                      } else {
  756.                         var3 = false;
  757.                      }
  758.  
  759.                      var2 = 409;
  760.                   }
  761.                   break;
  762.                case 1001:
  763.                   if (this.selectionMode != 105) {
  764.                      if (this.colProps.getProp(this.colQty - 1).gridAttri.allowSelect) {
  765.                         var3 = true;
  766.                      } else {
  767.                         var3 = false;
  768.                      }
  769.  
  770.                      var2 = 410;
  771.                   } else if ((var1.modifiers & 8) != 0) {
  772.                      if (this.colProps.getProp(this.colQty - 1).gridAttri.allowSelect) {
  773.                         var3 = true;
  774.                      } else {
  775.                         var3 = false;
  776.                      }
  777.  
  778.                      var2 = 410;
  779.                   }
  780.                   break;
  781.                case 1002:
  782.                   var3 = true;
  783.                   var2 = 405;
  784.                   break;
  785.                case 1003:
  786.                   var3 = true;
  787.                   var2 = 406;
  788.                   break;
  789.                case 1004:
  790.                   var3 = true;
  791.                   var2 = 401;
  792.                   break;
  793.                case 1005:
  794.                   var3 = true;
  795.                   var2 = 402;
  796.                   break;
  797.                case 1006:
  798.                   if (this.selectionMode != 105) {
  799.                      var3 = true;
  800.                      var2 = 403;
  801.                   } else if ((var1.modifiers & 8) != 0) {
  802.                      var3 = true;
  803.                      var2 = 403;
  804.                   }
  805.                   break;
  806.                case 1007:
  807.                   if (this.selectionMode != 105) {
  808.                      var3 = true;
  809.                      var2 = 404;
  810.                   } else if ((var1.modifiers & 8) != 0) {
  811.                      var3 = true;
  812.                      var2 = 404;
  813.                   }
  814.             }
  815.  
  816.             if (var2 != 400) {
  817.                if (var3) {
  818.                   this.moveSelection(var2);
  819.                } else {
  820.                   this.scrollGrid(var2);
  821.                }
  822.             }
  823.             break;
  824.          case 501:
  825.             this.mouseDownPos.x = var1.x;
  826.             long var11 = System.currentTimeMillis();
  827.             boolean var7 = var11 - this.lastTime >= 300L;
  828.             if (this.pickCell(var1.x, var1.y) == null) {
  829.                if (this.colHeaderDefined) {
  830.                   if (this.pickColumnHeaderCell(var1.x, var1.y) == null && var7) {
  831.                      var11 = 0L;
  832.                   }
  833.                } else if (var7) {
  834.                   var11 = 0L;
  835.                }
  836.             } else if (this.field_4.caller != null) {
  837.                this.field_4.caller.CFGRIDMessage(this.field_4, var7 ? 510 : 520, this.getSelection());
  838.             }
  839.  
  840.             this.lastTime = var11;
  841.             break;
  842.          case 502:
  843.             if (this.resizedCol >= 0) {
  844.                this.parentFrame.setCursor(0);
  845.                int var8 = this.resizedCol;
  846.                this.resizedCol = -1;
  847.                this.resizedX = -1;
  848.                int var9 = this.colProps.getProp(var8).width + (var1.x - this.mouseDownPos.x);
  849.                if (var9 <= 0) {
  850.                   var9 = 1;
  851.                }
  852.  
  853.                this.updateStatus |= 4;
  854.                this.internalSetColWidth(false, var9, var8);
  855.             }
  856.             break;
  857.          case 503:
  858.             if (this.parentFrame != null) {
  859.                int var4 = 0;
  860.                this.resizedCol = -1;
  861.                if (this.colHeaderDefined) {
  862.                   if (var1.y < this.mainOrigo.y) {
  863.                      if (this.rowHeaderDefined) {
  864.                         int var5 = this.mainOrigo.x - 1;
  865.                         if (var1.x >= var5 - 2 && var1.x <= var5 + 2) {
  866.                            var4 = this.resizeCursor;
  867.                            if (this.gridCols > 0 && var1.x >= var5 + 1 + this.colProps.getProp(this.firstVisibleCol).width) {
  868.                               this.resizedCol = this.firstVisibleCol;
  869.                            } else {
  870.                               this.resizedCol = 0;
  871.                            }
  872.                         }
  873.                      }
  874.  
  875.                      if (this.resizedCol < 0 && this.firstGridCol < this.colQty) {
  876.                         for(int var6 = this.firstVisibleCol; var6 <= this.lastVisibleCol; ++var6) {
  877.                            int var10 = this.colProps.getProp(var6).xBase + this.colProps.getProp(var6).width;
  878.                            if (var1.x >= var10 - 2 && var1.x <= var10 + 2) {
  879.                               if (var6 < this.lastVisibleCol && var1.x >= var10 + 1 + this.colProps.getProp(var6 + 1).width) {
  880.                                  ++var6;
  881.                               }
  882.  
  883.                               var4 = this.resizeCursor;
  884.                               this.resizedCol = var6;
  885.                               break;
  886.                            }
  887.                         }
  888.                      }
  889.                   }
  890.  
  891.                   if (var4 != this.parentFrame.getCursorType()) {
  892.                      this.parentFrame.setCursor(var4);
  893.                   }
  894.                }
  895.             }
  896.             break;
  897.          case 505:
  898.             if (this.parentFrame != null) {
  899.                this.parentFrame.setCursor(0);
  900.             }
  901.             break;
  902.          case 506:
  903.             if (this.resizedCol >= 0 && this.resizedX != var1.x) {
  904.                this.resizedX = var1.x;
  905.                if (!this.fastPaintOK(((Component)this).getGraphics())) {
  906.                   ((Component)this).repaint();
  907.                }
  908.             }
  909.       }
  910.  
  911.       if (this.selectionMode != 105 || var1.key != 1005 && var1.key != 1004 && var1.key != 1002 && var1.key != 1003 && ((var1.modifiers & 8) == 0 || var1.key != 1007 && var1.key != 1006 && var1.key != 1000 && var1.key != 1001)) {
  912.          return var1.key == 9 ? true : super.handleEvent(var1);
  913.       } else {
  914.          return true;
  915.       }
  916.    }
  917.  
  918.    synchronized boolean isColumnHeaderSelected() {
  919.       return this.reversevideo;
  920.    }
  921.  
  922.    private synchronized Rectangle getEditSelection() {
  923.       return this.editSelection.width > 0 && this.editSelection.height > 0 ? new Rectangle(this.rowHeaderDefined ? this.editSelection.x - 1 : this.editSelection.x, this.colHeaderDefined ? this.editSelection.y - 1 : this.editSelection.y, this.editSelection.width, this.editSelection.height) : null;
  924.    }
  925.  
  926.    private CFGRIDImage getImageResource(int var1) {
  927.       if (this.imageObject[var1].invalid) {
  928.          return null;
  929.       } else {
  930.          if (!this.imageObject[var1].buffered) {
  931.             this.bufferImage(var1);
  932.          }
  933.  
  934.          return this.imageObject[var1];
  935.       }
  936.    }
  937.  
  938.    private synchronized void moveSelection(int var1) {
  939.       if (this.selection.width != 0 && this.selection.height != 0) {
  940.          int var2;
  941.          int var3;
  942.          var2 = this.selection.x;
  943.          var3 = this.selection.y;
  944.          label170:
  945.          switch (var1) {
  946.             case 401:
  947.                if (this.selectionMode == 103) {
  948.                   this.scrollGrid(var1);
  949.                } else if (var3 > this.firstGridRow) {
  950.                   --var3;
  951.                }
  952.                break;
  953.             case 402:
  954.                if (this.selectionMode == 103) {
  955.                   this.scrollGrid(var1);
  956.                } else if (var3 < this.rowQty - 1) {
  957.                   ++var3;
  958.                }
  959.                break;
  960.             case 403:
  961.                if (this.selectionMode == 102) {
  962.                   this.scrollGrid(var1);
  963.                } else {
  964.                   for(int var9 = var2 - 1; var9 >= this.firstGridCol; --var9) {
  965.                      if (this.colProps.getProp(var9).gridAttri.allowSelect) {
  966.                         var2 = var9;
  967.                         break label170;
  968.                      }
  969.                   }
  970.                }
  971.                break;
  972.             case 404:
  973.                if (this.selectionMode == 102) {
  974.                   this.scrollGrid(var1);
  975.                } else {
  976.                   for(int var8 = var2 + 1; var8 < this.colQty; ++var8) {
  977.                      if (this.colProps.getProp(var8).gridAttri.allowSelect) {
  978.                         var2 = var8;
  979.                         break label170;
  980.                      }
  981.                   }
  982.                }
  983.                break;
  984.             case 405:
  985.                if (this.selectionMode == 103) {
  986.                   this.scrollGrid(var1);
  987.                   return;
  988.                }
  989.  
  990.                var3 -= (((Component)this).size().height - this.mainOrigo.y) / (this.rowList.getRow(this.lastVisibleRow).height + 1);
  991.                if (var3 < this.firstGridRow) {
  992.                   var3 = this.firstGridRow;
  993.                }
  994.                break;
  995.             case 406:
  996.                if (this.selectionMode == 103) {
  997.                   this.scrollGrid(var1);
  998.                   return;
  999.                }
  1000.  
  1001.                var3 += (((Component)this).size().height - this.mainOrigo.y) / (this.rowList.getRow(this.lastVisibleRow).height + 1);
  1002.                if (var3 >= this.rowQty) {
  1003.                   var3 = this.rowQty - 1;
  1004.                }
  1005.                break;
  1006.             case 407:
  1007.             case 408:
  1008.             case 411:
  1009.             case 412:
  1010.             default:
  1011.                return;
  1012.             case 409:
  1013.                if (this.selectionMode != 103) {
  1014.                   var3 = this.firstGridRow;
  1015.                }
  1016.  
  1017.                if (this.selectionMode != 102) {
  1018.                   var2 = this.firstGridCol;
  1019.                }
  1020.                break;
  1021.             case 410:
  1022.                if (this.selectionMode != 103) {
  1023.                   var3 = this.rowQty - 1;
  1024.                }
  1025.  
  1026.                if (this.selectionMode != 102) {
  1027.                   var2 = this.colQty - 1;
  1028.                }
  1029.                break;
  1030.             case 413:
  1031.                if (this.selectionMode == 102) {
  1032.                   this.scrollGrid(403);
  1033.                }
  1034.  
  1035.                if (this.selectionMode == 102) {
  1036.                   if (this.firstVisibleCol > this.firstGridCol) {
  1037.                      this.scrollGrid(403);
  1038.                   }
  1039.                } else {
  1040.                   int var6;
  1041.                   for(var6 = var2 - 1; var6 >= this.firstGridCol; --var6) {
  1042.                      if (this.colProps.getProp(var6).gridAttri.allowSelect) {
  1043.                         var2 = var6;
  1044.                         break;
  1045.                      }
  1046.                   }
  1047.  
  1048.                   if (var6 < this.firstGridCol && var3 > this.firstGridRow && this.selectionMode != 103) {
  1049.                      for(int var7 = this.colQty - 1; var7 >= this.firstGridCol; --var7) {
  1050.                         if (this.colProps.getProp(var7).gridAttri.allowSelect) {
  1051.                            var2 = var7;
  1052.                            --var3;
  1053.                            break label170;
  1054.                         }
  1055.                      }
  1056.                   }
  1057.                }
  1058.                break;
  1059.             case 414:
  1060.                if (this.selectionMode == 102) {
  1061.                   if (this.firstVisibleCol < this.colQty - 1) {
  1062.                      this.scrollGrid(404);
  1063.                   }
  1064.                } else {
  1065.                   int var4;
  1066.                   for(var4 = var2 + 1; var4 < this.colQty; ++var4) {
  1067.                      if (this.colProps.getProp(var4).gridAttri.allowSelect) {
  1068.                         var2 = var4;
  1069.                         break;
  1070.                      }
  1071.                   }
  1072.  
  1073.                   if (var4 >= this.colQty && var3 < this.rowQty - 1 && this.selectionMode != 103) {
  1074.                      for(int var5 = this.firstGridCol; var5 < this.colQty; ++var5) {
  1075.                         if (this.colProps.getProp(var5).gridAttri.allowSelect) {
  1076.                            var2 = var5;
  1077.                            ++var3;
  1078.                            break;
  1079.                         }
  1080.                      }
  1081.                   }
  1082.                }
  1083.          }
  1084.  
  1085.          this.updateStatus |= 4;
  1086.          if (this.selectionMode == 105 && (var2 != this.editSelection.x || var3 != this.editSelection.y)) {
  1087.             this.setEditSelection(var2, var3);
  1088.          }
  1089.  
  1090.          this.setSelection(var2, var3, this.selection.width, this.selection.height);
  1091.       }
  1092.    }
  1093.  
  1094.    String description() {
  1095.       String var1 = new String();
  1096.       if (this.rowHeaderDefined && this.colHeaderDefined) {
  1097.          var1 = var1 + "row and column headers, ";
  1098.       } else if (this.rowHeaderDefined) {
  1099.          var1 = var1 + "row header, ";
  1100.       } else if (this.colHeaderDefined) {
  1101.          var1 = var1 + "column header, ";
  1102.       }
  1103.  
  1104.       var1 = var1 + this.gridRows + " rows, " + this.gridCols + " columns, ";
  1105.       if (this.autoScrollbars) {
  1106.          var1 = var1 + "auto";
  1107.       } else if (this.field_4.vert != null && this.field_4.horz != null) {
  1108.          var1 = var1 + "horz and vert";
  1109.       } else if (this.field_4.vert != null) {
  1110.          var1 = var1 + "vert";
  1111.       } else if (this.field_4.horz != null) {
  1112.          var1 = var1 + "horz";
  1113.       } else {
  1114.          var1 = var1 + "no";
  1115.       }
  1116.  
  1117.       var1 = var1 + " scrollbars";
  1118.       return var1;
  1119.    }
  1120.  
  1121.    private synchronized void setEditColumn(int var1, int var2) {
  1122.       if (this.editField == null) {
  1123.          ((Container)this).add(this.editField = new TextField());
  1124.       }
  1125.  
  1126.       this.editFieldOff = false;
  1127.       this.editRectangle = this.getEditSelectionRect(var1, var2);
  1128.       this.editField.reshape(0, 0, 0, 0);
  1129.       this.editField.setText(this.getElement(var1, var2) == null ? "" : this.getElement(var1, var2));
  1130.       this.editField.reshape(this.editRectangle.x, this.editRectangle.y, this.editRectangle.width, this.editRectangle.height);
  1131.       if (this.editSelectionChanged) {
  1132.          this.editField.selectAll();
  1133.          this.editSelectionChanged = false;
  1134.       }
  1135.  
  1136.       this.editField.requestFocus();
  1137.       this.editField.validate();
  1138.    }
  1139.  
  1140.    private synchronized int normalize(Graphics var1, Dimension var2) {
  1141.       int var7 = 0;
  1142.       int var11 = 0;
  1143.       int var12 = 0;
  1144.       String var14 = System.getProperty("os.name");
  1145.       byte var9;
  1146.       if (!var14.equals("Windows NT") && !var14.equals("Windows 95")) {
  1147.          var9 = 10;
  1148.       } else {
  1149.          var9 = 0;
  1150.       }
  1151.  
  1152.       if (this.rowQty - 1 > 1 && this.field_4.vert != null) {
  1153.          this.field_4.vert.setValues(this.firstVisibleRow - this.firstGridRow, var9, 0, this.rowQty - 1 - this.firstGridRow);
  1154.       }
  1155.  
  1156.       if (this.colQty - 1 > 1 && this.field_4.horz != null) {
  1157.          this.field_4.horz.setValues(this.firstVisibleCol - this.firstGridCol, var9, 0, this.colQty - 1 - this.firstGridCol);
  1158.       }
  1159.  
  1160.       for(int var10 = 0; var10 < this.colQty; ++var10) {
  1161.          CFGRIDTextAttributes var15;
  1162.          if ((var15 = this.colProps.getProp(var10).gridAttri).fontHeight == 0) {
  1163.             var15.setFontData(var1, var15.font == null ? this.defFont : var15.font);
  1164.          }
  1165.  
  1166.          if (this.colHeaderDefined && (var15 = this.colProps.getProp(var10).headerAttri).fontHeight == 0) {
  1167.             var15.setFontData(var1, var15.font == null ? this.defFont : var15.font);
  1168.          }
  1169.       }
  1170.  
  1171.       if (!this.normalized) {
  1172.          if (!this.colHeaderDefined) {
  1173.             var12 = 0;
  1174.          } else {
  1175.             int var8 = 0;
  1176.  
  1177.             for(int var38 = this.firstVisibleCol; var38 < this.colQty; ++var38) {
  1178.                var7 = this.colProps.getProp(var38).headerAttri.fontHeight;
  1179.                if (var8 < var7) {
  1180.                   var8 = var7;
  1181.                }
  1182.             }
  1183.  
  1184.             CFGRIDRow var4 = this.rowList.getRow(0);
  1185.             var4.height = var8 + this.headerVertMarg * 2;
  1186.             var4.yBase = 0;
  1187.             var12 = var4.height + 1;
  1188.          }
  1189.  
  1190.          this.totalGridSize.height = var12;
  1191.          if (this.gridRows > 0) {
  1192.             int var30 = this.gridMinRowHeight;
  1193.  
  1194.             for(int var39 = 0; var39 < this.colQty; ++var39) {
  1195.                var7 = this.colProps.getProp(var39).gridAttri.fontHeight;
  1196.                if (var30 < var7) {
  1197.                   var30 = var7;
  1198.                }
  1199.             }
  1200.  
  1201.             var30 += this.gridVertMarg * 2;
  1202.  
  1203.             for(int var33 = this.firstVisibleRow; var12 <= var2.height + 1 && var33 < this.rowQty; ++var33) {
  1204.                CFGRIDRow var21 = this.rowList.getRow(var33);
  1205.                var21.height = var30;
  1206.                var21.yBase = var12;
  1207.                var12 += var30 + 1;
  1208.             }
  1209.  
  1210.             Dimension var10000 = this.totalGridSize;
  1211.             var10000.height += (this.rowQty - 1) * (var30 + 1);
  1212.             var9 = var2.height - (this.colHeaderDefined ? this.rowList.getRow(0).height - 1 : 0);
  1213.             var12 = this.rowList.getRow(this.firstVisibleRow).height + 1;
  1214.             int var40 = var9 / var12;
  1215.             if (var40 * var12 < var9) {
  1216.                ++var40;
  1217.             }
  1218.  
  1219.             int var16 = this.firstVisibleRow + var40 - 1;
  1220.             if (var16 >= this.rowQty) {
  1221.                if (this.field_4.caller != null && this.field_4.caller.CFGRIDMessage(this.field_4, 530, (Rectangle)null)) {
  1222.                   this.updateDisplay = false;
  1223.                   return var16 - this.rowQty + 1;
  1224.                }
  1225.  
  1226.                var16 = this.rowQty - 1;
  1227.             }
  1228.  
  1229.             this.lastVisibleRow = var16;
  1230.          }
  1231.  
  1232.          if (this.totalGridSize.height < this.field_4.size().height) {
  1233.             int var50 = this.firstGridRow;
  1234.             int var17 = this.rowQty - 1;
  1235.          } else {
  1236.             int var51 = this.firstVisibleRow;
  1237.             int var52 = this.lastVisibleRow;
  1238.          }
  1239.  
  1240.          for(int var35 = 0; var35 < this.colQty; ++var35) {
  1241.             CFGRIDColProperties var5 = this.colProps.getProp(var35);
  1242.             int var32;
  1243.             if (!var5.modeAuto) {
  1244.                var32 = var5.width;
  1245.             } else {
  1246.                var32 = 0;
  1247.                if (this.rowHeaderDefined && var35 == 0) {
  1248.                   CFGRIDTextAttributes var47 = var5.gridAttri;
  1249.                   FontMetrics var6 = var47.fm;
  1250.                   var7 = var47.horzMargin * 2;
  1251.                   int var18 = 0;
  1252.  
  1253.                   for(int var19 = this.rowQty > 11 ? this.rowQty + 10 : 11; var19 > 0; var19 /= 10) {
  1254.                      var18 = var18 * 10 + 5;
  1255.                   }
  1256.  
  1257.                   var7 += var6.stringWidth(Integer.toString(var18));
  1258.                   if (var32 < var7) {
  1259.                      var32 = var7;
  1260.                   }
  1261.  
  1262.                   var5.modeAuto = false;
  1263.                   var5.width = var32;
  1264.                }
  1265.  
  1266.                if (this.colHeaderDefined) {
  1267.                   CFGRIDTextAttributes var48 = var5.headerAttri;
  1268.                   var7 = var48.horzMargin * 2;
  1269.                   CFGRIDCell var3;
  1270.                   String var13;
  1271.                   if ((var3 = this.rowList.getRow(0).getCell(var35)) != null && (var13 = (String)var3.elem) != null) {
  1272.                      var7 += var48.fm.stringWidth(var13);
  1273.                   }
  1274.  
  1275.                   if (var32 < var7) {
  1276.                      var32 = var7;
  1277.                   }
  1278.                }
  1279.  
  1280.                if (this.gridRows > 0) {
  1281.                   CFGRIDTextAttributes var49 = var5.gridAttri;
  1282.                   FontMetrics var23 = var49.fm;
  1283.  
  1284.                   for(int var41 = this.firstGridRow; var41 < this.rowQty; ++var41) {
  1285.                      var7 = var49.horzMargin * 2;
  1286.                      CFGRIDCell var20;
  1287.                      String var45;
  1288.                      if ((var20 = this.rowList.getRow(var41).getCell(var35)) != null && (var45 = (String)var20.elem) != null) {
  1289.                         if (var49.format != null && var49.formatType == 1) {
  1290.                            var45 = Format.formatNumber(var45, var49.format);
  1291.                         }
  1292.  
  1293.                         var7 += var23.stringWidth(var45);
  1294.                      }
  1295.  
  1296.                      if (var32 < var7) {
  1297.                         var32 = var7;
  1298.                      }
  1299.                   }
  1300.                }
  1301.  
  1302.                if (var32 > var5.maxAutoWidth) {
  1303.                   var32 = var5.maxAutoWidth;
  1304.                }
  1305.  
  1306.                if (var35 < this.colQty - 1) {
  1307.                   var5.modeAuto = false;
  1308.                }
  1309.             }
  1310.  
  1311.             var5.width = var32;
  1312.          }
  1313.  
  1314.          var11 = this.rowHeaderDefined ? this.colProps.getProp(0).width + 1 : 0;
  1315.          if (this.gridCols > 0) {
  1316.             for(var9 = this.firstVisibleCol; var9 < this.colQty && var11 < var2.width; ++var9) {
  1317.                CFGRIDColProperties var22 = this.colProps.getProp(var9);
  1318.                var22.xBase = var11;
  1319.                var11 += var22.width + 1;
  1320.             }
  1321.  
  1322.             this.lastVisibleCol = var9 - 1;
  1323.          }
  1324.  
  1325.          var9 = 0;
  1326.  
  1327.          for(this.totalGridSize.width = 0; var9 < this.colQty; ++var9) {
  1328.             Dimension var53 = this.totalGridSize;
  1329.             var53.width += this.colProps.getProp(var9).width + 1;
  1330.          }
  1331.  
  1332.          if (this.rowHeaderDefined) {
  1333.             this.mainOrigo.x = this.colProps.getProp(0).width + 1;
  1334.          }
  1335.  
  1336.          if (this.colHeaderDefined) {
  1337.             this.mainOrigo.y = this.rowList.getRow(0).height + 1;
  1338.          }
  1339.  
  1340.          this.normalized = true;
  1341.       }
  1342.  
  1343.       return 0;
  1344.    }
  1345.  
  1346.    synchronized void setColHeaderAlignment(int var1, int var2) {
  1347.       if (this.colHeaderDefined && var2 >= 0) {
  1348.          if (var1 == 202 || var1 == 201 || var1 == 203) {
  1349.             var2 += this.firstGridCol;
  1350.             if (var2 < this.colQty) {
  1351.                this.colProps.getProp(var2).headerAttri.alignment = var1;
  1352.                this.fixUpdate(true, 2);
  1353.             }
  1354.          }
  1355.       }
  1356.    }
  1357.  
  1358.    synchronized void setColHeaderAlignment(int var1) {
  1359.       if (this.colHeaderDefined) {
  1360.          if (var1 == 202 || var1 == 201 || var1 == 203) {
  1361.             for(int var2 = this.firstGridCol; var2 < this.colQty; ++var2) {
  1362.                this.colProps.getProp(var2).headerAttri.alignment = var1;
  1363.             }
  1364.  
  1365.             this.fixUpdate(true, 2);
  1366.          }
  1367.       }
  1368.    }
  1369.  
  1370.    synchronized void setRowHeaderAlignment(int var1) {
  1371.       if (this.rowHeaderDefined) {
  1372.          if (var1 == 202 || var1 == 201 || var1 == 203) {
  1373.             this.colProps.getProp(0).gridAttri.alignment = var1;
  1374.             this.fixUpdate(true, 2);
  1375.          }
  1376.       }
  1377.    }
  1378.  
  1379.    synchronized void setGridAlignment(int var1, int var2) {
  1380.       if (var2 >= 0) {
  1381.          if (var1 == 202 || var1 == 201 || var1 == 203) {
  1382.             var2 += this.firstGridCol;
  1383.             if (var2 < this.colQty) {
  1384.                this.colProps.getProp(var2).gridAttri.alignment = var1;
  1385.                this.fixUpdate(true, 2);
  1386.             }
  1387.          }
  1388.       }
  1389.    }
  1390.  
  1391.    synchronized void setGridAlignment(int var1) {
  1392.       if (var1 == 202 || var1 == 201 || var1 == 203) {
  1393.          for(int var2 = this.firstGridCol; var2 < this.colQty; ++var2) {
  1394.             this.colProps.getProp(var2).gridAttri.alignment = var1;
  1395.          }
  1396.  
  1397.          this.fixUpdate(true, 2);
  1398.       }
  1399.    }
  1400.  
  1401.    synchronized String getElement(int var1, int var2) {
  1402.       var2 += this.firstGridCol;
  1403.       var1 += this.firstGridRow;
  1404.       if (var1 < this.rowQty && var1 >= 0 && var2 < this.colQty && var2 >= 0) {
  1405.          return this.rowList.getRow(var1).getCell(var2) != null ? (String)this.rowList.getRow(var1).getCell(var2).get() : null;
  1406.       } else {
  1407.          return null;
  1408.       }
  1409.    }
  1410.  
  1411.    synchronized void setColReadOnly(boolean var1, int var2) {
  1412.       if (var2 >= 0) {
  1413.          var2 += this.firstGridCol;
  1414.          if (var2 < this.colQty && this.selectionMode != 102) {
  1415.             this.colProps.getProp(var2).gridAttri.setAllowSelect(!var1);
  1416.             this.fixUpdate(true, 2);
  1417.          }
  1418.       }
  1419.    }
  1420.  
  1421.    synchronized void setElement(String var1, int var2, int var3) {
  1422.       var3 += this.firstGridCol;
  1423.       var2 += this.firstGridRow;
  1424.       if (var2 < this.rowQty && var2 >= 0 && var3 < this.colQty && var3 >= 0) {
  1425.          if (this.rowList.getRow(var2).getCell(var3) == null) {
  1426.             this.rowList.getRow(var2).setCell(var2, var3);
  1427.          }
  1428.  
  1429.          this.rowList.getRow(var2).getCell(var3).set(var1);
  1430.          if (this.rowOnDisplay(var2) && this.colOnDisplay(var3)) {
  1431.             this.fixUpdate(true, 2);
  1432.          }
  1433.  
  1434.       }
  1435.    }
  1436.  
  1437.    synchronized void scrollGrid(int var1) {
  1438.       boolean var2 = true;
  1439.       switch (var1) {
  1440.          case 401:
  1441.             if (this.firstVisibleRow > this.firstGridRow) {
  1442.                this.firstVisibleRow += -1;
  1443.             } else {
  1444.                var2 = false;
  1445.             }
  1446.             break;
  1447.          case 402:
  1448.             if (this.firstVisibleRow < this.rowQty - 1) {
  1449.                ++this.firstVisibleRow;
  1450.             } else {
  1451.                var2 = false;
  1452.             }
  1453.             break;
  1454.          case 403:
  1455.             if (this.firstVisibleCol > this.firstGridCol) {
  1456.                this.firstVisibleCol += -1;
  1457.             } else {
  1458.                var2 = false;
  1459.             }
  1460.             break;
  1461.          case 404:
  1462.             if (this.firstVisibleCol < this.colQty - 1) {
  1463.                ++this.firstVisibleCol;
  1464.             } else {
  1465.                var2 = false;
  1466.             }
  1467.             break;
  1468.          case 405:
  1469.             if (this.gridRows > 0) {
  1470.                this.firstVisibleRow -= (((Component)this).size().height - this.mainOrigo.y) / (this.rowList.getRow(this.lastVisibleRow).height + 1);
  1471.                if (this.firstVisibleRow < this.firstGridRow) {
  1472.                   this.firstVisibleRow = this.firstGridRow;
  1473.                }
  1474.             }
  1475.             break;
  1476.          case 406:
  1477.             if (this.gridRows > 0) {
  1478.                this.firstVisibleRow += (((Component)this).size().height - this.mainOrigo.y) / (this.rowList.getRow(this.lastVisibleRow).height + 1);
  1479.                if (this.firstVisibleRow >= this.rowQty) {
  1480.                   this.firstVisibleRow = this.rowQty - 1;
  1481.                }
  1482.             }
  1483.             break;
  1484.          case 407:
  1485.             if (this.gridCols > 0) {
  1486.                int var4 = ((Component)this).size().width - this.mainOrigo.x;
  1487.  
  1488.                int var5;
  1489.                for(var5 = this.firstVisibleCol - 1; var5 >= this.firstGridCol; --var5) {
  1490.                   var4 -= this.colProps.getProp(var5).width - 1;
  1491.                   if (var4 <= 0) {
  1492.                      break;
  1493.                   }
  1494.                }
  1495.  
  1496.                if (this.firstVisibleCol == var5 + 1 && this.firstVisibleCol > this.firstGridCol) {
  1497.                   this.firstVisibleCol = var5;
  1498.                } else {
  1499.                   this.firstVisibleCol = var5 + 1;
  1500.                }
  1501.             }
  1502.             break;
  1503.          case 408:
  1504.             if (this.gridCols > 0) {
  1505.                CFGRIDColProperties var3 = this.colProps.getProp(this.lastVisibleCol);
  1506.                if (var3.xBase + var3.width > ((Component)this).size().width && this.firstVisibleCol != this.lastVisibleCol) {
  1507.                   this.firstVisibleCol = this.lastVisibleCol;
  1508.                } else {
  1509.                   this.firstVisibleCol = this.lastVisibleCol + 1;
  1510.                }
  1511.  
  1512.                if (this.firstVisibleCol >= this.colQty) {
  1513.                   this.firstVisibleCol = this.colQty - 1;
  1514.                }
  1515.             }
  1516.             break;
  1517.          case 409:
  1518.             if (this.firstVisibleRow > this.firstGridRow) {
  1519.                this.firstVisibleRow = this.firstGridRow;
  1520.             } else {
  1521.                var2 = false;
  1522.             }
  1523.             break;
  1524.          case 410:
  1525.             if (this.firstVisibleRow < this.rowQty - 1) {
  1526.                this.firstVisibleRow = this.rowQty - 1;
  1527.             } else {
  1528.                var2 = false;
  1529.             }
  1530.             break;
  1531.          case 411:
  1532.             if (this.gridRows > 0) {
  1533.                this.firstVisibleRow = this.field_4.vert.getValue();
  1534.                if (this.colHeaderDefined) {
  1535.                   ++this.firstVisibleRow;
  1536.                }
  1537.             }
  1538.             break;
  1539.          case 412:
  1540.             if (this.gridCols > 0) {
  1541.                this.firstVisibleCol = this.field_4.horz.getValue();
  1542.                if (this.rowHeaderDefined) {
  1543.                   ++this.firstVisibleCol;
  1544.                }
  1545.             }
  1546.             break;
  1547.          default:
  1548.             var2 = false;
  1549.       }
  1550.  
  1551.       if (var2) {
  1552.          this.fixUpdate(true, 2);
  1553.          if (this.selectionMode == 105) {
  1554.             Rectangle var6 = this.getEditSelection();
  1555.             if (!this.isVisible(var6.y, var6.x)) {
  1556.                this.hideEditColumn();
  1557.             }
  1558.          }
  1559.       }
  1560.  
  1561.    }
  1562.  
  1563.    private synchronized int innerPaint(Graphics var1) {
  1564.       Dimension var10 = ((Component)this).size();
  1565.       Dimension var11 = new Dimension();
  1566.       if (this.defFont == null) {
  1567.          this.defFont = ((Component)this).getFont();
  1568.  
  1569.          Container var12;
  1570.          for(var12 = ((Component)this).getParent(); !(var12 instanceof Frame); var12 = ((Component)var12).getParent()) {
  1571.          }
  1572.  
  1573.          this.parentFrame = (Frame)var12;
  1574.       }
  1575.  
  1576.       if (this.rowQty != 0 && this.colQty != 0) {
  1577.          this.fixOffscreenBuffer(var10);
  1578.          int var5;
  1579.          if ((var5 = this.normalize(this.offgraphics, var10)) > 0) {
  1580.             return var5;
  1581.          } else {
  1582.             if (this.autoScrollbars) {
  1583.                if ((var5 = this.fixAutoScrollbars(this.offgraphics, var10)) > 0) {
  1584.                   return var5;
  1585.                }
  1586.  
  1587.                var10 = ((Component)this).size();
  1588.             }
  1589.  
  1590.             this.offgraphics.setColor(this.bgRegular);
  1591.             this.offgraphics.fillRect(0, 0, var10.width, var10.height);
  1592.             int var59 = this.mainOrigo.x;
  1593.             int var13 = this.mainOrigo.y;
  1594.             int var3;
  1595.             if (this.gridCols > 0) {
  1596.                var3 = this.colProps.getProp(this.lastVisibleCol).xBase + this.colProps.getProp(this.lastVisibleCol).width;
  1597.             } else {
  1598.                var3 = var59;
  1599.             }
  1600.  
  1601.             if (this.lastVisibleCol == this.colQty - 1 && this.colProps.getProp(this.lastVisibleCol).modeAuto) {
  1602.                CFGRIDColProperties var14 = this.colProps.getProp(this.lastVisibleCol);
  1603.                var14.modeAuto = false;
  1604.                if (var3 < var10.width) {
  1605.                   int var15 = var10.width - var14.xBase;
  1606.                   if (this.field_4.vert != null && this.field_4.vert.isVisible()) {
  1607.                      var15 -= 15;
  1608.                   }
  1609.  
  1610.                   var14.width = var15 > var14.width ? var15 : var14.width;
  1611.                   var3 = var14.xBase + var14.width;
  1612.                }
  1613.             }
  1614.  
  1615.             if (this.gridRows > 0) {
  1616.                var5 = this.rowList.getRow(this.lastVisibleRow).yBase + this.rowList.getRow(this.lastVisibleRow).height;
  1617.             } else {
  1618.                var5 = var13;
  1619.             }
  1620.  
  1621.             var11.width = var3 > var10.width ? var10.width : var3;
  1622.             var11.height = var5 > var10.height ? var10.height : var5;
  1623.             this.gridDisplayHeight = var11.height - 1;
  1624.             this.offgraphics.setColor(Color.lightGray);
  1625.             if (this.colHeaderDefined && this.rowHeaderDefined) {
  1626.                this.offgraphics.fillRect(0, 0, this.colProps.getProp(0).width - 1, this.rowList.getRow(0).height - 1);
  1627.             }
  1628.  
  1629.             this.offgraphics.setColor(Color.white);
  1630.             if (this.colHeaderDefined) {
  1631.                this.offgraphics.drawLine(0, 0, var11.width - 1, 0);
  1632.             }
  1633.  
  1634.             if (this.rowHeaderDefined) {
  1635.                this.offgraphics.drawLine(0, 0, 0, var11.height - 1);
  1636.             }
  1637.  
  1638.             if (this.colHeaderDefined && this.rowHeaderDefined) {
  1639.                this.offgraphics.drawLine(1, 1, 1, this.rowList.getRow(0).height - 1);
  1640.                this.offgraphics.drawLine(2, 1, this.colProps.getProp(0).width - 1, 1);
  1641.             }
  1642.  
  1643.             this.offgraphics.setColor(Color.gray);
  1644.             if (this.colHeaderDefined) {
  1645.                var5 = this.rowList.getRow(0).height - 1;
  1646.                this.offgraphics.drawLine(0, var5, var11.width - 1, var5);
  1647.             }
  1648.  
  1649.             if (this.rowHeaderDefined) {
  1650.                var3 = this.colProps.getProp(0).width - 1;
  1651.                this.offgraphics.drawLine(var3, 1, var3, var11.height - 1);
  1652.             }
  1653.  
  1654.             if (this.colHeaderDefined && this.rowHeaderDefined) {
  1655.                var3 = this.colProps.getProp(0).width - 1;
  1656.                var5 = this.rowList.getRow(0).height - 1;
  1657.                this.offgraphics.drawLine(var3 - 1, 2, var3 - 1, var5 - 2);
  1658.                this.offgraphics.drawLine(1, var5 - 1, var3, var5 - 1);
  1659.             }
  1660.  
  1661.             this.offgraphics.setColor(Color.black);
  1662.             if (this.colHeaderDefined) {
  1663.                var5 = this.rowList.getRow(0).height;
  1664.                this.offgraphics.drawLine(0, var5, var11.width, var5);
  1665.             }
  1666.  
  1667.             if (this.rowHeaderDefined) {
  1668.                var3 = this.colProps.getProp(0).width;
  1669.                this.offgraphics.drawLine(var3, 0, var3, var11.height - 1);
  1670.             }
  1671.  
  1672.             if (this.colHeaderDefined && this.gridCols > 0) {
  1673.                int var7 = this.rowList.getRow(0).height;
  1674.                this.offgraphics.setColor(Color.lightGray);
  1675.  
  1676.                for(int var8 = this.firstVisibleCol; var8 <= this.lastVisibleCol; ++var8) {
  1677.                   CFGRIDColProperties var16 = this.colProps.getProp(var8);
  1678.                   var3 = this.colProps.getProp(var8).xBase;
  1679.                   this.offgraphics.fillRect(var3, 0, var16.width, var7 - 1);
  1680.                }
  1681.  
  1682.                this.offgraphics.setColor(Color.white);
  1683.  
  1684.                for(int var47 = this.firstVisibleCol; var47 <= this.lastVisibleCol; ++var47) {
  1685.                   var3 = this.colProps.getProp(var47).xBase;
  1686.                   this.offgraphics.drawLine(var3, 1, var3, var7 - 2);
  1687.                }
  1688.  
  1689.                this.offgraphics.setColor(Color.gray);
  1690.  
  1691.                for(int var48 = this.firstVisibleCol; var48 <= this.lastVisibleCol; ++var48) {
  1692.                   CFGRIDColProperties var17 = this.colProps.getProp(var48);
  1693.                   var3 = var17.xBase + var17.width - 1;
  1694.                   this.offgraphics.drawLine(var3, 1, var3, var7 - 1);
  1695.                }
  1696.  
  1697.                this.offgraphics.setColor(Color.black);
  1698.  
  1699.                for(int var49 = this.firstVisibleCol; var49 <= this.lastVisibleCol; ++var49) {
  1700.                   CFGRIDColProperties var18 = this.colProps.getProp(var49);
  1701.                   if ((var3 = var18.xBase + var18.width) > var10.width) {
  1702.                      break;
  1703.                   }
  1704.  
  1705.                   if (this.gridLines) {
  1706.                      this.offgraphics.drawLine(var3, 0, var3, var49 == this.colQty - 1 ? var11.height : var7);
  1707.                   } else {
  1708.                      this.offgraphics.drawLine(var3, 0, var3, var7);
  1709.                   }
  1710.                }
  1711.  
  1712.                for(int var50 = this.firstVisibleCol; var50 <= this.lastVisibleCol; ++var50) {
  1713.                   CFGRIDColProperties var19 = this.colProps.getProp(var50);
  1714.                   this.setTextAttributes(var19.headerAttri);
  1715.                   this.paintCell(0, var50, var19.xBase, 0);
  1716.                }
  1717.             } else if (this.lastVisibleCol == this.colQty - 1 && this.gridLines) {
  1718.                CFGRIDColProperties var2 = this.colProps.getProp(this.lastVisibleCol);
  1719.                if ((var3 = var2.xBase + var2.width) < var10.width) {
  1720.                   this.offgraphics.drawLine(var3, 0, var3, var11.height);
  1721.                }
  1722.             }
  1723.  
  1724.             if (this.rowHeaderDefined && this.gridRows > 0) {
  1725.                int var6 = this.colProps.getProp(0).width;
  1726.                this.offgraphics.setColor(Color.lightGray);
  1727.  
  1728.                for(int var51 = this.firstVisibleRow; var51 <= this.lastVisibleRow; ++var51) {
  1729.                   CFGRIDRow var32 = this.rowList.getRow(var51);
  1730.                   this.offgraphics.fillRect(0, var32.yBase, var6 - 1, var32.height);
  1731.                }
  1732.  
  1733.                this.offgraphics.setColor(Color.white);
  1734.  
  1735.                for(int var52 = this.firstVisibleRow; var52 <= this.lastVisibleRow; ++var52) {
  1736.                   var5 = this.rowList.getRow(var52).yBase;
  1737.                   this.offgraphics.drawLine(1, var5, var6 - 1, var5);
  1738.                }
  1739.  
  1740.                this.offgraphics.setColor(Color.gray);
  1741.  
  1742.                for(int var53 = this.firstVisibleRow; var53 <= this.lastVisibleRow; ++var53) {
  1743.                   CFGRIDRow var33 = this.rowList.getRow(var53);
  1744.                   var5 = var33.yBase + var33.height - 1;
  1745.                   this.offgraphics.drawLine(0, var5, var6 - 1, var5);
  1746.                }
  1747.  
  1748.                this.offgraphics.setColor(Color.black);
  1749.  
  1750.                for(int var54 = this.firstVisibleRow; var54 <= this.lastVisibleRow; ++var54) {
  1751.                   CFGRIDRow var34 = this.rowList.getRow(var54);
  1752.                   if ((var5 = var34.yBase + var34.height) > var10.height) {
  1753.                      break;
  1754.                   }
  1755.  
  1756.                   if (this.gridLines) {
  1757.                      this.offgraphics.drawLine(0, var5, var54 == this.rowQty - 1 ? var11.width : var6, var5);
  1758.                   } else {
  1759.                      this.offgraphics.drawLine(0, var5, var6, var5);
  1760.                   }
  1761.                }
  1762.  
  1763.                this.setTextAttributes(this.colProps.getProp(0).gridAttri);
  1764.  
  1765.                for(int var55 = this.firstVisibleRow; var55 <= this.lastVisibleRow; ++var55) {
  1766.                   this.paintCell(var55, 0, 0, this.rowList.getRow(var55).yBase);
  1767.                }
  1768.             } else if (this.lastVisibleRow == this.rowQty - 1) {
  1769.                CFGRIDRow var4 = this.rowList.getRow(this.lastVisibleRow);
  1770.                if ((var5 = var4.yBase + var4.height) < var10.height && this.gridLines) {
  1771.                   this.offgraphics.drawLine(0, var5, var11.width, var5);
  1772.                }
  1773.             }
  1774.  
  1775.             this.offgraphics.setColor(Color.gray);
  1776.             if (this.gridRows > 0 && this.gridCols > 0) {
  1777.                if (this.gridLines) {
  1778.                   var5 = this.rowList.getRow(this.firstVisibleRow).yBase;
  1779.  
  1780.                   for(int var56 = this.firstVisibleCol; var56 <= this.lastVisibleCol; ++var56) {
  1781.                      CFGRIDColProperties var20 = this.colProps.getProp(var56);
  1782.                      if ((var3 = var20.xBase + var20.width) > var11.width || var56 == this.colQty - 1) {
  1783.                         break;
  1784.                      }
  1785.  
  1786.                      this.offgraphics.drawLine(var3, var5, var3, var11.height - 1);
  1787.                   }
  1788.  
  1789.                   var3 = this.colProps.getProp(this.firstVisibleCol).xBase;
  1790.  
  1791.                   for(int var57 = this.firstVisibleRow; var57 <= this.lastVisibleRow; ++var57) {
  1792.                      CFGRIDRow var35 = this.rowList.getRow(var57);
  1793.                      if ((var5 = var35.yBase + var35.height) > var11.height || var57 == this.rowQty - 1) {
  1794.                         break;
  1795.                      }
  1796.  
  1797.                      this.offgraphics.drawLine(var3, var5, var11.width - 1, var5);
  1798.                   }
  1799.                }
  1800.  
  1801.                for(int var9 = this.firstVisibleCol; var9 <= this.lastVisibleCol; ++var9) {
  1802.                   CFGRIDColProperties var21 = this.colProps.getProp(var9);
  1803.                   this.setTextAttributes(var21.gridAttri);
  1804.  
  1805.                   for(int var58 = this.firstVisibleRow; var58 <= this.lastVisibleRow; ++var58) {
  1806.                      this.paintCell(var58, var9, var21.xBase, this.rowList.getRow(var58).yBase);
  1807.                   }
  1808.                }
  1809.             }
  1810.  
  1811.             if (this.gap == 2 && this.gridLines) {
  1812.                this.offgraphics.setColor(Color.black);
  1813.                if ((this.field_4.vert == null || !this.field_4.vert.isVisible()) && var11.width == var10.width) {
  1814.                   this.vertBorder = var11.height;
  1815.                   this.offgraphics.drawLine(var10.width - 1, 0, var10.width - 1, this.vertBorder);
  1816.                } else {
  1817.                   this.vertBorder = 0;
  1818.                }
  1819.  
  1820.                if ((this.field_4.horz == null || !this.field_4.horz.isVisible()) && var11.height == var10.height && !this.field_4.actionBar) {
  1821.                   this.horzBorder = var11.width;
  1822.                   this.offgraphics.drawLine(0, var10.height - 1, this.horzBorder, var10.height - 1);
  1823.                } else {
  1824.                   this.horzBorder = 0;
  1825.                }
  1826.             }
  1827.  
  1828.             var1.drawImage(this.offscreen, 0, 0, (ImageObserver)null);
  1829.             if (this.resizedCol >= 0) {
  1830.                var1.setColor(Color.black);
  1831.                var1.drawLine(this.resizedX, 0, this.resizedX, this.gridDisplayHeight);
  1832.             }
  1833.  
  1834.             return 0;
  1835.          }
  1836.       } else {
  1837.          return 0;
  1838.       }
  1839.    }
  1840.  
  1841.    private synchronized void resetElement(int var1, int var2) {
  1842.       if (this.editField != null && !this.editFieldOff) {
  1843.          this.setElement(this.editField.getText() == null ? "" : this.editField.getText(), var1, var2);
  1844.          if (this.field_4.caller != null) {
  1845.             this.field_4.caller.CFGRIDMessage(this.field_4, 550, this.getSelection());
  1846.          }
  1847.  
  1848.       }
  1849.    }
  1850.  
  1851.    private boolean rowOnDisplay(int var1) {
  1852.       return var1 >= this.firstVisibleRow && var1 <= this.lastVisibleRow;
  1853.    }
  1854.  
  1855.    private void fixUpdate(boolean var1, int var2) {
  1856.       if (var1) {
  1857.          this.normalized = false;
  1858.       }
  1859.  
  1860.       this.updateStatus |= var2;
  1861.       if (this.updateDisplay || (this.updateStatus & 4) == 4) {
  1862.          ((Component)this).repaint();
  1863.       }
  1864.  
  1865.    }
  1866.  
  1867.    synchronized void setUserRowAttribute(Object var1, int var2) {
  1868.       if (var2 >= 0) {
  1869.          var2 += this.firstGridRow;
  1870.          if (var2 < this.rowQty) {
  1871.             this.rowList.getRow(var2).userAttri = var1;
  1872.          }
  1873.       }
  1874.    }
  1875.  
  1876.    synchronized Object getUserRowAttribute(int var1) {
  1877.       if (var1 < 0) {
  1878.          return null;
  1879.       } else {
  1880.          var1 += this.firstGridRow;
  1881.          return var1 >= this.rowQty ? null : this.rowList.getRow(var1).userAttri;
  1882.       }
  1883.    }
  1884.  
  1885.    public synchronized void update(Graphics var1) {
  1886.       Dimension var2 = ((Component)this).size();
  1887.       if (this.offscreen != null && var2.width == this.offscreensize.width && var2.height == this.offscreensize.height && (this.updateStatus & 2) == 0) {
  1888.          if ((this.updateStatus & 1) != 0) {
  1889.             this.smallUpdate(var1);
  1890.          }
  1891.       } else {
  1892.          this.paint(var1);
  1893.       }
  1894.  
  1895.       this.updateStatus = 0;
  1896.    }
  1897.  
  1898.    public CFGRIDImage getImage(String var1) {
  1899.       int var2 = this.getImageNDX(var1);
  1900.       if (var2 < 0) {
  1901.          return null;
  1902.       } else {
  1903.          return this.imageObject[var2].invalid ? null : this.getImageResource(var2);
  1904.       }
  1905.    }
  1906.  
  1907.    synchronized void setColHeaderFont(Font var1, int var2) {
  1908.       if (this.colHeaderDefined && var2 >= 0) {
  1909.          var2 += this.firstGridCol;
  1910.          if (var2 < this.colQty) {
  1911.             this.colProps.getProp(var2).headerAttri.setFont(var1);
  1912.             this.fixUpdate(true, 2);
  1913.          }
  1914.       }
  1915.    }
  1916.  
  1917.    synchronized void setColHeaderFont(Font var1) {
  1918.       if (this.colHeaderDefined) {
  1919.          for(int var2 = this.firstGridCol; var2 < this.colQty; ++var2) {
  1920.             this.colProps.getProp(var2).headerAttri.setFont(var1);
  1921.          }
  1922.  
  1923.          this.fixUpdate(true, 2);
  1924.       }
  1925.    }
  1926.  
  1927.    synchronized void setRowHeaderFont(Font var1) {
  1928.       if (this.rowHeaderDefined && this.colQty != 0) {
  1929.          this.colProps.getProp(0).gridAttri.setFont(var1);
  1930.          this.fixUpdate(true, 2);
  1931.       }
  1932.    }
  1933.  
  1934.    synchronized void setGridFont(Font var1, int var2) {
  1935.       if (var2 >= 0) {
  1936.          var2 += this.firstGridCol;
  1937.          if (var2 < this.colQty) {
  1938.             this.colProps.getProp(var2).gridAttri.setFont(var1);
  1939.             this.fixUpdate(true, 2);
  1940.          }
  1941.       }
  1942.    }
  1943.  
  1944.    synchronized void setGridFont(Font var1) {
  1945.       if (this.rowQty != 0 || this.colQty != 0) {
  1946.          for(int var2 = this.firstGridCol; var2 < this.colQty; ++var2) {
  1947.             this.colProps.getProp(var2).gridAttri.setFont(var1);
  1948.          }
  1949.  
  1950.          this.fixUpdate(true, 2);
  1951.       }
  1952.    }
  1953.  
  1954.    private synchronized Point pickColumnHeaderCell(int var1, int var2) {
  1955.       if (this.resizedCol < 0 && this.gridRows > 0 && this.gridCols > 0 && var1 >= this.mainOrigo.x && var2 < this.mainOrigo.y) {
  1956.          int var3;
  1957.          for(var3 = this.firstVisibleCol; var3 <= this.lastVisibleCol && var1 > this.colProps.getProp(var3).xBase + this.colProps.getProp(var3).width; ++var3) {
  1958.          }
  1959.  
  1960.          if (var3 < this.colQty) {
  1961.             if (this.selectionMode == 105) {
  1962.                if (!this.editFieldOff) {
  1963.                   this.resetElement(this.editSelection.y - 1, this.rowHeaderDefined ? this.editSelection.x - 1 : this.editSelection.x);
  1964.                   this.editFieldOff = true;
  1965.                }
  1966.  
  1967.                this.hideEditColumn();
  1968.             }
  1969.  
  1970.             this.updateStatus |= 4;
  1971.             this.setReverseVideo(var3, this.firstGridRow, 1, this.rowQty);
  1972.             return new Point(var3, 0);
  1973.          }
  1974.       }
  1975.  
  1976.       return null;
  1977.    }
  1978.  
  1979.    private void paintCell(int var1, int var2, int var3, int var4) {
  1980.       int var6 = this.colProps.getProp(var2).width;
  1981.       int var7 = this.rowList.getRow(var1).height;
  1982.       CFGRIDCell var5;
  1983.       if ((var5 = this.getDisplayCell(var1, var2)) != null) {
  1984.          if (!this.isSelected(var1, var2)) {
  1985.             if (var5.dirty) {
  1986.                this.offgraphics.setColor(this.bgRegular);
  1987.                this.offgraphics.fillRect(var3, var4, var6, var7);
  1988.                this.offgraphics.setColor(this.textAttri.textColor);
  1989.             }
  1990.          } else {
  1991.             if (this.reversevideo) {
  1992.                this.offgraphics.setColor(Color.black);
  1993.             } else {
  1994.                this.offgraphics.setColor(this.selectionMode != 105 && this.selectionMode != 104 ? this.bgSelection : this.bgRegular);
  1995.             }
  1996.  
  1997.             this.offgraphics.fillRect(var3, var4, var6, var7);
  1998.             this.offgraphics.setColor(this.reversevideo ? Color.white : this.textAttri.textColor);
  1999.             if (this.selectionMode == 105 && !this.reversevideo) {
  2000.                Rectangle var8 = this.getEditSelection();
  2001.                Rectangle var9 = this.getEditSelectionRect(var8.y, var8.x);
  2002.                if (var9.x != this.editRectangle.x || var9.y != this.editRectangle.y || var9.width != this.editRectangle.width || var9.height != this.editRectangle.height) {
  2003.                   this.moveEditColumn(var8.y, var8.x);
  2004.                }
  2005.             }
  2006.          }
  2007.  
  2008.          if (var5.elem instanceof String) {
  2009.             String var16 = (String)var5.elem;
  2010.             CFGRIDImage var17 = null;
  2011.             int var10 = this.textAttri.horzMargin * 2;
  2012.             if (this.textAttri.image) {
  2013.                var17 = this.getImage(var16);
  2014.             }
  2015.  
  2016.             if (var17 == null) {
  2017.                if (this.textAttri.format != null && this.textAttri.formatType == 1) {
  2018.                   var16 = Format.formatNumber(var16, this.textAttri.format);
  2019.                }
  2020.  
  2021.                if (this.field_1.stringWidth(var16) + var10 > var6) {
  2022.                   int var18;
  2023.                   for(var18 = 1; this.field_1.stringWidth(var16.substring(0, var18)) + var10 <= var6; ++var18) {
  2024.                   }
  2025.  
  2026.                   var16 = var16.substring(0, var18 - 1);
  2027.                   var3 += this.textAttri.horzMargin;
  2028.                } else {
  2029.                   switch (this.textAttri.alignment) {
  2030.                      case 201:
  2031.                         var3 += (var6 - this.field_1.stringWidth(var16)) / 2;
  2032.                         break;
  2033.                      case 202:
  2034.                         var3 += this.textAttri.horzMargin;
  2035.                         break;
  2036.                      case 203:
  2037.                         var3 += var6 - this.field_1.stringWidth(var16) - this.textAttri.horzMargin;
  2038.                   }
  2039.                }
  2040.  
  2041.                var4 += var7;
  2042.                var4 -= this.field_3 + (var7 - (this.field_2 + this.field_3)) / 2;
  2043.                this.offgraphics.drawString(var16, var3, var4);
  2044.                if (this.textAttri.underline) {
  2045.                   this.offgraphics.drawLine(var3, var4 + 1, var3 + this.field_1.stringWidth(var16), var4 + 1);
  2046.                }
  2047.             } else {
  2048.                int var11 = var17.width;
  2049.                int var12 = var17.height;
  2050.                if (var11 + var10 > var6) {
  2051.                   var11 = var6;
  2052.                } else {
  2053.                   switch (this.textAttri.alignment) {
  2054.                      case 201:
  2055.                         var3 += (var6 - var11) / 2;
  2056.                         break;
  2057.                      case 202:
  2058.                         var3 += this.textAttri.horzMargin;
  2059.                         break;
  2060.                      case 203:
  2061.                         var3 += var6 - var11 - this.textAttri.horzMargin;
  2062.                   }
  2063.                }
  2064.  
  2065.                if (var12 > var7) {
  2066.                   var12 = var7;
  2067.                } else {
  2068.                   var4 += (var7 - var12) / 2;
  2069.                }
  2070.  
  2071.                if (var11 == var17.width && var12 == var17.height) {
  2072.                   this.offgraphics.drawImage(var17.image, var3, var4, (ImageObserver)null);
  2073.                } else {
  2074.                   Graphics var13 = this.offscreen.getGraphics();
  2075.                   var13.clipRect(var3, var4, var11, var12);
  2076.                   var13.drawImage(var17.image, var3, var4, (ImageObserver)null);
  2077.                   var13.dispose();
  2078.                }
  2079.             }
  2080.          }
  2081.  
  2082.          var5.dirty = false;
  2083.       }
  2084.  
  2085.    }
  2086.  
  2087.    synchronized void adjustSelection() {
  2088.       if (this.selection.width > 0 && this.selection.height > 0) {
  2089.          if (this.selection.x >= this.colQty || this.selection.y >= this.rowQty) {
  2090.             this.clearSelection();
  2091.             return;
  2092.          }
  2093.  
  2094.          if (this.selectionMode == 102) {
  2095.             this.selection.x = this.firstGridCol;
  2096.             this.selection.width = this.colQty;
  2097.             return;
  2098.          }
  2099.  
  2100.          if (this.selectionMode == 103) {
  2101.             this.selection.y = this.firstGridRow;
  2102.             this.selection.height = this.rowQty;
  2103.          }
  2104.       }
  2105.  
  2106.    }
  2107.  
  2108.    synchronized Rectangle getEditSelectionRect(int var1, int var2) {
  2109.       Dimension var3 = ((Component)this).size();
  2110.       var2 = this.rowHeaderDefined ? var2 + 1 : var2;
  2111.       int var4 = this.colProps.getProp(var2).xBase;
  2112.       int var5 = this.rowList.getRow(this.colHeaderDefined ? var1 + 1 : var1).yBase;
  2113.       int var6 = this.colProps.getProp(var2).width;
  2114.       int var7 = this.rowList.getRow(this.colHeaderDefined ? var1 + 1 : var1).height;
  2115.       if (var2 == this.lastVisibleCol && var4 + var6 > var3.width) {
  2116.          var6 = var3.width - var4;
  2117.       }
  2118.  
  2119.       return new Rectangle(var4, var5 - 2, var6, var7 + 5);
  2120.    }
  2121.  
  2122.    synchronized void setColHeaderHorzMargin(int var1, int var2) {
  2123.       if (this.colHeaderDefined && var1 >= 0) {
  2124.          var1 += this.firstGridCol;
  2125.          if (var1 < this.colQty) {
  2126.             this.colProps.getProp(var1).headerAttri.horzMargin = var2;
  2127.             this.fixUpdate(true, 2);
  2128.          }
  2129.       }
  2130.    }
  2131.  
  2132.    synchronized void setColHeaderHorzMargin(int var1) {
  2133.       if (this.colHeaderDefined) {
  2134.          for(int var2 = this.firstGridCol; var2 < this.colQty; ++var2) {
  2135.             this.colProps.getProp(var2).headerAttri.horzMargin = var1;
  2136.          }
  2137.  
  2138.          this.fixUpdate(true, 2);
  2139.       }
  2140.    }
  2141.  
  2142.    synchronized void setRowHeaderHorzMargin(int var1) {
  2143.       if (this.rowHeaderDefined) {
  2144.          this.colProps.getProp(0).gridAttri.horzMargin = var1;
  2145.          this.fixUpdate(true, 2);
  2146.       }
  2147.    }
  2148.  
  2149.    synchronized void setGridHorzMargin(int var1, int var2) {
  2150.       if (var1 >= 0) {
  2151.          var1 += this.firstGridCol;
  2152.          if (var1 < this.colQty) {
  2153.             this.colProps.getProp(var1).gridAttri.horzMargin = var2;
  2154.             this.fixUpdate(true, 2);
  2155.          }
  2156.       }
  2157.    }
  2158.  
  2159.    synchronized void setGridHorzMargin(int var1) {
  2160.       for(int var2 = this.firstGridCol; var2 < this.colQty; ++var2) {
  2161.          this.colProps.getProp(var2).gridAttri.horzMargin = var1;
  2162.       }
  2163.  
  2164.       this.fixUpdate(true, 2);
  2165.    }
  2166.  
  2167.    synchronized String getColHeaderElement(int var1) {
  2168.       if (this.colHeaderDefined && var1 >= 0) {
  2169.          var1 += this.firstGridCol;
  2170.          return var1 >= this.colQty ? null : (String)this.rowList.getRow(0).getCell(var1).get();
  2171.       } else {
  2172.          return null;
  2173.       }
  2174.    }
  2175.  
  2176.    synchronized void setColHeaderElement(String var1, int var2) {
  2177.       if (this.colHeaderDefined && var2 >= 0) {
  2178.          var2 += this.firstGridCol;
  2179.          if (var2 < this.colQty) {
  2180.             if (this.rowList.getRow(0).getCell(var2) == null) {
  2181.                this.rowList.getRow(0).setCell(0, var2);
  2182.             }
  2183.  
  2184.             this.rowList.getRow(0).getCell(var2).set(var1);
  2185.             this.fixUpdate(true, 2);
  2186.          }
  2187.       }
  2188.    }
  2189.  
  2190.    synchronized String getRowHeaderElement(int var1) {
  2191.       if (this.rowHeaderDefined && var1 >= 0) {
  2192.          var1 += this.firstGridRow;
  2193.          return var1 >= this.rowQty ? null : (String)this.rowList.getRow(var1).getCell(0).get();
  2194.       } else {
  2195.          return null;
  2196.       }
  2197.    }
  2198.  
  2199.    synchronized void setRowHeaderElement(String var1, int var2) {
  2200.       if (this.rowHeaderDefined && var2 >= 0) {
  2201.          var2 += this.firstGridRow;
  2202.          if (var2 < this.rowQty) {
  2203.             if (this.rowList.getRow(var2).getCell(0) == null) {
  2204.                this.rowList.getRow(var2).setCell(var2, 0);
  2205.             }
  2206.  
  2207.             this.rowList.getRow(var2).getCell(0).set(var1);
  2208.             if (this.rowOnDisplay(var2)) {
  2209.                this.fixUpdate(true, 2);
  2210.             }
  2211.  
  2212.          }
  2213.       }
  2214.    }
  2215.  
  2216.    private boolean isSelected(int var1, int var2) {
  2217.       return var2 >= this.selection.x && var2 < this.selection.x + this.selection.width && var1 >= this.selection.y && var1 < this.selection.y + this.selection.height;
  2218.    }
  2219.  
  2220.    public void paint(Graphics var1) {
  2221.       if (!this.fastPaintOK(var1)) {
  2222.          int var2 = this.innerPaint(var1);
  2223.          if (var2 > 0 && this.field_4.caller != null && this.field_4.caller.CFGRIDMessage(this.field_4, 540, (Rectangle)null)) {
  2224.             this.field_4.updateGridDisplay(true);
  2225.          }
  2226.  
  2227.       }
  2228.    }
  2229.  
  2230.    private synchronized void moveEditColumn(int var1, int var2) {
  2231.       if (this.editField != null) {
  2232.          int var3 = this.editField.getSelectionStart();
  2233.          int var4 = this.editField.getSelectionEnd();
  2234.          this.editRectangle = this.getEditSelectionRect(var1, var2);
  2235.          this.editField.reshape(this.editRectangle.x, this.editRectangle.y, this.editRectangle.width, this.editRectangle.height);
  2236.          if (this.editSelectionChanged) {
  2237.             this.editField.selectAll();
  2238.             this.editSelectionChanged = false;
  2239.          } else {
  2240.             this.editField.select(var3, var4);
  2241.          }
  2242.  
  2243.          this.editField.requestFocus();
  2244.          this.editField.validate();
  2245.       }
  2246.    }
  2247.  
  2248.    private synchronized void hideEditColumn() {
  2249.       if (this.editField != null) {
  2250.          if (this.editRectangle.width != 0 || this.editRectangle.height != 0) {
  2251.             this.editRectangle.x = 0;
  2252.             this.editRectangle.y = 0;
  2253.             this.editRectangle.width = 0;
  2254.             this.editRectangle.height = 0;
  2255.             this.editField.reshape(this.editRectangle.x, this.editRectangle.y, this.editRectangle.width, this.editRectangle.height);
  2256.          }
  2257.       }
  2258.    }
  2259.  
  2260.    synchronized void setColFormat(String var1, int var2, int var3) {
  2261.       if (var1 != null) {
  2262.          if (var3 >= 0) {
  2263.             var3 += this.firstGridCol;
  2264.             if (var3 < this.colQty) {
  2265.                this.colProps.getProp(var3).gridAttri.setFormat(var1, var2);
  2266.                this.fixUpdate(true, 2);
  2267.             }
  2268.          }
  2269.       }
  2270.    }
  2271.  
  2272.    synchronized void setSelectionMode(int var1) {
  2273.       if (var1 == 101 || var1 == 102 || var1 == 103 || var1 == 104 || var1 == 105) {
  2274.          this.selectionMode = var1;
  2275.          this.selection.width = this.selection.height = 0;
  2276.       }
  2277.  
  2278.    }
  2279.  
  2280.    private void fixOffscreenBuffer(Dimension var1) {
  2281.       if (this.offscreen == null || var1.width != this.offscreensize.width || var1.height != this.offscreensize.height) {
  2282.          this.offscreen = ((Component)this).createImage(var1.width, var1.height);
  2283.          this.offscreensize = var1;
  2284.          this.offgraphics = this.offscreen.getGraphics();
  2285.          this.normalized = false;
  2286.       }
  2287.  
  2288.    }
  2289.  
  2290.    protected void finalize() {
  2291.       if (this.offgraphics != null) {
  2292.          this.offgraphics.dispose();
  2293.       }
  2294.  
  2295.    }
  2296.  
  2297.    private int getImageNDX(String var1) {
  2298.       int var2 = -1;
  2299.  
  2300.       for(int var3 = 0; var3 < this.numimages; ++var3) {
  2301.          if (var1.equalsIgnoreCase(this.imageObject[var3].getName())) {
  2302.             var2 = var3;
  2303.             break;
  2304.          }
  2305.       }
  2306.  
  2307.       return var2;
  2308.    }
  2309.  
  2310.    private void markDirty(Rectangle var1) {
  2311.       if (this.gridRows != 0 && this.gridCols != 0 && var1.width != 0 && var1.height != 0) {
  2312.          int var2 = var1.y + var1.height;
  2313.          int var3 = var1.x + var1.width;
  2314.          if (var2 > this.rowQty) {
  2315.             var2 = this.rowQty;
  2316.          }
  2317.  
  2318.          if (var3 > this.colQty) {
  2319.             var3 = this.colQty;
  2320.          }
  2321.  
  2322.          for(int var4 = var1.x; var4 < var3; ++var4) {
  2323.             for(int var5 = var1.y; var5 < var2; ++var5) {
  2324.                CFGRIDCell var6 = this.rowList.getRow(var5).getCell(var4);
  2325.                if (var6 == null) {
  2326.                   this.rowList.getRow(var5).setCell(var5, var4);
  2327.                   var6 = this.rowList.getRow(var5).getCell(var4);
  2328.                }
  2329.  
  2330.                var6.dirty = true;
  2331.             }
  2332.          }
  2333.  
  2334.       }
  2335.    }
  2336.  
  2337.    synchronized void setColUnderline(boolean var1, int var2) {
  2338.       if (var2 >= 0) {
  2339.          var2 += this.firstGridCol;
  2340.          if (var2 < this.colQty) {
  2341.             this.colProps.getProp(var2).gridAttri.setUnderline(var1);
  2342.             this.fixUpdate(true, 2);
  2343.          }
  2344.       }
  2345.    }
  2346.  
  2347.    synchronized void updateGridDisplay(boolean var1) {
  2348.       if (this.updateDisplay = var1) {
  2349.          this.fixUpdate(true, 2);
  2350.       }
  2351.  
  2352.    }
  2353.  
  2354.    synchronized void setRows(int var1) {
  2355.       if (var1 >= 0) {
  2356.          var1 += this.firstGridRow;
  2357.          if (var1 != this.rowQty) {
  2358.             for(int var3 = this.rowQty; var3 < var1; ++var3) {
  2359.                CFGRIDRow var2 = new CFGRIDRow();
  2360.                ((Vector)var2).setSize(this.colQty);
  2361.                this.rowList.addElement(var2);
  2362.             }
  2363.  
  2364.             this.rowQty = this.gridRows = var1;
  2365.             this.gridRows -= this.firstGridRow;
  2366.             this.rowList.setSize(this.rowQty);
  2367.             if (this.firstVisibleRow >= this.rowQty) {
  2368.                this.firstVisibleRow = this.firstGridRow;
  2369.             }
  2370.  
  2371.             this.adjustSelection();
  2372.             this.fixUpdate(true, 2);
  2373.          }
  2374.       }
  2375.    }
  2376.  
  2377.    synchronized int getDataType(int var1) {
  2378.       return var1 >= this.colQty ? 0 : this.colProps.getProp(this.rowHeaderDefined ? var1 + 1 : var1).gridAttri.dataType;
  2379.    }
  2380. }
  2381.