diff --git a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java index 9d3d356..a681b23 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java +++ b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java @@ -98,13 +98,13 @@ private void createUserInterface() { // use MigLayout as the layout manager setLayout(new MigLayout( "insets 10 10 10 10", - "[]20[]", + "[grow, fill]", "[]10[]" )); // main control area - final int width = 900; - final int height = 600; + final int width = 920; + final int height = 620; tabPanel_ = new TabPanel(model_, this, width, height); // add ui elements to the panel diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/components/Panel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/components/Panel.java index 2e8fed7..087a20e 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/components/Panel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/components/Panel.java @@ -8,6 +8,7 @@ import org.micromanager.internal.dialogs.ComponentTitledBorder; import java.awt.Color; +import java.awt.Dimension; import java.awt.Font; public class Panel extends JPanel { @@ -16,7 +17,6 @@ public Panel() { setMigLayout("", "", ""); } - // TODO: do i need this? public Panel(final String text) { setMigLayout("", "", ""); final TitledBorder titledBorder = BorderFactory.createTitledBorder( @@ -26,7 +26,6 @@ public Panel(final String text) { setBorder(titledBorder); } - // TODO: maybe parameterize font options and use static factory methods? public Panel(final String text, int side) { // side = TitledBorder.CENTER, etc setMigLayout("", "", ""); final TitledBorder titledBorder = BorderFactory.createTitledBorder( @@ -61,4 +60,11 @@ public void setMigLayout(final String layout, final String cols, final String ro setLayout(new MigLayout(layout, cols, rows)); } + public void setAbsoluteSize(final int width, final int height) { + final Dimension size = new Dimension(width, height); + setPreferredSize(size); + setMinimumSize(size); + setMaximumSize(size); + } + } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java index 0a30a48..cd3c64b 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java @@ -1,11 +1,9 @@ package org.micromanager.lightsheetmanager.gui.tabs; -import java.awt.Dimension; import java.lang.reflect.InvocationTargetException; import java.util.concurrent.Future; import javax.swing.SwingUtilities; import org.micromanager.lightsheetmanager.LightSheetManagerFrame; -import org.micromanager.lightsheetmanager.api.data.GeometryType; import org.micromanager.lightsheetmanager.api.internal.DefaultAcquisitionSettingsSCAPE; import org.micromanager.lightsheetmanager.gui.components.ListeningPanel; import org.micromanager.lightsheetmanager.gui.data.Icons; @@ -91,8 +89,8 @@ private void createUserInterface() { final DefaultAcquisitionSettingsSCAPE acqSettings = model_.acquisitions().settings(); setMigLayout( - "insets 10 10 10 10", - "[]5[]", + "insets 10 10 10 10, ax center", + "[300!]8[pref!]8[300!]", "[]5[]" ); @@ -101,9 +99,13 @@ private void createUserInterface() { final Panel pnlCenter = new Panel(); pnlRight_ = new Panel(); - // durations - pnlDurations_ = new VolumeDurationPanel(model_); + pnlCenter.setMigLayout( + "", + "", + "[]10[]" + ); + pnlDurations_ = new VolumeDurationPanel(model_); pnlVolumeSettings_ = new VolumeSettingsPanel(model_); // switch between these two panels @@ -129,8 +131,8 @@ private void createUserInterface() { // acquisition buttons pnlButtons_ = new Panel(); pnlButtons_.setMigLayout( - "", - "[]24[]", + "center", + "[]26[]", "" ); @@ -147,27 +149,24 @@ private void createUserInterface() { ); btnPauseAcquisition_.setEnabled(false); - Button.setDefaultSize(120, 30); - btnTestAcquisition_ = new Button("Test Acquisition"); - btnOpenPlaylist_ = new Button("Playlist..."); - btnSpeedTest_ = new Button("Speed test"); + btnTestAcquisition_ = new Button("Test Acquisition", 120, 30); + btnOpenPlaylist_ = new Button("Playlist...", 120, 30); + btnSpeedTest_ = new Button("Speed test", 120, 30); - Button.setDefaultSize(140, 30); - btnRunOverviewAcq_ = new Button("Overview Acquisition"); + btnRunOverviewAcq_ = new Button("Overview Acquisition", 140, 30); final boolean isUsingChannels = acqSettings.isUsingChannels(); cbxUseChannels_ = new CheckBox("Channels", isUsingChannels); pnlChannelTable_ = new ChannelTablePanel(model_, cbxUseChannels_); - pnlChannelTable_.setMaximumSize(new Dimension(270, 400)); // disable elements based on acqSettings pnlChannelTable_.setItemsEnabled(isUsingChannels); // acquisition mode combo box - final boolean isUsingScanSettings = model_.devices().isUsingStageScanning(); - final GeometryType geometryType = model_.devices().adapter().geometry(); cmbAcquisitionModes_ = new ComboBox<>( - AcquisitionMode.modesByType(geometryType, isUsingScanSettings), + AcquisitionMode.modesByType( + model_.devices().adapter().geometry(), + model_.devices().isUsingStageScanning()), acqSettings.acquisitionMode(), 180, 24); @@ -177,6 +176,11 @@ private void createUserInterface() { btnRunOverviewAcq_.setEnabled(false); // TODO: re-enable when these features are put in btnTestAcquisition_.setEnabled(false); + // set ui sizes, should match the MigLayout constraints + pnlChannelTable_.setAbsoluteSize(280, 400); + pnlLeft.setAbsoluteSize(300, 420); + pnlRight_.setAbsoluteSize(300, 420); + // acquisition buttons pnlButtons_.add(btnRunAcquisition_, ""); pnlButtons_.add(btnPauseAcquisition_, ""); @@ -195,25 +199,17 @@ private void createUserInterface() { pnlCenter.add(new JLabel("Acquisition mode:"), "split 2"); pnlCenter.add(cmbAcquisitionModes_, ""); - final boolean isUsingAdvSettings = - model_.acquisitions().settings().isUsingAdvancedTiming(); - pnlRight_.add(pnlVolumeSettings_, "growx, wrap"); - if (isUsingAdvSettings) { - pnlRight_.add(pnlAdvancedTiming_, "growx, wrap"); - } else { - pnlRight_.add(pnlSliceSettings_, "growx, wrap"); - } + pnlRight_.add(model_.acquisitions().settings().isUsingAdvancedTiming() ? + pnlAdvancedTiming_ : pnlSliceSettings_, "growx, wrap"); pnlRight_.add(cbxUseAdvancedTiming_, "growx"); - // TODO: consider putting durations into the model, since recalculating the slice timing shouldn't happen here - // includes calculating the slice timing - //updateDurationLabels(); + // add panels + add(pnlLeft, "aligny top"); + add(pnlCenter, "aligny top"); + add(pnlRight_, "aligny top, wrap"); - add(pnlLeft, ""); - add(pnlCenter, ""); - add(pnlRight_, "wrap"); - add(pnlButtons_, "span 3, gaptop 60"); + add(pnlButtons_, "span 3, growx, center, pushy, aligny bottom"); } /** @@ -290,19 +286,14 @@ private void createEventHandlers() { /** * Switch between slice timing panel and advanced timing panel. * - * @param state the state of the CheckBox + * @param useAdvancedTiming {@code true} to swap to the advanced timing panel */ - private void swapTimingSettingsPanels(final boolean state) { + private void swapTimingSettingsPanels(final boolean useAdvancedTiming) { pnlRight_.removeAll(); - if (state) { - pnlRight_.add(pnlVolumeSettings_, "growx, wrap"); - pnlRight_.add(pnlAdvancedTiming_, "growx, wrap"); - pnlRight_.add(cbxUseAdvancedTiming_, "growx"); - } else { - pnlRight_.add(pnlVolumeSettings_, "growx, wrap"); - pnlRight_.add(pnlSliceSettings_, "growx, wrap"); - pnlRight_.add(cbxUseAdvancedTiming_, "growx"); - } + pnlRight_.add(pnlVolumeSettings_, "growx, wrap"); + pnlRight_.add(useAdvancedTiming ? + pnlAdvancedTiming_ : pnlSliceSettings_, "growx, wrap"); + pnlRight_.add(cbxUseAdvancedTiming_, "growx"); pnlRight_.revalidate(); pnlRight_.repaint(); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/AdvancedTimingPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/AdvancedTimingPanel.java index 491f9c3..d327a34 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/AdvancedTimingPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/AdvancedTimingPanel.java @@ -33,9 +33,9 @@ public AdvancedTimingPanel(final LightSheetManager model) { private void createUserInterface() { setMigLayout( - "insets 10 10 10 10", - "", - "[]5[]" + "insets 10 10 10 10, fillx", + "[grow, left] 10 [right]", + "[]5[]" ); final Label lblDelayBeforeScan = new Label("Delay Before Scan [ms]: "); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SliceSettingsPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SliceSettingsPanel.java index 9af0bdc..977255a 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SliceSettingsPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SliceSettingsPanel.java @@ -41,6 +41,12 @@ public SliceSettingsPanel(final LightSheetManager model) { } private void createUserInterface() { + setMigLayout( + "insets 10 10 10 10, fillx", + "[grow, left] 10 [right]", + "[]5[]" + ); + final DefaultSliceSettingsLS sliceSettingsLS = model_.acquisitions() .settings().sliceSettingsLS(); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java index 380cfdd..4e1b5f0 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java @@ -8,7 +8,6 @@ import org.micromanager.lightsheetmanager.gui.components.Panel; import org.micromanager.lightsheetmanager.gui.components.Spinner; -import java.util.ArrayList; import java.util.Objects; public class VolumeSettingsPanel extends Panel { @@ -30,8 +29,13 @@ public VolumeSettingsPanel(final LightSheetManager model) { } private void createUserInterface() { - final GeometryType geometryType = model_.devices().adapter().geometry(); + setMigLayout( + "insets 10 10 10 10, fillx", + "[grow, left] 10 [right]", + "[]5[]" + ); + final GeometryType geometryType = model_.devices().adapter().geometry(); final int numImagingPaths = model_.devices().adapter().numImagingPaths(); final DefaultVolumeSettings volumeSettings = model_.acquisitions()