/**
* 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;
}
}