Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.formdev.flatlaf.FlatClientProperties;

import cuchaz.enigma.gui.events.ConvertingTextFieldListener;
import cuchaz.enigma.gui.events.ConvertingTextFieldListener.StopEditingCause;
import cuchaz.enigma.gui.util.GuiUtil;
import cuchaz.enigma.utils.validation.ParameterizedMessage;
import cuchaz.enigma.utils.validation.Validatable;
Expand All @@ -38,6 +39,7 @@ public ConvertingTextField(String text) {
this.ui = new JPanel();
this.ui.setLayout(new GridLayout(1, 1, 0, 0));
this.textField = new ValidatableTextField(text);
this.textField.setFocusTraversalKeysEnabled(false);
this.textField.putClientProperty(FlatClientProperties.SELECT_ALL_ON_FOCUS_POLICY, FlatClientProperties.SELECT_ALL_ON_FOCUS_POLICY_NEVER);
this.label = GuiUtil.unboldLabel(new JLabel(text));
this.label.setBorder(BorderFactory.createLoweredBevelBorder());
Expand All @@ -53,18 +55,26 @@ public void mouseClicked(MouseEvent e) {
@Override
public void focusLost(FocusEvent e) {
if (!hasChanges()) {
stopEditing(true);
stopEditing(StopEditingCause.ABORT);
}
}
});

this.textField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
stopEditing(true);
} else if (e.getKeyCode() == KeyEvent.VK_ENTER) {
stopEditing(false);
switch (e.getKeyCode()) {
case KeyEvent.VK_ESCAPE:
stopEditing(StopEditingCause.ABORT);
break;
case KeyEvent.VK_ENTER:
stopEditing(StopEditingCause.DO);
break;
case KeyEvent.VK_TAB:
stopEditing(StopEditingCause.TAB);
break;
default:
break;
}
}
});
Expand All @@ -87,16 +97,16 @@ public void startEditing() {
this.listeners.forEach(l -> l.onStartEditing(this));
}

public void stopEditing(boolean abort) {
public void stopEditing(StopEditingCause cause) {
if (!editing) {
return;
}

if (!listeners.stream().allMatch(l -> l.tryStopEditing(this, abort))) {
if (!listeners.stream().allMatch(l -> l.tryStopEditing(this, cause))) {
return;
}

if (abort) {
if (cause == StopEditingCause.ABORT) {
this.textField.setText(this.label.getText());
} else {
this.label.setText(this.textField.getText());
Expand All @@ -107,11 +117,11 @@ public void stopEditing(boolean abort) {
this.editing = false;
this.ui.validate();
this.ui.repaint();
this.listeners.forEach(l -> l.onStopEditing(this, abort));
this.listeners.forEach(l -> l.onStopEditing(this, cause));
}

public void setText(String text) {
stopEditing(true);
stopEditing(StopEditingCause.ABORT);
this.label.setText(text);
this.textField.setText(text);
}
Expand All @@ -126,7 +136,7 @@ public void setEditText(String text) {

public void setEditable(boolean editable) {
if (!editable) {
this.stopEditing(true);
this.stopEditing(StopEditingCause.ABORT);
}

this.label.setEnabled(editable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@
import cuchaz.enigma.gui.elements.ConvertingTextField;

public interface ConvertingTextFieldListener {
enum StopEditingCause {
ABORT,
DO,
TAB
}

default void onStartEditing(ConvertingTextField field) {
}

default boolean tryStopEditing(ConvertingTextField field, boolean abort) {
default boolean tryStopEditing(ConvertingTextField field, StopEditingCause cause) {
return true;
}

default void onStopEditing(ConvertingTextField field, boolean abort) {
default void onStopEditing(ConvertingTextField field, StopEditingCause cause) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import cuchaz.enigma.EnigmaProject;
import cuchaz.enigma.gui.EditableType;
Expand All @@ -22,6 +23,8 @@
import cuchaz.enigma.gui.util.GridBagConstraintsBuilder;
import cuchaz.enigma.gui.util.GuiUtil;
import cuchaz.enigma.gui.util.ScaleUtil;
import cuchaz.enigma.source.RenamableTokenType;
import cuchaz.enigma.source.Token;
import cuchaz.enigma.translation.mapping.AccessModifier;
import cuchaz.enigma.translation.mapping.EntryChange;
import cuchaz.enigma.translation.mapping.EntryMapping;
Expand Down Expand Up @@ -181,8 +184,8 @@ public void onStartEditing(ConvertingTextField field) {
}

@Override
public boolean tryStopEditing(ConvertingTextField field, boolean abort) {
if (abort) {
public boolean tryStopEditing(ConvertingTextField field, StopEditingCause cause) {
if (cause == StopEditingCause.ABORT) {
return true;
}

Expand All @@ -193,11 +196,33 @@ public boolean tryStopEditing(ConvertingTextField field, boolean abort) {
}

@Override
public void onStopEditing(ConvertingTextField field, boolean abort) {
if (!abort) {
public void onStopEditing(ConvertingTextField field, StopEditingCause cause) {
if (cause != StopEditingCause.ABORT) {
vc.reset();
vc.setActiveElement(field);
doRename(field.getText());

if (cause == StopEditingCause.TAB) {
EditorPanel editor = gui.getActiveEditor();

if (editor == null) {
return;
}

Token token = editor.getToken(editor.getEditor().getCaretPosition());

SwingUtilities.invokeLater(() -> {
Token next = editor.getSource().getTokenStore().getByType().get(RenamableTokenType.OBFUSCATED).higher(token);

if (next == null) {
editor.getEditor().requestFocusInWindow();
} else {
editor.navigateToToken(next);
}
});

return;
}
}

EditorPanel e = gui.getActiveEditor();
Expand Down