/******************************************************************************* * Copyright (c) 2015 Jeff Martin. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public * License v3.0 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * *
Contributors:
* Jeff Martin - initial API and implementation
******************************************************************************/
package cuchaz.enigma.gui.dialog;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Locale;
import java.util.Objects;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;
import javax.swing.text.html.HTML;
import cuchaz.enigma.analysis.EntryReference;
import cuchaz.enigma.gui.GuiController;
import cuchaz.enigma.gui.config.UiConfig;
import cuchaz.enigma.gui.elements.ValidatableTextArea;
import cuchaz.enigma.gui.util.GuiUtil;
import cuchaz.enigma.gui.util.ScaleUtil;
import cuchaz.enigma.translation.mapping.EntryChange;
import cuchaz.enigma.translation.mapping.EntryMapping;
import cuchaz.enigma.translation.representation.entry.Entry;
import cuchaz.enigma.utils.I18n;
import cuchaz.enigma.utils.validation.ValidationContext;
public class JavadocDialog {
private final JDialog ui;
private final GuiController controller;
private final Entry> entry;
private final ValidatableTextArea text;
private final ValidationContext vc = new ValidationContext();
private JavadocDialog(JFrame parent, GuiController controller, Entry> entry, String preset) {
this.ui = new JDialog(parent, I18n.translate("javadocs.edit"));
this.controller = controller;
this.entry = entry;
this.text = new ValidatableTextArea(10, 40);
// set up dialog
Container contentPane = ui.getContentPane();
contentPane.setLayout(new BorderLayout());
// editor panel
this.text.setText(preset);
this.text.setTabSize(2);
contentPane.add(new JScrollPane(this.text), BorderLayout.CENTER);
this.text.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.VK_ENTER:
if (event.isControlDown()) {
doSave();
if (vc.canProceed()) {
close();
}
}
break;
case KeyEvent.VK_ESCAPE:
close();
break;
default:
break;
}
}
});
this.text.setFont(UiConfig.activeUseCustomFonts() ? UiConfig.getEditorFont() : UiConfig.getFallbackEditorFont());
// buttons panel
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
buttonsPanel.add(GuiUtil.unboldLabel(new JLabel(I18n.translate("javadocs.instruction"))));
JButton cancelButton = new JButton(I18n.translate("prompt.cancel"));
cancelButton.addActionListener(event -> close());
buttonsPanel.add(cancelButton);
JButton saveButton = new JButton(I18n.translate("prompt.save"));
saveButton.addActionListener(event -> doSave());
buttonsPanel.add(saveButton);
contentPane.add(buttonsPanel, BorderLayout.SOUTH);
// tags panel
JMenuBar tagsMenu = new JMenuBar();
// add javadoc tags
for (JavadocTag tag : JavadocTag.values()) {
JButton tagButton = new JButton(tag.getText());
tagButton.addActionListener(action -> {
boolean textSelected = text.getSelectedText() != null;
String tagText = tag.isInline() ? "{" + tag.getText() + " }" : tag.getText() + " ";
if (textSelected) {
if (tag.isInline()) {
tagText = "{" + tag.getText() + " " + text.getSelectedText() + "}";
} else {
tagText = tag.getText() + " " + text.getSelectedText();
}
text.replaceSelection(tagText);
} else {
text.insert(tagText, text.getCaretPosition());
}
if (tag.isInline()) {
text.setCaretPosition(text.getCaretPosition() - 1);
}
text.grabFocus();
});
tagsMenu.add(tagButton);
}
// add html tags
JComboBox