Package org.thechiselgroup.choosel.workbench.client.command.ui

Source Code of org.thechiselgroup.choosel.workbench.client.command.ui.CommandManagerActionStateController

/*******************************************************************************
* Copyright 2009, 2010 Lars Grammel
*
* 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.thechiselgroup.choosel.workbench.client.command.ui;

import org.thechiselgroup.choosel.core.client.command.CommandAddedEvent;
import org.thechiselgroup.choosel.core.client.command.CommandAddedEventHandler;
import org.thechiselgroup.choosel.core.client.command.CommandManager;
import org.thechiselgroup.choosel.core.client.command.CommandManagerClearedEvent;
import org.thechiselgroup.choosel.core.client.command.CommandManagerClearedEventHandler;
import org.thechiselgroup.choosel.core.client.command.CommandRedoneEvent;
import org.thechiselgroup.choosel.core.client.command.CommandRedoneEventHandler;
import org.thechiselgroup.choosel.core.client.command.CommandUndoneEvent;
import org.thechiselgroup.choosel.core.client.command.CommandUndoneEventHandler;
import org.thechiselgroup.choosel.core.client.command.UndoableCommand;
import org.thechiselgroup.choosel.core.client.ui.Action;
import org.thechiselgroup.choosel.core.client.util.HasDescription;
import org.thechiselgroup.choosel.core.client.util.Initializable;

public abstract class CommandManagerActionStateController implements
        Initializable {

    private class CommandManagerHandler implements CommandAddedEventHandler,
            CommandRedoneEventHandler, CommandUndoneEventHandler,
            CommandManagerClearedEventHandler {

        @Override
        public void onCleared(CommandManagerClearedEvent event) {
            updateButtonState();
        }

        @Override
        public void onCommandAdded(CommandAddedEvent event) {
            updateButtonState();
        }

        @Override
        public void onCommandRedone(CommandRedoneEvent commandRedoneEvent) {
            updateButtonState();
        }

        @Override
        public void onCommandUndone(CommandUndoneEvent commandUndoneEvent) {
            updateButtonState();
        }
    }

    protected final CommandManager commandManager;

    private CommandManagerHandler commandManagerHandler;

    protected final Action action;

    public CommandManagerActionStateController(CommandManager commandManager,
            Action action) {

        assert commandManager != null;
        assert action != null;

        this.commandManager = commandManager;
        this.action = action;
    }

    protected abstract boolean canPerformOperation();

    protected abstract UndoableCommand getCommand();

    private String getCommandDescription() {
        if (!canPerformOperation()) {
            return "";
        }

        UndoableCommand command = getCommand();

        if (!(command instanceof HasDescription)) {
            return "";
        }

        return ((HasDescription) command).getDescription();
    }

    @Override
    public void init() {
        updateButtonState();

        commandManagerHandler = new CommandManagerHandler();

        commandManager.addHandler(CommandRedoneEvent.TYPE,
                commandManagerHandler);
        commandManager.addHandler(CommandUndoneEvent.TYPE,
                commandManagerHandler);
        commandManager
                .addHandler(CommandAddedEvent.TYPE, commandManagerHandler);
        commandManager.addHandler(CommandManagerClearedEvent.TYPE,
                commandManagerHandler);
    }

    protected void updateButtonState() {
        action.setEnabled(canPerformOperation());
        action.setDescription(getCommandDescription());
    }

}
TOP

Related Classes of org.thechiselgroup.choosel.workbench.client.command.ui.CommandManagerActionStateController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.