blob: ff4daa3c6b2d5a56fd45a0f42fc78f216992902d [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* 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.intellij.tools;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.keymap.KeyMapBundle;
import com.intellij.openapi.keymap.KeymapExtension;
import com.intellij.openapi.keymap.KeymapGroup;
import com.intellij.openapi.keymap.impl.ui.Group;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.util.containers.HashMap;
import java.util.Arrays;
/**
* @author traff
*/
public abstract class BaseToolKeymapExtension implements KeymapExtension {
@Override
public KeymapGroup createGroup(final Condition<AnAction> filtered, final Project project) {
final ActionManagerEx actionManager = ActionManagerEx.getInstanceEx();
String[] ids = actionManager.getActionIds(getActionIdPrefix());
Arrays.sort(ids);
Group group = new Group(getGroupName(), AllIcons.Nodes.KeymapTools);
HashMap<String, Group> toolGroupNameToGroup = new HashMap<String, Group>();
for (String id : ids) {
if (filtered != null && !filtered.value(actionManager.getActionOrStub(id))) continue;
String groupName = getGroupByActionId(id);
if (groupName != null && groupName.trim().length() == 0) {
groupName = null;
}
Group subGroup = toolGroupNameToGroup.get(groupName);
if (subGroup == null) {
subGroup = new Group(groupName, null, null);
toolGroupNameToGroup.put(groupName, subGroup);
if (groupName != null) {
group.addGroup(subGroup);
}
}
subGroup.addActionId(id);
}
Group subGroup = toolGroupNameToGroup.get(null);
if (subGroup != null) {
group.addAll(subGroup);
}
return group;
}
protected abstract String getActionIdPrefix();
protected abstract String getGroupByActionId(String id);
protected abstract String getGroupName();
}