package open.dolphin.impl.img;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Properties;
import java.util.ResourceBundle;
import javax.swing.*;
import open.dolphin.client.ClientContext;
/**
*
* @author Kazushi Minagawa. Digital Globe, Inc.
*/
public class UniteaSetting {
private final AbstractBrowser context;
private final Component parent;
private UniteaConfigView view;
private JDialog dialog;
private final Properties properties;
public UniteaSetting(AbstractBrowser context, Component parent) {
this.context = context;
this.parent = parent;
this.properties = context.properties;
}
private ActionMap getAction(ResourceBundle resource) {
ActionMap ret = new ActionMap();
String text = resource.getString("setBaseDirectory.Action.text");
AbstractAction setBaseDirectory = new AbstractAction(text) {
@Override
public void actionPerformed(ActionEvent ae) {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
String dir = chooser.getSelectedFile().getPath();
view.getBaseDirFld().setText(dir);
}
}
};
ret.put("setBaseDirectory", setBaseDirectory);
text = resource.getString("saveProperties.Action.text");
AbstractAction saveProperties = new AbstractAction(text) {
@Override
public void actionPerformed(ActionEvent ae) {
// Base Directory
setProperty("baseDir", view.getBaseDirFld());
// Drop動作
String dropAction = view.getCopyRadio().isSelected() ? "copy" : "move";
properties.setProperty(AbstractBrowser.PROP_DROP_ACTION, dropAction);
// カラム数
String spiVal = view.getColumnSpinner().getValue().toString();
properties.setProperty(AbstractBrowser.PROP_COLUMN_COUNT, spiVal);
// ソート属性
String sortAttr = view.getFilenameRadio().isSelected() ? "filename" : "lastModified";
properties.setProperty(AbstractBrowser.PROP_SORT_ATTR, sortAttr);
// ソート順
String sortOrder = view.getAscRadio().isSelected() ? "asc" : "desc";
properties.setProperty(AbstractBrowser.PROP_SORT_ORDER, sortOrder);
setProperty("uniteaServer", view.getServerFld());
setProperty("uniteaClient", view.getClientFld());
dialog.setVisible(false);
dialog.dispose();
}
};
ret.put("saveProperties", saveProperties);
text = resource.getString("cancel.Action.text");
AbstractAction cancel = new AbstractAction(text) {
@Override
public void actionPerformed(ActionEvent ae) {
dialog.setVisible(false);
dialog.dispose();
}
};
ret.put("cancel", cancel);
return ret;
}
private void setProperty(String name, JTextField tf) {
String value = tf.getText().trim();
if (!value.equals("")) {
properties.setProperty(name, value);
} else if (properties.containsKey(name)) {
properties.remove(name);
}
}
public void start() {
view = new UniteaConfigView();
// Base directory
String baseDir = properties.getProperty(DefaultBrowser.PROP_BASE_DIR);
view.getBaseDirFld().setText(baseDir);
// Drop action
boolean move = context.dropIsMove();
view.getCopyRadio().setSelected(!move);
view.getMoveRadio().setSelected(move);
// カラム数
int spiInt = context.columnCount();
view.getColumnSpinner().setValue(new Integer(spiInt));
// ソート属性
boolean last = context.sortIsLastModified();
view.getFilenameRadio().setSelected(!last);
view.getLastRadio().setSelected(last);
// ソート順
boolean desc = context.sortIsDescending();
view.getAscRadio().setSelected(!desc);
view.getDescRadio().setSelected(desc);
// Button group
ButtonGroup actionRgp = new ButtonGroup();
actionRgp.add(view.getCopyRadio());
actionRgp.add(view.getMoveRadio());
ButtonGroup attrRgp = new ButtonGroup();
attrRgp.add(view.getFilenameRadio());
attrRgp.add(view.getLastRadio());
ButtonGroup orderRgp = new ButtonGroup();
orderRgp.add(view.getAscRadio());
orderRgp.add(view.getDescRadio());
// Unitea Server
view.getServerFld().setText(properties.getProperty("uniteaServer"));
// Unitea Client
view.getClientFld().setText(properties.getProperty("uniteaClient"));
boolean enabled = (ClientContext.isWin());
view.getServerFld().setEnabled(enabled);
view.getClientFld().setEnabled(enabled);
// Inject Actions
ResourceBundle resource = ClientContext.getMyBundle(UniteaSetting.class);
ActionMap map = getAction(resource);
// Actions
view.getBaseDirBtn().setAction(map.get("setBaseDirectory"));
JButton saveBtn = new JButton();
saveBtn.setAction(map.get("saveProperties"));
JButton cancelBtn = new JButton();
cancelBtn.setAction(map.get("cancel"));
Object[] options = new Object[]{saveBtn, cancelBtn};
JOptionPane jop = new JOptionPane(
view,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.DEFAULT_OPTION,
null,
options,
saveBtn);
dialog = jop.createDialog(parent, ClientContext.getFrameTitle("Unitea 設定"));
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
dialog.setVisible(true);
}
}