/* Copyright (C) 2005-2011 Fabio Riccardi */
package com.lightcrafts.prefs;
import com.lightcrafts.platform.AlertDialog;
import com.lightcrafts.platform.FileChooser;
import com.lightcrafts.platform.Platform;
import javax.swing.*;
import java.awt.color.ICC_Profile;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.util.prefs.Preferences;
class DisplayProfileItem extends PreferencesItem implements ActionListener {
private final static String Package = "/com/lightcrafts/platform/linux";
private final static String Key = "DisplayProfile";
private static Preferences Prefs = Preferences.userRoot().node(Package);
private JTextField text;
private JButton chooserButton;
DisplayProfileItem(JTextArea help) {
super(help);
text = new JTextField(20);
text.setEditable(false);
chooserButton = new JButton("Choose");
chooserButton.setToolTipText(
"Pick a new color profile for this display"
);
chooserButton.addActionListener(this);
addHelpListeners();
}
public String getLabel() {
return "Display Color Profile";
}
public String getHelp(MouseEvent e) {
return
"Set the color profile of your display device. LightZone must " +
"know the correct color profile for your display in order to " +
"show colors correctly. If you do not set this option, " +
"LightZone will use an sRGB default profile.";
}
public boolean requiresRestart() {
return true;
}
public JComponent getComponent() {
Box box = Box.createHorizontalBox();
box.add(text);
box.add(Box.createHorizontalStrut(6));
box.add(chooserButton);
return box;
}
public void commit() {
String path = text.getText();
Prefs.put(Key, path);
}
public void restore() {
String path = Prefs.get(Key, null);
if (path != null) {
text.setText(path);
text.setEnabled(true);
}
else {
text.setText("(sRGB default)");
text.setEnabled(false);
}
}
// Conduct the dialog to accept a new color profile.
public void actionPerformed(ActionEvent event) {
FileChooser chooser = Platform.getPlatform().getFileChooser();
AlertDialog alert = Platform.getPlatform().getAlertDialog();
String path;
if (text.isEnabled()) {
path = text.getText();
}
else {
path = System.getProperty("user.home");
}
File file = new File(path);
file = chooser.openFile(
"Display Color Profile", file, null, null
);
if (file != null) {
if (! file.isFile()) {
alert.showAlert(
null,
'\"' + file.getName() + "\" is not a file.",
"A color profile is a file, " +
"usually ending with \".icc\" or \".icm\".",
AlertDialog.WARNING_ALERT,
"OK"
);
return;
}
try {
ICC_Profile.getInstance(file.getAbsolutePath());
}
catch (IOException e) {
alert.showAlert(
null,
'\"' + file.getName() + "\" could not be read.",
e.getClass().getName() + ": " + e.getMessage(),
AlertDialog.WARNING_ALERT,
"OK"
);
return;
}
catch (IllegalArgumentException e) {
alert.showAlert(
null,
'\"' + file.getName() + "\" is not a valid color profile.",
e.getClass().getName() + ": " + e.getMessage(),
AlertDialog.WARNING_ALERT,
"OK"
);
return;
}
path = file.getAbsolutePath();
text.setText(path);
text.setEnabled(true);
alert.showAlert(
null,
"Display color profile \"" + file.getName() + "\" accepted.",
"You must now restart LightZone for your new display " +
"profile to take effect.",
AlertDialog.WARNING_ALERT,
"OK"
);
}
}
}