Skip to content

Commit 27ae847

Browse files
Add Tabs to ImageJ Plugin
1 parent 4ce46d6 commit 27ae847

File tree

4 files changed

+52
-37
lines changed

4 files changed

+52
-37
lines changed

view-simulation-results/src/main/java/org/vcell/N5/UI/ControlButtonsPanel.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public class ControlButtonsPanel extends JPanel implements ActionListener {
2222
// private final JButton openLocal = new JButton("Open N5 Local");
2323
private final JButton questionMark;
2424

25-
public final JCheckBox includeExampleExports;
2625
public final JCheckBox displayAdvancedFeatures;
2726

2827
private N5ExportTable n5ExportTable;
@@ -31,9 +30,6 @@ public class ControlButtonsPanel extends JPanel implements ActionListener {
3130
private PanelState panelState = PanelState.NOTHING_OR_LOADING_IMAGE;
3231

3332
public ControlButtonsPanel(){
34-
includeExampleExports = new JCheckBox("Show Example Exports");
35-
includeExampleExports.setSelected(!N5ImageHandler.exportedDataExists());
36-
3733
displayAdvancedFeatures = new JCheckBox("Advanced Features");
3834

3935
openOrCancel = new JButton("Open Virtual Stack");
@@ -54,7 +50,6 @@ public ControlButtonsPanel(){
5450

5551

5652
JPanel bottomRow = new JPanel(new GridBagLayout());
57-
bottomRow.add(includeExampleExports);
5853
gridBagConstraints.gridx = 1;
5954
bottomRow.add(displayAdvancedFeatures, gridBagConstraints);
6055
gridBagConstraints.gridx = 2;
@@ -86,7 +81,6 @@ public ControlButtonsPanel(){
8681
questionMark.addActionListener(this);
8782
advancedFeatures.useN5Link.addActionListener(this);
8883
// openLocal.addActionListener(this);
89-
includeExampleExports.addActionListener(this);
9084
displayAdvancedFeatures.addActionListener(this);
9185
dataReduction.addActionListener(this);
9286
advancedFeatures.openInMemory.addActionListener(this);
@@ -130,8 +124,6 @@ public void actionPerformed(ActionEvent e) {
130124
new HelpExplanation().displayHelpMenu();
131125
} else if (e.getSource().equals(advancedFeatures.useN5Link)) {
132126
remoteFileSelection.setVisible(true);
133-
} else if (e.getSource().equals(includeExampleExports)){
134-
n5ExportTable.updateTableData();
135127
} else if (e.getSource().equals(displayAdvancedFeatures)) {
136128
advancedFeatures.setVisible(displayAdvancedFeatures.isSelected());
137129
}

view-simulation-results/src/main/java/org/vcell/N5/UI/Filters/TimeFilter.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,6 @@ public TimeFilter(){
5757
public void actionPerformed(ActionEvent e) {
5858
if (e.getSource().equals(anyInterval) || e.getSource().equals(todayInterval)
5959
|| e.getSource().equals(monthInterval) || e.getSource().equals(yearlyInterval)) {
60-
if(MainPanel.controlButtonsPanel.includeExampleExports.isSelected()){
61-
n5ExportTable.updateTableData();
62-
return;
63-
}
6460
n5ExportTable.updateTableData();
6561
}
6662
}

view-simulation-results/src/main/java/org/vcell/N5/UI/N5ExportTable.java

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import org.vcell.N5.retrieving.SimResultsLoader;
1010

1111
import javax.swing.*;
12-
import javax.swing.border.Border;
13-
import javax.swing.border.EtchedBorder;
1412
import javax.swing.event.ListSelectionEvent;
1513
import javax.swing.event.ListSelectionListener;
1614
import javax.swing.table.AbstractTableModel;
@@ -24,14 +22,16 @@
2422
import java.util.*;
2523
import java.util.concurrent.TimeUnit;
2624

27-
public class N5ExportTable extends JScrollPane implements ListSelectionListener, SimLoadingListener {
28-
public N5ExportTableModel n5ExportTableModel;
25+
public class N5ExportTable extends JTabbedPane implements ListSelectionListener, SimLoadingListener {
26+
private N5ExportTableModel n5ExportTableModel;
2927
private JTable exportListTable;
30-
31-
private final Border lowerEtchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
32-
private final Border exampleBorder = BorderFactory.createTitledBorder(lowerEtchedBorder, "Example Exports");
28+
private JTable exampleExportListTable;
3329
private final Map<Integer, String> loadingRowsJobID = new HashMap<>();
3430

31+
private final JScrollPane personalExportsPanel = new JScrollPane();
32+
private final JScrollPane exampleExportsPanel = new JScrollPane();
33+
34+
3535
private ControlButtonsPanel controlPanel;
3636
private ExportDetailsPanel exportDetailsPanel;
3737
private TimeFilter timeFilter;
@@ -49,7 +49,12 @@ public void initialize(ControlButtonsPanel controlButtonsPanel, ExportDetailsPan
4949
N5ImageHandler.loadingManager.addSimLoadingListener(this);
5050
n5ExportTableModel = new N5ExportTableModel();
5151
exportListTable = new JTable(n5ExportTableModel);
52-
this.setViewportView(exportListTable);
52+
exampleExportListTable = new JTable(n5ExportTableModel);
53+
personalExportsPanel.setViewportView(exportListTable);
54+
exampleExportsPanel.setViewportView(exampleExportListTable);
55+
56+
this.addTab("Personal Exports", personalExportsPanel);
57+
this.addTab("Example Exports", exampleExportsPanel);
5358

5459

5560
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer(){
@@ -70,12 +75,14 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
7075
int columns = n5ExportTableModel.getColumnCount();
7176
for (int i = 0; i < columns; i++){
7277
exportListTable.getColumnModel().getColumn(i).setCellRenderer(cellRenderer);
78+
exampleExportListTable.getColumnModel().getColumn(i).setCellRenderer(cellRenderer);
7379
}
7480

7581
this.setPreferredSize(new Dimension(500, 400));
76-
this.setBorder(BorderFactory.createTitledBorder(lowerEtchedBorder, "Export Table"));
7782
exportListTable.getSelectionModel().addListSelectionListener(this);
83+
exampleExportListTable.getSelectionModel().addListSelectionListener(this);
7884

85+
this.setSelectedIndex(N5ImageHandler.exportedDataExists() ? 0 : 1);
7986
updateTableData("");
8087
automaticRefresh();
8188
}
@@ -95,13 +102,9 @@ public void updateTableData(String strFilter){
95102

96103
void updateTableData(LocalDateTime oldestTimeAllowed, String strFilter){
97104
n5ExportTableModel.resetData();
98-
if (!controlPanel.includeExampleExports.isSelected()){
99-
this.setBorder(BorderFactory.createTitledBorder(lowerEtchedBorder, "Personal Exports"));
100-
} else {
101-
this.setBorder(exampleBorder);
102-
}
103105
try {
104-
ExportDataRepresentation.FormatExportDataRepresentation formatExportData = N5ImageHandler.exportedDataExists() && !controlPanel.includeExampleExports.isSelected() ?
106+
boolean hasPersonalExports = N5ImageHandler.exportedDataExists() && this.getSelectedIndex() == 0;
107+
ExportDataRepresentation.FormatExportDataRepresentation formatExportData = hasPersonalExports ?
105108
N5ImageHandler.getJsonData() : N5ImageHandler.getExampleJSONData();
106109

107110
Stack<String> jobStack = (Stack<String>) formatExportData.formatJobIDs.clone();
@@ -123,7 +126,7 @@ private void automaticRefresh(){
123126
try {
124127
while(true){
125128
ExportDataRepresentation.FormatExportDataRepresentation formatExportData = N5ImageHandler.getJsonData();
126-
if (formatExportData != null && !controlPanel.includeExampleExports.isSelected()){
129+
if (formatExportData != null && this.getSelectedIndex() == 0){
127130
ExportDataRepresentation.SimulationExportDataRepresentation mostRecentTableEntry = !n5ExportTableModel.tableData.isEmpty() ? n5ExportTableModel.tableData.getFirst() : null;
128131
Stack<String> jobStack = formatExportData.formatJobIDs;
129132
boolean isUpdated = false;
@@ -156,7 +159,8 @@ private void automaticRefresh(){
156159

157160
public void openSelectedRows(boolean openInMemory, boolean performDataReduction, SimResultsLoader.OpenTag openTag){
158161
ArrayList<SimResultsLoader> filesToOpen = new ArrayList<>();
159-
for(int row: exportListTable.getSelectedRows()){
162+
JTable currentTable = getCurrentTable();
163+
for(int row: currentTable.getSelectedRows()){
160164
String uri = n5ExportTableModel.getRowData(row).uri;
161165
ExportDataRepresentation.SimulationExportDataRepresentation rowData = n5ExportTableModel.getRowData(row);
162166
SimResultsLoader simResultsLoader = new SimResultsLoader(uri, rowData.savedFileName, row, rowData.jobID, openTag);
@@ -167,7 +171,8 @@ public void openSelectedRows(boolean openInMemory, boolean performDataReduction,
167171
}
168172

169173
public void copySelectedRowLink(){
170-
ExportDataRepresentation.SimulationExportDataRepresentation selectedRow = n5ExportTableModel.getRowData(exportListTable.getSelectedRow());
174+
JTable currentTable = getCurrentTable();
175+
ExportDataRepresentation.SimulationExportDataRepresentation selectedRow = n5ExportTableModel.getRowData(currentTable.getSelectedRow());
171176
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
172177
clipboard.setContents(new StringSelection(selectedRow.uri), null);
173178
}
@@ -192,9 +197,10 @@ else if (n5ExportTableModel.getRowData(currentRow).jobID.equals(expectedJobID) &
192197

193198
@Override
194199
public void valueChanged(ListSelectionEvent e) {
195-
int row = exportListTable.getSelectedRow();
200+
JTable currentTable = getCurrentTable();
201+
int row = currentTable.getSelectedRow();
196202
exportDetailsPanel.resetExportDetails();
197-
if (row > exportListTable.getRowCount() || row < 0){
203+
if (row > currentTable.getRowCount() || row < 0){
198204
controlPanel.disableAllContextDependentButtons();
199205
return;
200206
}
@@ -206,24 +212,33 @@ public void valueChanged(ListSelectionEvent e) {
206212
controlPanel.updateButtonsToMatchState(loadingRow != -1);
207213
}
208214

215+
@Override
216+
public void setSelectedIndex(int index) {
217+
super.setSelectedIndex(index);
218+
updateTableData();
219+
}
220+
209221
public void stopSelectedImageFromLoading(){
210-
int row = exportListTable.getSelectedRow();
222+
JTable currentTable = getCurrentTable();
223+
int row = currentTable.getSelectedRow();
211224
N5ImageHandler.loadingManager.stopLoadingImage(n5ExportTableModel.tableData.get(row).jobID);
212225
loadingRowsJobID.remove(row);
213-
exportListTable.repaint();
226+
currentTable.repaint();
214227
}
215228

216229
public void removeSpecificRowFromLoadingRows(int rowNumber){
230+
JTable currentTable = getCurrentTable();
217231
int realRowNumber = findLoadingRow(rowNumber, rowNumber);
218232
loadingRowsJobID.remove(realRowNumber);
219233
controlPanel.updateButtonsToMatchState(false);
220-
exportListTable.repaint();
234+
currentTable.repaint();
221235
}
222236

223237
@Override
224238
public void simIsLoading(int itemRow, String exportID) {
239+
JTable currentTable = getCurrentTable();
225240
loadingRowsJobID.put(itemRow, exportID);
226-
exportListTable.repaint();
241+
currentTable.repaint();
227242
}
228243

229244
@Override
@@ -234,6 +249,18 @@ public void simFinishedLoading(SimResultsLoader loadedResults) {
234249
}
235250
}
236251

252+
/**
253+
* Required, for there is one table for examples and another for personal exports. The same table
254+
* can not be used for both tabs, because a JComponent can have only one parent.
255+
*/
256+
private JTable getCurrentTable(){
257+
return this.getSelectedIndex() == 0 ? exportListTable : exampleExportListTable;
258+
}
259+
260+
public N5ExportTableModel getN5ExportTableModel(){
261+
return n5ExportTableModel;
262+
}
263+
237264
public static class N5ExportTableModel extends AbstractTableModel {
238265
public final ArrayList<String> headers = new ArrayList<String>(){{
239266
add("BioModel");

view-simulation-results/src/main/java/org/vcell/N5/reduction/DataReductionWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public void initializeDataSheets(){
141141
public void addMetaData(SimResultsLoader loadedResults){
142142
synchronized (metaDataLock){
143143
N5ExportTable n5ExportTable = MainPanel.n5ExportTable;
144-
ExportDataRepresentation.SimulationExportDataRepresentation data = n5ExportTable.n5ExportTableModel.getRowData(loadedResults.rowNumber);
144+
ExportDataRepresentation.SimulationExportDataRepresentation data = n5ExportTable.getN5ExportTableModel().getRowData(loadedResults.rowNumber);
145145
ArrayList<String> newMetaData = new ArrayList<>();
146146
newMetaData.add(loadedResults.userSetFileName);
147147
newMetaData.add(data.biomodelName);

0 commit comments

Comments
 (0)