mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
tool_windows.md: disposer, minor edits
This commit is contained in:
parent
5fa8af190a
commit
09401cb5b9
@ -14,8 +14,8 @@ Each tool window can show multiple tabs (or "contents", as they are called in th
|
|||||||
For example, the Run tool window displays a tab for each active run configuration, and the Changes/Version Control tool window displays a fixed set of tabs depending on the version control system used in the project.
|
For example, the Run tool window displays a tab for each active run configuration, and the Changes/Version Control tool window displays a fixed set of tabs depending on the version control system used in the project.
|
||||||
|
|
||||||
There are two main scenarios for the use of tool windows in a plugin.
|
There are two main scenarios for the use of tool windows in a plugin.
|
||||||
Using declarative setup, a tool window button is always visible, and the user can activate it and interact with the plugin functionality at any time.
|
Using [declarative setup](#declarative-setup), a tool window button is always visible, and the user can activate it and interact with the plugin functionality at any time.
|
||||||
Alternatively, using programmatic setup, the tool window is created to show the results of a specific operation, and can be closed by the user after the operation is completed.
|
Alternatively, using [programmatic setup](#programmatic-setup), the tool window is created to show the results of a specific operation, and can be closed by the user after the operation is completed.
|
||||||
|
|
||||||
Project-level topic [`ToolWindowManagerListener`](upsource:///platform/platform-impl/src/com/intellij/openapi/wm/ex/ToolWindowManagerListener.java) allows listening to tool window (un-)registering/show events.
|
Project-level topic [`ToolWindowManagerListener`](upsource:///platform/platform-impl/src/com/intellij/openapi/wm/ex/ToolWindowManagerListener.java) allows listening to tool window (un-)registering/show events.
|
||||||
|
|
||||||
@ -27,12 +27,12 @@ The extension point attributes specify all the data which is necessary to displa
|
|||||||
* The `id` of the tool window - corresponds to the text displayed on the tool window button.
|
* The `id` of the tool window - corresponds to the text displayed on the tool window button.
|
||||||
To provide a localized text, specify matching `toolwindow.stripe.[id]` message key (escape spaces with `_`) in your [message bundle](localization_guide.md) (code insight supported in 2020.3 and later).
|
To provide a localized text, specify matching `toolwindow.stripe.[id]` message key (escape spaces with `_`) in your [message bundle](localization_guide.md) (code insight supported in 2020.3 and later).
|
||||||
|
|
||||||
|
* The `icon` to display on the tool window button (13x13 pixels, grey and monochromatic; see [Tool window](https://jetbrains.design/intellij/components/tool_window/#07) in IntelliJ Platform UI Guidelines and [Working with Icons and Images](work_with_icons_and_images.md))
|
||||||
|
|
||||||
* The `anchor`, meaning the side of the screen on which the tool window is displayed ("left" (default), "right" or "bottom")
|
* The `anchor`, meaning the side of the screen on which the tool window is displayed ("left" (default), "right" or "bottom")
|
||||||
|
|
||||||
* The `secondary` attribute, specifying whether the tool window is displayed in the primary or the secondary group
|
* The `secondary` attribute, specifying whether the tool window is displayed in the primary or the secondary group
|
||||||
|
|
||||||
* The `icon` to display on the tool window button (13x13 pixels, grey and monochromatic; see [Tool window](https://jetbrains.design/intellij/components/tool_window/#07) in IntelliJ Platform UI Guidelines and [Working with Icons and Images](work_with_icons_and_images.md))
|
|
||||||
|
|
||||||
In addition to that, specify the `factoryClass` attribute - the name of a class implementing the [`ToolWindowFactory`](upsource:///platform/platform-api/src/com/intellij/openapi/wm/ToolWindowFactory.java) interface.
|
In addition to that, specify the `factoryClass` attribute - the name of a class implementing the [`ToolWindowFactory`](upsource:///platform/platform-api/src/com/intellij/openapi/wm/ToolWindowFactory.java) interface.
|
||||||
When the user clicks on the tool window button, the `createToolWindowContent()` method of the factory class is called, and initializes the UI of the tool window.
|
When the user clicks on the tool window button, the `createToolWindowContent()` method of the factory class is called, and initializes the UI of the tool window.
|
||||||
This procedure ensures that unused tool windows don't cause any overhead in startup time or memory usage: if a user does not interact with the tool window, no plugin code will be loaded or executed.
|
This procedure ensures that unused tool windows don't cause any overhead in startup time or memory usage: if a user does not interact with the tool window, no plugin code will be loaded or executed.
|
||||||
@ -67,11 +67,15 @@ When using an overload that takes a component, the component becomes the first c
|
|||||||
## Contents (Tabs)
|
## Contents (Tabs)
|
||||||
|
|
||||||
Displaying the contents of many tool windows requires access to [indexes](indexing_and_psi_stubs.md).
|
Displaying the contents of many tool windows requires access to [indexes](indexing_and_psi_stubs.md).
|
||||||
Because of that, tool windows are normally disabled while building indexes unless the `ToolWindowFactory` implements [`DumbAware`](upsource:///platform/core-api/src/com/intellij/openapi/project/DumbAware.java). For programmatic setup, parameter `canWorkInDumbMode` must be set to `true` in calls to `registerToolWindow()`.
|
Because of that, tool windows are normally disabled while building indexes unless the `ToolWindowFactory` implements [`DumbAware`](upsource:///platform/core-api/src/com/intellij/openapi/project/DumbAware.java).
|
||||||
|
For programmatic setup, parameter `canWorkInDumbMode` must be set to `true` in calls to `registerToolWindow()`.
|
||||||
|
|
||||||
As mentioned previously, tool windows can contain multiple tabs, or contents.
|
As mentioned previously, tool windows can contain multiple tabs, or contents.
|
||||||
To manage the contents of a tool window, call [`ToolWindow.getContentManager()`](upsource:///platform/ide-core/src/com/intellij/openapi/wm/ToolWindow.java).
|
To manage the contents of a tool window, call [`ToolWindow.getContentManager()`](upsource:///platform/ide-core/src/com/intellij/openapi/wm/ToolWindow.java).
|
||||||
To add a tab (content), first create it by calling [`ContentManager.getFactory().createContent()`](upsource:///platform/ide-core/src/com/intellij/ui/content/ContentManager.java), and then to add it to the tool window using [`ContentManager.addContent()`](upsource:///platform/ide-core/src/com/intellij/ui/content/ContentManager.java).
|
To add a tab (content), first create it by calling [`ContentManager.getFactory().createContent()`](upsource:///platform/ide-core/src/com/intellij/ui/content/ContentManager.java), and then to add it to the tool window using [`ContentManager.addContent()`](upsource:///platform/ide-core/src/com/intellij/ui/content/ContentManager.java).
|
||||||
|
Use `Content.setDisposer()` to register associated `Disposable` (see [](disposers.md)).
|
||||||
|
|
||||||
|
### Closing Tabs
|
||||||
|
|
||||||
A plugin can control whether the user is allowed to close tabs either globally or on a per-tab basis.
|
A plugin can control whether the user is allowed to close tabs either globally or on a per-tab basis.
|
||||||
The former is done by passing the `canCloseContents` parameter to the `registerToolWindow()` function, or by specifying `canCloseContents="true"` in <path>plugin.xml</path>.
|
The former is done by passing the `canCloseContents` parameter to the `registerToolWindow()` function, or by specifying `canCloseContents="true"` in <path>plugin.xml</path>.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user