diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/DialogAction.java b/common-gui/src/main/java/slash/navigation/gui/actions/DialogAction.java similarity index 90% rename from route-converter/src/main/java/slash/navigation/converter/gui/actions/DialogAction.java rename to common-gui/src/main/java/slash/navigation/gui/actions/DialogAction.java index d082cbdb85..dfc52b2dca 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/DialogAction.java +++ b/common-gui/src/main/java/slash/navigation/gui/actions/DialogAction.java @@ -18,15 +18,14 @@ Copyright (C) 2007 Christian Pesch. All Rights Reserved. */ -package slash.navigation.converter.gui.actions; - -import slash.navigation.gui.helpers.UIHelper; +package slash.navigation.gui.actions; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import static slash.navigation.gui.helpers.UIHelper.startWaitCursor; +import static slash.navigation.gui.helpers.UIHelper.stopWaitCursor; /** * An {@link ActionListener} that starts and stops the wait cursor on the dialog. @@ -50,7 +49,7 @@ public final void actionPerformed(ActionEvent e) { try { run(); } finally { - UIHelper.stopWaitCursor(getDialog().getRootPane()); + stopWaitCursor(getDialog().getRootPane()); } } diff --git a/common-gui/src/main/java/slash/navigation/gui/actions/SingletonDialogAction.java b/common-gui/src/main/java/slash/navigation/gui/actions/SingletonDialogAction.java new file mode 100644 index 0000000000..2e48c061e9 --- /dev/null +++ b/common-gui/src/main/java/slash/navigation/gui/actions/SingletonDialogAction.java @@ -0,0 +1,47 @@ +/* + This file is part of RouteConverter. + + RouteConverter is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + RouteConverter is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with RouteConverter; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Copyright (C) 2007 Christian Pesch. All Rights Reserved. +*/ + +package slash.navigation.gui.actions; + +import slash.navigation.gui.SimpleDialog; + +/** + * Show a dialog at most once. + * + * @author Christian Pesch + */ + +public abstract class SingletonDialogAction extends FrameAction { + private SimpleDialog dialog = null; + + protected abstract SimpleDialog createDialog(); + + public void run() { + if (dialog == null) { + dialog = createDialog(); + dialog.pack(); + dialog.restoreLocation(); + } + if (!dialog.isVisible()) { + dialog.toFront(); + dialog.setVisible(true); + } + } +} diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/DeletePositionsAction.java b/route-converter/src/main/java/slash/navigation/converter/gui/actions/DeletePositionsAction.java index 00a0198b5d..282f858005 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/DeletePositionsAction.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/actions/DeletePositionsAction.java @@ -21,7 +21,8 @@ package slash.navigation.converter.gui.actions; import slash.navigation.converter.gui.dialogs.DeletePositionsDialog; -import slash.navigation.gui.actions.FrameAction; +import slash.navigation.gui.SimpleDialog; +import slash.navigation.gui.actions.SingletonDialogAction; /** * Delete positions from the position list @@ -29,11 +30,8 @@ * @author Christian Pesch */ -public class DeletePositionsAction extends FrameAction { - public void run() { - DeletePositionsDialog dialog = new DeletePositionsDialog(); - dialog.pack(); - dialog.restoreLocation(); - dialog.setVisible(true); +public class DeletePositionsAction extends SingletonDialogAction { + protected SimpleDialog createDialog() { + return new DeletePositionsDialog(); } } \ No newline at end of file diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/FindPlaceAction.java b/route-converter/src/main/java/slash/navigation/converter/gui/actions/FindPlaceAction.java index 231e441253..23f629efd8 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/FindPlaceAction.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/actions/FindPlaceAction.java @@ -21,7 +21,8 @@ package slash.navigation.converter.gui.actions; import slash.navigation.converter.gui.dialogs.FindPlaceDialog; -import slash.navigation.gui.actions.FrameAction; +import slash.navigation.gui.SimpleDialog; +import slash.navigation.gui.actions.SingletonDialogAction; /** * Find a place via geocoding to insert it into the position list. @@ -29,11 +30,8 @@ * @author Christian Pesch */ -public class FindPlaceAction extends FrameAction { - public void run() { - FindPlaceDialog dialog = new FindPlaceDialog(); - dialog.pack(); - dialog.restoreLocation(); - dialog.setVisible(true); +public class FindPlaceAction extends SingletonDialogAction { + protected SimpleDialog createDialog() { + return new FindPlaceDialog(); } } \ No newline at end of file diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/InsertPositionsAction.java b/route-converter/src/main/java/slash/navigation/converter/gui/actions/InsertPositionsAction.java index d80ef2f890..3ccdaefcbf 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/InsertPositionsAction.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/actions/InsertPositionsAction.java @@ -21,7 +21,8 @@ package slash.navigation.converter.gui.actions; import slash.navigation.converter.gui.dialogs.InsertPositionsDialog; -import slash.navigation.gui.actions.FrameAction; +import slash.navigation.gui.SimpleDialog; +import slash.navigation.gui.actions.SingletonDialogAction; /** * Insert positions into the position list @@ -29,11 +30,8 @@ * @author Christian Pesch */ -public class InsertPositionsAction extends FrameAction { - public void run() { - InsertPositionsDialog dialog = new InsertPositionsDialog(); - dialog.pack(); - dialog.restoreLocation(); - dialog.setVisible(true); +public class InsertPositionsAction extends SingletonDialogAction { + protected SimpleDialog createDialog() { + return new InsertPositionsDialog(); } } \ No newline at end of file diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowAboutAction.java b/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowAboutAction.java index 12b5995ca9..f8536baed5 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowAboutAction.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowAboutAction.java @@ -21,7 +21,8 @@ package slash.navigation.converter.gui.actions; import slash.navigation.converter.gui.dialogs.AboutDialog; -import slash.navigation.gui.actions.FrameAction; +import slash.navigation.gui.SimpleDialog; +import slash.navigation.gui.actions.SingletonDialogAction; /** * Show information about the program. @@ -29,11 +30,8 @@ * @author Christian Pesch */ -public class ShowAboutAction extends FrameAction { - public void run() { - AboutDialog aboutDialog = new AboutDialog(); - aboutDialog.pack(); - aboutDialog.restoreLocation(); - aboutDialog.setVisible(true); +public class ShowAboutAction extends SingletonDialogAction { + protected SimpleDialog createDialog() { + return new AboutDialog(); } } \ No newline at end of file diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowDownloadsAction.java b/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowDownloadsAction.java index d2261d3c52..50b05def12 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowDownloadsAction.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowDownloadsAction.java @@ -21,7 +21,8 @@ package slash.navigation.converter.gui.actions; import slash.navigation.converter.gui.dialogs.DownloadsDialog; -import slash.navigation.gui.actions.FrameAction; +import slash.navigation.gui.SimpleDialog; +import slash.navigation.gui.actions.SingletonDialogAction; /** * Show downloads of the program. @@ -29,18 +30,8 @@ * @author Christian Pesch */ -public class ShowDownloadsAction extends FrameAction { - private static DownloadsDialog downloadsDialog = null; - - public void run() { - if (downloadsDialog == null) { - downloadsDialog = new DownloadsDialog(); - downloadsDialog.pack(); - downloadsDialog.restoreLocation(); - } - if (!downloadsDialog.isVisible()) { - downloadsDialog.toFront(); - downloadsDialog.setVisible(true); - } +public class ShowDownloadsAction extends SingletonDialogAction { + protected SimpleDialog createDialog() { + return new DownloadsDialog(); } -} \ No newline at end of file +} diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowOptionsAction.java b/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowOptionsAction.java index d5bb3f8a11..b74d20d5e8 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowOptionsAction.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/actions/ShowOptionsAction.java @@ -21,19 +21,17 @@ package slash.navigation.converter.gui.actions; import slash.navigation.converter.gui.dialogs.OptionsDialog; -import slash.navigation.gui.actions.FrameAction; +import slash.navigation.gui.SimpleDialog; +import slash.navigation.gui.actions.SingletonDialogAction; /** - * Show options of the program. + * Show configuration options of the program. * * @author Christian Pesch */ -public class ShowOptionsAction extends FrameAction { - public void run() { - OptionsDialog optionsDialog = new OptionsDialog(); - optionsDialog.pack(); - optionsDialog.restoreLocation(); - optionsDialog.setVisible(true); +public class ShowOptionsAction extends SingletonDialogAction { + protected SimpleDialog createDialog() { + return new OptionsDialog(); } } \ No newline at end of file diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AboutDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AboutDialog.java index fa5df949f5..a873982d43 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AboutDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AboutDialog.java @@ -24,7 +24,7 @@ import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.core.Spacer; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.gui.SimpleDialog; import javax.swing.*; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddFileDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddFileDialog.java index 68dbf0b81e..fa15de3813 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddFileDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddFileDialog.java @@ -25,7 +25,7 @@ import com.intellij.uiDesigner.core.Spacer; import slash.navigation.catalog.model.CategoryTreeNode; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.models.AddRouteCallback; import slash.navigation.converter.gui.models.CatalogModel; import slash.navigation.gui.SimpleDialog; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddUrlDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddUrlDialog.java index 9cf79a721d..f7303ab57b 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddUrlDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/AddUrlDialog.java @@ -25,7 +25,7 @@ import com.intellij.uiDesigner.core.Spacer; import slash.navigation.catalog.model.CategoryTreeNode; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.models.AddRouteCallback; import slash.navigation.converter.gui.models.CatalogModel; import slash.navigation.gui.SimpleDialog; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/CompleteFlightPlanDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/CompleteFlightPlanDialog.java index 5f0db47dcb..2a7778a0e3 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/CompleteFlightPlanDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/CompleteFlightPlanDialog.java @@ -24,7 +24,7 @@ import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.core.Spacer; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.renderer.CountryCodeListCellRenderer; import slash.navigation.converter.gui.renderer.WaypointTypeListCellRenderer; import slash.navigation.fpl.CountryCode; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DeletePositionsDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DeletePositionsDialog.java index 6eb25d232d..60c305a27b 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DeletePositionsDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DeletePositionsDialog.java @@ -26,7 +26,7 @@ import slash.navigation.base.BaseNavigationPosition; import slash.navigation.base.BaseRoute; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.models.DoubleDocument; import slash.navigation.converter.gui.models.IntegerDocument; import slash.navigation.gui.Application; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DownloadsDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DownloadsDialog.java index 1232981683..2243b6f258 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DownloadsDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/DownloadsDialog.java @@ -24,7 +24,7 @@ import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.core.Spacer; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.renderer.DownloadsTableCellRenderer; import slash.navigation.converter.gui.renderer.SimpleHeaderRenderer; import slash.navigation.download.Download; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/FindPlaceDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/FindPlaceDialog.java index 19b6906ce5..7c4c1d1e8e 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/FindPlaceDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/FindPlaceDialog.java @@ -25,7 +25,7 @@ import com.intellij.uiDesigner.core.Spacer; import slash.navigation.common.NavigationPosition; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.models.PositionsModel; import slash.navigation.converter.gui.renderer.GoogleMapsPositionListCellRenderer; import slash.navigation.googlemaps.GoogleMapsService; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/InsertPositionsDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/InsertPositionsDialog.java index df604ad7a1..2b96d4de07 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/InsertPositionsDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/InsertPositionsDialog.java @@ -24,7 +24,7 @@ import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.core.Spacer; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.gui.helpers.JMenuHelper; import slash.navigation.gui.SimpleDialog; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/LoginDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/LoginDialog.java index ab14d64b45..af6e2d6bff 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/LoginDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/LoginDialog.java @@ -24,7 +24,7 @@ import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.core.Spacer; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.feedback.domain.RouteFeedback; import slash.navigation.gui.SimpleDialog; import slash.navigation.rest.exception.DuplicateNameException; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/OptionsDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/OptionsDialog.java index 48aceaa98e..2dc896f6a6 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/OptionsDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/OptionsDialog.java @@ -28,7 +28,7 @@ import slash.navigation.common.NumberPattern; import slash.navigation.common.UnitSystem; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.helpers.CheckBoxPreferencesSynchronizer; import slash.navigation.converter.gui.mapview.TravelMode; import slash.navigation.converter.gui.renderer.*; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/RenameDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/RenameDialog.java index 1507c59e49..b4a13f6122 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/RenameDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/RenameDialog.java @@ -25,7 +25,7 @@ import com.intellij.uiDesigner.core.Spacer; import slash.navigation.base.NavigationFormat; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.converter.gui.helpers.AbstractDocumentListener; import slash.navigation.gui.SimpleDialog; diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/SendErrorReportDialog.java b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/SendErrorReportDialog.java index 6d1fa8f700..3b598eff96 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/SendErrorReportDialog.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/dialogs/SendErrorReportDialog.java @@ -26,9 +26,8 @@ import slash.common.io.Files; import slash.common.log.LoggingHelper; import slash.navigation.converter.gui.RouteConverter; -import slash.navigation.converter.gui.actions.DialogAction; +import slash.navigation.gui.actions.DialogAction; import slash.navigation.gui.SimpleDialog; -import slash.navigation.gui.helpers.UIHelper; import javax.swing.*; import java.awt.*;