// Copyright 2012 Google Inc. All Rights Reserved.
//
// 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 com.google.collide.client.search.awesomebox;
import com.google.collide.client.ClientOs;
import com.google.collide.client.search.awesomebox.AwesomeBox.Resources;
import com.google.collide.client.util.Elements;
import com.google.collide.client.util.input.ModifierKeys;
import com.google.gwt.core.client.GWT;
/**
* Static Utility Methods for AwesomeBox Sections
*/
public class AwesomeBoxUtils {
/* Section Helper Functions */
public static elemental.html.DivElement createSectionContainer(Resources res) {
return Elements.createDivElement(res.awesomeBoxCss().section());
}
public static elemental.html.DivElement createSectionItem(Resources res) {
return Elements.createDivElement(res.awesomeBoxCss().sectionItem());
}
/**
* Creates a element with the OS appropriate text for the shortcut consisting
* of the specified modifier keys and character.
*
* @param modifiers A binary OR of the appropriate ModifierKeys constants
* @return a div containing the shortcut text
*/
public static elemental.html.DivElement createSectionShortcut(
Resources res, int modifiers, String shortcutKey) {
elemental.html.DivElement element = Elements.createDivElement(res.awesomeBoxCss().shortcut());
// Builds a shortcut key string based on the modifiers given
element.setTextContent(formatShortcutAsString(modifiers, shortcutKey));
return element;
}
private static ClientOs clientOs = GWT.create(ClientOs.class);
/**
* Converts a shortcut based on ModifierKeys constants and a character to it's
* string abbreviation. This is OS specific.
*/
public static String formatShortcutAsString(int modifiers, String shortcutKey) {
StringBuilder builder = new StringBuilder();
if ((modifiers & ModifierKeys.ACTION) == ModifierKeys.ACTION) {
builder.append(clientOs.actionKeyLabel());
} else if ((modifiers & ModifierKeys.CTRL) == ModifierKeys.CTRL) {
/*
* This is an "else" on "ACTION" since if the platform treats CTRL as
* ACTION, we don't want to print this
*/
builder.append(clientOs.ctrlKeyLabel());
}
if ((modifiers & ModifierKeys.ALT) == ModifierKeys.ALT) {
builder.append(clientOs.altKeyLabel());
}
if ((modifiers & ModifierKeys.SHIFT) == ModifierKeys.SHIFT) {
builder.append(clientOs.shiftKeyLabel());
}
builder.append(shortcutKey);
return builder.toString();
}
}