/*
 * Copyright (c) 2005-2010 Substance Kirill Grouchnikov. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  o Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *  o Neither the name of Substance Kirill Grouchnikov nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.pushingpixels.substance.internal.inputmaps;

import javax.swing.JTextField;
import javax.swing.text.DefaultEditorKit;

import org.pushingpixels.substance.api.inputmaps.SubstanceInputMap;

public class AquaInputMapSet extends BaseInputMapSet {
	@Override
	public SubstanceInputMap getComboBoxAncestorInputMap() {
		// All entries in Aqua are "aqua" except ESCAPE mapped to "hidePopup"
		return super.getComboBoxAncestorInputMap();
	}

	protected SubstanceInputMap getSingleLineTextComponentFocusInputMap() {
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("meta C", DefaultEditorKit.copyAction);
		result.put("meta V", DefaultEditorKit.pasteAction);
		result.put("meta X", DefaultEditorKit.cutAction);
		result.put("COPY", DefaultEditorKit.copyAction);
		result.put("PASTE", DefaultEditorKit.pasteAction);
		result.put("CUT", DefaultEditorKit.cutAction);

		result.put("shift LEFT", DefaultEditorKit.selectionBackwardAction);
		result.put("shift KP_LEFT", DefaultEditorKit.selectionBackwardAction);
		result.put("shift RIGHT", DefaultEditorKit.selectionForwardAction);
		result.put("shift KP_RIGHT", DefaultEditorKit.selectionForwardAction);

		result.put("meta LEFT", DefaultEditorKit.beginLineAction);
		result.put("meta KP_LEFT", DefaultEditorKit.beginLineAction);
		result.put("ctrl A", DefaultEditorKit.beginLineAction);
		result.put("UP", DefaultEditorKit.beginLineAction);
		result.put("KP_UP", DefaultEditorKit.beginLineAction);
		result.put("meta RIGHT", DefaultEditorKit.endLineAction);
		result.put("meta KP_RIGHT", DefaultEditorKit.endLineAction);
		result.put("ctrl E", DefaultEditorKit.endLineAction);
		result.put("DOWN", DefaultEditorKit.endLineAction);
		result.put("KP_DOWN", DefaultEditorKit.endLineAction);

		result
				.put("meta shift LEFT",
						DefaultEditorKit.selectionBeginLineAction);
		result.put("meta shift KP_LEFT",
				DefaultEditorKit.selectionBeginLineAction);
		result.put("shift UP", DefaultEditorKit.selectionBeginLineAction);
		result.put("shift KP_UP", DefaultEditorKit.selectionBeginLineAction);
		result.put("meta shift RIGHT", DefaultEditorKit.selectionEndLineAction);
		result.put("meta shift KP_RIGHT",
				DefaultEditorKit.selectionEndLineAction);
		result.put("shift DOWN", DefaultEditorKit.selectionEndLineAction);
		result.put("shift KP_DOWN", DefaultEditorKit.selectionEndLineAction);

		result.put("meta A", DefaultEditorKit.selectAllAction);

		result.put("HOME", DefaultEditorKit.beginAction);
		result.put("ctrl P", DefaultEditorKit.beginAction);
		result.put("meta UP", DefaultEditorKit.beginAction);
		result.put("meta KP_UP", DefaultEditorKit.beginAction);
		result.put("END", DefaultEditorKit.endAction);
		result.put("ctrl N", DefaultEditorKit.endAction);
		result.put("ctrl V", DefaultEditorKit.endAction);
		result.put("meta DOWN", DefaultEditorKit.endAction);
		result.put("meta KP_DOWN", DefaultEditorKit.endAction);

		result.put("shift meta KP_UP", DefaultEditorKit.selectionBeginAction);
		result.put("shift UP", DefaultEditorKit.selectionBeginAction);
		result.put("shift HOME", DefaultEditorKit.selectionBeginAction);
		result.put("shift meta DOWN", DefaultEditorKit.selectionEndAction);
		result.put("shift meta KP_DOWN", DefaultEditorKit.selectionEndAction);
		result.put("shift END", DefaultEditorKit.selectionEndAction);

		result.put("BACK_SPACE", DefaultEditorKit.deletePrevCharAction);
		result.put("ctrl H", DefaultEditorKit.deletePrevCharAction);
		result.put("DELETE", DefaultEditorKit.deleteNextCharAction);
		result.put("ctrl D", DefaultEditorKit.deleteNextCharAction);
		result.put("alt BACK_SPACE", DefaultEditorKit.deletePrevWordAction);
		result.put("ctrl W", DefaultEditorKit.deletePrevWordAction);
		result.put("alt DELETE", DefaultEditorKit.deleteNextWordAction);

		result.put("RIGHT", DefaultEditorKit.forwardAction);
		result.put("KP_RIGHT", DefaultEditorKit.forwardAction);
		result.put("ctrl F", DefaultEditorKit.forwardAction);
		result.put("LEFT", DefaultEditorKit.backwardAction);
		result.put("KP_LEFT", DefaultEditorKit.backwardAction);
		result.put("ctrl B", DefaultEditorKit.backwardAction);

		result.put("alt RIGHT", DefaultEditorKit.nextWordAction);
		result.put("alt KP_RIGHT", DefaultEditorKit.nextWordAction);
		result.put("alt LEFT", DefaultEditorKit.previousWordAction);
		result.put("alt KP_LEFT", DefaultEditorKit.previousWordAction);

		result.put("shift alt RIGHT", DefaultEditorKit.selectionNextWordAction);
		result.put("shift alt KP_RIGHT",
				DefaultEditorKit.selectionNextWordAction);
		result.put("shift alt LEFT",
				DefaultEditorKit.selectionPreviousWordAction);
		result.put("shift alt KP_LEFT",
				DefaultEditorKit.selectionPreviousWordAction);

		result.put("shift meta PAGE_UP",
				TextComponentActions.SELECTION_PAGE_LEFT);
		result.put("shift meta PAGE_DOWN",
				TextComponentActions.SELECTION_PAGE_RIGHT);
		result
				.put("shift meta PAGE_UP",
						TextComponentActions.SELECTION_PAGE_UP);
		result.put("shift meta PAGE_DOWN",
				TextComponentActions.SELECTION_PAGE_DOWN);

		result.put("ENTER", JTextField.notifyAction);
		result.put("meta BACK_SLASH", TextComponentActions.UNSELECT);
		result.put("control shift O",
				TextComponentActions.TOGGLE_COMPONENT_ORIENTATION);

		// XXX: in Aqua these are aqua-page-down and aqua-page-up
		result.put("PAGE_DOWN", DefaultEditorKit.pageDownAction);
		result.put("PAGE_UP", DefaultEditorKit.pageUpAction);

		return result;
	}

	@Override
	protected SubstanceInputMap getMultilineTextComponentFocusInputMap() {
		// This is used in EditorPane, TextArea and TextPane. Almost
		// all key strokes can be mapped to the same basic actions used in Aqua.
		// There are 7 key strokes that use Aqua-specific actions. These
		// are mapped to the closest basic actions.
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("meta C", DefaultEditorKit.copyAction);
		result.put("meta V", DefaultEditorKit.pasteAction);
		result.put("meta X", DefaultEditorKit.cutAction);
		result.put("COPY", DefaultEditorKit.copyAction);
		result.put("PASTE", DefaultEditorKit.pasteAction);
		result.put("CUT", DefaultEditorKit.cutAction);

		result.put("shift LEFT", DefaultEditorKit.selectionBackwardAction);
		result.put("shift KP_LEFT", DefaultEditorKit.selectionBackwardAction);
		result.put("shift RIGHT", DefaultEditorKit.selectionForwardAction);
		result.put("shift KP_RIGHT", DefaultEditorKit.selectionForwardAction);
		result.put("alt LEFT", DefaultEditorKit.previousWordAction);
		result.put("alt KP_LEFT", DefaultEditorKit.previousWordAction);
		result.put("alt RIGHT", DefaultEditorKit.nextWordAction);
		result.put("alt KP_RIGHT", DefaultEditorKit.nextWordAction);
		result.put("alt shift LEFT",
				DefaultEditorKit.selectionPreviousWordAction);
		result.put("alt shift KP_LEFT",
				DefaultEditorKit.selectionPreviousWordAction);
		result.put("alt shift RIGHT", DefaultEditorKit.selectionNextWordAction);
		result.put("alt shift KP_RIGHT",
				DefaultEditorKit.selectionNextWordAction);

		result.put("meta A", DefaultEditorKit.selectAllAction);
		result.put("ctrl A", DefaultEditorKit.beginLineAction);
		result.put("meta KP_LEFT", DefaultEditorKit.beginLineAction);
		result.put("meta LEFT", DefaultEditorKit.beginLineAction);
		result.put("ctrl E", DefaultEditorKit.endLineAction);
		result.put("meta KP_RIGHT", DefaultEditorKit.endLineAction);
		result.put("meta RIGHT", DefaultEditorKit.endLineAction);

		result.put("shift meta KP_LEFT",
				DefaultEditorKit.selectionBeginLineAction);
		result
				.put("shift meta LEFT",
						DefaultEditorKit.selectionBeginLineAction);
		result.put("shift meta KP_RIGHT",
				DefaultEditorKit.selectionEndLineAction);
		result.put("shift meta RIGHT", DefaultEditorKit.selectionEndLineAction);

		result.put("ctrl P", DefaultEditorKit.upAction);
		result.put("ctrl N", DefaultEditorKit.downAction);
		// XXX: these are actually mapped to aqua-move-up and aqua-move-down
		result.put("UP", DefaultEditorKit.upAction);
		result.put("KP_UP", DefaultEditorKit.upAction);
		result.put("DOWN", DefaultEditorKit.downAction);
		result.put("KP_DOWN", DefaultEditorKit.downAction);
		// XXX: these are actually mapped to aqua-page-up and aqua-page-down
		result.put("PAGE_UP", DefaultEditorKit.pageUpAction);
		result.put("PAGE_DOWN", DefaultEditorKit.pageDownAction);
		result.put("ctrl V", DefaultEditorKit.pageDownAction);

		result.put("shift PAGE_UP", TextComponentActions.SELECTION_PAGE_UP);
		result.put("shift PAGE_DOWN", TextComponentActions.SELECTION_PAGE_DOWN);
		result.put("meta shift PAGE_UP",
				TextComponentActions.SELECTION_PAGE_LEFT);
		result.put("meta shift PAGE_DOWN",
				TextComponentActions.SELECTION_PAGE_RIGHT);
		result.put("shift UP", DefaultEditorKit.selectionUpAction);
		result.put("shift KP_UP", DefaultEditorKit.selectionUpAction);
		result.put("shift DOWN", DefaultEditorKit.selectionDownAction);
		result.put("shift KP_DOWN", DefaultEditorKit.selectionDownAction);

		result.put("meta shift KP_UP", DefaultEditorKit.selectionBeginAction);
		result.put("meta shift UP", DefaultEditorKit.selectionBeginAction);
		result.put("shift HOME", DefaultEditorKit.selectionBeginAction);
		result.put("meta shift KP_DOWN", DefaultEditorKit.selectionEndAction);
		result.put("meta shift DOWN", DefaultEditorKit.selectionEndAction);
		result.put("shift END", DefaultEditorKit.selectionEndAction);

		result.put("shift alt KP_UP",
				DefaultEditorKit.selectionBeginParagraphAction);
		result.put("shift alt UP",
				DefaultEditorKit.selectionBeginParagraphAction);
		result.put("shift alt KP_DOWN",
				DefaultEditorKit.selectionEndParagraphAction);
		result.put("shift alt DOWN",
				DefaultEditorKit.selectionEndParagraphAction);

		result.put("ENTER", DefaultEditorKit.insertBreakAction);
		result.put("BACK_SPACE", DefaultEditorKit.deletePrevCharAction);
		result.put("ctrl H", DefaultEditorKit.deletePrevCharAction);
		result.put("DELETE", DefaultEditorKit.deleteNextCharAction);
		result.put("ctrl D", DefaultEditorKit.deleteNextCharAction);
		result.put("alt DELETE", DefaultEditorKit.deleteNextWordAction);
		result.put("alt BACK_SPACE", DefaultEditorKit.deletePrevWordAction);
		result.put("ctrl W", DefaultEditorKit.deletePrevWordAction);

		result.put("RIGHT", DefaultEditorKit.forwardAction);
		result.put("KP_RIGHT", DefaultEditorKit.forwardAction);
		result.put("ctrl F", DefaultEditorKit.forwardAction);
		result.put("LEFT", DefaultEditorKit.backwardAction);
		result.put("KP_LEFT", DefaultEditorKit.backwardAction);
		result.put("ctrl B", DefaultEditorKit.backwardAction);
		result.put("TAB", DefaultEditorKit.insertTabAction);
		result.put("meta BACK_SLASH", TextComponentActions.UNSELECT);

		result.put("meta KP_UP", DefaultEditorKit.beginAction);
		result.put("meta UP", DefaultEditorKit.beginAction);
		result.put("HOME", DefaultEditorKit.beginAction);
		result.put("meta KP_DOWN", DefaultEditorKit.endAction);
		result.put("meta DOWN", DefaultEditorKit.endAction);
		result.put("END", DefaultEditorKit.endAction);

		result.put("meta T", TextComponentActions.NEXT_LINK);
		result.put("meta shift T", TextComponentActions.PREVIOUS_LINK);
		result.put("meta SPACE", TextComponentActions.ACTIVATE_LINK);
		result.put("control shift O",
				TextComponentActions.TOGGLE_COMPONENT_ORIENTATION);

		return result;
	}

	@Override
	public SubstanceInputMap getFileChooserAncestorInputMap() {
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("ESCAPE", FileChooserActions.CANCEL_SELECTION);
		result.put("F5", FileChooserActions.REFRESH);

		return result;
	}

	@Override
	public SubstanceInputMap getListFocusInputMap() {
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("meta C", COPY);
		result.put("meta V", PASTE);
		result.put("meta X", CUT);
		result.put("COPY", COPY);
		result.put("PASTE", PASTE);
		result.put("CUT", CUT);

		result.put("UP", ListActions.SELECT_PREVIOUS_ROW);
		result.put("KP_UP", ListActions.SELECT_PREVIOUS_ROW);
		result.put("shift UP", ListActions.SELECT_PREVIOUS_ROW_EXTEND);
		result.put("shift KP_UP", ListActions.SELECT_PREVIOUS_ROW_EXTEND);

		result.put("DOWN", ListActions.SELECT_NEXT_ROW);
		result.put("KP_DOWN", ListActions.SELECT_NEXT_ROW);
		result.put("shift DOWN", ListActions.SELECT_NEXT_ROW_EXTEND);
		result.put("shift KP_DOWN", ListActions.SELECT_NEXT_ROW_EXTEND);

		result.put("LEFT", ListActions.SELECT_PREVIOUS_COLUMN);
		result.put("KP_LEFT", ListActions.SELECT_PREVIOUS_COLUMN);
		result.put("shift LEFT", ListActions.SELECT_PREVIOUS_COLUMN_EXTEND);
		result.put("shift KP_LEFT", ListActions.SELECT_PREVIOUS_COLUMN_EXTEND);

		result.put("RIGHT", ListActions.SELECT_NEXT_COLUMN);
		result.put("KP_RIGHT", ListActions.SELECT_NEXT_COLUMN);
		result.put("shift RIGHT", ListActions.SELECT_NEXT_COLUMN_EXTEND);
		result.put("shift KP_RIGHT", ListActions.SELECT_NEXT_COLUMN_EXTEND);

		result.put("shift HOME", ListActions.SELECT_FIRST_ROW_EXTEND);
		result.put("shift END", ListActions.SELECT_LAST_ROW_EXTEND);

		result.put("shift PAGE_UP", ListActions.SCROLL_UP_EXTEND);
		result.put("shift PAGE_DOWN", ListActions.SCROLL_DOWN_EXTEND);

		result.put("meta A", ListActions.SELECT_ALL);

		// XXX: missing:
		// END -> aquaEnd
		// HOME -> aquaHome

		return result;
	}

	@Override
	public SubstanceInputMap getPasswordFieldFocusInputMap() {
		return this.getSingleLineTextComponentFocusInputMap();
	}

	@Override
	public SubstanceInputMap getScrollPaneAncestorInputMap() {
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("RIGHT", ScrollPaneActions.UNIT_SCROLL_RIGHT);
		result.put("KP_RIGHT", ScrollPaneActions.UNIT_SCROLL_RIGHT);
		result.put("DOWN", ScrollPaneActions.UNIT_SCROLL_DOWN);
		result.put("KP_DOWN", ScrollPaneActions.UNIT_SCROLL_DOWN);
		result.put("LEFT", ScrollPaneActions.UNIT_SCROLL_LEFT);
		result.put("KP_LEFT", ScrollPaneActions.UNIT_SCROLL_LEFT);
		result.put("UP", ScrollPaneActions.UNIT_SCROLL_UP);
		result.put("KP_UP", ScrollPaneActions.UNIT_SCROLL_UP);

		result.put("PAGE_UP", ScrollPaneActions.SCROLL_UP);
		result.put("PAGE_DOWN", ScrollPaneActions.SCROLL_DOWN);
		result.put("HOME", ScrollPaneActions.SCROLL_HOME);
		result.put("END", ScrollPaneActions.SCROLL_END);

		return result;
	}

	@Override
	public SubstanceInputMap getSliderFocusInputMap() {
		SubstanceInputMap result = super.getSliderFocusInputMap();
		result.remove("ctrl PAGE_DOWN");
		result.remove("ctrl PAGE_UP");
		return result;
	}

	@Override
	public SubstanceInputMap getTableAncestorInputMap() {
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("meta C", COPY);
		result.put("meta V", PASTE);
		result.put("meta X", CUT);
		result.put("COPY", COPY);
		result.put("PASTE", PASTE);
		result.put("CUT", CUT);

		result.put("RIGHT", TableActions.NEXT_COLUMN);
		result.put("KP_RIGHT", TableActions.NEXT_COLUMN);
		result.put("shift RIGHT", TableActions.NEXT_COLUMN_EXTEND_SELECTION);
		result.put("shift KP_RIGHT", TableActions.NEXT_COLUMN_EXTEND_SELECTION);

		result.put("LEFT", TableActions.PREVIOUS_COLUMN);
		result.put("KP_LEFT", TableActions.PREVIOUS_COLUMN);
		result.put("shift LEFT", TableActions.PREVIOUS_COLUMN_EXTEND_SELECTION);
		result.put("shift KP_LEFT",
				TableActions.PREVIOUS_COLUMN_EXTEND_SELECTION);

		result.put("DOWN", TableActions.NEXT_ROW);
		result.put("KP_DOWN", TableActions.NEXT_ROW);
		result.put("shift DOWN", TableActions.NEXT_ROW_EXTEND_SELECTION);
		result.put("shift KP_DOWN", TableActions.NEXT_ROW_EXTEND_SELECTION);

		result.put("UP", TableActions.PREVIOUS_ROW);
		result.put("KP_UP", TableActions.PREVIOUS_ROW);
		result.put("shift UP", TableActions.PREVIOUS_ROW_EXTEND_SELECTION);
		result.put("shift KP_UP", TableActions.PREVIOUS_ROW_EXTEND_SELECTION);

		result.put("HOME", TableActions.FIRST_COLUMN);
		result.put("shift HOME", TableActions.FIRST_COLUMN_EXTEND_SELECTION);
		result.put("END", TableActions.LAST_COLUMN);
		result.put("shift END", TableActions.LAST_COLUMN_EXTEND_SELECTION);

		result.put("PAGE_UP", TableActions.SCROLL_UP_CHANGE_SELECTION);
		result.put("shift PAGE_UP", TableActions.SCROLL_UP_EXTEND_SELECTION);
		result.put("PAGE_DOWN", TableActions.SCROLL_DOWN_CHANGE_SELECTION);
		result
				.put("shift PAGE_DOWN",
						TableActions.SCROLL_DOWN_EXTEND_SELECTION);

		result.put("TAB", TableActions.NEXT_COLUMN_CELL);
		result.put("shift TAB", TableActions.PREVIOUS_COLUMN_CELL);
		result.put("ENTER", TableActions.NEXT_ROW_CELL);
		result.put("shift ENTER", TableActions.PREVIOUS_ROW_CELL);
		result.put("meta A", TableActions.SELECT_ALL);

		result.put("alt TAB", TableActions.FOCUS_HEADER);
		result.put("shift alt TAB", TableActions.FOCUS_HEADER);

		return result;
	}

	@Override
	public SubstanceInputMap getTextFieldFocusInputMap() {
		return this.getSingleLineTextComponentFocusInputMap();
	}

	@Override
	public SubstanceInputMap getTreeFocusInputMap() {
		SubstanceInputMap result = new SubstanceInputMap();

		result.put("meta C", COPY);
		result.put("meta V", PASTE);
		result.put("meta X", CUT);
		result.put("COPY", COPY);
		result.put("PASTE", PASTE);
		result.put("CUT", CUT);

		result.put("UP", TreeActions.SELECT_PREVIOUS);
		result.put("KP_UP", TreeActions.SELECT_PREVIOUS);
		result.put("shift UP", TreeActions.SELECT_PREVIOUS_EXTEND_SELECTION);
		result.put("shift KP_UP", TreeActions.SELECT_PREVIOUS_EXTEND_SELECTION);

		result.put("DOWN", TreeActions.SELECT_NEXT);
		result.put("KP_DOWN", TreeActions.SELECT_NEXT);
		result.put("shift DOWN", TreeActions.SELECT_NEXT_EXTEND_SELECTION);
		result.put("shift KP_DOWN", TreeActions.SELECT_NEXT_EXTEND_SELECTION);

		result.put("ctrl A", TreeActions.SELECT_ALL);

		// XXX: in Aqua this is mapped to aquaExpandNode
		result.put("RIGHT", TreeActions.EXPAND);
		result.put("KP_RIGHT", TreeActions.EXPAND);
		result.put("ctrl RIGHT", TreeActions.EXPAND);
		result.put("ctrl KP_RIGHT", TreeActions.EXPAND);
		result.put("shift RIGHT", TreeActions.EXPAND);
		result.put("shift KP_RIGHT", TreeActions.EXPAND);

		// XXX: in Aqua this is mapped to aquaCollapseNode
		result.put("LEFT", TreeActions.COLLAPSE);
		result.put("KP_LEFT", TreeActions.COLLAPSE);
		result.put("ctrl LEFT", TreeActions.COLLAPSE);
		result.put("ctrl KP_LEFT", TreeActions.COLLAPSE);
		result.put("shift LEFT", TreeActions.COLLAPSE);
		result.put("shift KP_LEFT", TreeActions.COLLAPSE);

		// XXX: in Aqua there are mappings to aquaFullyCollapseNode and
		// aquaFullyExpandNode

		return result;
	}
}
