package com.niklim.clicktrace.dialog;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JComponent;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
public abstract class AbstractDialog<V extends AbstractDialogView> {
protected V view;
public AbstractDialog() {
view = createView();
createControlListeners();
view.dialog.getRootPane().registerKeyboardAction(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
close();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
}
protected abstract V createView();
public void postInit() {
pack();
}
protected void initTextWrapping(JTextArea textarea) {
textarea.setWrapStyleWord(true);
textarea.setLineWrap(true);
}
public void close() {
view.dialog.setVisible(false);
}
private void pack() {
view.dialog.pack();
}
protected void center() {
view.center();
}
protected void createControlListeners() {
view.okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
okAction();
}
});
view.cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cancelAction();
}
});
}
protected abstract void okAction();
protected void cancelAction() {
close();
}
protected void showWaitingCursor() {
view.dialog.setCursor(new Cursor(Cursor.WAIT_CURSOR));
}
protected void hideWaitingCursor() {
view.dialog.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}