X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.spreadsheet.ui%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fui%2FSpreadsheetTableUI.java;h=6f533410385773c99442c918d43288ebee1b6e3c;hb=5915c1bbd6d0c6125aa3c815c7843339190f28e4;hp=c4e5d776c88af65e25eb41b62e0acebe3fc4c2e6;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/SpreadsheetTableUI.java b/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/SpreadsheetTableUI.java index c4e5d776c..6f5334103 100644 --- a/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/SpreadsheetTableUI.java +++ b/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/SpreadsheetTableUI.java @@ -1,73 +1,73 @@ -package org.simantics.spreadsheet.ui; - -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import javax.swing.JComponent; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicTableUI; -import javax.swing.table.TableCellRenderer; - -import org.simantics.spreadsheet.ClientModel; - -public class SpreadsheetTableUI extends BasicTableUI { - - @Override - public void paint(Graphics g, JComponent c) { - SpreadsheetTable t = ((SpreadsheetTable)table); - ClientModel clientModel = t.getClientModel(); - if (clientModel == null) return; - - Rectangle clip = g.getClipBounds(); - - Point corner0 = new Point(clip.x, clip.y); - Point corner1 = new Point(new Point(clip.x + clip.width - 1, clip.y + clip.height - 1)); - - int row0 = t.rowAtPointWithoutSpan(corner0); - if (row0 == -1) row0 = 0; - - int row1 = t.rowAtPointWithoutSpan(corner1); - if (row1 == -1) row1 = t.getRowCount() - 1; - - int col0 = t.columnAtPointWithoutSpan(corner0); - if (col0 == -1) col0 = 0; - - int col1 = t.columnAtPointWithoutSpan(corner1); - if (col1 == -1) col1 = t.getColumnCount() - 1; - - for (int row = row0; row <= row1; row++) { - for (int col = col0; col <= col1; col++) { - Rectangle span = clientModel.getSpan(row, col); - if (span == null) { - paintCell(row, col, g, t.getCellRect(row, col, true)); - } else if ((col == span.x) && (row == span.y)) { - paintCell(span.y, span.x, g, t.getCellRect(span.y, span.x, true)); - } else if ((row == row0) || (col == col0)) { - // this condition is not optimal as it draws multi-span boundary cells many times - paintCell(span.y, span.x, g, t.getCellRect(span.y, span.x, true)); - } - } - } - } - - private void paintCell(int row, int column, Graphics g, Rectangle rect) { - if (table.isEditing() && (table.getEditingRow() == row) && (table.getEditingColumn() == column)) { - Component component = table.getEditorComponent(); - component.setBounds(rect); - component.validate(); - } else { - TableCellRenderer renderer = table.getCellRenderer(row, column); - Component component = table.prepareRenderer(renderer, row, column); - if (component.getParent() == null) { - rendererPane.add(component); - } - rendererPane.paintComponent(g, component, table, rect.x, rect.y, rect.width, rect.height, false); - } - } - - public static ComponentUI createUI(JComponent c) { - return new SpreadsheetTableUI(); - } -} +package org.simantics.spreadsheet.ui; + +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.Rectangle; + +import javax.swing.JComponent; +import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.basic.BasicTableUI; +import javax.swing.table.TableCellRenderer; + +import org.simantics.spreadsheet.ClientModel; + +public class SpreadsheetTableUI extends BasicTableUI { + + @Override + public void paint(Graphics g, JComponent c) { + SpreadsheetTable t = ((SpreadsheetTable)table); + ClientModel clientModel = t.getClientModel(); + if (clientModel == null) return; + + Rectangle clip = g.getClipBounds(); + + Point corner0 = new Point(clip.x, clip.y); + Point corner1 = new Point(new Point(clip.x + clip.width - 1, clip.y + clip.height - 1)); + + int row0 = t.rowAtPointWithoutSpan(corner0); + if (row0 == -1) row0 = 0; + + int row1 = t.rowAtPointWithoutSpan(corner1); + if (row1 == -1) row1 = t.getRowCount() - 1; + + int col0 = t.columnAtPointWithoutSpan(corner0); + if (col0 == -1) col0 = 0; + + int col1 = t.columnAtPointWithoutSpan(corner1); + if (col1 == -1) col1 = t.getColumnCount() - 1; + + for (int row = row0; row <= row1; row++) { + for (int col = col0; col <= col1; col++) { + Rectangle span = clientModel.getSpan(row, col); + if (span == null) { + paintCell(row, col, g, t.getCellRect(row, col, true)); + } else if ((col == span.x) && (row == span.y)) { + paintCell(span.y, span.x, g, t.getCellRect(span.y, span.x, true)); + } else if ((row == row0) || (col == col0)) { + // this condition is not optimal as it draws multi-span boundary cells many times + paintCell(span.y, span.x, g, t.getCellRect(span.y, span.x, true)); + } + } + } + } + + private void paintCell(int row, int column, Graphics g, Rectangle rect) { + if (table.isEditing() && (table.getEditingRow() == row) && (table.getEditingColumn() == column)) { + Component component = table.getEditorComponent(); + component.setBounds(rect); + component.validate(); + } else { + TableCellRenderer renderer = table.getCellRenderer(row, column); + Component component = table.prepareRenderer(renderer, row, column); + if (component.getParent() == null) { + rendererPane.add(component); + } + rendererPane.paintComponent(g, component, table, rect.x, rect.y, rect.width, rect.height, false); + } + } + + public static ComponentUI createUI(JComponent c) { + return new SpreadsheetTableUI(); + } +}