mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
Merge remote-tracking branch 'origin/GT-3207-dragonmacher-table-header-npe' into Ghidra_9.1
This commit is contained in:
commit
dabaa34e92
3 changed files with 138 additions and 4 deletions
|
@ -63,12 +63,14 @@ public class SettingsDialog extends DialogComponentProvider {
|
|||
this.settingsDefs = newSettingsDefs;
|
||||
this.settings = newSettings;
|
||||
setTitle(title);
|
||||
settingsTableModel.fireTableDataChanged();
|
||||
|
||||
settingsTableModel.setSettingsDefinitions(settingsDefs);
|
||||
DockingWindowManager.showDialog(parent, this);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
settingsTable.editingStopped(null);
|
||||
settingsTable.dispose();
|
||||
|
||||
close();
|
||||
settingsDefs = null;
|
||||
|
@ -79,7 +81,7 @@ public class SettingsDialog extends DialogComponentProvider {
|
|||
JPanel workPanel = new JPanel(new BorderLayout());
|
||||
workPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
|
||||
|
||||
settingsTableModel = new SettingsTableModel(settingsDefs);
|
||||
settingsTableModel = new SettingsTableModel();
|
||||
settingsTable = new GTable(settingsTableModel);
|
||||
settingsTable.setAutoscrolls(true);
|
||||
settingsTable.setRowSelectionAllowed(false);
|
||||
|
@ -106,6 +108,10 @@ public class SettingsDialog extends DialogComponentProvider {
|
|||
dispose();
|
||||
}
|
||||
|
||||
public GTable getTable() {
|
||||
return settingsTable;
|
||||
}
|
||||
|
||||
//==================================================================================================
|
||||
// Private Methods
|
||||
//==================================================================================================
|
||||
|
@ -161,10 +167,12 @@ public class SettingsDialog extends DialogComponentProvider {
|
|||
|
||||
private List<SettingsRowObject> rows = new ArrayList<>();
|
||||
|
||||
SettingsTableModel(SettingsDefinition[] settingsDefs) {
|
||||
void setSettingsDefinitions(SettingsDefinition[] settingsDefs) {
|
||||
for (SettingsDefinition sd : settingsDefs) {
|
||||
rows.add(new SettingsRowObject(sd));
|
||||
}
|
||||
|
||||
settingsTableModel.fireTableDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -203,6 +211,17 @@ public class SettingsDialog extends DialogComponentProvider {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getColumnClass(int col) {
|
||||
switch (col) {
|
||||
case 0:
|
||||
return String.class;
|
||||
case 1:
|
||||
return Settings.class;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getColumnValueForRow(SettingsRowObject t, int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
|
|
|
@ -32,6 +32,7 @@ import java.util.regex.Pattern;
|
|||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.text.JTextComponent;
|
||||
import javax.swing.tree.*;
|
||||
|
||||
|
@ -1307,6 +1308,36 @@ public abstract class AbstractGenericTest extends AbstractGTest {
|
|||
return editor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the rendered value for the specified table cell. The actual value at the cell may
|
||||
* not be a String. This method will get the String display value, as created by the table.
|
||||
*
|
||||
* @param table the table to query
|
||||
* @param row the row to query
|
||||
* @param column the column to query
|
||||
* @return the String value
|
||||
* @throws IllegalArgumentException if there is no renderer or the rendered component is
|
||||
* something from which this method can get a String (such as a JLabel)
|
||||
*/
|
||||
public static String getRenderedTableCellValue(JTable table, int row, int column) {
|
||||
|
||||
return runSwing(() -> {
|
||||
|
||||
TableCellRenderer renderer = table.getCellRenderer(row, column);
|
||||
if (renderer == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"No renderer registered for row/col: " + row + '/' + column);
|
||||
}
|
||||
Component component = table.prepareRenderer(renderer, row, column);
|
||||
if (!(component instanceof JLabel)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Do not know how to get text from a renderer " + "that is not a JLabel");
|
||||
}
|
||||
|
||||
return ((JLabel) component).getText();
|
||||
});
|
||||
}
|
||||
|
||||
public static <T> void setComboBoxSelection(final JComboBox<T> comboField, final T selection) {
|
||||
runSwing(() -> comboField.setSelectedItem(selection));
|
||||
waitForSwing();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue