/* * * Copyright (C) 2007-2013 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. This file is part of kune. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package cc.kune.wave.client; import org.waveprotocol.wave.client.editor.Editor; import org.waveprotocol.wave.client.wavepanel.WavePanel; import org.waveprotocol.wave.client.wavepanel.impl.WavePanelImpl; import org.waveprotocol.wave.client.wavepanel.impl.edit.Actions; import org.waveprotocol.wave.client.wavepanel.impl.edit.EditSession; import org.waveprotocol.wave.client.wavepanel.impl.focus.FocusBlipSelector; import org.waveprotocol.wave.client.wavepanel.impl.focus.FocusFramePresenter; import org.waveprotocol.wave.client.wavepanel.view.BlipView; import cc.kune.common.client.shortcuts.GlobalShortcutRegister; import cc.kune.common.client.shortcuts.GlobalShortcutsInstance; public class CustomEditController implements EditSession.Listener, WavePanel.LifecycleListener, FocusFramePresenter.Listener, CustomEditToolbarImpl.Listener { public static void install(final FocusFramePresenter focus, final Actions actions, final EditSession edit, final WavePanelImpl panel, final FocusBlipSelector blipSelector, final CustomEditToolbar editToolbar) { new CustomEditController(focus, actions, edit, panel, blipSelector, editToolbar); } private final Actions actions; private final FocusBlipSelector blipSelector; private final EditSession edit; private final CustomEditToolbar editToolbar; private final FocusFramePresenter focus; private final WavePanelImpl panel; BlipView rootBlip; private GlobalShortcutRegister globalShortcuts; public CustomEditController(final FocusFramePresenter focus, final Actions actions, final EditSession edit, final WavePanelImpl panel, final FocusBlipSelector blipSelector, final CustomEditToolbar editToolbar) { this.focus = focus; this.actions = actions; this.edit = edit; this.panel = panel; this.blipSelector = blipSelector; this.editToolbar = editToolbar; this.edit.addListener(this); this.panel.addListener(this); editToolbar.setListener(this); editToolbar.setEditAndReplyVisible(true); editToolbar.setEditDoneVisible(false); globalShortcuts = GlobalShortcutsInstance.get(); } private BlipView getFocusedOrRoot() { BlipView focusedBlip = focus.getFocusedBlip(); if (focusedBlip == null) { focusedBlip = getRootBlip(); } return focusedBlip; } private BlipView getRootBlip() { if (rootBlip == null) { rootBlip = blipSelector.getOrFindRootBlip(); } return rootBlip; } @Override public void onEdit() { actions.startEditing(getFocusedOrRoot()); globalShortcuts.disable(); } @Override public void onEditDone() { actions.stopEditing(); globalShortcuts.enable(); } @Override public void onFocusMoved(final BlipView oldBlip, final BlipView newBlip) { } @Override public void onInit() { // Showing a wave editToolbar.setEditAndReplyVisible(true); editToolbar.setEditDoneVisible(false); } @Override public void onReply() { final BlipView focusedBlip = focus.getFocusedBlip(); final BlipView rootBlip = getRootBlip(); final BlipView currentBlip = getFocusedOrRoot(); if (focusedBlip == null) { actions.addContinuation(currentBlip.getParent()); } else { if (focusedBlip.equals(rootBlip)) { actions.addContinuation(rootBlip.getParent()); } else { actions.addContinuation(currentBlip.getParent()); } } } @Override public void onReset() { // Not showing a wave editToolbar.setEditAndReplyVisible(false); editToolbar.setEditDoneVisible(false); } @Override public void onSessionEnd(final Editor editor, final BlipView blipView) { // On edit session end editToolbar.setEnable(true); editToolbar.setEditDoneVisible(false); globalShortcuts.enable(); } @Override public void onSessionStart(final Editor editor, final BlipView blipView) { // On edit session start editToolbar.setEnable(false); editToolbar.setEditDoneVisible(true); globalShortcuts.disable(); } }