001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.gui;
003
004import java.awt.BorderLayout;
005import java.awt.Component;
006import java.util.List;
007
008import org.openstreetmap.josm.gui.SideButton;
009import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
010import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.StreetsideViewerPanel;
011import org.openstreetmap.josm.tools.I18n;
012
013/**
014 * Toggle dialog that shows an image and some buttons.
015 *
016 * @author nokutu
017 */
018
019public final class StreetsideViewerDialog extends ToggleDialog
020                 {
021
022        private static final long serialVersionUID = -8983900297628236197L;
023
024        private static final String BASE_TITLE = I18n.marktr("360° Streetside Viewer");
025
026        private static StreetsideViewerDialog instance;
027
028        /**
029         * Object containing the shown image and that handles zoom and drag
030         */
031        private StreetsideViewerPanel streetsideViewerPanel;
032
033        private StreetsideViewerDialog() {
034                super(I18n.tr(StreetsideViewerDialog.BASE_TITLE), "streetside-viewer", I18n.tr("Open Streetside Viewer window"),
035                                null, 200, true, StreetsidePreferenceSetting.class);
036                streetsideViewerPanel = new StreetsideViewerPanel();
037                createLayout(streetsideViewerPanel, true, null);
038        }
039
040        /**
041         * Returns the unique instance of the class.
042         *
043         * @return The unique instance of the class.
044         */
045        public static synchronized StreetsideViewerDialog getInstance() {
046                if (StreetsideViewerDialog.instance == null) {
047                        StreetsideViewerDialog.instance = new StreetsideViewerDialog();
048                }
049                return StreetsideViewerDialog.instance;
050        }
051
052        /**
053         * @return true, iff the singleton instance is present
054         */
055        public static boolean hasInstance() {
056                return StreetsideViewerDialog.instance != null;
057        }
058
059        /**
060         * Destroys the unique instance of the class.
061         */
062        public static synchronized void destroyInstance() {
063                StreetsideViewerDialog.instance = null;
064        }
065
066        /**
067         * Creates the layout of the dialog.
068         *
069         * @param data
070         *            The content of the dialog
071         * @param buttons
072         *            The buttons where you can click
073         */
074        public void createLayout(Component data, List<SideButton> buttons) {
075                removeAll();
076                createLayout(data, true, buttons);
077                add(titleBar, BorderLayout.NORTH);
078        }
079
080        public StreetsideViewerPanel getStreetsideViewerPanel() {
081                return streetsideViewerPanel;
082        }
083
084}