diff --git a/src/main/java/com/jvms/i18neditor/editor/EditorMenuBar.java b/src/main/java/com/jvms/i18neditor/editor/EditorMenuBar.java index f1981bf..1cb2e9d 100644 --- a/src/main/java/com/jvms/i18neditor/editor/EditorMenuBar.java +++ b/src/main/java/com/jvms/i18neditor/editor/EditorMenuBar.java @@ -24,6 +24,8 @@ import com.jvms.i18neditor.editor.menu.DuplicateTranslationMenuItem; import com.jvms.i18neditor.editor.menu.ExpandTranslationsMenuItem; import com.jvms.i18neditor.editor.menu.FindTranslationMenuItem; +import com.jvms.i18neditor.editor.menu.NextTranslationErrorMenuItem; +import com.jvms.i18neditor.editor.menu.PreviousTranslationErrorMenuItem; import com.jvms.i18neditor.editor.menu.RemoveTranslationMenuItem; import com.jvms.i18neditor.editor.menu.RenameTranslationMenuItem; import com.jvms.i18neditor.swing.util.Dialogs; @@ -195,6 +197,9 @@ private void setupUI() { viewMenu.setMnemonic(MessageBundle.getMnemonic("menu.view.vk")); viewMenu.add(new ExpandTranslationsMenuItem(tree)); viewMenu.add(new CollapseTranslationsMenuItem(tree)); + viewMenu.addSeparator(); + viewMenu.add(new PreviousTranslationErrorMenuItem(tree)); + viewMenu.add(new NextTranslationErrorMenuItem(tree)); // Settings menu settingsMenu = new JMenu(MessageBundle.get("menu.settings.title")); diff --git a/src/main/java/com/jvms/i18neditor/editor/TranslationTree.java b/src/main/java/com/jvms/i18neditor/editor/TranslationTree.java index 32f9eb4..0c90bec 100644 --- a/src/main/java/com/jvms/i18neditor/editor/TranslationTree.java +++ b/src/main/java/com/jvms/i18neditor/editor/TranslationTree.java @@ -47,6 +47,32 @@ public void expandAll() { } } + public void gotoPreviousError() { + TranslationTreeNode node = getSelectionNode(); + do { + node = (TranslationTreeNode)node.getPreviousNode(); + if (node != null) { + if (node.hasError()) { + setSelectionNode(node); + break; + } + } + } while (node != null); + } + + public void gotoNextError() { + TranslationTreeNode node = getSelectionNode(); + do { + node = (TranslationTreeNode)node.getNextNode(); + if (node != null) { + if (node.hasError()) { + setSelectionNode(node); + break; + } + } + } while (node != null); + } + public void expand(List nodes) { nodes.forEach(n -> expandPath(new TreePath(n.getPath()))); } diff --git a/src/main/java/com/jvms/i18neditor/editor/menu/NextTranslationErrorMenuItem.java b/src/main/java/com/jvms/i18neditor/editor/menu/NextTranslationErrorMenuItem.java new file mode 100644 index 0000000..7072762 --- /dev/null +++ b/src/main/java/com/jvms/i18neditor/editor/menu/NextTranslationErrorMenuItem.java @@ -0,0 +1,25 @@ +package com.jvms.i18neditor.editor.menu; + +import java.awt.Toolkit; +import java.awt.event.KeyEvent; + +import javax.swing.JMenuItem; +import javax.swing.KeyStroke; + +import com.jvms.i18neditor.editor.TranslationTree; +import com.jvms.i18neditor.util.MessageBundle; + +/** + * This class represents a menu item to navigate to the next translation error in the translation tree. + * + * @author Frédéric Courchesne + */ +public class NextTranslationErrorMenuItem extends JMenuItem { + private static final long serialVersionUID = -5174004501514597851L; + + public NextTranslationErrorMenuItem(TranslationTree tree) { + super(MessageBundle.get("menu.view.nexterror.title")); + setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + addActionListener(e -> tree.gotoNextError()); + } +} \ No newline at end of file diff --git a/src/main/java/com/jvms/i18neditor/editor/menu/PreviousTranslationErrorMenuItem.java b/src/main/java/com/jvms/i18neditor/editor/menu/PreviousTranslationErrorMenuItem.java new file mode 100644 index 0000000..c7e4151 --- /dev/null +++ b/src/main/java/com/jvms/i18neditor/editor/menu/PreviousTranslationErrorMenuItem.java @@ -0,0 +1,25 @@ +package com.jvms.i18neditor.editor.menu; + +import java.awt.Toolkit; +import java.awt.event.KeyEvent; + +import javax.swing.JMenuItem; +import javax.swing.KeyStroke; + +import com.jvms.i18neditor.editor.TranslationTree; +import com.jvms.i18neditor.util.MessageBundle; + +/** + * This class represents a menu item to navigate to the previous translation error in the translation tree. + * + * @author Frédéric Courchesne + */ +public class PreviousTranslationErrorMenuItem extends JMenuItem { + private static final long serialVersionUID = 1605393223084076564L; + + public PreviousTranslationErrorMenuItem(TranslationTree tree) { + super(MessageBundle.get("menu.view.previouserror.title")); + setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + addActionListener(e -> tree.gotoPreviousError()); + } +} \ No newline at end of file diff --git a/src/main/resources/bundles/messages.properties b/src/main/resources/bundles/messages.properties index dd1542f..c19282f 100644 --- a/src/main/resources/bundles/messages.properties +++ b/src/main/resources/bundles/messages.properties @@ -74,6 +74,8 @@ menu.settings.title=Settings menu.settings.vk=S menu.view.collapse.title=Collapse All Translation Keys menu.view.expand.title=Expand All Translation Keys +menu.view.previouserror.title=Goto Previous Error +menu.view.nexterror.title=Goto Next Error menu.view.title=View menu.view.vk=V resources.create.error=An error occurred while creating translation files.