diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/Bundle.properties b/db.dataview/src/org/netbeans/modules/db/dataview/output/Bundle.properties --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/Bundle.properties +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/Bundle.properties @@ -190,3 +190,4 @@ DataViewUI_TrimmedTabName={0}... DataViewUI_ShowTruncateTableButton=Show Truncate Table +DataViewUI_ShowAbsoluteRowNumbers=Show absolute row numbers \ No newline at end of file diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java @@ -104,12 +104,15 @@ private JXLabel limitRow; private JXButton[] editButtons = new JXButton[5]; private DataViewTableUI dataPanel; + private JXTableRowHeader rowHeader; private JScrollPane dataPanelScrollPane; private final DataViewPageContext pageContext; private JXButton cancel; private DataViewActionHandler actionHandler; private String imgPrefix = "/org/netbeans/modules/db/dataview/images/"; // NOI18N + private boolean showAbsoluteRowNumbers = DataViewSettings.getShowAbsoluteRowNumbers(); + private static final int MAX_TAB_LENGTH = 25; private final PropertyChangeListener pageContextListener = @@ -117,6 +120,7 @@ @Override public void propertyChange(PropertyChangeEvent evt) { updateTotalCountLabel(); + updateRowOffset(); } }; @@ -174,7 +178,8 @@ //add resultset data panel dataPanel = new DataViewTableUI(this, actionHandler, dataView, pageContext); dataPanelScrollPane = new JScrollPane(dataPanel); - JXTableRowHeader rowHeader = new JXTableRowHeader(dataPanel); + rowHeader = new JXTableRowHeader(dataPanel); + rowHeader.getHeaderTable().addMouseListener(createRowHeaderMouseListener()); dataPanelScrollPane.setRowHeaderView(rowHeader); dataPanelScrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, rowHeader.getTableHeader()); @@ -185,6 +190,7 @@ dataPanel.setModel(pageContext.getModel()); pageContext.addPropertyChangeListener(pageContextListener); updateTotalCountLabel(); + updateRowOffset(); } void handleColumnUpdated() { @@ -213,6 +219,10 @@ } } + final void updateRowOffset() { + rowHeader.updateRowOffset(showAbsoluteRowNumbers ? pageContext.getCurrentPos() - 1 : 0); + } + boolean isCommitEnabled() { return commit.isEnabled(); } @@ -369,6 +379,28 @@ return outputListener; } + + private MouseListener createRowHeaderMouseListener() { + final JPopupMenu popupMenu = new JPopupMenu(); + final JCheckBoxMenuItem absoluteRowNumbers = new JCheckBoxMenuItem(NbBundle.getMessage(DataViewTableUI.class, "DataViewUI_ShowAbsoluteRowNumbers")); + absoluteRowNumbers.setSelected(showAbsoluteRowNumbers); + absoluteRowNumbers.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + showAbsoluteRowNumbers = !showAbsoluteRowNumbers; + updateRowOffset(); + } + }); + popupMenu.add(absoluteRowNumbers); + + return new MouseUtils.PopupMouseAdapter() { + @Override + protected void showPopup(MouseEvent e) { + popupMenu.show(rowHeader, e.getX(), e.getY()); + } + }; + } + private static final Insets BUTTON_INSETS = new Insets(2, 1, 0, 1); private void processButton(AbstractButton button) { diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/table/JXTableRowHeader.java b/db.dataview/src/org/netbeans/modules/db/dataview/table/JXTableRowHeader.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/table/JXTableRowHeader.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/table/JXTableRowHeader.java @@ -93,6 +93,7 @@ private static class CountingTableModel implements TableModel { private int count; + private int rowOffset; Set listeners = new HashSet(); @@ -106,6 +107,14 @@ } } } + + public int getRowOffset() { + return rowOffset; + } + + public void setRowOffset(int rowOffset) { + this.rowOffset = rowOffset; + } @Override public void addTableModelListener(TableModelListener tl) { @@ -134,7 +143,7 @@ @Override public Object getValueAt(int row, int col) { - return Integer.toString(row + 1); + return Integer.toString(rowOffset + row + 1); } @Override @@ -252,6 +261,7 @@ comp.setBackground(UIManager.getColor("Table.selectionBackground")); comp.setForeground(UIManager.getColor("Table.selectionForeground")); } + ((JComponent) comp).setToolTipText((String) value); return comp; } } @@ -333,4 +343,15 @@ public String getToolTipText(MouseEvent event) { return headerTable.getToolTipText(event); } + + public JXTable getHeaderTable() { + return headerTable; + } + + public void updateRowOffset(int rowOffset) { + if (rowOffset != ctm.getRowOffset()) { + ctm.setRowOffset(rowOffset); + headerTable.repaint(); + } + } }