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