Skip to content

Commit

Permalink
Add Tabs to ImageJ Plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
AvocadoMoon committed Jan 22, 2025
1 parent 4ce46d6 commit 27ae847
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ public class ControlButtonsPanel extends JPanel implements ActionListener {
// private final JButton openLocal = new JButton("Open N5 Local");
private final JButton questionMark;

public final JCheckBox includeExampleExports;
public final JCheckBox displayAdvancedFeatures;

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

public ControlButtonsPanel(){
includeExampleExports = new JCheckBox("Show Example Exports");
includeExampleExports.setSelected(!N5ImageHandler.exportedDataExists());

displayAdvancedFeatures = new JCheckBox("Advanced Features");

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


JPanel bottomRow = new JPanel(new GridBagLayout());
bottomRow.add(includeExampleExports);
gridBagConstraints.gridx = 1;
bottomRow.add(displayAdvancedFeatures, gridBagConstraints);
gridBagConstraints.gridx = 2;
Expand Down Expand Up @@ -86,7 +81,6 @@ public ControlButtonsPanel(){
questionMark.addActionListener(this);
advancedFeatures.useN5Link.addActionListener(this);
// openLocal.addActionListener(this);
includeExampleExports.addActionListener(this);
displayAdvancedFeatures.addActionListener(this);
dataReduction.addActionListener(this);
advancedFeatures.openInMemory.addActionListener(this);
Expand Down Expand Up @@ -130,8 +124,6 @@ public void actionPerformed(ActionEvent e) {
new HelpExplanation().displayHelpMenu();
} else if (e.getSource().equals(advancedFeatures.useN5Link)) {
remoteFileSelection.setVisible(true);
} else if (e.getSource().equals(includeExampleExports)){
n5ExportTable.updateTableData();
} else if (e.getSource().equals(displayAdvancedFeatures)) {
advancedFeatures.setVisible(displayAdvancedFeatures.isSelected());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,6 @@ public TimeFilter(){
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(anyInterval) || e.getSource().equals(todayInterval)
|| e.getSource().equals(monthInterval) || e.getSource().equals(yearlyInterval)) {
if(MainPanel.controlButtonsPanel.includeExampleExports.isSelected()){
n5ExportTable.updateTableData();
return;
}
n5ExportTable.updateTableData();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
import org.vcell.N5.retrieving.SimResultsLoader;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
Expand All @@ -24,14 +22,16 @@
import java.util.*;
import java.util.concurrent.TimeUnit;

public class N5ExportTable extends JScrollPane implements ListSelectionListener, SimLoadingListener {
public N5ExportTableModel n5ExportTableModel;
public class N5ExportTable extends JTabbedPane implements ListSelectionListener, SimLoadingListener {
private N5ExportTableModel n5ExportTableModel;
private JTable exportListTable;

private final Border lowerEtchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
private final Border exampleBorder = BorderFactory.createTitledBorder(lowerEtchedBorder, "Example Exports");
private JTable exampleExportListTable;
private final Map<Integer, String> loadingRowsJobID = new HashMap<>();

private final JScrollPane personalExportsPanel = new JScrollPane();
private final JScrollPane exampleExportsPanel = new JScrollPane();


private ControlButtonsPanel controlPanel;
private ExportDetailsPanel exportDetailsPanel;
private TimeFilter timeFilter;
Expand All @@ -49,7 +49,12 @@ public void initialize(ControlButtonsPanel controlButtonsPanel, ExportDetailsPan
N5ImageHandler.loadingManager.addSimLoadingListener(this);
n5ExportTableModel = new N5ExportTableModel();
exportListTable = new JTable(n5ExportTableModel);
this.setViewportView(exportListTable);
exampleExportListTable = new JTable(n5ExportTableModel);
personalExportsPanel.setViewportView(exportListTable);
exampleExportsPanel.setViewportView(exampleExportListTable);

this.addTab("Personal Exports", personalExportsPanel);
this.addTab("Example Exports", exampleExportsPanel);


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

this.setPreferredSize(new Dimension(500, 400));
this.setBorder(BorderFactory.createTitledBorder(lowerEtchedBorder, "Export Table"));
exportListTable.getSelectionModel().addListSelectionListener(this);
exampleExportListTable.getSelectionModel().addListSelectionListener(this);

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

void updateTableData(LocalDateTime oldestTimeAllowed, String strFilter){
n5ExportTableModel.resetData();
if (!controlPanel.includeExampleExports.isSelected()){
this.setBorder(BorderFactory.createTitledBorder(lowerEtchedBorder, "Personal Exports"));
} else {
this.setBorder(exampleBorder);
}
try {
ExportDataRepresentation.FormatExportDataRepresentation formatExportData = N5ImageHandler.exportedDataExists() && !controlPanel.includeExampleExports.isSelected() ?
boolean hasPersonalExports = N5ImageHandler.exportedDataExists() && this.getSelectedIndex() == 0;
ExportDataRepresentation.FormatExportDataRepresentation formatExportData = hasPersonalExports ?
N5ImageHandler.getJsonData() : N5ImageHandler.getExampleJSONData();

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

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

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

@Override
public void valueChanged(ListSelectionEvent e) {
int row = exportListTable.getSelectedRow();
JTable currentTable = getCurrentTable();
int row = currentTable.getSelectedRow();
exportDetailsPanel.resetExportDetails();
if (row > exportListTable.getRowCount() || row < 0){
if (row > currentTable.getRowCount() || row < 0){
controlPanel.disableAllContextDependentButtons();
return;
}
Expand All @@ -206,24 +212,33 @@ public void valueChanged(ListSelectionEvent e) {
controlPanel.updateButtonsToMatchState(loadingRow != -1);
}

@Override
public void setSelectedIndex(int index) {
super.setSelectedIndex(index);
updateTableData();
}

public void stopSelectedImageFromLoading(){
int row = exportListTable.getSelectedRow();
JTable currentTable = getCurrentTable();
int row = currentTable.getSelectedRow();
N5ImageHandler.loadingManager.stopLoadingImage(n5ExportTableModel.tableData.get(row).jobID);
loadingRowsJobID.remove(row);
exportListTable.repaint();
currentTable.repaint();
}

public void removeSpecificRowFromLoadingRows(int rowNumber){
JTable currentTable = getCurrentTable();
int realRowNumber = findLoadingRow(rowNumber, rowNumber);
loadingRowsJobID.remove(realRowNumber);
controlPanel.updateButtonsToMatchState(false);
exportListTable.repaint();
currentTable.repaint();
}

@Override
public void simIsLoading(int itemRow, String exportID) {
JTable currentTable = getCurrentTable();
loadingRowsJobID.put(itemRow, exportID);
exportListTable.repaint();
currentTable.repaint();
}

@Override
Expand All @@ -234,6 +249,18 @@ public void simFinishedLoading(SimResultsLoader loadedResults) {
}
}

/**
* Required, for there is one table for examples and another for personal exports. The same table
* can not be used for both tabs, because a JComponent can have only one parent.
*/
private JTable getCurrentTable(){
return this.getSelectedIndex() == 0 ? exportListTable : exampleExportListTable;
}

public N5ExportTableModel getN5ExportTableModel(){
return n5ExportTableModel;
}

public static class N5ExportTableModel extends AbstractTableModel {
public final ArrayList<String> headers = new ArrayList<String>(){{
add("BioModel");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public void initializeDataSheets(){
public void addMetaData(SimResultsLoader loadedResults){
synchronized (metaDataLock){
N5ExportTable n5ExportTable = MainPanel.n5ExportTable;
ExportDataRepresentation.SimulationExportDataRepresentation data = n5ExportTable.n5ExportTableModel.getRowData(loadedResults.rowNumber);
ExportDataRepresentation.SimulationExportDataRepresentation data = n5ExportTable.getN5ExportTableModel().getRowData(loadedResults.rowNumber);
ArrayList<String> newMetaData = new ArrayList<>();
newMetaData.add(loadedResults.userSetFileName);
newMetaData.add(data.biomodelName);
Expand Down

0 comments on commit 27ae847

Please sign in to comment.