*/
package com.intellij.openapi.actionSystem;
-import com.intellij.openapi.project.DumbAware;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.lang.reflect.Method;
-import java.util.Set;
import java.util.HashSet;
+import java.util.Set;
/**
* Represents a group of actions.
*
* @return <code>true</code> if the group is a popup, <code>false</code> otherwise
*/
- public final boolean isPopup(){
+ public boolean isPopup(){
return myPopup;
}
--- /dev/null
+/*
+ * Copyright 2000-2011 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.ide.actions;
+
+import com.intellij.openapi.actionSystem.ActionGroup;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
+
+/**
+ * @author yole
+ */
+public class SmartPopupActionGroup extends DefaultActionGroup {
+ private boolean myIsPopupCalculated;
+
+ @Override
+ public boolean isPopup() {
+ if (!myIsPopupCalculated) {
+ setPopup(getChildrenCountRecursive(this) > 1);
+ myIsPopupCalculated = true;
+ }
+ return super.isPopup();
+ }
+
+ private static int getChildrenCountRecursive(ActionGroup group) {
+ AnAction[] children;
+ if (group instanceof DefaultActionGroup) {
+ children = ((DefaultActionGroup) group).getChildActionsOrStubs();
+ }
+ else {
+ children = group.getChildren(null);
+ }
+ int count = 0;
+ for (AnAction child : children) {
+ if (child instanceof ActionGroup) {
+ count += getChildrenCountRecursive((ActionGroup) child);
+ }
+ else {
+ count++;
+ }
+ }
+ return count;
+ }
+}
<separator/>
<group id="FileMainSettingsGroup">
<action id="ShowSettings" class="com.intellij.ide.actions.ShowSettingsAction" icon="/general/ideOptions.png"/>
- <group id="FileOtherSettingsGroup" popup="true">
+ <group id="FileOtherSettingsGroup" class="com.intellij.ide.actions.SmartPopupActionGroup">
<action id="TemplateProjectProperties" class="com.intellij.ide.actions.TemplateProjectPropertiesAction"/>
<group id="FileSettingsGroup"/>
</group>