diff --git a/images/src/org/intellij/images/editor/actions/BackgroundImageDialog.java b/images/src/org/intellij/images/editor/actions/BackgroundImageDialog.java index edf9976c2652..ea7579378d52 100644 --- a/images/src/org/intellij/images/editor/actions/BackgroundImageDialog.java +++ b/images/src/org/intellij/images/editor/actions/BackgroundImageDialog.java @@ -271,7 +271,7 @@ public class BackgroundImageDialog extends DialogWrapper { @Override public void update(@NotNull AnActionEvent e) { e.getPresentation().setText(text); - e.getPresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, target.equals(myPreviewTarget)); + Toggleable.setSelected(e.getPresentation(), target.equals(myPreviewTarget)); super.update(e); } diff --git a/platform/lang-api/src/com/intellij/execution/ui/actions/AbstractFocusOnAction.java b/platform/lang-api/src/com/intellij/execution/ui/actions/AbstractFocusOnAction.java index 02f6d4956b90..307809eba2a1 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/actions/AbstractFocusOnAction.java +++ b/platform/lang-api/src/com/intellij/execution/ui/actions/AbstractFocusOnAction.java @@ -35,7 +35,7 @@ public class AbstractFocusOnAction extends BaseViewAction implements Toggleable final boolean visible = content.length == 1; e.getPresentation().setVisible(visible); if (visible) { - e.getPresentation().putClientProperty(SELECTED_PROPERTY, isToFocus(context, content)); + Toggleable.setSelected(e.getPresentation(), isToFocus(context, content)); } } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/util/ArrangementListRowDecorator.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/util/ArrangementListRowDecorator.java index b9b89bb3350b..59ae901338c6 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/util/ArrangementListRowDecorator.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/util/ArrangementListRowDecorator.java @@ -28,6 +28,7 @@ import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; import com.intellij.psi.codeStyle.arrangement.std.ArrangementSettingsToken; import com.intellij.psi.codeStyle.arrangement.std.ArrangementUiComponent; import com.intellij.ui.SimpleColoredComponent; +import com.intellij.util.ThreeState; import com.intellij.util.ui.GridBag; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; @@ -132,14 +133,14 @@ public class ArrangementListRowDecorator extends JPanel implements ArrangementUi public void setBeingEdited(boolean beingEdited) { if (myBeingEdited && !beingEdited) { - myEditButton.getPresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, false); + Toggleable.setSelected(myEditButton.getPresentation(), false); } if (!beingEdited && !myUnderMouse) { myEditButton.setVisible(false); } if (beingEdited && !myBeingEdited) { myEditButton.setVisible(true); - myEditButton.getPresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, true); + Toggleable.setSelected(myEditButton.getPresentation(), true); } myBeingEdited = beingEdited; } @@ -190,8 +191,8 @@ public class ArrangementListRowDecorator extends JPanel implements ArrangementUi Rectangle bounds = getButtonScreenBounds(); if (!myBeingEdited && bounds != null) { boolean selected = bounds.contains(event.getLocationOnScreen()); - boolean wasSelected = myEditButton.getPresentation().getClientProperty(Toggleable.SELECTED_PROPERTY) == Boolean.TRUE; - myEditButton.getPresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, selected); + boolean wasSelected = Toggleable.isSelected(myEditButton.getPresentation()) == ThreeState.YES; + Toggleable.setSelected(myEditButton.getPresentation(), selected); if (selected ^ wasSelected) { return myScreenBounds; } diff --git a/platform/lang-impl/src/com/intellij/build/AbstractViewManager.java b/platform/lang-impl/src/com/intellij/build/AbstractViewManager.java index a5fede147ce1..e553a161ed69 100644 --- a/platform/lang-impl/src/com/intellij/build/AbstractViewManager.java +++ b/platform/lang-impl/src/com/intellij/build/AbstractViewManager.java @@ -254,7 +254,7 @@ public abstract class AbstractViewManager implements ViewManager, BuildProgressL myContent.putUserData(ToolWindow.SHOW_CONTENT_ICON, Boolean.TRUE); } myContent.setPinned(selected); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(e.getPresentation(), selected); } @Override @@ -270,7 +270,7 @@ public abstract class AbstractViewManager implements ViewManager, BuildProgressL boolean selected = myContent.isPinned(); e.getPresentation().setIcon(AllIcons.General.Pin_tab); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(e.getPresentation(), selected); String text; if (!isActiveTab) { diff --git a/platform/lang-impl/src/com/intellij/build/CompositeView.java b/platform/lang-impl/src/com/intellij/build/CompositeView.java index 71596f97221e..f4388b81668e 100644 --- a/platform/lang-impl/src/com/intellij/build/CompositeView.java +++ b/platform/lang-impl/src/com/intellij/build/CompositeView.java @@ -162,7 +162,7 @@ public class CompositeView extends JPanel implemen } else { presentation.setEnabledAndVisible(true); - presentation.putClientProperty(SELECTED_PROPERTY, isSelected(e)); + Toggleable.setSelected(presentation, isSelected(e)); } } diff --git a/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java b/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java index 3424821d43a2..23bb26dc6a4f 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java +++ b/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java @@ -331,7 +331,7 @@ public class DuplexConsoleView ext } else { enableConsole(true); - presentation.putClientProperty(SELECTED_PROPERTY, false); + Toggleable.setSelected(presentation, false); presentation.setEnabled(false); } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/bigPopup/ShowFilterAction.java b/platform/lang-impl/src/com/intellij/ide/actions/bigPopup/ShowFilterAction.java index 2043c9b1408f..c67f83b2ab44 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/bigPopup/ShowFilterAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/bigPopup/ShowFilterAction.java @@ -7,6 +7,7 @@ import com.intellij.ide.util.ElementsChooser; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.ToggleAction; +import com.intellij.openapi.actionSystem.Toggleable; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; @@ -51,7 +52,7 @@ public abstract class ShowFilterAction extends ToggleAction implements DumbAware Icon icon = getTemplatePresentation().getIcon(); e.getPresentation().setIcon(isActive() ? ExecutionUtil.getLiveIndicator(icon) : icon); e.getPresentation().setEnabled(isEnabled()); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, isSelected(e)); + Toggleable.setSelected(e.getPresentation(), isSelected(e)); } protected abstract boolean isEnabled(); diff --git a/platform/lang-impl/src/com/intellij/ide/bookmarks/actions/ToggleBookmarkAction.java b/platform/lang-impl/src/com/intellij/ide/bookmarks/actions/ToggleBookmarkAction.java index 598bf3e41086..5f623dce647d 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmarks/actions/ToggleBookmarkAction.java +++ b/platform/lang-impl/src/com/intellij/ide/bookmarks/actions/ToggleBookmarkAction.java @@ -46,7 +46,7 @@ public class ToggleBookmarkAction extends BookmarksAction implements DumbAware, final BookmarkInContextInfo info = getBookmarkInfo(event); final boolean selected = info != null && info.getBookmarkAtPlace() != null; - event.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(event.getPresentation(), selected); } @Override @@ -58,7 +58,7 @@ public class ToggleBookmarkAction extends BookmarksAction implements DumbAware, if (info == null) return; final boolean selected = info.getBookmarkAtPlace() != null; - e.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(e.getPresentation(), selected); if (selected) { BookmarkManager.getInstance(project).removeBookmark(info.getBookmarkAtPlace()); diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/actions/FavoritesToolbarButtonAction.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/actions/FavoritesToolbarButtonAction.java index f0e03ad88b5f..8c30ee7de0b3 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/actions/FavoritesToolbarButtonAction.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/actions/FavoritesToolbarButtonAction.java @@ -73,6 +73,6 @@ public abstract class FavoritesToolbarButtonAction extends AnActionButton implem @Override public void updateButton(@NotNull AnActionEvent e) { super.updateButton(e); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, isOptionEnabled()); + Toggleable.setSelected(e.getPresentation(), isOptionEnabled()); } } diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java index 2f0583262795..cb8a7671c5bd 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java @@ -55,7 +55,7 @@ public class InspectionFilterAction extends DefaultActionGroup implements Toggle @Override public void update(@NotNull AnActionEvent e) { super.update(e); - e.getPresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, !myInspectionsFilter.isEmptyFilter()); + Toggleable.setSelected(e.getPresentation(), !myInspectionsFilter.isEmptyFilter()); } private void tune(InspectionProfileImpl profile, Project project) { diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleAction.java index 93f88b9ed2ac..40bd24ba7fca 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleAction.java @@ -28,7 +28,7 @@ public abstract class ToggleAction extends AnAction implements Toggleable { final boolean state = !isSelected(e); setSelected(e, state); final Presentation presentation = e.getPresentation(); - presentation.putClientProperty(SELECTED_PROPERTY, state); + Toggleable.setSelected(presentation, state); } /** @@ -49,7 +49,7 @@ public abstract class ToggleAction extends AnAction implements Toggleable { public void update(@NotNull final AnActionEvent e){ boolean selected = isSelected(e); final Presentation presentation = e.getPresentation(); - presentation.putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(presentation, selected); if (e.isFromContextMenu()) { //force to show check marks instead of toggled icons in context menu presentation.setIcon(null); diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleOptionAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleOptionAction.java index 1a951421d935..afd013fa2894 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleOptionAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ToggleOptionAction.java @@ -4,7 +4,7 @@ package com.intellij.openapi.actionSystem; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.Icon; +import javax.swing.*; import java.util.function.Function; public class ToggleOptionAction extends ToggleAction { @@ -49,7 +49,7 @@ public class ToggleOptionAction extends ToggleAction { Presentation presentation = event.getPresentation(); presentation.setEnabledAndVisible(supported); if (supported) { - presentation.putClientProperty(SELECTED_PROPERTY, option.isSelected()); + Toggleable.setSelected(presentation, option.isSelected()); presentation.setText(option.getName()); presentation.setDescription(option.getDescription()); if (ActionPlaces.isPopupPlace(event.getPlace())) presentation.setIcon(null); diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/Toggleable.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/Toggleable.java index 5b1c63310540..0bcb4602b9d0 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/Toggleable.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/Toggleable.java @@ -16,8 +16,41 @@ package com.intellij.openapi.actionSystem; +import com.intellij.util.ThreeState; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +/** + * A marker interface for the action which could be toggled between "selected" and "not selected" states. + */ public interface Toggleable { + /** + * A property for the presentation to hold the state of the toggleable action. + * Normally you should not use this directly. + * Use {@link #isSelected(Presentation)} and {@link #setSelected(Presentation, boolean)} methods instead. + */ @NonNls String SELECTED_PROPERTY = "selected"; + + /** + * Checks whether given presentation is in the "selected" state + * @param presentation presentation to check + * @return {@link ThreeState#YES} if "selected", + * {@link ThreeState#NO} if "not selected", {@link ThreeState#UNSURE} if the state wasn't set previously. + */ + @NotNull + @Contract(pure = true) + static ThreeState isSelected(@NotNull Presentation presentation) { + Object property = presentation.getClientProperty(SELECTED_PROPERTY); + return property instanceof Boolean ? ThreeState.fromBoolean((Boolean)property) : ThreeState.UNSURE; + } + + /** + * Sets the selected state for given presentation (assuming it's a presentation of a toggleable action) + * @param presentation presentation to update + * @param selected whether the state should be "selected" or "not selected". + */ + static void setSelected(@NotNull Presentation presentation, boolean selected) { + presentation.putClientProperty(SELECTED_PROPERTY, selected); + } } \ No newline at end of file diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/CheckboxAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/CheckboxAction.java index 0728f881ff20..d6c9f8cbd4e2 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/CheckboxAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/CheckboxAction.java @@ -6,6 +6,7 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.*; import com.intellij.ui.ComponentUtil; import com.intellij.ui.components.JBCheckBox; +import com.intellij.util.ThreeState; import com.intellij.util.ui.JBUI; import org.jetbrains.annotations.NotNull; @@ -54,7 +55,7 @@ public abstract class CheckboxAction extends ToggleAction implements CustomCompo protected void updateCustomComponent(JCheckBox checkBox, Presentation presentation) { updateCheckboxPresentation(checkBox, presentation); - checkBox.setSelected(Boolean.TRUE.equals(presentation.getClientProperty(SELECTED_PROPERTY))); + checkBox.setSelected(Toggleable.isSelected(presentation) == ThreeState.YES); } static void updateCheckboxPresentation(JCheckBox checkBox, Presentation presentation) { diff --git a/platform/platform-api/src/com/intellij/ui/ToggleActionButton.java b/platform/platform-api/src/com/intellij/ui/ToggleActionButton.java index 99638c469147..dc4ff7609c8a 100644 --- a/platform/platform-api/src/com/intellij/ui/ToggleActionButton.java +++ b/platform/platform-api/src/com/intellij/ui/ToggleActionButton.java @@ -52,15 +52,14 @@ public abstract class ToggleActionButton extends AnActionButton implements Toggl public final void actionPerformed(@NotNull AnActionEvent e) { final boolean state = !isSelected(e); setSelected(e, state); - final Boolean selected = state; final Presentation presentation = e.getPresentation(); - presentation.putClientProperty(Toggleable.SELECTED_PROPERTY, selected); + Toggleable.setSelected(presentation, state); } @Override public final void updateButton(@NotNull AnActionEvent e) { - final Boolean selected = isSelected(e); + final boolean selected = isSelected(e); final Presentation presentation = e.getPresentation(); - presentation.putClientProperty(Toggleable.SELECTED_PROPERTY, selected); + Toggleable.setSelected(presentation, selected); } } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/PinActiveTabAction.java b/platform/platform-impl/src/com/intellij/ide/actions/PinActiveTabAction.java index aff8f958a1dc..775f7cab45c3 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/PinActiveTabAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/PinActiveTabAction.java @@ -44,7 +44,7 @@ public class PinActiveTabAction extends DumbAwareAction implements Toggleable { if (handler == null) return; boolean selected = !handler.isPinned; handler.setPinned(selected); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(e.getPresentation(), selected); } @Override @@ -54,7 +54,7 @@ public class PinActiveTabAction extends DumbAwareAction implements Toggleable { boolean selected = enabled && handler.isPinned; e.getPresentation().setIcon(e.isFromActionToolbar() ? AllIcons.General.Pin_tab : null); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(e.getPresentation(), selected); String text; // add the word "active" if the target tab is not current diff --git a/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java b/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java index 2f37dd05a84f..a119f5499f29 100644 --- a/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java +++ b/platform/platform-impl/src/com/intellij/internal/ui/ComponentPanelTestAction.java @@ -747,7 +747,7 @@ public class ComponentPanelTestAction extends DumbAwareAction { actionsArray[1].getTemplatePresentation().setEnabled(false); } - e.getPresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, selected); + Toggleable.setSelected(e.getPresentation(), selected); } }; diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/SplitButtonAction.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/SplitButtonAction.java index f8ff0d2ea96f..c5b4114ac0ab 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/SplitButtonAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/SplitButtonAction.java @@ -16,6 +16,7 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.scale.JBUIScale; +import com.intellij.util.ThreeState; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.StartupUiUtil; @@ -149,7 +150,7 @@ public class SplitButtonAction extends AnAction implements CustomComponentAction private boolean isToggleActionPushed() { return selectedAction instanceof Toggleable && - myPresentation.getClientProperty(Toggleable.SELECTED_PROPERTY) == Boolean.TRUE; + Toggleable.isSelected(myPresentation) == ThreeState.YES; } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java index 7be0847258a5..191529236733 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java @@ -24,6 +24,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.ComponentUtil; import com.intellij.ui.scale.JBUIScale; +import com.intellij.util.ThreeState; import com.intellij.util.ui.*; import com.intellij.util.ui.accessibility.AccessibleContextUtil; import com.intellij.util.ui.accessibility.ScreenReader; @@ -113,8 +114,7 @@ public class ActionButton extends JComponent implements ActionButtonComponent, A @Override public int getPopState() { if (myAction instanceof Toggleable) { - Boolean selected = (Boolean)myPresentation.getClientProperty(Toggleable.SELECTED_PROPERTY); - boolean flag1 = selected != null && selected.booleanValue(); + boolean flag1 = Toggleable.isSelected(myPresentation) == ThreeState.YES; return getPopState(flag1); } else { diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java index 64c0679e3b3a..cfa96e150d10 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java @@ -19,6 +19,7 @@ import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.components.JBCheckBoxMenuItem; import com.intellij.ui.plaf.beg.BegMenuItemUI; +import com.intellij.util.ThreeState; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.LafIconLookup; import com.intellij.util.ui.UIUtil; @@ -199,7 +200,7 @@ public class ActionMenuItem extends JBCheckBoxMenuItem { private void updateIcon(AnAction action) { if (isToggleable() && (myPresentation.getIcon() == null || myInsideCheckedGroup || !UISettings.getInstance().getShowIconsInMenus())) { action.update(myEvent); - myToggled = Boolean.TRUE.equals(myEvent.getPresentation().getClientProperty(Toggleable.SELECTED_PROPERTY)); + myToggled = Toggleable.isSelected(myEvent.getPresentation()) == ThreeState.YES; if (ActionPlaces.MAIN_MENU.equals(myPlace) && SystemInfo.isMacSystemMenu) { setState(myToggled); } diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/ToggleActionCommand.java b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/ToggleActionCommand.java index 3a2c9869561f..7cc08c39615e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/ToggleActionCommand.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/ToggleActionCommand.java @@ -9,6 +9,7 @@ import com.intellij.openapi.ui.playback.PlaybackContext; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.util.ThreeState; import org.jetbrains.concurrency.Promise; import org.jetbrains.concurrency.Promises; @@ -73,8 +74,8 @@ public class ToggleActionCommand extends AbstractCommand { ActionUtil.performDumbAwareUpdate(LaterInvocator.isInModalContext(), action, event, false); - Boolean state = (Boolean)event.getPresentation().getClientProperty(ToggleAction.SELECTED_PROPERTY); - if (state.booleanValue() != on) { + ThreeState state = Toggleable.isSelected(event.getPresentation()); + if (state.toBoolean() != on) { ActionManager.getInstance().tryToExecute(action, inputEvent, null, ActionPlaces.UNKNOWN, true).doWhenProcessed(result.createSetDoneRunnable()); } else { diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java index b5725cfbd382..53f28cf2d3be 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemAnActionButton.java @@ -8,11 +8,11 @@ import com.intellij.openapi.actionSystem.ex.ActionManagerEx; import com.intellij.openapi.actionSystem.ex.ActionUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.IconLoader; import com.intellij.ui.mac.foundation.ID; +import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,8 +32,6 @@ class TBItemAnActionButton extends TBItemButton { public static final int SHOWMODE_IMAGE_TEXT = 2; public static final int SHOWMODE_IMAGE_ONLY_IF_PRESENTED = 3; - private static final Logger LOG = Logger.getInstance(TBItemAnActionButton.class); - private @NotNull AnAction myAnAction; private @Nullable String myActionId; @@ -141,8 +139,7 @@ class TBItemAnActionButton extends TBItemButton { boolean isSelected = false; if (myAnAction instanceof Toggleable) { - final Object selectedProp = presentation.getClientProperty(Toggleable.SELECTED_PROPERTY); - isSelected = selectedProp == Boolean.TRUE; + isSelected = Toggleable.isSelected(presentation) == ThreeState.YES; if (myNativePeer != ID.NIL && myActionId != null && myActionId.startsWith("Console.Jdbc.Execute")) // permanent update of toggleable-buttons of DataGrip myUpdateOptions |= NSTLibrary.BUTTON_UPDATE_FLAGS; } diff --git a/platform/platform-impl/src/com/intellij/ui/popup/ActionStepBuilder.java b/platform/platform-impl/src/com/intellij/ui/popup/ActionStepBuilder.java index c3537f51d637..21ff8a5c8ce8 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/ActionStepBuilder.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/ActionStepBuilder.java @@ -4,9 +4,9 @@ package com.intellij.ui.popup; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.impl.PresentationFactory; import com.intellij.openapi.actionSystem.impl.Utils; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.IconLoader; import com.intellij.ui.SizedIcon; +import com.intellij.util.ThreeState; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.LafIconLookup; import org.jetbrains.annotations.NonNls; @@ -19,8 +19,6 @@ import java.util.List; import static com.intellij.openapi.actionSystem.Presentation.restoreTextWithMnemonic; public class ActionStepBuilder extends PresentationFactory { - private static final Logger LOG = Logger.getInstance("#com.intellij.ui.popup.PopupFactoryImpl"); - private final List myListModel; private final DataContext myDataContext; private final boolean myShowNumbers; @@ -151,7 +149,7 @@ public class ActionStepBuilder extends PresentationFactory { if (actionId != null && actionId.startsWith("QuickList.")) { icon = null; // AllIcons.Actions.QuickList; } - else if (action instanceof Toggleable && Boolean.TRUE.equals(presentation.getClientProperty(Toggleable.SELECTED_PROPERTY))) { + else if (action instanceof Toggleable && Toggleable.isSelected(presentation) == ThreeState.YES) { icon = LafIconLookup.getIcon("checkmark"); selectedIcon = LafIconLookup.getSelectedIcon("checkmark"); disabledIcon = LafIconLookup.getDisabledIcon("checkmark"); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ShowLibraryFramesAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ShowLibraryFramesAction.java index 71323aee4fd2..b77eb4138010 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ShowLibraryFramesAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ShowLibraryFramesAction.java @@ -5,6 +5,8 @@ import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.actionSystem.ToggleAction; +import com.intellij.openapi.actionSystem.Toggleable; +import com.intellij.util.ThreeState; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.impl.XDebuggerUtilImpl; import com.intellij.xdebugger.impl.settings.XDebuggerSettingManagerImpl; @@ -48,7 +50,7 @@ final class ShowLibraryFramesAction extends ToggleAction { if (Boolean.TRUE.equals(isSupported)) { presentation.setVisible(true); - final boolean shouldShow = !Boolean.TRUE.equals(presentation.getClientProperty(SELECTED_PROPERTY)); + final boolean shouldShow = Toggleable.isSelected(presentation) != ThreeState.YES; presentation.setText(shouldShow ? ourTextWhenShowIsOn : ourTextWhenShowIsOff); } else { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ToggleLineBreakpointAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ToggleLineBreakpointAction.java index 30494ab92d66..264485b1f7e2 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ToggleLineBreakpointAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/ToggleLineBreakpointAction.java @@ -53,7 +53,7 @@ public class ToggleLineBreakpointAction extends XDebuggerActionBase implements D event.getPresentation().setIcon(AllIcons.Debugger.Db_set_breakpoint); final boolean selected = hasLineBreakpoint(event); - event.getPresentation().putClientProperty(SELECTED_PROPERTY, selected); + Toggleable.setSelected(event.getPresentation(), selected); } private static boolean hasLineBreakpoint(@NotNull AnActionEvent e) { diff --git a/plugins/markdown/src/org/intellij/plugins/markdown/ui/actions/editorLayout/BaseChangeSplitLayoutAction.java b/plugins/markdown/src/org/intellij/plugins/markdown/ui/actions/editorLayout/BaseChangeSplitLayoutAction.java index b1821e13baad..fb57654caeb2 100644 --- a/plugins/markdown/src/org/intellij/plugins/markdown/ui/actions/editorLayout/BaseChangeSplitLayoutAction.java +++ b/plugins/markdown/src/org/intellij/plugins/markdown/ui/actions/editorLayout/BaseChangeSplitLayoutAction.java @@ -23,7 +23,7 @@ abstract class BaseChangeSplitLayoutAction extends AnAction implements DumbAware e.getPresentation().setEnabled(splitFileEditor != null); if (myLayoutToSet != null && splitFileEditor != null) { - e.getPresentation().putClientProperty(SELECTED_PROPERTY, splitFileEditor.getCurrentEditorLayout() == myLayoutToSet); + Toggleable.setSelected(e.getPresentation(), splitFileEditor.getCurrentEditorLayout() == myLayoutToSet); } } @@ -37,7 +37,7 @@ abstract class BaseChangeSplitLayoutAction extends AnAction implements DumbAware } else { splitFileEditor.triggerLayoutChange(myLayoutToSet, true); - e.getPresentation().putClientProperty(SELECTED_PROPERTY, true); + Toggleable.setSelected(e.getPresentation(), true); } } } diff --git a/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/ShowExpert.java b/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/ShowExpert.java index a4a2468b3f90..6ea0f625c1c3 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/ShowExpert.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/ShowExpert.java @@ -18,10 +18,7 @@ package com.intellij.designer.propertyTable.actions; import com.intellij.designer.DesignerBundle; import com.intellij.designer.propertyTable.RadPropertyTable; import com.intellij.icons.AllIcons; -import com.intellij.openapi.actionSystem.ActionPlaces; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.openapi.actionSystem.ToggleAction; +import com.intellij.openapi.actionSystem.*; import org.jetbrains.annotations.NotNull; /** @@ -63,7 +60,7 @@ public class ShowExpert extends ToggleAction { public void setSelected(@NotNull AnActionEvent e, boolean state) { myTable.showExpert(state); if (ActionPlaces.GUI_DESIGNER_PROPERTY_INSPECTOR_POPUP.equals(e.getPlace())) { - getTemplatePresentation().putClientProperty(SELECTED_PROPERTY, state); + Toggleable.setSelected(getTemplatePresentation(), state); } } } diff --git a/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/TableTabAction.java b/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/TableTabAction.java index b8c42b7dd03d..184953160f47 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/TableTabAction.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/actions/TableTabAction.java @@ -70,7 +70,7 @@ public class TableTabAction extends ToggleAction implements DumbAware { } public void updateState() { - getTemplatePresentation().putClientProperty(Toggleable.SELECTED_PROPERTY, Boolean.valueOf(isSelected())); + Toggleable.setSelected(getTemplatePresentation(), isSelected()); myButton.repaint(); } } \ No newline at end of file