diff --git a/src/main/java/de/marhali/easyi18n/dialog/AddDialog.java b/src/main/java/de/marhali/easyi18n/dialog/AddDialog.java index be14827..84164e9 100644 --- a/src/main/java/de/marhali/easyi18n/dialog/AddDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/AddDialog.java @@ -4,11 +4,11 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogWrapper; -import de.marhali.easyi18n.InstanceManager; import de.marhali.easyi18n.model.action.TranslationCreate; import de.marhali.easyi18n.model.KeyPath; import de.marhali.easyi18n.model.Translation; import de.marhali.easyi18n.model.TranslationValue; +import de.marhali.easyi18n.model.action.TranslationUpdate; import de.marhali.easyi18n.settings.ProjectSettingsService; import org.jetbrains.annotations.NotNull; @@ -58,9 +58,10 @@ public class AddDialog extends TranslationDialog { } @Override - protected void handleExit(int exitCode) { + protected @Nullable TranslationUpdate handleExit(int exitCode) { if(exitCode == DialogWrapper.OK_EXIT_CODE) { - InstanceManager.get(project).processUpdate(new TranslationCreate(getState())); + return new TranslationCreate(getState()); } + return null; } } diff --git a/src/main/java/de/marhali/easyi18n/dialog/EditDialog.java b/src/main/java/de/marhali/easyi18n/dialog/EditDialog.java index f9ffa69..6c9662c 100644 --- a/src/main/java/de/marhali/easyi18n/dialog/EditDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/EditDialog.java @@ -4,13 +4,13 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogWrapper; -import de.marhali.easyi18n.InstanceManager; import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor; import de.marhali.easyi18n.model.action.TranslationDelete; import de.marhali.easyi18n.model.action.TranslationUpdate; import de.marhali.easyi18n.model.Translation; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -42,14 +42,14 @@ public class EditDialog extends TranslationDialog { } @Override - protected void handleExit(int exitCode) { + protected @Nullable TranslationUpdate handleExit(int exitCode) { switch (exitCode) { case DialogWrapper.OK_EXIT_CODE: - InstanceManager.get(project).processUpdate(new TranslationUpdate(origin, getState())); - break; + return new TranslationUpdate(origin, getState()); case DeleteActionDescriptor.EXIT_CODE: - InstanceManager.get(project).processUpdate(new TranslationDelete(origin)); - break; + return new TranslationDelete(origin); + default: + return null; } } } \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/dialog/TranslationDialog.java b/src/main/java/de/marhali/easyi18n/dialog/TranslationDialog.java index 5d69681..306e5ba 100644 --- a/src/main/java/de/marhali/easyi18n/dialog/TranslationDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/TranslationDialog.java @@ -4,24 +4,25 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.components.JBTextField; +import com.intellij.util.Consumer; import com.intellij.util.ui.FormBuilder; import de.marhali.easyi18n.InstanceManager; import de.marhali.easyi18n.model.KeyPath; import de.marhali.easyi18n.model.Translation; import de.marhali.easyi18n.model.TranslationValue; +import de.marhali.easyi18n.model.action.TranslationUpdate; import de.marhali.easyi18n.settings.ProjectSettings; import de.marhali.easyi18n.settings.ProjectSettingsService; import de.marhali.easyi18n.util.KeyPathConverter; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.border.EtchedBorder; import java.awt.*; -import java.util.HashMap; -import java.util.Map; -import java.util.ResourceBundle; +import java.util.*; /** * Base for add and edit translation dialogs. @@ -39,6 +40,8 @@ abstract class TranslationDialog { protected final JTextField keyField; protected final Map localeValueFields; + private final Set> callbacks; + /** * Constructs a new translation dialog. * @param project Opened project @@ -50,6 +53,8 @@ abstract class TranslationDialog { this.converter = new KeyPathConverter(settings); this.origin = origin; + this.callbacks = new HashSet<>(); + // Fields TranslationValue value = origin.getValue(); @@ -61,6 +66,15 @@ abstract class TranslationDialog { } } + /** + * Registers a callback that is called on dialog close with the final state. + * If the user aborts the dialog no callback is called. + * @param callback Callback to register + */ + public void registerCallback(Consumer callback) { + callbacks.add(callback); + } + /** * Implementation needs to configure the dialog. E.g. title, actions, ... * The implementation needs to set the provided centerPanel as the view panel. @@ -72,8 +86,9 @@ abstract class TranslationDialog { /** * Implementation needs to handle exit * @param exitCode See {@link com.intellij.openapi.ui.DialogWrapper} for exit codes + * @return update conclusion, null if aborted */ - protected abstract void handleExit(int exitCode); + protected abstract @Nullable TranslationUpdate handleExit(int exitCode); /** * Opens the translation modal and applies the appropriate logic on modal close. @@ -81,7 +96,12 @@ abstract class TranslationDialog { */ public void showAndHandle() { int exitCode = createDialog().show(); - handleExit(exitCode); + TranslationUpdate update = handleExit(exitCode); + + if(update != null) { + InstanceManager.get(project).processUpdate(update); + callbacks.forEach(callback -> callback.consume(update)); + } } /**