From: jprocter Date: Tue, 13 Oct 2009 13:53:11 +0000 (+0000) Subject: enact on a boolean configuration option, prompting the user if the option has not... X-Git-Tag: Jalview_2_4_0b2~19 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=782d9ee78b669ca7faa674d8a1f8aaaf482123cf;p=jalview.git enact on a boolean configuration option, prompting the user if the option has not yet been set --- diff --git a/src/jalview/gui/PromptUserConfig.java b/src/jalview/gui/PromptUserConfig.java new file mode 100644 index 0000000..de8a3d8 --- /dev/null +++ b/src/jalview/gui/PromptUserConfig.java @@ -0,0 +1,206 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package jalview.gui; + +import jalview.bin.Cache; + +import java.awt.Component; +import java.io.*; +import java.net.*; + +import javax.swing.*; + +public class PromptUserConfig implements Runnable +{ + /** + * Given a boolean Cache option: + * + * 1. Prompt the user with the given text if the option is unset, and + * set the option accordingly (yes/no==true/false). + * + * 2. Execute the given Runnables according to the state of the config option. + * + */ + /** + * boolean property to set + */ + String property=null; + /** + * can the user cancel rather than set the property ? + */ + boolean allowCancel = false; + /** + * title of prompt dialog + */ + String dialogTitle; + /** + * text in dialog + */ + String dialogText; + /** + * runnables for all cases. + */ + Runnable iftrue=null,iffalse=null,ifundef=null; + private Component component; + /** + * if set, remove the property if the user says no rather than setting it to false. + */ + private boolean removeifunset; + + /** + * @return the removeifunset + */ + public boolean isRemoveifunset() + { + return removeifunset; + } + /** + * @param removeifunset the removeifunset to set + */ + public void setRemoveifunset(boolean removeifunset) + { + this.removeifunset = removeifunset; + } + /** + * @param desktop - where the dialog box will be shown + * @param property - boolean property in jalview.bin.Cache + * @param dialogTitle - title of prompt box + * @param dialogText - text of box + * @param iftrue - executed if property is true + * @param iffalse - executed if property is false + * @param ifundef - executed if property was not set after prompting. + * @param allowCancel - allow the user to cancel rather than set the property + */ + public PromptUserConfig(Component desktop, String property, String dialogTitle, + String dialogText, Runnable iftrue, Runnable iffalse, + Runnable ifundef, boolean allowCancel) + { + super(); + this.component = desktop; + this.property = property; + this.dialogTitle = dialogTitle; + this.dialogText = dialogText; + this.iftrue = iftrue; + this.iffalse = iffalse; + this.ifundef = ifundef; + this.allowCancel = allowCancel; + } + public void run() + { + if (property==null) + { + return; + } + // First - check to see if wee have an old questionnaire/response id pair. + String lastq = jalview.bin.Cache.getProperty(property); + + if (lastq == null) + { + raiseDialog(); + Cache.log.debug("Got user response."); + } + lastq = jalview.bin.Cache.getProperty(property); + String extype = ""; + Exception e = null; + if (lastq==null) { + // execute the ifundef + try + { + if (ifundef!=null) + { + ifundef.run(); + } + } catch (Exception ex) + { + e = ex; + extype = "undefined"; + } + } else if (Boolean.valueOf(lastq).booleanValue()) { + // execute the iftrue + try + { + if (iftrue!=null) + { + iftrue.run(); + } + } catch (Exception ex) + { + e = ex; + extype = "if true"; + } + } else { + try + { + if (iffalse!=null) + { + iffalse.run(); + } + } catch (Exception ex) + { + e = ex; + extype = "if false"; + } + } + // report any exceptions + if (e!=null) { + Cache.log.warn("Unexpected exception when executing the "+extype+" runnable for property "+property,e); + } + } + /** + * raise the property dialog + */ + private void raiseDialog() { + if (jalview.bin.Cache.log.isDebugEnabled()) + { + jalview.bin.Cache.log.debug("Prompting user for "+dialogTitle+" for Cache property "+property); + } + try { + int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, // component, + dialogText, + dialogTitle, (allowCancel) ? JOptionPane.YES_NO_CANCEL_OPTION : + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + jalview.bin.Cache.log.debug("Got response : "+reply); + if (reply == JOptionPane.YES_OPTION) + { + jalview.bin.Cache.setProperty(property, "true"); + } else + if (reply == JOptionPane.NO_OPTION) { + if (removeifunset) + { + jalview.bin.Cache.removeProperty(property); + } else { + jalview.bin.Cache.setProperty(property, "false"); + } + } else + { + jalview.bin.Cache.log.debug("User cancelled setting " + property); + return; + } + // verify the property is set for debugging + if (jalview.bin.Cache.log.isDebugEnabled()) + { + jalview.bin.Cache.log.debug("User set property to "+jalview.bin.Cache.getProperty(property)); + } + } catch (Exception e) + { + jalview.bin.Cache.log.warn("Unexpected exception when prompting user for yes/no setting for property "+property, e); + } + } +}