diff --git a/src/PamController/PamguardVersionInfo.java b/src/PamController/PamguardVersionInfo.java index 88a6baa7..4d1daa07 100644 --- a/src/PamController/PamguardVersionInfo.java +++ b/src/PamController/PamguardVersionInfo.java @@ -36,7 +36,7 @@ public class PamguardVersionInfo { /** * Release date */ - static public final String date = "20 December 2023"; + static public final String date = "28 December 2023"; // /** // * Release type - Beta or Core diff --git a/src/PamView/panel/SplitPanePositionData.java b/src/PamView/panel/SplitPanePositionData.java new file mode 100644 index 00000000..b7207e6e --- /dev/null +++ b/src/PamView/panel/SplitPanePositionData.java @@ -0,0 +1,62 @@ +package PamView.panel; + +import java.io.Serializable; + +public class SplitPanePositionData implements Serializable { + + + public static final long serialVersionUID = 1L; + private int position; + private double propPosition; + private int height; + + + public SplitPanePositionData(int position, double propPosition, int height) { + super(); + this.position = position; + this.setHeight(height); + this.setPropPosition(propPosition); + } + + /** + * @return the position + */ + public int getPosition() { + return position; + } + + /** + * @param position the position to set + */ + public void setPosition(int position) { + this.position = position; + } + + /** + * @return the propPosition + */ + public double getPropPosition() { + return propPosition; + } + + /** + * @param propPosition the propPosition to set + */ + public void setPropPosition(double propPosition) { + this.propPosition = propPosition; + } + + /** + * @return the height + */ + public int getHeight() { + return height; + } + + /** + * @param height the height to set + */ + public void setHeight(int height) { + this.height = height; + } +} diff --git a/src/PamView/panel/SplitPanePositioner.java b/src/PamView/panel/SplitPanePositioner.java new file mode 100644 index 00000000..32642bde --- /dev/null +++ b/src/PamView/panel/SplitPanePositioner.java @@ -0,0 +1,95 @@ +package PamView.panel; + +import java.io.Serializable; + +import javax.swing.JSplitPane; +import javax.swing.SwingUtilities; + +import PamController.PamControlledUnitSettings; +import PamController.PamSettingManager; +import PamController.PamSettings; + +/** + * Class that will remember and reset the position of a split pane. Any split pane. + * Just call this constructor with a unique name and the splitPane and a default + * between 0 and 1 and it will register itself automatically with PamSettings. + * @author dg50 + * + */ +public class SplitPanePositioner implements PamSettings { + + private static final String unitType = "Split Pane Position"; + + private String unitName; + + private JSplitPane splitPane; + + /** + * Constructor for split pane positioner. Just call this constructor for each + * split pane, then forget about it. This will have been registered with + * PamSettings and will handle everything, restoring the split pane position + * when PAMGuard is restarted. + * @param unitName A unique name for the split pane. + * @param splitPane reference to an existing split pane. + * @param proportionalDefault default position (0 < position < 1). + */ + public SplitPanePositioner(String unitName, JSplitPane splitPane, double proportionalDefault) { + super(); + this.splitPane = splitPane; + this.unitName = unitName; + boolean exists = PamSettingManager.getInstance().registerSettings(this); + if (exists == false) { + // use the default + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + splitPane.setDividerLocation(proportionalDefault); + } + }); + } + } + + @Override + public String getUnitName() { + return unitName; + } + + @Override + public String getUnitType() { + return unitType; + } + + @Override + public Serializable getSettingsReference() { + System.out.printf("Save split position %s as %d out of %d\n", unitName, splitPane.getDividerLocation(), splitPane.getHeight()); + double propPosition = (double) splitPane.getDividerLocation() / (double) splitPane.getHeight(); + SplitPanePositionData posData = new SplitPanePositionData(splitPane.getDividerLocation(), propPosition, splitPane.getHeight()); + return posData; + } + + @Override + public long getSettingsVersion() { + return SplitPanePositionData.serialVersionUID; + } + + @Override + public boolean restoreSettings(PamControlledUnitSettings pamControlledUnitSettings) { + + SplitPanePositionData posData = (SplitPanePositionData) pamControlledUnitSettings.getSettings(); + + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + int newPos = posData.getPosition() + splitPane.getHeight() - posData.getHeight(); + System.out.printf("Set split %s position to %d or %3.3f of %d\n", unitName, + posData.getPosition(), posData.getPropPosition(), splitPane.getHeight()); + splitPane.setDividerLocation(posData.getPosition()); + } + }); + return true; + } + + + +} diff --git a/src/generalDatabase/DBControl.java b/src/generalDatabase/DBControl.java index 788366c4..70e0d549 100644 --- a/src/generalDatabase/DBControl.java +++ b/src/generalDatabase/DBControl.java @@ -30,6 +30,7 @@ import org.apache.commons.io.FilenameUtils; import offlineProcessing.DataCopyTask; import offlineProcessing.OLProcessDialog; import offlineProcessing.OfflineTaskGroup; +import pamguard.GlobalArguments; import warnings.PamWarning; import warnings.WarningSystem; import PamController.PamConfiguration; @@ -704,9 +705,17 @@ PamSettingsSource { */ public boolean selectDatabase(Frame frame, String selectTitle) { + //this is a bit messy but difficult to figure this out in controller framework because //this is called before the controller has initialised properly. - if (PamGUIManager.getGUIType()==PamGUIManager.FX) { + // also have to allow for the database being passed as a command line option, in which case + // we don't want to open the dialog. + String currentDB = null; + DBParameters newParams = checkPassedDatabase(); + if (newParams != null) { + + } + else if (PamGUIManager.getGUIType()==PamGUIManager.FX) { //open FX return ((DBGuiFX) getGUI(PamGUIManager.FX)).selectDatabase(PamController.getMainStage(), selectTitle, true); } @@ -717,12 +726,13 @@ PamSettingsSource { // object and retrieving the name of the first database in the recently-used list. Double-check the connection // field - if it's null, it means we don't actually have the database loaded so just clear the name and continue // (this happens when starting Viewer mode) - String currentDB = databaseSystems.get(dbParameters.getDatabaseSystem()).getDatabaseName(); + currentDB = databaseSystems.get(dbParameters.getDatabaseSystem()).getDatabaseName(); if (connection==null) { currentDB = null; } - DBParameters newParams = DBDialog.showDialog(this, frame, dbParameters, selectTitle); + newParams = DBDialog.showDialog(this, frame, dbParameters, selectTitle); + } if (newParams != null) { // first, check if there is a Lookup table. If so, make sure to copy the contents over before // we lose the reference to the old database @@ -763,9 +773,29 @@ PamSettingsSource { PamController.getInstance().getUidManager().runStartupChecks(); // if we've loaded a new database, synch the datablocks with the UID info return true; } - } return false; } + + /** + * Check to see if a database has been passed to PAMGuard as a parameter from the command line. + * @return + */ + DBParameters checkPassedDatabase() { + String passedDatabase = GlobalArguments.getParam(DBControl.GlobalDatabaseNameArg); + if (passedDatabase != null) { + /* + * assume it's a file based database. Anything else is going to get more complicated and will require + * a fair amount of type checing, connecint to servers, etc. + */ + if (passedDatabase.endsWith(".sqlite3")) { + DBParameters newParams = dbParameters; + newParams.setDatabaseName(passedDatabase); + newParams.setDatabaseSystem(0); + return newParams; + } + } + return null; + } /** * Set dB paramaters diff --git a/src/pamguard/Pamguard.java b/src/pamguard/Pamguard.java index ee3936fc..807d6bf5 100644 --- a/src/pamguard/Pamguard.java +++ b/src/pamguard/Pamguard.java @@ -154,6 +154,7 @@ public class Pamguard { } catch (Exception e) { e.printStackTrace(); } + boolean showSplash = true; if (args != null) { int nArgs = args.length; int iArg = 0; @@ -172,6 +173,9 @@ public class Pamguard { runMode = PamController.RUN_NETWORKRECEIVER; System.out.println("PAMGUARD Network Reciever Mode"); } + else if (anArg.equalsIgnoreCase("-nosplash")) { + showSplash = false; + } // removed SEICHE switch when the two SEICHE modules were converted to plugins // else if (anArg.equalsIgnoreCase("-seiche")) { @@ -383,7 +387,7 @@ public class Pamguard { if(runMode == PamController.RUN_REMOTE) { spashTime = 0; } - if (spashTime > 0 && (PamGUIManager.getGUIType() != PamGUIManager.NOGUI)) { + if (showSplash && spashTime > 0 && (PamGUIManager.getGUIType() != PamGUIManager.NOGUI)) { new Splash(spashTime, chosenRunMode); } //