/** * Copyright 2011 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.wavepanel.impl.toolbar; import org.waveprotocol.wave.client.editor.Editor; import org.waveprotocol.wave.client.wavepanel.WavePanel; import org.waveprotocol.wave.client.wavepanel.impl.edit.EditSession; import org.waveprotocol.wave.client.wavepanel.view.BlipView; /** * Switches between two toolbars, a "view" and "edit" toolbar, as the client * moves in and out of edit mode. * * @author kalman@google.com (Benjamin Kalman) */ public final class ToolbarSwitcher implements EditSession.Listener { private final WavePanel panel; private final EditSession editSession; private final ViewToolbar viewToolbar; private final EditToolbar editToolbar; private ToolbarSwitcher(WavePanel panel, EditSession editSession, ViewToolbar viewToolbar, EditToolbar editToolbar) { this.panel = panel; this.editSession = editSession; this.viewToolbar = viewToolbar; this.editToolbar = editToolbar; } /** * Creates a new {@link ToolbarSwitcher} and initialises it. */ public static ToolbarSwitcher install(WavePanel panel, EditSession editSession, ViewToolbar viewToolbar, EditToolbar editToolbar) { ToolbarSwitcher switcher = new ToolbarSwitcher(panel, editSession, viewToolbar, editToolbar); switcher.init(); return switcher; } private void init() { viewToolbar.init(); editToolbar.init(); editSession.addListener(this); if (editSession.isEditing()) { startEditSession(editSession.getEditor()); } else if (panel.hasContents()) { startViewSession(); } } @Override public void onSessionStart(Editor editor, BlipView blipUi) { viewToolbar.getWidget().removeFromParent(); startEditSession(editor); } private void startEditSession(Editor editor) { panel.getContents().setToolbar(editToolbar.getWidget().getElement()); panel.getGwtPanel().doAdopt(editToolbar.getWidget()); editToolbar.enable(editor); } @Override public void onSessionEnd(Editor editor, BlipView blipUi) { editToolbar.disable(editor); editToolbar.getWidget().removeFromParent(); startViewSession(); } private void startViewSession() { panel.getContents().setToolbar(viewToolbar.getWidget().getElement()); panel.getGwtPanel().doAdopt(viewToolbar.getWidget()); } }