/** * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.waveprotocol.wave.client.editor; /** * Configuration settings for the editor * * Updating a settings object that is given to the editor has undefined behaviour, i.e. it * is not defined, for each given setting, whether or not the editor will update accordingly. * Therefore it is best to never change existing objects given to editors, and to supply new * ones when wanting to change. * * @author danilatos@google.com (Daniel Danilatos) */ public class EditorSettings { /** Default settings */ public static final EditorSettings DEFAULT = new EditorSettings() { private static final String EXCEPTION_MSG = "DEFAULT settings is immutable"; @Override public EditorSettings setHasDebugDialog(boolean hasDebugDialog) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setUndoEnabled(boolean undoEnabled) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setUseFancyCursorBias(boolean useFancyCursorBias) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setInstrumentor(EditorInstrumentor instrumentor) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setUseSemanticCopyPaste(boolean useSemanticCopyPaste) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setUseWhitelistInEditor(boolean useWhitelistInEditor) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setUseWebkitCompositionEvents(boolean useWebkitCompositionEvents) { throw new IllegalStateException(EXCEPTION_MSG); } @Override public EditorSettings setCloseSuggestionsMenuDelayMs(int closeSuggestionsMenuDelayMs) { throw new IllegalStateException(EXCEPTION_MSG); } }; private boolean hasDebugDialog = true; private boolean undoEnabled = true; private boolean useFancyCursorBias = true; private EditorInstrumentor instrumentor = EditorInstrumentor.NOOP; private boolean useSemanticCopyPaste = true; private boolean useWhitelistInEditor = false; private boolean useWebkitCompositionEvents = true; private int closeSuggestionsMenuDelayMs = 500; public boolean hasDebugDialog() { return hasDebugDialog; } public boolean undoEnabled() { return undoEnabled; } public boolean useFancyCursorBias() { return useFancyCursorBias; } public EditorInstrumentor getInstrumentor() { return instrumentor; } public boolean useSemanticCopyPaste() { return useSemanticCopyPaste; } public boolean useWhitelistInEditor() { return useWhitelistInEditor; } public boolean useWebkitCompositionEvents() { return useWebkitCompositionEvents; } public int closeSuggestionsMenuDelayMs() { return closeSuggestionsMenuDelayMs; } public EditorSettings setHasDebugDialog(boolean hasDebugDialog) { this.hasDebugDialog = hasDebugDialog; return this; } public EditorSettings setUndoEnabled(boolean undoEnabled) { this.undoEnabled = undoEnabled; return this; } public EditorSettings setUseFancyCursorBias(boolean useFancyCursorBias) { this.useFancyCursorBias = useFancyCursorBias; return this; } public EditorSettings setInstrumentor(EditorInstrumentor instrumentor) { assert instrumentor != null : "Can't have a null instrumentor, use EditorInstrumentor.NOOP"; this.instrumentor = instrumentor; return this; } public EditorSettings setUseSemanticCopyPaste(boolean useSemanticCopyPaste) { this.useSemanticCopyPaste = useSemanticCopyPaste; return this; } public EditorSettings setUseWhitelistInEditor(boolean useWhitelistInEditor) { this.useWhitelistInEditor = useWhitelistInEditor; return this; } public EditorSettings setUseWebkitCompositionEvents(boolean useWebkitCompositionEvents) { this.useWebkitCompositionEvents = useWebkitCompositionEvents; return this; } public EditorSettings setCloseSuggestionsMenuDelayMs(int closeSuggestionsMenuDelayMs) { this.closeSuggestionsMenuDelayMs = closeSuggestionsMenuDelayMs; return this; } }