| /* |
| * 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.notification; |
| |
| import com.intellij.icons.AllIcons; |
| import com.intellij.ide.actions.ContextHelpAction; |
| import com.intellij.notification.impl.NotificationsConfigurable; |
| import com.intellij.notification.impl.NotificationsConfigurationImpl; |
| import com.intellij.openapi.actionSystem.*; |
| import com.intellij.openapi.editor.Editor; |
| import com.intellij.openapi.editor.actions.ScrollToTheEndToolbarAction; |
| import com.intellij.openapi.editor.actions.ToggleUseSoftWrapsToolbarAction; |
| import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; |
| import com.intellij.openapi.options.ShowSettingsUtil; |
| import com.intellij.openapi.project.DumbAware; |
| import com.intellij.openapi.project.DumbAwareAction; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.ui.SimpleToolWindowPanel; |
| import com.intellij.openapi.wm.ToolWindow; |
| import com.intellij.openapi.wm.ToolWindowFactory; |
| import com.intellij.ui.AncestorListenerAdapter; |
| import com.intellij.ui.content.Content; |
| import com.intellij.ui.content.ContentFactory; |
| import com.intellij.ui.content.ContentManager; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| |
| import javax.swing.event.AncestorEvent; |
| |
| /** |
| * @author peter |
| */ |
| public class EventLogToolWindowFactory implements ToolWindowFactory, DumbAware { |
| @Override |
| public void createToolWindowContent(@NotNull final Project project, @NotNull ToolWindow toolWindow) { |
| EventLog.getProjectComponent(project).initDefaultContent(); |
| } |
| |
| static void createContent(Project project, ToolWindow toolWindow, EventLogConsole console, String title) { |
| // update default Event Log tab title |
| ContentManager contentManager = toolWindow.getContentManager(); |
| Content generalContent = contentManager.getContent(0); |
| if (generalContent != null && contentManager.getContentCount() == 1) { |
| generalContent.setDisplayName("General"); |
| } |
| |
| final Editor editor = console.getConsoleEditor(); |
| |
| SimpleToolWindowPanel panel = new SimpleToolWindowPanel(false, true) { |
| @Override |
| public Object getData(@NonNls String dataId) { |
| return PlatformDataKeys.HELP_ID.is(dataId) ? EventLog.HELP_ID : super.getData(dataId); |
| } |
| }; |
| panel.setContent(editor.getComponent()); |
| panel.addAncestorListener(new LogShownTracker(project)); |
| |
| ActionToolbar toolbar = createToolbar(project, editor, console); |
| toolbar.setTargetComponent(editor.getContentComponent()); |
| panel.setToolbar(toolbar.getComponent()); |
| |
| Content content = ContentFactory.SERVICE.getInstance().createContent(panel, title, false); |
| contentManager.addContent(content); |
| contentManager.setSelectedContent(content); |
| } |
| |
| private static ActionToolbar createToolbar(Project project, Editor editor, EventLogConsole console) { |
| DefaultActionGroup group = new DefaultActionGroup(); |
| group.add(new EditNotificationSettings(project)); |
| group.add(new DisplayBalloons()); |
| group.add(new ToggleSoftWraps(editor)); |
| group.add(new ScrollToTheEndToolbarAction(editor)); |
| group.add(new MarkAllAsRead(project)); |
| group.add(new EventLogConsole.ClearLogAction(console)); |
| group.add(new ContextHelpAction(EventLog.HELP_ID)); |
| |
| return ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, false); |
| } |
| |
| private static class DisplayBalloons extends ToggleAction implements DumbAware { |
| public DisplayBalloons() { |
| super("Show balloons", "Enable or suppress notification balloons", AllIcons.General.Balloon); |
| } |
| |
| @Override |
| public boolean isSelected(AnActionEvent e) { |
| return NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS; |
| } |
| |
| @Override |
| public void setSelected(AnActionEvent e, boolean state) { |
| NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS = state; |
| } |
| } |
| |
| private static class EditNotificationSettings extends DumbAwareAction { |
| private final Project myProject; |
| |
| public EditNotificationSettings(Project project) { |
| super("Settings", "Edit notification settings", AllIcons.General.Settings); |
| myProject = project; |
| } |
| |
| @Override |
| public void actionPerformed(AnActionEvent e) { |
| ShowSettingsUtil.getInstance().editConfigurable(myProject, new NotificationsConfigurable()); |
| } |
| } |
| |
| private static class ToggleSoftWraps extends ToggleUseSoftWrapsToolbarAction { |
| private final Editor myEditor; |
| |
| public ToggleSoftWraps(Editor editor) { |
| super(SoftWrapAppliancePlaces.CONSOLE); |
| myEditor = editor; |
| } |
| |
| @Override |
| protected Editor getEditor(AnActionEvent e) { |
| return myEditor; |
| } |
| } |
| |
| private static class MarkAllAsRead extends DumbAwareAction { |
| private final Project myProject; |
| |
| public MarkAllAsRead(Project project) { |
| super("Mark all as read", "Mark all unread notifications as read", AllIcons.Actions.Selectall); |
| myProject = project; |
| } |
| |
| @Override |
| public void update(AnActionEvent e) { |
| if (myProject.isDisposed()) return; |
| e.getPresentation().setEnabled(!EventLog.getLogModel(myProject).getNotifications().isEmpty()); |
| } |
| |
| @Override |
| public void actionPerformed(AnActionEvent e) { |
| LogModel model = EventLog.getLogModel(myProject); |
| for (Notification notification : model.getNotifications()) { |
| model.removeNotification(notification); |
| notification.expire(); |
| } |
| } |
| } |
| |
| private static class LogShownTracker extends AncestorListenerAdapter { |
| private final Project myProject; |
| |
| public LogShownTracker(Project project) { |
| myProject = project; |
| } |
| |
| @Override |
| public void ancestorAdded(AncestorEvent event) { |
| ToolWindow log = EventLog.getEventLog(myProject); |
| if (log != null && log.isVisible()) { |
| EventLog.getLogModel(myProject).logShown(); |
| } |
| } |
| } |
| } |