package es.udc.cartolab.gvsig.navtable.preferences;
import java.util.HashMap;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.apache.log4j.Logger;
import com.iver.andami.PluginServices;
import com.iver.andami.preferences.AbstractPreferencePage;
import com.iver.andami.preferences.StoreException;
import com.iver.utiles.NotExistInXMLEntity;
import com.iver.utiles.XMLEntity;
import com.iver.utiles.extensionPoints.ExtensionPoint;
import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
import es.udc.cartolab.gvsig.navtable.AbstractNavTable;
import es.udc.cartolab.gvsig.navtable.contextualmenu.INavTableContextMenu;
/**
*
* @author Francisco Puga <fpuga@cartolab.es>
*
*/
public class NavTablePreferencesPage extends AbstractPreferencePage {
protected static Logger logger = Logger.getLogger("NavTable");
private String id;
private String title;
private HashMap<INavTableContextMenu, JCheckBox> contextMenuMap = new HashMap<INavTableContextMenu, JCheckBox>();
ExtensionPoint extensionPoint;
public NavTablePreferencesPage() {
super();
id = this.getClass().getName();
title = PluginServices.getText(this, "navtable_preferences_title");
JLabel addonsVisibility = new JLabel(PluginServices.getText(this,
"contextMenuAddonsEnabled"));
addComponent(addonsVisibility);
extensionPoint = (ExtensionPoint) ExtensionPointsSingleton
.getInstance().get(AbstractNavTable.NAVTABLE_CONTEXT_MENU);
for (Object contextMenuAddon : extensionPoint.values()) {
try {
INavTableContextMenu c = (INavTableContextMenu) contextMenuAddon;
JCheckBox chb = new JCheckBox(PluginServices.getText(this,
c.getDescription()));
contextMenuMap.put(c, chb);
addComponent(chb);
} catch (ClassCastException cce) {
logger.error("Class is not a navtable context menu", cce);
}
}
}
public String getID() {
return id;
}
public String getTitle() {
return title;
}
public JPanel getPanel() {
return this;
}
public void initializeValues() {
XMLEntity xml = PluginServices.getPluginServices(this)
.getPersistentXML();
for (INavTableContextMenu contextMenu : contextMenuMap.keySet()) {
boolean value = false;
try {
value = xml.getBooleanProperty(contextMenu.getName());
} catch (NotExistInXMLEntity e) {
value = contextMenu.getDefaultVisibiliy();
xml.putProperty(contextMenu.getName(), value);
}
contextMenuMap.get(contextMenu).setSelected(value);
contextMenu.setUserVisibility(value);
}
}
public void initializeDefaults() {
for (INavTableContextMenu contextMenu : contextMenuMap.keySet()) {
JCheckBox chb = contextMenuMap.get(contextMenu);
chb.setSelected(contextMenu.getDefaultVisibiliy());
}
}
public ImageIcon getIcon() {
return null;
}
public boolean isValueChanged() {
return super.hasChanged();
}
@Override
public void storeValues() throws StoreException {
XMLEntity xml = PluginServices.getPluginServices(this)
.getPersistentXML();
for (INavTableContextMenu contextMenu : contextMenuMap.keySet()) {
boolean visibility = contextMenuMap.get(contextMenu).isSelected();
xml.putProperty(contextMenu.getName(), visibility);
contextMenu.setUserVisibility(visibility);
}
}
@Override
public void setChangesApplied() {
// TODO: fpuga, i'm not sure how this method works.
setChanged(false);
}
}