From cb2108482b0a0ad4daac12da7a4791fc52a428f2 Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Thu, 26 Oct 2023 12:30:44 -0400 Subject: [PATCH] GP-3931 - Fixed rendering of table boolean cells to show as disabled when not editable --- .../widgets/table/GBooleanCellRenderer.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GBooleanCellRenderer.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GBooleanCellRenderer.java index 386d5e81f9..bd1f7b3c5e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GBooleanCellRenderer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GBooleanCellRenderer.java @@ -17,6 +17,8 @@ package docking.widgets.table; import java.awt.*; +import javax.swing.JTable; + import docking.widgets.checkbox.GCheckBox; public class GBooleanCellRenderer extends GTableCellRenderer { @@ -37,8 +39,15 @@ public class GBooleanCellRenderer extends GTableCellRenderer { super.getTableCellRendererComponent(data); Object value = data.getValue(); - cb.setEnabled(true); - setValue(value); + + JTable table = data.getTable(); + int row = data.getRowViewIndex(); + int col = data.getColumnViewIndex(); + boolean isEditable = table.isCellEditable(row, col); + + cb.setEnabled(isEditable); + setValue(value, isEditable); + return this; } @@ -73,14 +82,7 @@ public class GBooleanCellRenderer extends GTableCellRenderer { return cb.getPreferredSize(); } - /** - * Sets the Boolean object for the cell being rendered to - * value. - * - * @param value the boolean value for this cell; if value is - * null it sets the text value "N/A" - */ - protected void setValue(Object value) { + protected void setValue(Object value, boolean isEditable) { if (value == null) { setText("N/A"); cb.setVisible(false); @@ -88,7 +90,9 @@ public class GBooleanCellRenderer extends GTableCellRenderer { else { setText(""); cb.setVisible(true); - cb.setSelected(((Boolean) value).booleanValue()); + boolean isSelected = ((Boolean) value).booleanValue(); + cb.setSelected(isSelected); + setToolTipText(isSelected ? "true" : "false" + (!isEditable ? " (uneditable)" : "")); } } }