package net.sf.eclipsefp.haskell.ui.internal.preferences; import java.util.StringTokenizer; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.ListEditor; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * <p>Preferences page for search paths (for example open definition)</p> * * @author JP Moresmau */ public class SearchPathsPP extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public static final String SEP="|"; private static final String[] defaults=new String[]{ "file://${IMPL_BIN}/../doc/html/libraries/${PACKAGE_NAME}-${PACKAGE_VERSION}/${MODULE_HTML}#${ANCHOR}", "file://${IMPL_BIN}/../doc/html/libraries/${PACKAGE_NAME}-${PACKAGE_VERSION}/src/${MODULE_HTML}#${NAME}", "https://hackage.haskell.org/package/${PACKAGE_NAME}-${PACKAGE_VERSION}/docs/${MODULE_HTML}#${ANCHOR}", "https://hackage.haskell.org/packages/archive/${PACKAGE_NAME}/${PACKAGE_VERSION}/doc/html/${MODULE_HTML}#${ANCHOR}", "https://hackage.haskell.org/package/${PACKAGE_NAME}-${PACKAGE_VERSION}", "https://www.haskell.org/ghc/docs/${PACKAGE_VERSION}/html/libraries/${PACKAGE_NAME}/", "https://www.haskell.org/haskellwiki/Keywords#${NAME}" } ; public static void initializeDefaults( final IPreferenceStore store ) { store.setDefault( IPreferenceConstants.HADDOCK_SEARCH_PATHS, createList(defaults ) ); } public static String[] parseString( final String arg0 ) { StringTokenizer st=new StringTokenizer( arg0, SEP ); int tokenCount = st.countTokens(); String[] elements = new String[tokenCount]; for (int i = 0; i < tokenCount; i++) { elements[i] = st.nextToken(); } return elements; } public static String createList( final String[] arg0 ) { StringBuilder sb=new StringBuilder(); for (String s:arg0){ sb.append(s); sb.append(SEP); } return sb.toString(); } public SearchPathsPP() { super(); setPreferenceStore( HaskellUIPlugin.getDefault().getPreferenceStore() ); } @Override public void init( final IWorkbench arg0 ) { // NOOP } @Override protected void createFieldEditors() { ListEditor leHaddock=new EntryModifiableListEditor(IPreferenceConstants.HADDOCK_SEARCH_PATHS,UITexts.preferences_search_haddock_description,getFieldEditorParent()) { @Override protected String[] parseString( final String arg0 ) { return SearchPathsPP.parseString(arg0); } @Override protected String getNewInputObject() { return getPath(defaults[1]); } private String getPath(final String original){ InputDialog id=new InputDialog( getShell(), UITexts.preferences_search_haddock_new, UITexts.preferences_search_haddock_help, original, new IInputValidator() { @Override public String isValid( final String arg0 ) { if (arg0==null || arg0.length()==0){ return UITexts.preferences_search_haddock_new_empty; } return null; } }); int code=id.open(); if (code==IDialogConstants.OK_ID){ return id.getValue(); } return null; } @Override protected String getModifiedEntry( final String original ) { return getPath(original); } @Override protected String createList( final String[] arg0 ) { return SearchPathsPP.createList( arg0 ); } }; addField( leHaddock ); } }