package org.esa.snap.rcp.imgfilter;
import org.esa.snap.rcp.SnapApp;
import org.esa.snap.rcp.imgfilter.model.Filter;
import org.esa.snap.rcp.util.Dialogs;
import org.openide.util.NbBundle;
import javax.swing.JDialog;
import javax.swing.JTabbedPane;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;
/**
* Represents a window that lets users inspect and edit a single image {@link Filter}.
*
* @author Norman
*/
@NbBundle.Messages({
"LBL_FilterWindow_Title=Image Filter",
"LBL_FilterWindow_Kernel=Filter Kernel",
"LBL_FilterWindow_Properties=Filter Properties",
"TXT_FilterWindow_Hint=<html>Right-clicking into the kernel editor canvas<br>" +
"opens a context menu with <b>more options</b>",
})
public class FilterWindow implements FilterEditor {
private Window parentWindow;
private JDialog dialog;
private FilterKernelForm kernelForm;
private Filter filter;
private FilterPropertiesForm propertiesForm;
public FilterWindow(Window parentWindow) {
this.parentWindow = parentWindow;
}
@Override
public Filter getFilter() {
return filter;
}
@Override
public void setFilter(Filter filter) {
this.filter = filter;
if (kernelForm != null) {
kernelForm.setFilter(filter);
}
if (propertiesForm != null) {
propertiesForm.setFilter(filter);
}
}
@Override
public void show() {
if (dialog == null) {
kernelForm = new FilterKernelForm(filter);
propertiesForm = new FilterPropertiesForm(filter);
dialog = new JDialog(parentWindow, Bundle.LBL_FilterWindow_Title(), Dialog.ModalityType.MODELESS);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab(Bundle.LBL_FilterWindow_Kernel(), kernelForm);
tabbedPane.addTab(Bundle.LBL_FilterWindow_Properties(), propertiesForm);
dialog.setContentPane(tabbedPane);
Preferences filterWindowPrefs = SnapApp.getDefault().getPreferences().node("filterWindow");
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
filterWindowPrefs.putInt("x", e.getWindow().getX());
filterWindowPrefs.putInt("y", e.getWindow().getY());
filterWindowPrefs.putInt("width", e.getWindow().getWidth());
filterWindowPrefs.putInt("height", e.getWindow().getHeight());
}
});
Dimension preferredSize = dialog.getPreferredSize();
int x = filterWindowPrefs.getInt("x", 100);
int y = filterWindowPrefs.getInt("y", 100);
int w = filterWindowPrefs.getInt("width", preferredSize.width);
int h = filterWindowPrefs.getInt("height", preferredSize.height);
dialog.setBounds(x, y, w, h);
Dialogs.showInformation(Bundle.LBL_FilterWindow_Title(),
Bundle.TXT_FilterWindow_Hint(),
"filterWindow.moreOptions");
}
dialog.setVisible(true);
}
@Override
public void hide() {
if (dialog != null) {
dialog.setVisible(false);
}
}
}