mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
* [webhelp] Fixes for TXP00152, TXP00002, test build 27 Jul 22:26 * [webhelp] Fixes for Part #4 TXP00010, EXCEPT decimal numbers in section titles * [webhelp] Fixes for Part #5 TXP00017 * [webhelp] Fixes for Part #4 TXP00010 - removed numbers from page section titles in "Custom Language Support Tutorial" and "Testing a Custom Language Plugin". * [webhelp] Removed numbers from page section titles in rest of project *.md files. * [new webhelp] Build #44 changes * [new webhelp] Maintenance merge from master * [new webhelp] Add placeholder file for webhelp import. * [webhelp] Correct redirects for file name changes * [webhelp] TOC not needed in webhelp * [format] {:toc} not needed for webhelp * add {:disable-links} to ensure demo links are not interpreted as real links. * Put all badges on the same line to simplify composition. * formatter.md: fix upsource link * fix some links * api_changes_list.md: remove note * migrate to webhelp - initial * fix GH edit URL * remove sdkdocs-template setup in VCS config * remove recently_updated.md * restore COC/CONTRIBUTING.md * api_changes_list.md: remove note * useful_links.md: IPE Co-authored-by: JohnHake <john.hake@jetbrains.com> Co-authored-by: Yann Cébron <yann.cebron@jetbrains.com>
85 lines
4.7 KiB
Markdown
85 lines
4.7 KiB
Markdown
[//]: # (title: Notifications)
|
|
|
|
<!-- Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
|
|
|
|
One of the leading design principles is avoiding the use of modal message boxes for notifying the user about errors and other situations that may warrant the user's attention. As a replacement, the *IntelliJ Platform* provides multiple non-modal notification UI options.
|
|
|
|
For an overview, refer to [Notifications](https://jetbrains.design/intellij/controls/notifications/) in _IntelliJ Platform UI Guidelines_.
|
|
|
|
### Dialogs
|
|
|
|
When working in dialog, instead of checking the validity of the input when the _OK_ button is pressed and notifying the user about invalid data with a modal dialog, the recommended approach is to use [`DialogWrapper.doValidate()`](upsource:///platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java), which was described previously.
|
|
|
|
### Editor Hints
|
|
|
|
For actions invoked from the editor (such as refactorings, navigation actions and different code insight features), the best way to notify the user about the inability to perform an action is to use the [`HintManager`](upsource:///platform/platform-api/src/com/intellij/codeInsight/hint/HintManager.java) class. Its method `showErrorHint()` displays a floating popup above the editor which is automatically hidden when the user starts performing another action in the editor.
|
|
Other [`HintManager`](upsource:///platform/platform-api/src/com/intellij/codeInsight/hint/HintManager.java) methods can be used for displaying other kinds of non-modal notification hints over an editor.
|
|
|
|
### Top-Level Notifications
|
|
|
|
The most general way to display non-modal notifications is to use the [`Notifications`](upsource:///platform/platform-api/src/com/intellij/notification/Notifications.java) class.
|
|
|
|
It has two main advantages:
|
|
|
|
* The user can control the way each notification type is displayed under `Settings | Appearance & Behavior | Notifications`
|
|
* All displayed notifications are gathered in the Event Log tool window and can be reviewed later
|
|
|
|
For UI reference, see [Balloon](https://jetbrains.design/intellij/controls/balloon/) in _IntelliJ Platform UI Guidelines_.
|
|
|
|
The specific method used to display a notification is [`Notifications.Bus.notify()`](upsource:///platform/platform-api/src/com/intellij/notification/Notifications.java). If the current Project is known, please use overload with `Project` parameter, so the notification is shown in its associated frame.
|
|
|
|
The text of the notification can include HTML tags.
|
|
|
|
Use `Notification.addAction(AnAction)` to add links below the content, use [`NotificationAction`](upsource:///platform/platform-api/src/com/intellij/notification/NotificationAction.java) for convenience.
|
|
|
|
The `groupId` parameter of the [`Notification`](upsource:///platform/platform-api/src/com/intellij/notification/Notification.java) constructor specifies a notification type. The user can choose the display type corresponding to each notification type under `Settings | Appearance and Behavior | Notifications`.
|
|
|
|
To specify the preferred display type, you need to use [`NotificationGroup`](upsource:///platform/platform-api/src/com/intellij/notification/NotificationGroup.kt) to create notifications.
|
|
|
|
Please see the following two paragraphs for setup, depending on the target platform version.
|
|
|
|
##### NotificationGroup (2020.3 and later)
|
|
|
|
`NotificationGroup` is registered in `plugin.xml` using `com.intellij.notificationGroup` extension point. Use `key` to provide a localized group display name.
|
|
|
|
```xml
|
|
<extensions defaultExtensionNs="com.intellij">
|
|
<notificationGroup id="Custom Notification Group" displayType="BALLOON" key="notification.group.name"/>
|
|
</extensions>
|
|
```
|
|
|
|
Registered instances can then be obtained via their `id`.
|
|
|
|
> Code insight is available for parameters expecting notification group `id`.
|
|
>
|
|
{type="tip"}
|
|
|
|
```java
|
|
public class MyNotifier {
|
|
|
|
public static void notifyError(@Nullable Project project, String content) {
|
|
NotificationGroupManager.getInstance().getNotificationGroup("Custom Notification Group")
|
|
.createNotification(content, NotificationType.ERROR)
|
|
.notify(project);
|
|
}
|
|
|
|
}
|
|
```
|
|
|
|
##### NotificationGroup (Pre-2020.3)
|
|
|
|
`NotificationGroup` is registered in code.
|
|
|
|
```java
|
|
public class MyNotifier {
|
|
|
|
private static final NotificationGroup NOTIFICATION_GROUP =
|
|
new NotificationGroup("Custom Notification Group", NotificationDisplayType.BALLOON, true);
|
|
|
|
public static void notifyError(@Nullable Project project, String content) {
|
|
NOTIFICATION_GROUP.createNotification(content, NotificationType.ERROR)
|
|
.notify(project);
|
|
}
|
|
|
|
}
|
|
``` |