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.DialogBuilder;
|
||||||
import com.intellij.openapi.ui.DialogWrapper;
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
|
|
||||||
import de.marhali.easyi18n.InstanceManager;
|
|
||||||
import de.marhali.easyi18n.model.action.TranslationCreate;
|
import de.marhali.easyi18n.model.action.TranslationCreate;
|
||||||
import de.marhali.easyi18n.model.KeyPath;
|
import de.marhali.easyi18n.model.KeyPath;
|
||||||
import de.marhali.easyi18n.model.Translation;
|
import de.marhali.easyi18n.model.Translation;
|
||||||
import de.marhali.easyi18n.model.TranslationValue;
|
import de.marhali.easyi18n.model.TranslationValue;
|
||||||
|
import de.marhali.easyi18n.model.action.TranslationUpdate;
|
||||||
import de.marhali.easyi18n.settings.ProjectSettingsService;
|
import de.marhali.easyi18n.settings.ProjectSettingsService;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -58,9 +58,10 @@ public class AddDialog extends TranslationDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleExit(int exitCode) {
|
protected @Nullable TranslationUpdate handleExit(int exitCode) {
|
||||||
if(exitCode == DialogWrapper.OK_EXIT_CODE) {
|
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.DialogBuilder;
|
||||||
import com.intellij.openapi.ui.DialogWrapper;
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
|
|
||||||
import de.marhali.easyi18n.InstanceManager;
|
|
||||||
import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor;
|
import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor;
|
||||||
import de.marhali.easyi18n.model.action.TranslationDelete;
|
import de.marhali.easyi18n.model.action.TranslationDelete;
|
||||||
import de.marhali.easyi18n.model.action.TranslationUpdate;
|
import de.marhali.easyi18n.model.action.TranslationUpdate;
|
||||||
import de.marhali.easyi18n.model.Translation;
|
import de.marhali.easyi18n.model.Translation;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
@ -42,14 +42,14 @@ public class EditDialog extends TranslationDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleExit(int exitCode) {
|
protected @Nullable TranslationUpdate handleExit(int exitCode) {
|
||||||
switch (exitCode) {
|
switch (exitCode) {
|
||||||
case DialogWrapper.OK_EXIT_CODE:
|
case DialogWrapper.OK_EXIT_CODE:
|
||||||
InstanceManager.get(project).processUpdate(new TranslationUpdate(origin, getState()));
|
return new TranslationUpdate(origin, getState());
|
||||||
break;
|
|
||||||
case DeleteActionDescriptor.EXIT_CODE:
|
case DeleteActionDescriptor.EXIT_CODE:
|
||||||
InstanceManager.get(project).processUpdate(new TranslationDelete(origin));
|
return new TranslationDelete(origin);
|
||||||
break;
|
default:
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,24 +4,25 @@ import com.intellij.openapi.project.Project;
|
|||||||
import com.intellij.openapi.ui.DialogBuilder;
|
import com.intellij.openapi.ui.DialogBuilder;
|
||||||
import com.intellij.ui.components.JBScrollPane;
|
import com.intellij.ui.components.JBScrollPane;
|
||||||
import com.intellij.ui.components.JBTextField;
|
import com.intellij.ui.components.JBTextField;
|
||||||
|
import com.intellij.util.Consumer;
|
||||||
import com.intellij.util.ui.FormBuilder;
|
import com.intellij.util.ui.FormBuilder;
|
||||||
|
|
||||||
import de.marhali.easyi18n.InstanceManager;
|
import de.marhali.easyi18n.InstanceManager;
|
||||||
import de.marhali.easyi18n.model.KeyPath;
|
import de.marhali.easyi18n.model.KeyPath;
|
||||||
import de.marhali.easyi18n.model.Translation;
|
import de.marhali.easyi18n.model.Translation;
|
||||||
import de.marhali.easyi18n.model.TranslationValue;
|
import de.marhali.easyi18n.model.TranslationValue;
|
||||||
|
import de.marhali.easyi18n.model.action.TranslationUpdate;
|
||||||
import de.marhali.easyi18n.settings.ProjectSettings;
|
import de.marhali.easyi18n.settings.ProjectSettings;
|
||||||
import de.marhali.easyi18n.settings.ProjectSettingsService;
|
import de.marhali.easyi18n.settings.ProjectSettingsService;
|
||||||
import de.marhali.easyi18n.util.KeyPathConverter;
|
import de.marhali.easyi18n.util.KeyPathConverter;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.EtchedBorder;
|
import javax.swing.border.EtchedBorder;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base for add and edit translation dialogs.
|
* Base for add and edit translation dialogs.
|
||||||
@ -39,6 +40,8 @@ abstract class TranslationDialog {
|
|||||||
protected final JTextField keyField;
|
protected final JTextField keyField;
|
||||||
protected final Map<String, JTextField> localeValueFields;
|
protected final Map<String, JTextField> localeValueFields;
|
||||||
|
|
||||||
|
private final Set<Consumer<TranslationUpdate>> callbacks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new translation dialog.
|
* Constructs a new translation dialog.
|
||||||
* @param project Opened project
|
* @param project Opened project
|
||||||
@ -50,6 +53,8 @@ abstract class TranslationDialog {
|
|||||||
this.converter = new KeyPathConverter(settings);
|
this.converter = new KeyPathConverter(settings);
|
||||||
this.origin = origin;
|
this.origin = origin;
|
||||||
|
|
||||||
|
this.callbacks = new HashSet<>();
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
TranslationValue value = origin.getValue();
|
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, ...
|
* Implementation needs to configure the dialog. E.g. title, actions, ...
|
||||||
* The implementation needs to set the provided centerPanel as the view panel.
|
* The implementation needs to set the provided centerPanel as the view panel.
|
||||||
@ -72,8 +86,9 @@ abstract class TranslationDialog {
|
|||||||
/**
|
/**
|
||||||
* Implementation needs to handle exit
|
* Implementation needs to handle exit
|
||||||
* @param exitCode See {@link com.intellij.openapi.ui.DialogWrapper} for exit codes
|
* @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.
|
* Opens the translation modal and applies the appropriate logic on modal close.
|
||||||
@ -81,7 +96,12 @@ abstract class TranslationDialog {
|
|||||||
*/
|
*/
|
||||||
public void showAndHandle() {
|
public void showAndHandle() {
|
||||||
int exitCode = createDialog().show();
|
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