move update process into parent class
This commit is contained in:
parent
25c8f0f3db
commit
0a8a92d3f8
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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<String, JTextField> localeValueFields;
|
||||
|
||||
private final Set<Consumer<TranslationUpdate>> 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<TranslationUpdate> 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));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user