Skip to content

Commit 741f362

Browse files
authored
Merge pull request #331 from bls337/main
improve robustness of channel table
2 parents b667337 + 07e9ad0 commit 741f362

File tree

3 files changed

+40
-20
lines changed

3 files changed

+40
-20
lines changed

src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,15 +151,13 @@ private void createUserInterface() {
151151
Button.setDefaultSize(140, 30);
152152
btnRunOverviewAcq_ = new Button("Overview Acquisition");
153153

154-
cbxUseChannels_ = new CheckBox(
155-
"Channels", acqSettings.isUsingChannels());
154+
final boolean isUsingChannels = acqSettings.isUsingChannels();
155+
cbxUseChannels_ = new CheckBox("Channels", isUsingChannels);
156156
pnlChannelTable_ = new ChannelTablePanel(model_, cbxUseChannels_);
157157
pnlChannelTable_.setMaximumSize(new Dimension(270, 400));
158158

159159
// disable elements based on acqSettings
160-
if (!acqSettings.isUsingChannels()) {
161-
pnlChannelTable_.setItemsEnabled(false);
162-
}
160+
pnlChannelTable_.setItemsEnabled(isUsingChannels);
163161

164162
// acquisition mode combo box
165163
final boolean isUsingScanSettings = model_.devices().isUsingStageScanning();

src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTable.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,11 @@ public ChannelTable(final LightSheetManager model) {
3939
table_ = new JTable(tableModel_);
4040

4141
// init presets combo box
42-
TableColumn column = table_.getColumnModel().getColumn(1);
4342
cmbPresets_ = new JComboBox<>();
44-
45-
// update presets
4643
updatePresetComboBoxes(channelGroup);
4744

45+
// set the editor
46+
TableColumn column = table_.getColumnModel().getColumn(1);
4847
column.setCellEditor(new DefaultCellEditor(cmbPresets_));
4948

5049
// cancel JTable edits when focus is lost to prevent errors

src/main/java/org/micromanager/lightsheetmanager/gui/tabs/channels/ChannelTableModel.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
public class ChannelTableModel extends AbstractTableModel {
1010

11+
// column constants
12+
private static final int COLUMN_USE = 0;
13+
private static final int COLUMN_PRESET = 1;
14+
private static final int COLUMN_OFFSET = 2;
15+
1116
/**Column names for the channels table. */
1217
private final String[] columnNames_ = {
1318
"Use",
@@ -27,13 +32,23 @@ public int getRowCount() {
2732
}
2833

2934
@Override
30-
public Class<?> getColumnClass(int c) {
31-
return getValueAt(0, c).getClass();
35+
public int getColumnCount() {
36+
return columnNames_.length;
3237
}
3338

3439
@Override
35-
public int getColumnCount() {
36-
return columnNames_.length;
40+
public Class<?> getColumnClass(int c) {
41+
switch (c) {
42+
case COLUMN_USE:
43+
return Boolean.class;
44+
case COLUMN_PRESET:
45+
return String.class;
46+
case COLUMN_OFFSET:
47+
return Double.class;
48+
default:
49+
// Note: This will never happen if getColumnCount is correct.
50+
throw new IllegalArgumentException("Invalid column index: " + c);
51+
}
3752
}
3853

3954
@Override
@@ -48,13 +63,13 @@ public boolean isCellEditable(int row, int col) {
4863

4964
@Override
5065
public Object getValueAt(int row, int col) {
51-
ChannelSpec channelSpec = tableData_.getChannelByIndex(row);
66+
final ChannelSpec channelSpec = tableData_.getChannelByIndex(row);
5267
switch (col) {
53-
case 0:
68+
case COLUMN_USE:
5469
return channelSpec.isUsed();
55-
case 1:
70+
case COLUMN_PRESET:
5671
return channelSpec.getName();
57-
case 2:
72+
case COLUMN_OFFSET:
5873
return channelSpec.getOffset();
5974
default:
6075
throw new IllegalArgumentException("Invalid column index: " + col);
@@ -63,26 +78,34 @@ public Object getValueAt(int row, int col) {
6378

6479
@Override
6580
public void setValueAt(Object value, int row, int col) {
66-
ChannelSpec channelSpec = tableData_.getChannelByIndex(row);
81+
final ChannelSpec channelSpec = tableData_.getChannelByIndex(row);
6782
switch (col) {
68-
case 0:
83+
case COLUMN_USE:
6984
if (value instanceof Boolean) {
7085
channelSpec.setUsed((boolean) value);
86+
} else {
87+
return; // early exit => wrong type
7188
}
7289
break;
73-
case 1:
90+
case COLUMN_PRESET:
7491
if (value instanceof String) {
7592
channelSpec.setName((String) value);
93+
} else {
94+
return; // early exit => wrong type
7695
}
7796
break;
78-
case 2:
97+
case COLUMN_OFFSET:
7998
if (value instanceof Double) {
8099
channelSpec.setOffset((double) value);
100+
} else {
101+
return; // early exit => wrong type
81102
}
82103
break;
83104
default:
84105
throw new IllegalArgumentException("Invalid column index: " + col);
85106
}
107+
108+
// update the table ui
86109
fireTableCellUpdated(row, col);
87110
}
88111

0 commit comments

Comments
 (0)