mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-30 10:17:50 +08:00
* Add UI Guidelines to SDK docs * Add UI Guidelines to SDK docs * Fixing build errors * optimize PNGs * add UI guidelines landing page placeholder * IJ SDK Docs <-> UI guidelines crosslinks updated * split_button.md: remove reference to removed setting * use <ui-path> * use MD instead of <note> * use %gh-ic% links * drop_down.md: fix <control> * code samples: fix most obvious issues * remove obsolete `_defaults.md` * ijs.tree: UI cleanup * Delete "under construction" pages * Fix headers * Add link-summary * Remove invalid links * Delete unused files * Remove ''@2x' from image file names * Use Markdown syntax for some images and tables * Rename non-unique files to unique * Remove alpha in images where content is unreadable * align quotation marks * Controls: cleanup/fixes, add code links, edit * tooltip.md: fix HTML * misc fixes * typography.md: fix table contents * typography.md: fix table header * UI guidelines landing page + TOC fixes * remove unused icons_list.md * Normalize image paths * validation_errors.md: Fix broken tab * "correct"/"incorrect" labels styling * Resize images to 50% * button.topic: fixes * grammar, spelling, minor edits * remove ' ' * fix 99px * cleanup * UI_kit.md: minor * Fix "MRK058: Large image in paragraph rendered as a block element by default." * button.topic: Add img[alt] * mnemonics.md: Update "Contact Us" link to the IJSDK YouTrack * split_button.md: Use ui-path * UI landing: add feedback snippet * Improve code snippets formatting and naming * Fix code samples * Fix code samples * Add Kotlin variants for code samples * Add icons_list.md * crosslinks * Change external link to https://intellij-icons.jetbrains.design/ * icons list -> https://intellij-icons.jetbrains.design * Hide info about reducing split button to simple action button (now it is available through the registry only) * reformat * icons_style.md: Images in new line --------- Co-authored-by: marianna.kononenko <marianna.kononenko@jetbrains.com> Co-authored-by: Yann Cébron <yann.cebron@jetbrains.com>
207 lines
7.4 KiB
Markdown
207 lines
7.4 KiB
Markdown
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
|
||
|
||
# Split Button
|
||
|
||
<link-summary>UI guidelines on using split buttons.</link-summary>
|
||
|
||
<tldr>
|
||
|
||
**Implementation:** [`JBOptionButton`](%gh-ic%/platform/platform-api/src/com/intellij/ui/components/JBOptionButton.kt)
|
||
|
||
</tldr>
|
||
|
||
The Split button is a button that has two parts — the main action on the left and a control button which shows a dropdown with less common actions on the right.
|
||
|
||
{width=218}
|
||
|
||
## When to use
|
||
|
||
<p>Use the split button:</p>
|
||
|
||
When more than 2 related actions are possible but the space is limited and/or packed:
|
||
For example, it is useful for the Commit actions group in the <control>Commit</control> dialog:
|
||
|
||
{width=218}
|
||
|
||
The Split button is not useful in the <control>Replace</control> popup, since not all actions are related.
|
||
For example, <control>Open in Find Window</control>
|
||
is not related to the main action. Such actions are hard to find in the drop-down menu:
|
||
|
||
| <format color="Red" style="bold">Incorrect</format> | <format color="Green" style="bold">Correct</format> |
|
||
|-----------------------------------------------------|-----------------------------------------------------|
|
||
| {width="152"} | {width="327"} |
|
||
|
||
In the <control>Adjust Code Style</control> dialog, only 1 related action is possible, and it does not save a lot of space:
|
||
|
||
| <format color="Red" style="bold">Incorrect</format> | <format color="Green" style="bold">Correct</format> |
|
||
|-----------------------------------------------------|-----------------------------------------------------|
|
||
| {width="152"} | {width="234"} |
|
||
|
||
To hide actions which are dangerous and uncommon. Dangerous means an action can destroy users’ data and cannot be easily undone.
|
||
It is less possible to accidentally click an action hidden in a menu.
|
||
It is recommended to hide even a single related uncommon dangerous action.
|
||
For example, <control>Force Push</control> can override remote commits from other authors and should not be easily available:
|
||
|
||
{width=111}
|
||
|
||
<p>If an action is dangerous but common, do not hide it under the split button, use simple buttons.
|
||
|
||
[//]: # (TODO: An action should follow the <a href="dangerous_actions.md">principles for dangerous actions</a> behavior.)
|
||
</p>
|
||
|
||
Do **not** use the Split Button in other cases, use simple [Buttons](button.topic) instead.
|
||
|
||
## How to use
|
||
|
||
### Main action
|
||
|
||
<table style="none">
|
||
<tr>
|
||
<td>Click</td>
|
||
<td>Invoke the main action</td>
|
||
</tr>
|
||
</table>
|
||
|
||
### Control button
|
||
|
||
<table style="none">
|
||
<tr>
|
||
<td>Click</td>
|
||
<td>
|
||
<ul>
|
||
<li>Show a dropdown menu with secondary actions</li>
|
||
<li>Hide the menu on clicking outside the menu, or on the second click on the right part of the button</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Hover</td>
|
||
<td>
|
||
<ul>
|
||
<li>Show a tooltip:
|
||
<img src="tooltip-button.png" width="237" /></li>
|
||
<li>
|
||
The tooltip must not overlap the dropdown menu. Do not show a tooltip under the menu, show it on the opposite side of the button:
|
||
<br/>
|
||
<format color="Green" style="bold">Correct</format>
|
||
<img src="tooltip-correct.png" width="255" />
|
||
<br/>
|
||
<format color="Red" style="bold">Incorrect</format>
|
||
<img src="tooltip-incorrect.png" width="254" />
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
### Dropdown menu
|
||
|
||
Place actions related to the main button’s action in the dropdown menu.
|
||
|
||
{width=218}
|
||
|
||
Do **not** duplicate the main action in the dropdown menu, otherwise it is confusing how to trigger the main action — with the button or from the menu.
|
||
|
||
[//]: # (### Reduce split button to simple action buttons)
|
||
|
||
[//]: # ()
|
||
|
||
[//]: # (The Split button can be reduced to simple action buttons which are laid out automatically next to each other. This is controlled by the following option in settings:)
|
||
|
||
[//]: # (<ui-path>Settings | Appearance & Behavior | Appearance | Merge buttons in dialogs</ui-path>)
|
||
|
||
[//]: # ()
|
||
|
||
[//]: # (<p>For example, the <control>Commit</control> button reduced to its components (the option is disabled) looks like the following:</p>)
|
||
|
||
[//]: # ()
|
||
|
||
[//]: # ({width=500})
|
||
|
||
## Keyboard navigation & shortcuts
|
||
|
||
Trigger the **main** action when the [default](button.topic#default) button shortcut is pressed if the split button is the default one.
|
||
|
||
Open the dropdown menu with the first menu item selected on <shortcut>Alt+Shift+Enter</shortcut>.
|
||
|
||
Do **not** show the dropdown menu when the button gains focus.
|
||
|
||
### Focus on the button
|
||
|
||
<table style="none">
|
||
<tr>
|
||
<td><shortcut>Enter</shortcut> and <shortcut>Ctrl+Enter</shortcut></td>
|
||
<td><ul><li>Invoke the default button action</li></ul></td>
|
||
</tr>
|
||
<tr>
|
||
<td><shortcut>Space</shortcut></td>
|
||
<td><ul><li>Invoke the main action</li></ul></td>
|
||
</tr>
|
||
<tr>
|
||
<td><shortcut>Arrow Down</shortcut></td>
|
||
<td><ul><li>Show the dropdown menu with secondary actions and move focus to the first item in the menu</li></ul></td>
|
||
</tr>
|
||
<tr>
|
||
<td><shortcut>Tab</shortcut> and <shortcut>Shift + Tab</shortcut></td>
|
||
<td><ul><li>Move focus to the control next to the split button and hide the drop-down menu</li></ul></td>
|
||
</tr>
|
||
</table>
|
||
|
||
### Focus in the drop-down menu
|
||
|
||
<table style="none">
|
||
<tr>
|
||
<td><shortcut>Enter</shortcut> and <shortcut>Space</shortcut></td>
|
||
<td>Invoke the selected action</td>
|
||
</tr>
|
||
<tr>
|
||
<td><shortcut>Arrow Down</shortcut> and <shortcut>Arrow Up</shortcut></td>
|
||
<td>
|
||
<ul>
|
||
<li>Navigate through the elements</li>
|
||
<li>Pressing Up on the top element moves the focus to the bottom element</li>
|
||
<li>Pressing Down on the bottom element moves the focus to the top element</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><shortcut>Esc</shortcut></td>
|
||
<td>Close the popup and move the focus to the split button</td>
|
||
</tr>
|
||
</table>
|
||
|
||
## Sizes and placement
|
||
|
||
Follow the rules for the [simple button](button.topic#sizes-and-placement).
|
||
|
||
### Button
|
||
|
||
The width of the split button equals to the width of the main button (follow the rules of the [simple button](button.topic)) plus the width of the drop-down button.
|
||
|
||
| Windows | Mac | Darcula |
|
||
|--------------------------------------|--------------------------------|------------------------------------|
|
||
| {width="92"} | {width="90"} | {width="94"} |
|
||
|
||
A different width for the split button makes it easier to understand that this button is different from other buttons in the dialog.
|
||
|
||
### Drop-down menu
|
||
|
||
Follow the rules for menus with regard to sizes, colors, fonts and spacing.
|
||
|
||
Menu item height and spacing between the menu and the button:
|
||
|
||
{width=232}
|
||
|
||
## Style
|
||
|
||
Increase line height in the dropdown menu to lessen the chance of choosing the wrong menu item by mistake.
|
||
|
||
Leave 2px around the separator inactive to lessen the chance of choosing the wrong menu item by mistake:
|
||
|
||
{width=218}
|
||
|
||
Align the dropdown with the button left border:
|
||
|
||
{width=219}
|
||
|