/** * Copyright 2010 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; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.ui.Widget; import org.waveprotocol.wave.client.debug.logger.DomLogger; import org.waveprotocol.wave.client.widget.popup.PopupChromeProvider; import org.waveprotocol.wave.client.widget.popup.PopupEventListener; import org.waveprotocol.wave.client.widget.popup.PopupProvider; import org.waveprotocol.wave.client.widget.popup.RelativePopupPositioner; import org.waveprotocol.wave.client.widget.popup.UniversalPopup; import org.waveprotocol.wave.common.logging.LoggerBundle; /** * Place holder for static dependencies. * * We should aim to delete this class. * * @author danilatos@google.com (Daniel Danilatos) */ public class EditorStaticDeps { /** * Debug logger for Editor and related classes */ public static LoggerBundle logger = createLogger(); /** * Factory object for creating popup panels. */ private static PopupProvider popupProvider; /** * Factory object for creating popup chrome. */ static PopupChromeProvider popupChromeProvider; static LoggerBundle createLogger() { DomLogger l = new DomLogger("editor"); /** * Enable logging to buffer for editor. */ l.enableModuleBuffer(true); return l; } /** * Set the popup provider * @param factory New popup provider */ public static void setPopupProvider(PopupProvider factory) { popupProvider = factory; } /** * Set the popup chrome provider * @param factory New popup chrome provider */ public static void setPopupChromeProvider(PopupChromeProvider factory) { popupChromeProvider = factory; } /** * @return popup provider */ public static PopupProvider getPopupProvider() { return popupProvider; } /** * @return popup chrome provider */ public static PopupChromeProvider getPopupChromeProvider() { return popupChromeProvider; } /** * Convenience method * * @param reference * @param positioner * @param autoHide * @param modal * @param content Popup content * @param listener * @return new popup panel */ public static UniversalPopup createPopup(Element reference, RelativePopupPositioner positioner, boolean autoHide, boolean modal, Widget content, PopupEventListener listener) { assert popupProvider != null : "PopupProvider not set."; UniversalPopup popup = popupProvider.createPopup(reference, positioner, popupChromeProvider == null ? null : popupChromeProvider.createPopupChrome(), autoHide); popup.add(content); popup.addPopupEventListener(listener); return popup; } /** * Flag if mutations in the html dom of this document should be ignored. * We'll add 1 to this while manipulating the editor's dom ourselves, * and subtract that one again when done. That way we can use mutation * events generated by the browser's native editor manipulating the dom * to extract operations, but only when this int is 0 */ private static int ignoreMutations = 0; /** * @return Whether dom mutation events should be ignored */ static boolean shouldIgnoreMutations() { return ignoreMutations > 0; } /** * For editor internal use only. * * @see #ignoreMutations */ public static void startIgnoreMutations() { ignoreMutations++; } /** * Matches {@link #startIgnoreMutations()} */ public static void endIgnoreMutations() { ignoreMutations--; assert ignoreMutations >= 0; } }