/** * */ package com.onaro.sanscreen.client.prefs; import java.awt.Color; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.AbstractButton; import javax.swing.BorderFactory; import javax.swing.JButton; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.core.runtime.IConfigurationElement; import com.jidesoft.dialog.ButtonPanel; import com.onaro.client.leekui.jface.preferences.IPreferenceNode; import com.onaro.client.leekui.jface.preferences.PreferenceDialog; import com.onaro.client.leekui.ui.IConfigurationFilter; import com.onaro.sanscreen.client.MainDirector; import com.onaro.sanscreen.client.error.CentralErrorHandler; import com.onaro.sanscreen.client.features.FeatureManager; import com.onaro.sanscreen.client.help.HelpManager; import com.onaro.sanscreen.client.help.HelpManagerFactory; import com.onaro.sanscreen.client.help.IHelpManager; import com.onaro.util.IllegalInitException; import com.onaro.util.jfc.ConfigurableAction; /** * Class that specializes PreferenceDialog to support * context-sensitive help. * * @author barrykl */ public class SettingsDialog extends PreferenceDialog { private static final long serialVersionUID = 1L; private static final String HELP_BUTTON_RESOURCE = "main.help"; //$NON-NLS-1$ private static Logger logger = LogManager.getLogger (SettingsDialog.class); /** * Class used to filter our preferences whose required features are not enabled. */ private static class PreferenceFilter implements IConfigurationFilter { @Override public List filter (IConfigurationElement... elements) { return FeatureManager.getInstance().filterByEnabledFeatures (elements); } } /** * Filter to exclude preferences whose required features are not enabled. * Is public only so * {@link com.onaro.sanscreen.client.test.PluginTestVisibilityByLicense PluginTestVisibilityByLicense} * can reference it. */ public static final PreferenceFilter preferenceFilter = new PreferenceFilter(); private ButtonPanel dialogButtonPanel; private JButton helpButton; // Help context that should be used as root context by all pages added to the dialog. public static String SANSCREEN_SETTINGS_CONTEXT = HelpManager.SANSCREEN_CLIENT_ROOT_CONTEXT + ".settings"; //$NON-NLS-1$ /** * */ public SettingsDialog (String title) { super (preferenceFilter); setTitle (title); setPreferenceStore (ClientPrefs.getSettings()); setExceptionListener (CentralErrorHandler.getInstance()); // Set default help context for dialog. Enable F1 key to invoke help. final IHelpManager helpManager = HelpManagerFactory.getHelpManager(); helpManager.setHelpContext (getContentPane(), SANSCREEN_SETTINGS_CONTEXT); helpManager.enableHelpKey (getContentPane(), SANSCREEN_SETTINGS_CONTEXT); } /** * Set context help ID to page's context when a page is shown. * * @see com.onaro.client.leekui.jface.preferences.PreferenceDialog#showPage(com.onaro.client.leekui.jface.preferences.IPreferenceNode) */ @Override protected boolean showPage (final IPreferenceNode node) { boolean isShown = super.showPage (node); if (isShown) { // Set help context for newly shown page. Enable F1 key to invoke help. String helpContext = SANSCREEN_SETTINGS_CONTEXT + "." + node.getId(); //$NON-NLS-1$ logger.debug ("Help context set to " //$NON-NLS-1$ + helpContext + " for page " //$NON-NLS-1$ + node.getLabelText()); final IHelpManager helpManager = HelpManagerFactory.getHelpManager(); helpManager.setHelpContext (getContentPane(), helpContext); helpManager.enableHelpKey (getContentPane(), helpContext); } return isShown; } /** * This method creates a button panel with a help button. * * @return com.jidesoft.dialog.ButtonPanel */ protected ButtonPanel getButtonPanel() { if (dialogButtonPanel == null) { dialogButtonPanel = new ButtonPanel(); dialogButtonPanel.setBorder (BorderFactory.createCompoundBorder ( BorderFactory.createMatteBorder (1, 0, 0, 0, Color.gray), BorderFactory.createEmptyBorder (5, 5, 5, 5))); dialogButtonPanel.add (getHelpButton(), ButtonPanel.HELP_BUTTON); dialogButtonPanel.add (getOkButton(), ButtonPanel.AFFIRMATIVE_BUTTON); dialogButtonPanel.add (getCancelButton(), ButtonPanel.CANCEL_BUTTON); } return dialogButtonPanel; } protected AbstractButton getHelpButton() { if (helpButton == null) { final IHelpManager helpManager = HelpManagerFactory.getHelpManager(); // Load button action. ConfigurableAction action; try { action = new ConfigurableAction (HELP_BUTTON_RESOURCE, MainDirector.resources) { @Override public void actionPerformed (ActionEvent e) { // Do nothing. Action handled by Help Manager listener. } private static final long serialVersionUID = 1L; }; } catch (IllegalInitException e) { logger.warn ("Could not load help button; " + e); //$NON-NLS-1$ return null; } // Create button. Add Help Manager listener. helpButton = new JButton (action); helpManager.registerHelpInvoker (helpButton); } return helpButton; } }