Example usage for javax.swing JDialog setModalityType

List of usage examples for javax.swing JDialog setModalityType

Introduction

In this page you can find the example usage for javax.swing JDialog setModalityType.

Prototype

public void setModalityType(ModalityType type) 

Source Link

Document

Sets the modality type for this dialog.

Usage

From source file:com.net2plan.gui.utils.onlineSimulationPane.OnlineSimulationPane.java

/**
 * Shows the future event list.//from   w w w  . j a va  2 s  .co  m
 *
 * @since 0.3.0
 */
public void viewFutureEventList() {
    final JDialog dialog = new JDialog();
    dialog.setTitle("Future event list");
    SwingUtils.configureCloseDialogOnEscape(dialog);
    dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
    dialog.setSize(new Dimension(500, 300));
    dialog.setLocationRelativeTo(null);
    dialog.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    dialog.setLayout(new MigLayout("fill, insets 0 0 0 0"));

    final String[] tableHeader = StringUtils.arrayOf("Id", "Time", "Priority", "Type", "To module",
            "Custom object");
    Object[][] data = new Object[1][tableHeader.length];

    DefaultTableModel model = new ClassAwareTableModel();
    model.setDataVector(new Object[1][tableHeader.length], tableHeader);

    JTable table = new AdvancedJTable(model);
    RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    table.setRowSorter(sorter);
    JScrollPane scrollPane = new JScrollPane(table);
    dialog.add(scrollPane, "grow");

    PriorityQueue<SimEvent> futureEventList = simKernel.getSimCore().getFutureEventList().getPendingEvents();
    if (!futureEventList.isEmpty()) {
        int numEvents = futureEventList.size();
        SimEvent[] futureEventList_array = futureEventList.toArray(new SimEvent[numEvents]);
        Arrays.sort(futureEventList_array, futureEventList.comparator());
        data = new Object[numEvents][tableHeader.length];

        for (int eventId = 0; eventId < numEvents; eventId++) {
            //            List<SimAction> actions = futureEventList_array[eventId].getEventActionList();
            Object customObject = futureEventList_array[eventId].getEventObject();
            data[eventId][0] = eventId;
            data[eventId][1] = StringUtils
                    .secondsToYearsDaysHoursMinutesSeconds(futureEventList_array[eventId].getEventTime());
            data[eventId][2] = futureEventList_array[eventId].getEventPriority();
            data[eventId][3] = futureEventList_array[eventId].getEventType();
            data[eventId][4] = futureEventList_array[eventId].getEventDestinationModule().toString();
            data[eventId][5] = customObject == null ? "none" : customObject;
        }
    }

    model.setDataVector(data, tableHeader);
    table.getTableHeader().addMouseListener(new ColumnFitAdapter());
    table.setDefaultRenderer(Double.class, new CellRenderers.NumberCellRenderer());

    dialog.setVisible(true);
}

From source file:org.moeaframework.analysis.plot.Plot.java

/**
 * Displays the chart in a blocking JDialog.
 * /*from  w  w  w  .  j  a v a 2  s.  c  o  m*/
 * @param width the width of the chart
 * @param height the height of the chart
 * @return the window that was created
 */
public JDialog showDialog(int width, int height) {
    JDialog frame = new JDialog();

    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(getChartPanel(), BorderLayout.CENTER);

    frame.setPreferredSize(new Dimension(width, height));
    frame.pack();

    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setTitle("MOEA Framework Plot");
    frame.setModalityType(ModalityType.APPLICATION_MODAL);
    frame.setVisible(true);

    return frame;
}

From source file:com.att.aro.ui.view.diagnostictab.GraphPanel.java

public void launchSliderDialog(int indexKey) {
    GoogleAnalyticsUtil.getGoogleAnalyticsInstance().sendViews("StartupDelayDialog");
    IVideoPlayer player = parent.getVideoPlayer();
    double maxDuration = player.getDuration();
    if (maxDuration != -1) {
        JDialog dialog = new SliderDialogBox(this, maxDuration, chunkInfo, indexKey, vcPlot.getAllChunks());
        dialog.pack();// www  . j  av a  2s .  c o m
        dialog.setSize(dialog.getPreferredSize());
        dialog.validate();
        dialog.setModalityType(ModalityType.APPLICATION_MODAL);
        dialog.setVisible(true);
    }
}

From source file:biomine.bmvis2.pipeline.sources.QueryGraphSource.java

@Override
public BMGraph getBMGraph() throws GraphOperationException {
    try {/*from w w  w . j  a  va2 s  .c  o m*/
        if (fetch == null) {
            fetch = new CrawlerFetch(query, neighborhood, database);
        }
        if (ret == null) {
            final JDialog dial = new JDialog((JFrame) null);

            dial.setTitle("BMVIS II - Query to database");
            dial.setSize(400, 200);
            dial.setMinimumSize(new Dimension(400, 200));
            dial.setResizable(false);
            final JTextArea text = new JTextArea();
            text.setEditable(false);

            dial.add(text);
            text.setText("...");

            class Z {
                Exception runExc = null;
            }

            final Z z = new Z();
            Runnable fetchThread = new Runnable() {
                public void run() {
                    try {
                        long startTime = System.currentTimeMillis();
                        while (!fetch.isDone()) {
                            fetch.update();
                            Thread.sleep(500);
                            long time = System.currentTimeMillis();
                            long elapsed = time - startTime;

                            if (elapsed > 30000) {
                                throw new GraphOperationException("Timeout while querying " + query);
                            }
                            final String newText = fetch.getState() + ":\n" + fetch.getMessages();
                            SwingUtilities.invokeLater(new Runnable() {
                                public void run() {
                                    text.setText(newText);
                                }
                            });
                        }

                        SwingUtilities.invokeAndWait(new Runnable() {
                            public void run() {
                                dial.setVisible(false);
                            }
                        });

                    } catch (Exception e) {
                        z.runExc = e;
                    }

                }

            };

            new Thread(fetchThread).start();
            dial.setModalityType(ModalityType.APPLICATION_MODAL);
            dial.setVisible(true);
            ret = fetch.getBMGraph();
            if (ret == null)
                throw new GraphOperationException(fetch.getMessages());
            if (z.runExc != null) {
                if (z.runExc instanceof GraphOperationException)
                    throw (GraphOperationException) z.runExc;
                else
                    throw new GraphOperationException(z.runExc);
            }
        }

    } catch (IOException e) {
        throw new GraphOperationException(e);
    }
    updateInfo();
    return ret;
}

From source file:org.gofleet.module.routing.RoutingMap.java

private Map<String, String> getValues(LatLon from) {
    final Map<String, String> mapa = new HashMap<String, String>();
    final JDialog frame = new JDialog(basicWindow.getFrame(), "Configuration");
    JPanel panel = new JPanel(new GridLayout(0, 2));
    int width = 10;

    final JTextField maxDistance = new JTextField(width);
    maxDistance.setText("10");
    final JTextField maxTime = new JTextField(width);
    maxTime.setText("8");
    final JTextField origin_x = new JTextField(width / 2);
    origin_x.setText((new Double(from.getX())).toString());
    final JTextField origin_y = new JTextField(width / 2);
    origin_y.setText((new Double(from.getY())).toString());
    final JTextField startTime = new JTextField(width);
    startTime.setText("7");
    final JTextField timeSpentOnStop = new JTextField(width);
    timeSpentOnStop.setText("1");
    JLabel lmaxDistance = new JLabel("Maximum Distance (km)");
    lmaxDistance.setLabelFor(maxDistance);
    JLabel lmaxTime = new JLabel("Maximum Time (hours)");
    lmaxTime.setLabelFor(maxTime);//from  ww  w .  jav a2s  .  c  o m
    JLabel lorigin = new JLabel("Point of Origin");
    lorigin.setLabelFor(origin_x);
    JLabel lstartTime = new JLabel("Start Time of Plan (0-24)");
    lstartTime.setLabelFor(startTime);
    JLabel ltimeSpentOnStop = new JLabel("Time Spent on Stop (hours)");
    ltimeSpentOnStop.setLabelFor(timeSpentOnStop);

    JButton close = new JButton("OK");
    close.addActionListener(new AbstractAction() {

        private static final long serialVersionUID = -8912729211256933464L;

        @Override
        public void actionPerformed(ActionEvent arg0) {
            try {
                mapa.put("maxDistance", maxDistance.getText());
                mapa.put("maxTime", maxTime.getText());
                mapa.put("origin_x", origin_x.getText());
                mapa.put("origin_y", origin_y.getText());
                mapa.put("startTime", startTime.getText());
                mapa.put("timeSpentOnStop", timeSpentOnStop.getText());
                frame.dispose();
            } catch (Throwable t) {
                log.error("Error configuring New Route Plan" + t);
                JOptionPane.showMessageDialog(RoutingMap.this, "Some values are wrong. Check them again.");
            }
        }
    });

    panel.add(lmaxDistance);
    panel.add(maxDistance);
    panel.add(lmaxTime);
    panel.add(maxTime);
    panel.add(lorigin);
    JPanel panel_origin = new JPanel();
    panel_origin.add(origin_x);
    panel_origin.add(origin_y);
    panel.add(panel_origin);
    panel.add(lstartTime);
    panel.add(startTime);
    panel.add(ltimeSpentOnStop);
    panel.add(timeSpentOnStop);
    panel.add(close);
    frame.add(panel, BorderLayout.CENTER);
    frame.pack();
    frame.setModalityType(ModalityType.APPLICATION_MODAL);
    frame.setVisible(true);

    return mapa;
}

From source file:pt.lsts.neptus.util.logdownload.LogsDownloaderWorkerActions.java

@SuppressWarnings("serial")
private AbstractAction createDeleteSelectedLogFoldersAction() {
    return new AbstractAction() {
        @Override// www. j  ava2  s.  c o m
        public void actionPerformed(ActionEvent e) {
            if (!gui.validateAndSetUI()) {
                gui.popupErrorConfigurationDialog();
                return;
            }
            AsyncTask task = new AsyncTask() {
                @Override
                public Object run() throws Exception {
                    gui.deleteSelectedLogFoldersButton.setEnabled(false);
                    // logFolderList.setEnabled(false);
                    // logFilesList.setEnabled(false);

                    Object[] objArray = gui.logFolderList.getSelectedValues();
                    if (objArray.length == 0)
                        return null;

                    JOptionPane jop = new JOptionPane(
                            I18n.text("Are you sure you want to delete "
                                    + "selected log folders from remote system?"),
                            JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);
                    JDialog dialog = jop.createDialog(gui.frameCompHolder,
                            I18n.text("Remote Delete Confirmation"));
                    dialog.setModalityType(ModalityType.DOCUMENT_MODAL);
                    dialog.setVisible(true);
                    Object userChoice = jop.getValue();
                    try {
                        if (((Integer) userChoice) != JOptionPane.YES_OPTION) {
                            return null;
                        }
                    } catch (Exception e2) {
                        NeptusLog.pub().error(e2.getMessage());
                        return null;
                    }
                    gui.deleteSelectedLogFoldersButton.setEnabled(true);
                    for (Object comp : objArray) {
                        try {
                            LogFolderInfo logFd = (LogFolderInfo) comp;
                            boolean resDel = worker.deleteLogFolderFromServer(logFd);
                            if (resDel) {
                                logFd.setState(LogFolderInfo.State.LOCAL);
                                LinkedHashSet<LogFileInfo> logFiles = logFd.getLogFiles();

                                LinkedHashSet<LogFileInfo> toDelFL = LogsDownloaderWorkerGUIUtil
                                        .updateLogFilesStateDeleted(logFiles, gui.downloadWorkersHolder,
                                                worker.getDirBaseToStoreFiles(), worker.getLogLabel());
                                for (LogFileInfo lfx : toDelFL) {
                                    if (resetting)
                                        break;

                                    logFd.getLogFiles().remove(lfx);
                                }
                            }
                        } catch (Exception e) {
                            NeptusLog.pub().debug(e.getMessage());
                        }

                        if (resetting)
                            break;
                    }
                    worker.updateFilesListGUIForFolderSelected();
                    return true;
                }

                @Override
                public void finish() {
                    gui.deleteSelectedLogFoldersButton.setEnabled(true);
                    gui.logFilesList.revalidate();
                    gui.logFilesList.repaint();
                    gui.logFilesList.setEnabled(true);
                    gui.logFolderList.revalidate();
                    gui.logFolderList.repaint();
                    gui.logFolderList.setEnabled(true);
                    try {
                        this.getResultOrThrow();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };

            AsyncWorker.getWorkerThread().postTask(task);
        }
    };
}

From source file:pt.lsts.neptus.util.logdownload.LogsDownloaderWorkerActions.java

@SuppressWarnings("serial")
private AbstractAction createDeleteSelectedLogFilesAction() {
    return new AbstractAction() {
        @Override//from   w  w w  . j a v a2  s. com
        public void actionPerformed(ActionEvent e) {
            if (!gui.validateAndSetUI()) {
                gui.popupErrorConfigurationDialog();
                return;
            }
            AsyncTask task = new AsyncTask() {
                @Override
                public Object run() throws Exception {
                    gui.deleteSelectedLogFilesButton.setEnabled(false);

                    Object[] objArray = gui.logFilesList.getSelectedValues();
                    if (objArray.length == 0)
                        return null;

                    JOptionPane jop = new JOptionPane(
                            I18n.text("Are you sure you want to delete selected log files from remote system?"),
                            JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);
                    JDialog dialog = jop.createDialog(gui.frameCompHolder,
                            I18n.text("Remote Delete Confirmation"));
                    dialog.setModalityType(ModalityType.DOCUMENT_MODAL);
                    dialog.setVisible(true);
                    Object userChoice = jop.getValue();
                    try {
                        if (((Integer) userChoice) != JOptionPane.YES_OPTION) {
                            return null;
                        }
                    } catch (Exception e2) {
                        NeptusLog.pub().error(e2.getMessage());
                        return null;
                    }
                    gui.deleteSelectedLogFoldersButton.setEnabled(true);

                    LinkedHashSet<LogFileInfo> logFiles = new LinkedHashSet<LogFileInfo>();
                    for (Object comp : objArray) {
                        if (resetting)
                            break;

                        try {
                            LogFileInfo lfx = (LogFileInfo) comp;
                            if (worker.deleteLogFileFromServer(lfx))
                                logFiles.add(lfx);
                        } catch (Exception e) {
                            NeptusLog.pub().debug(e.getMessage());
                        }
                    }
                    if (!resetting) {
                        LogsDownloaderWorkerGUIUtil.updateLogFilesStateDeleted(logFiles,
                                gui.downloadWorkersHolder, worker.getDirBaseToStoreFiles(),
                                worker.getLogLabel());

                        worker.updateFilesListGUIForFolderSelected();
                    }
                    return true;
                }

                @Override
                public void finish() {
                    gui.deleteSelectedLogFilesButton.setEnabled(true);
                    gui.logFilesList.revalidate();
                    gui.logFilesList.repaint();
                    gui.logFilesList.setEnabled(true);
                    gui.logFolderList.revalidate();
                    gui.logFolderList.repaint();
                    gui.logFolderList.setEnabled(true);
                    try {
                        this.getResultOrThrow();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };

            AsyncWorker.getWorkerThread().postTask(task);
        }
    };
}

From source file:utybo.branchingstorytree.swing.editor.StoryEditor.java

public StoryEditor(BranchingStory baseStory) throws BSTException {
    setLayout(new MigLayout("hidemode 3", "[grow]", "[][grow]"));

    JToolBar toolBar = new JToolBar();
    toolBar.setBorder(null);//from  w  w  w  .  j a  v a2  s  .  c o m
    toolBar.setFloatable(false);
    add(toolBar, "cell 0 0,growx");

    JButton btnSaveAs = new JButton(Lang.get("saveas"), new ImageIcon(Icons.getImage("Save As", 16)));
    btnSaveAs.addActionListener(e -> {
        saveAs();
    });
    toolBar.add(btnSaveAs);

    JButton btnSave = new JButton(Lang.get("save"), new ImageIcon(Icons.getImage("Save", 16)));
    btnSave.addActionListener(e -> {
        save();
    });
    toolBar.add(btnSave);

    JButton btnPlay = new JButton(Lang.get("play"), new ImageIcon(Icons.getImage("Circled Play", 16)));
    btnPlay.addActionListener(ev -> {
        try {
            String s = exportToString();
            File f = Files.createTempDirectory("openbst").toFile();
            File bstFile = new File(f, "expoted.bst");
            try (FileOutputStream fos = new FileOutputStream(bstFile);) {
                IOUtils.write(s, fos, StandardCharsets.UTF_8);
            }
            OpenBSTGUI.getInstance().openStory(bstFile);
        } catch (Exception e) {
            OpenBST.LOG.error("Export failed", e);
            Messagers.showException(OpenBSTGUI.getInstance(), Lang.get("editor.exportfail"), e);
        }
    });
    toolBar.add(btnPlay);

    JButton btnFilePreview = new JButton(Lang.get("editor.exportpreview"),
            new ImageIcon(Icons.getImage("PreviewText", 16)));
    btnFilePreview.addActionListener(e -> {
        try {
            String s = exportToString();
            JDialog dialog = new JDialog(OpenBSTGUI.getInstance(), Lang.get("editor.exportpreview"));
            JTextArea jta = new JTextArea(s);
            jta.setLineWrap(true);
            jta.setWrapStyleWord(true);
            dialog.add(new JScrollPane(jta));

            dialog.setModalityType(ModalityType.APPLICATION_MODAL);
            dialog.setSize((int) (Icons.getScale() * 350), (int) (Icons.getScale() * 300));
            dialog.setLocationRelativeTo(OpenBSTGUI.getInstance());
            dialog.setVisible(true);
        } catch (Exception x) {
            OpenBST.LOG.error("Failed to preview", x);
            Messagers.showException(OpenBSTGUI.getInstance(), Lang.get("editor.previewerror"), x);
        }
    });
    toolBar.add(btnFilePreview);

    Component horizontalGlue = Box.createHorizontalGlue();
    toolBar.add(horizontalGlue);

    JButton btnClose = new JButton(Lang.get("close"), new ImageIcon(Icons.getImage("Cancel", 16)));
    btnClose.addActionListener(e -> {
        askClose();
    });
    toolBar.add(btnClose);

    for (final Component component : toolBar.getComponents()) {
        if (component instanceof JButton) {
            ((JButton) component).setHideActionText(false);
            ((JButton) component).setToolTipText(((JButton) component).getText());
            ((JButton) component).setText("");
        }
    }

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setTabPlacement(JTabbedPane.LEFT);
    add(tabbedPane, "cell 0 1,grow");

    tabbedPane.addTab("Beta Warning", new StoryEditorWelcomeScreen());

    details = new StoryDetailsEditor(this);
    tabbedPane.addTab(Lang.get("editor.details"), details);

    nodesEditor = new StoryNodesEditor();
    tabbedPane.addTab(Lang.get("editor.nodes"), nodesEditor);

    this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("control S"),
            "doSave");
    this.getActionMap().put("doSave", new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            save();
        }
    });

    importFrom(baseStory);
}

From source file:utybo.branchingstorytree.swing.OpenBSTGUI.java

private JMenu createShortMenu() {
    JMenu shortMenu = new JMenu();
    addDarkModeCallback(b -> {/* w w  w .j a  v a2 s .co m*/
        shortMenu.setBackground(b ? OPENBST_BLUE.darker().darker() : OPENBST_BLUE.brighter());
        shortMenu.setForeground(b ? Color.WHITE : OPENBST_BLUE);
    });
    shortMenu.setBackground(OPENBST_BLUE.brighter());
    shortMenu.setForeground(OPENBST_BLUE);
    shortMenu.setText(Lang.get("banner.title"));
    shortMenu.setIcon(new ImageIcon(Icons.getImage("Logo", 16)));
    JMenuItem label = new JMenuItem(Lang.get("menu.title"));
    label.setEnabled(false);
    shortMenu.add(label);
    shortMenu.addSeparator();
    shortMenu.add(
            new JMenuItem(new AbstractAction(Lang.get("menu.open"), new ImageIcon(Icons.getImage("Open", 16))) {
                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    openStory(VisualsUtils.askForFile(OpenBSTGUI.this, Lang.get("file.title")));
                }
            }));

    shortMenu.addSeparator();

    shortMenu.add(new JMenuItem(
            new AbstractAction(Lang.get("menu.create"), new ImageIcon(Icons.getImage("Add Property", 16))) {
                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    doNewEditor();
                }
            }));

    JMenu additionalMenu = new JMenu(Lang.get("menu.advanced"));
    shortMenu.add(additionalMenu);

    additionalMenu.add(new JMenuItem(
            new AbstractAction(Lang.get("menu.package"), new ImageIcon(Icons.getImage("Open Archive", 16))) {
                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    new PackageDialog(instance).setVisible(true);
                }
            }));
    additionalMenu.add(new JMenuItem(
            new AbstractAction(Lang.get("langcheck"), new ImageIcon(Icons.getImage("LangCheck", 16))) {
                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    final Map<String, String> languages = new Gson()
                            .fromJson(new InputStreamReader(
                                    OpenBST.class.getResourceAsStream(
                                            "/utybo/branchingstorytree/swing/lang/langs.json"),
                                    StandardCharsets.UTF_8), new TypeToken<Map<String, String>>() {
                                    }.getType());
                    languages.remove("en");
                    languages.remove("default");
                    JComboBox<String> jcb = new JComboBox<>(new Vector<>(languages.keySet()));
                    JPanel panel = new JPanel();
                    panel.add(new JLabel(Lang.get("langcheck.choose")));
                    panel.add(jcb);
                    int result = JOptionPane.showOptionDialog(OpenBSTGUI.this, panel, Lang.get("langcheck"),
                            JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
                    if (result == JOptionPane.OK_OPTION) {
                        Locale selected = new Locale((String) jcb.getSelectedItem());
                        if (!Lang.getMap().keySet().contains(selected)) {
                            try {
                                Lang.loadTranslationsFromFile(selected,
                                        OpenBST.class
                                                .getResourceAsStream("/utybo/branchingstorytree/swing/lang/"
                                                        + languages.get(jcb.getSelectedItem().toString())));
                            } catch (UnrespectedModelException | IOException e1) {
                                LOG.warn("Failed to load translation file", e1);
                            }
                        }
                        ArrayList<String> list = new ArrayList<>();
                        Lang.getLocaleMap(Locale.ENGLISH).forEach((k, v) -> {
                            if (!Lang.getLocaleMap(selected).containsKey(k)) {
                                list.add(k + "\n");
                            }
                        });
                        StringBuilder sb = new StringBuilder();
                        Collections.sort(list);
                        list.forEach(s -> sb.append(s));
                        JDialog dialog = new JDialog(OpenBSTGUI.this, Lang.get("langcheck"));
                        dialog.getContentPane().setLayout(new MigLayout());
                        dialog.getContentPane().add(new JLabel(Lang.get("langcheck.result")),
                                "pushx, growx, wrap");
                        JTextArea area = new JTextArea();
                        area.setLineWrap(true);
                        area.setWrapStyleWord(true);
                        area.setText(sb.toString());
                        area.setEditable(false);
                        area.setBorder(BorderFactory.createLoweredBevelBorder());
                        JScrollPane jsp = new JScrollPane(area);
                        jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                        dialog.getContentPane().add(jsp, "pushx, pushy, growx, growy");
                        dialog.setSize((int) (Icons.getScale() * 300), (int) (Icons.getScale() * 300));
                        dialog.setLocationRelativeTo(OpenBSTGUI.this);
                        dialog.setModalityType(ModalityType.APPLICATION_MODAL);
                        dialog.setVisible(true);
                    }
                }
            }));

    additionalMenu.add(new JMenuItem(
            new AbstractAction(Lang.get("menu.debug"), new ImageIcon(Icons.getImage("Code", 16))) {
                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    DebugInfo.launch(OpenBSTGUI.this);
                }
            }));

    JMenu includedFiles = new JMenu("Included BST files");

    for (Entry<String, String> entry : OpenBST.getInternalFiles().entrySet()) {
        JMenuItem jmi = new JMenuItem(entry.getKey());
        jmi.addActionListener(ev -> {
            String path = "/bst/" + entry.getValue();
            InputStream is = OpenBSTGUI.class.getResourceAsStream(path);
            ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(OpenBSTGUI.this, "Extracting...",
                    is);
            new Thread(() -> {
                try {
                    File f = File.createTempFile("openbstinternal", ".bsp");
                    FileOutputStream fos = new FileOutputStream(f);
                    IOUtils.copy(pmis, fos);
                    openStory(f);
                } catch (final IOException e) {
                    LOG.error("IOException caught", e);
                    showException(Lang.get("file.error").replace("$e", e.getClass().getSimpleName())
                            .replace("$m", e.getMessage()), e);
                }

            }).start();

        });
        includedFiles.add(jmi);
    }
    additionalMenu.add(includedFiles);

    shortMenu.addSeparator();

    JMenu themesMenu = new JMenu(Lang.get("menu.themes"));
    shortMenu.add(themesMenu);
    themesMenu.setIcon(new ImageIcon(Icons.getImage("Color Wheel", 16)));
    ButtonGroup themesGroup = new ButtonGroup();
    JRadioButtonMenuItem jrbmi;

    jrbmi = new JRadioButtonMenuItem(Lang.get("menu.themes.dark"));
    if (0 == selectedTheme) {
        jrbmi.setSelected(true);
    }
    jrbmi.addActionListener(e -> switchLaF(0, DARK_THEME));
    themesMenu.add(jrbmi);
    themesGroup.add(jrbmi);

    jrbmi = new JRadioButtonMenuItem(Lang.get("menu.themes.light"));
    if (1 == selectedTheme) {
        jrbmi.setSelected(true);
    }
    jrbmi.addActionListener(e -> switchLaF(1, LIGHT_THEME));
    themesMenu.add(jrbmi);
    themesGroup.add(jrbmi);

    jrbmi = new JRadioButtonMenuItem(Lang.get("menu.themes.debug"));
    if (2 == selectedTheme) {
        jrbmi.setSelected(true);
    }
    jrbmi.addActionListener(e -> switchLaF(2, DEBUG_THEME));
    themesMenu.add(jrbmi);
    themesGroup.add(jrbmi);

    JMenu additionalLightThemesMenu = new JMenu(Lang.get("menu.themes.morelight"));
    int j = 3;
    for (Map.Entry<String, LookAndFeel> entry : ADDITIONAL_LIGHT_THEMES.entrySet()) {
        int jf = j;
        jrbmi = new JRadioButtonMenuItem(entry.getKey());
        if (j == selectedTheme)
            jrbmi.setSelected(true);
        jrbmi.addActionListener(e -> switchLaF(jf, entry.getValue()));
        additionalLightThemesMenu.add(jrbmi);
        themesGroup.add(jrbmi);
        j++;
    }
    themesMenu.add(additionalLightThemesMenu);

    JMenu additionalDarkThemesMenu = new JMenu(Lang.get("menu.themes.moredark"));
    for (Map.Entry<String, LookAndFeel> entry : ADDITIONAL_DARK_THEMES.entrySet()) {
        int jf = j;
        jrbmi = new JRadioButtonMenuItem(entry.getKey());
        if (j == selectedTheme)
            jrbmi.setSelected(true);
        jrbmi.addActionListener(e -> switchLaF(jf, entry.getValue()));
        additionalDarkThemesMenu.add(jrbmi);
        themesGroup.add(jrbmi);
        j++;
    }
    themesMenu.add(additionalDarkThemesMenu);

    shortMenu.add(new JMenuItem(
            new AbstractAction(Lang.get("menu.about"), new ImageIcon(Icons.getImage("About", 16))) {
                /**
                 *
                 */
                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    new AboutDialog(instance).setVisible(true);
                }
            }));

    return shortMenu;
}