diff --git a/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/ActionGroup.java b/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/ActionGroup.java
index 068b253c5fd3..3d2780a12c6d 100644
--- a/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/ActionGroup.java
+++ b/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/ActionGroup.java
@@ -28,6 +28,9 @@ import java.util.Set;
/**
* Represents a group of actions.
+ *
+ * @see com.intellij.openapi.actionSystem.DefaultActionGroup
+ * @see com.intellij.openapi.actionSystem.ComputableActionGroup
*/
public abstract class ActionGroup extends AnAction {
private boolean myPopup;
diff --git a/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLAction.java b/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLAction.java
index 12d5fce8d2d8..28a664c62f86 100644
--- a/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLAction.java
+++ b/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLAction.java
@@ -55,6 +55,7 @@ public class ExportToHTMLAction extends AnAction {
}
PsiFile psiFile = CommonDataKeys.PSI_FILE.getData(dataContext);
presentation.setEnabled(psiFile != null && psiFile.getContainingDirectory() != null);
+ presentation.setVisible(psiFile != null);
}
}
\ No newline at end of file
diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/actions/MarkRootGroup.java b/platform/lang-impl/src/com/intellij/ide/projectView/actions/MarkRootGroup.java
index 2a9a881d69dd..be1f5398ba48 100644
--- a/platform/lang-impl/src/com/intellij/ide/projectView/actions/MarkRootGroup.java
+++ b/platform/lang-impl/src/com/intellij/ide/projectView/actions/MarkRootGroup.java
@@ -15,17 +15,10 @@
*/
package com.intellij.ide.projectView.actions;
-import com.intellij.openapi.actionSystem.ActionGroupUtil;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.actionSystem.DefaultActionGroup;
-import com.intellij.openapi.project.DumbAware;
+import com.intellij.ide.actions.NonTrivialActionGroup;
/**
* @author yole
*/
-public class MarkRootGroup extends DefaultActionGroup implements DumbAware {
- @Override
- public void update(AnActionEvent e) {
- e.getPresentation().setVisible(!ActionGroupUtil.isGroupEmpty(this, e));
- }
+public class MarkRootGroup extends NonTrivialActionGroup {
}
diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java
index 147ba3ae4588..9df2e1b88788 100644
--- a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java
+++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java
@@ -35,7 +35,13 @@ import java.util.List;
* to implement your own ActionGroup.
*
* @see Constraints
- * @see ComputableActionGroup
+ *
+ * @see com.intellij.openapi.actionSystem.ComputableActionGroup
+ *
+ * @see com.intellij.ide.actions.NonEmptyActionGroup
+ * @see com.intellij.ide.actions.NonTrivialActionGroup
+ * @see com.intellij.ide.actions.SmartPopupActionGroup
+ *
*/
public class DefaultActionGroup extends ActionGroup {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.actionSystem.DefaultActionGroup");
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/NonEmptyActionGroup.java b/platform/platform-impl/src/com/intellij/ide/actions/NonEmptyActionGroup.java
index fff18a346054..58fd8650c292 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/NonEmptyActionGroup.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/NonEmptyActionGroup.java
@@ -20,6 +20,12 @@ import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.project.DumbAware;
+/**
+ * This group hides itself when there's no registered children.
+ *
+ * @see com.intellij.ide.actions.SmartPopupActionGroup
+ * @see com.intellij.ide.actions.NonTrivialActionGroup
+ */
public class NonEmptyActionGroup extends DefaultActionGroup implements DumbAware {
public NonEmptyActionGroup() {
super();
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/NonTrivialActionGroup.java b/platform/platform-impl/src/com/intellij/ide/actions/NonTrivialActionGroup.java
new file mode 100644
index 000000000000..1739c25c63b6
--- /dev/null
+++ b/platform/platform-impl/src/com/intellij/ide/actions/NonTrivialActionGroup.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2000-2014 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.ActionGroupUtil;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
+import com.intellij.openapi.project.DumbAware;
+
+/**
+ * This group hides itself when there's no enabled and visible child.
+ *
+ * @see com.intellij.ide.actions.SmartPopupActionGroup
+ * @see com.intellij.ide.actions.NonEmptyActionGroup
+ *
+ * @author gregsh
+ */
+public class NonTrivialActionGroup extends DefaultActionGroup implements DumbAware {
+ public NonTrivialActionGroup() {
+ super();
+ }
+
+ public void update(AnActionEvent e) {
+ e.getPresentation().setVisible(!ActionGroupUtil.isGroupEmpty(this, e));
+ }
+}
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/SmartPopupActionGroup.java b/platform/platform-impl/src/com/intellij/ide/actions/SmartPopupActionGroup.java
index 04303ec1ea6b..3b38863922a6 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/SmartPopupActionGroup.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/SmartPopupActionGroup.java
@@ -20,6 +20,10 @@ import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
/**
+ * This group turns itself into a popup if there's more than one child.
+ *
+ * @see com.intellij.ide.actions.NonEmptyActionGroup
+ * @see com.intellij.ide.actions.NonTrivialActionGroup
* @author yole
*/
public class SmartPopupActionGroup extends DefaultActionGroup {
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java
index f54540defbdd..a09bc3ff0749 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java
@@ -20,35 +20,39 @@
package com.intellij.ide.actions;
import com.intellij.CommonBundle;
-import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.CommonDataKeys;
+import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.vfs.VfsUtil;
+import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.io.ReadOnlyAttributeUtil;
import java.io.IOException;
import java.util.ArrayList;
public class ToggleReadOnlyAttributeAction extends AnAction implements DumbAware {
- static VirtualFile[] getFiles(DataContext dataContext){
- ArrayList filesList = new ArrayList();
+ static VirtualFile[] getFiles(DataContext dataContext) {
+ ArrayList filesList = ContainerUtil.newArrayList();
VirtualFile[] files = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext);
- for(int i=0;files!=null&&i0);
+ public void update(AnActionEvent e) {
+ VirtualFile[] files = getFiles(e.getDataContext());
+ e.getPresentation().setEnabledAndVisible(files.length > 0);
if (files.length > 0) {
boolean allReadOnly = true;
boolean allWritable = true;
@@ -70,28 +74,27 @@ public class ToggleReadOnlyAttributeAction extends AnAction implements DumbAware
e.getPresentation().setText("Toggle Read-only Attribute");
}
}
-
}
- public void actionPerformed(final AnActionEvent e){
+ public void actionPerformed(final AnActionEvent e) {
ApplicationManager.getApplication().runWriteAction(
- new Runnable(){
- public void run(){
+ new Runnable() {
+ public void run() {
// Save all documents. We won't be able to save changes to the files that became read-only afterwards.
FileDocumentManager.getInstance().saveAllDocuments();
try {
- VirtualFile[] files=getFiles(e.getDataContext());
+ VirtualFile[] files = getFiles(e.getDataContext());
for (VirtualFile file : files) {
ReadOnlyAttributeUtil.setReadOnlyAttribute(file, file.isWritable());
}
}
- catch(IOException exc){
+ catch (IOException exc) {
Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
Messages.showMessageDialog(
project,
exc.getMessage(),
- CommonBundle.getErrorTitle(),Messages.getErrorIcon()
+ CommonBundle.getErrorTitle(), Messages.getErrorIcon()
);
}
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeFileEncodingAction.java b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeFileEncodingAction.java
index 9c3704d10c6c..be87a940896d 100644
--- a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeFileEncodingAction.java
+++ b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeFileEncodingAction.java
@@ -69,6 +69,7 @@ public class ChangeFileEncodingAction extends AnAction implements DumbAware {
VirtualFile myFile = e.getData(CommonDataKeys.VIRTUAL_FILE);
boolean enabled = myFile != null && checkEnabled(myFile);
e.getPresentation().setEnabled(enabled);
+ e.getPresentation().setVisible(myFile != null);
}
@Override
diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml
index 8d7da3cab4a7..c2e5c4aafaac 100644
--- a/platform/platform-resources/src/idea/PlatformActions.xml
+++ b/platform/platform-resources/src/idea/PlatformActions.xml
@@ -189,7 +189,7 @@
-
+