Compare commits
97 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b5646ec88 | ||
|
|
66a5f350da | ||
|
|
f9e34cbab7 | ||
|
|
634f7b5ba3 | ||
|
|
7dbc6ff8a3 | ||
|
|
afccdc4749 | ||
|
|
c98ec041d4 | ||
|
|
9e0c62092e | ||
|
|
9aea006f50 | ||
|
|
c16c3759cf | ||
|
|
cbc1fe27ef | ||
|
|
8594e78287 | ||
|
|
5b8f922273 | ||
|
|
847b41752c | ||
|
|
7c08489cb3 | ||
|
|
605c77ecbc | ||
|
|
fd0c2a5cd1 | ||
|
|
a80790fc8e | ||
|
|
206d449d0d | ||
|
|
2323dc099f | ||
|
|
642583479f | ||
|
|
082e5842d0 | ||
|
|
c67ba02839 | ||
|
|
4c6cb7618f | ||
|
|
c15100f129 | ||
|
|
6dfb3cc84e | ||
|
|
18d8c7d086 | ||
|
|
ab3adf4ae3 | ||
|
|
7e6619af00 | ||
|
|
a7e2a10403 | ||
|
|
3a784375d0 | ||
|
|
b8c9433259 | ||
|
|
815d9d6012 | ||
|
|
feb91aa056 | ||
|
|
cd264586ca | ||
|
|
c6d561f2df | ||
|
|
6167c5f855 | ||
|
|
1a31cb96b8 | ||
|
|
9b8df64c35 | ||
|
|
a47565afec | ||
|
|
c2ee815cbe | ||
|
|
e45a2df6b6 | ||
|
|
a19979c233 | ||
|
|
e2a297fa40 | ||
|
|
df13b338b2 | ||
|
|
da9d7a0dee | ||
|
|
0374c65159 | ||
|
|
71b1e07ba6 | ||
|
|
c3781dc4b5 | ||
|
|
dc92d0913c | ||
|
|
a5adf29001 | ||
|
|
8861bfe4fa | ||
|
|
c8d280f418 | ||
|
|
09c98359af | ||
|
|
6f8a7471c2 | ||
|
|
4c141fe47c | ||
|
|
b37ff348fb | ||
|
|
09798d33b0 | ||
|
|
717ab95fbe | ||
|
|
3f616e3608 | ||
|
|
c590157561 | ||
|
|
2b50431081 | ||
|
|
6d38e44f91 | ||
|
|
9bc656a5c5 | ||
|
|
700bb9b567 | ||
|
|
8ccda81d9a | ||
|
|
3818790ced | ||
|
|
c34ce389a4 | ||
|
|
15718cdb46 | ||
|
|
10746a454a | ||
|
|
f0fd02e81f | ||
|
|
bfaac6d164 | ||
|
|
a909f1012a | ||
|
|
201581a07c | ||
|
|
8cef5ecf7e | ||
|
|
2c1075f471 | ||
|
|
1f5e08fdc6 | ||
|
|
c0408045ef | ||
|
|
c58f5a6ca7 | ||
|
|
ae445c9343 | ||
|
|
ad7ff2ba0b | ||
|
|
4b7ef6e853 | ||
|
|
87f2acc2d9 | ||
|
|
ec2fef02ed | ||
|
|
ebe0d74dbe | ||
|
|
029dc51f8b | ||
|
|
3fc85cd7b2 | ||
|
|
a46bdef079 | ||
|
|
3de489f693 | ||
|
|
eddb9eee46 | ||
|
|
5b0c96cd6d | ||
|
|
15ac77107f | ||
|
|
a7c906091c | ||
|
|
de870c546c | ||
|
|
2f3427e6ad | ||
|
|
203426bd55 | ||
|
|
16242080e0 |
60
CHANGELOG.md
@@ -1,6 +1,66 @@
|
||||
FlatLaf Change Log
|
||||
==================
|
||||
|
||||
## 0.44
|
||||
|
||||
#### New features and improvements
|
||||
|
||||
- TabbedPane: In scroll tab layout, added "Show Hidden Tabs" button to trailing
|
||||
side of tab area. If pressed, it shows a popup menu that contains (partly)
|
||||
hidden tabs and selecting one activates that tab. (PR #190; issue #40)
|
||||
- TabbedPane: Support forward/backward scroll arrow buttons on both sides of tab
|
||||
area. Backward button on left side, forward button on right side. Not
|
||||
applicable scroll buttons are hidden. (PR #211; issue #40)
|
||||
- TabbedPane: Support specifying default tab layout policy for all tabbed panes
|
||||
in the application via UI value `TabbedPane.tabLayoutPolicy`. E.g. invoke
|
||||
`UIManager.put( "TabbedPane.tabLayoutPolicy", "scroll" );` to use scroll
|
||||
layout.
|
||||
- TabbedPane: Support tab scrolling with mouse wheel (in scroll tab layout). (PR
|
||||
#187; issue #40)
|
||||
- TabbedPane: Repeat scrolling as long as scroll arrow buttons are pressed. (PR
|
||||
#187; issue #40)
|
||||
- TabbedPane: Support adding custom components to left and right sides of tab
|
||||
area. (set client property `JTabbedPane.leadingComponent` or
|
||||
`JTabbedPane.trailingComponent` to a `java.awt.Component`) (PR #192; issue
|
||||
#40)
|
||||
- TabbedPane: Support closable tabs. (PR #193; issues #31 and #40)
|
||||
- TabbedPane: Support minimum or maximum tab widths. (set client property
|
||||
`JTabbedPane.minimumTabWidth` or `JTabbedPane.maximumTabWidth` to an integer)
|
||||
(PR #199)
|
||||
- TabbedPane: Support alignment of tab area. (set client property
|
||||
`JTabbedPane.tabAreaAlignment` to `"leading"`, `"trailing"`, `"center"` or
|
||||
`"fill"`) (PR #199)
|
||||
- TabbedPane: Support horizontal alignment of tab title and icon. (set client
|
||||
property `JTabbedPane.tabAlignment` to `SwingConstants.LEADING`,
|
||||
`SwingConstants.TRAILING` or `SwingConstants.CENTER`)
|
||||
- TabbedPane: Support equal and compact tab width modes. (set client property
|
||||
`JTabbedPane.tabWidthMode` to `"preferred"`, `"equal"` or `"compact"`) (PR
|
||||
#199)
|
||||
- TabbedPane: Support left, right, top and bottom tab icon placement. (set
|
||||
client property `JTabbedPane.tabIconPlacement` to `SwingConstants.LEADING`,
|
||||
`SwingConstants.TRAILING`, `SwingConstants.TOP` or `SwingConstants.BOTTOM`)
|
||||
(PR #199)
|
||||
- Support painting separator line between window title and content (use UI value
|
||||
`TitlePane.borderColor`). (issue #184)
|
||||
- Extras: `FlatSVGIcon` now allows specifying icon width and height in
|
||||
constructors. (issue #196)
|
||||
- SplitPane: Hide not applicable expand/collapse buttons. Added tooltips to
|
||||
expand/collapse buttons. (issue #198)
|
||||
- SplitPane: Added grip to divider. Can be disabled with `UIManager.put(
|
||||
"SplitPaneDivider.style", "plain" )`. (issue #179)
|
||||
|
||||
|
||||
#### Fixed bugs
|
||||
|
||||
- Custom window decorations: Not visible menu bar is now ignored in layout.
|
||||
- Popups using `JToolTip` components did not respect their location. (issue
|
||||
#188; regression in 0.42 in fix for #164)
|
||||
- IntelliJ Themes: Added suffix "(Material)" to names of all Material UI Lite
|
||||
themes to avoid duplicate theme names. (issue #201)
|
||||
- Extras: `FlatSVGIcon` icons were not painted in disabled labels and disabled
|
||||
tabs. (issue #205)
|
||||
|
||||
|
||||
## 0.43
|
||||
|
||||
#### New features and improvements
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
val releaseVersion = "0.43"
|
||||
val developmentVersion = "0.44-SNAPSHOT"
|
||||
val releaseVersion = "0.44"
|
||||
val developmentVersion = "0.45-SNAPSHOT"
|
||||
|
||||
version = if( java.lang.Boolean.getBoolean( "release" ) ) releaseVersion else developmentVersion
|
||||
|
||||
|
||||
@@ -19,19 +19,26 @@ package com.formdev.flatlaf;
|
||||
import java.awt.Color;
|
||||
import java.util.Objects;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
/**
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public interface FlatClientProperties
|
||||
{
|
||||
//---- JButton ------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies type of a button.
|
||||
* <p>
|
||||
* <strong>Components</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong> {@link #BUTTON_TYPE_SQUARE}, {@link #BUTTON_TYPE_ROUND_RECT},
|
||||
* {@link #BUTTON_TYPE_TAB}, {@link #BUTTON_TYPE_HELP} and {@link BUTTON_TYPE_TOOLBAR_BUTTON}
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #BUTTON_TYPE_SQUARE},
|
||||
* {@link #BUTTON_TYPE_ROUND_RECT},
|
||||
* {@link #BUTTON_TYPE_TAB},
|
||||
* {@link #BUTTON_TYPE_HELP} or
|
||||
* {@link BUTTON_TYPE_TOOLBAR_BUTTON}
|
||||
*/
|
||||
String BUTTON_TYPE = "JButton.buttonType";
|
||||
|
||||
@@ -99,17 +106,19 @@ public interface FlatClientProperties
|
||||
/**
|
||||
* Specifies whether the button preferred size will be made square (quadratically).
|
||||
* <p>
|
||||
* <strong>Components</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}
|
||||
* <strong>Components</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Boolean}
|
||||
*/
|
||||
String SQUARE_SIZE = "JButton.squareSize";
|
||||
|
||||
//---- JComponent ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies minimum width of a component.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JButton}, {@link javax.swing.JToggleButton},
|
||||
* {@link javax.swing.JComboBox}, {@link javax.swing.JSpinner} and {@link javax.swing.text.JTextComponent}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}
|
||||
*/
|
||||
String MINIMUM_WIDTH = "JComponent.minimumWidth";
|
||||
|
||||
@@ -117,7 +126,7 @@ public interface FlatClientProperties
|
||||
* Specifies minimum height of a component.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}
|
||||
*/
|
||||
String MINIMUM_HEIGHT = "JComponent.minimumHeight";
|
||||
|
||||
@@ -129,9 +138,12 @@ public interface FlatClientProperties
|
||||
* {@link javax.swing.JScrollPane}, {@link javax.swing.JSpinner},
|
||||
* {@link javax.swing.JTextField} and {@link javax.swing.JToggleButton}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String} or {@link java.awt.Color} or {@link java.awt.Color}[2]<br>
|
||||
* <strong>Allowed Values</strong> {@link #OUTLINE_ERROR}, {@link #OUTLINE_WARNING},
|
||||
* any color (type {@link java.awt.Color}) or an array of two colors (type {@link java.awt.Color}[2])
|
||||
* where the first color is for focused state and the second for unfocused state
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #OUTLINE_ERROR},
|
||||
* {@link #OUTLINE_WARNING},
|
||||
* any color (type {@link java.awt.Color}) or
|
||||
* an array of two colors (type {@link java.awt.Color}[2]) where the first color
|
||||
* is for focused state and the second for unfocused state
|
||||
*/
|
||||
String OUTLINE = "JComponent.outline";
|
||||
|
||||
@@ -153,11 +165,13 @@ public interface FlatClientProperties
|
||||
* Paint the component with round edges.
|
||||
* <p>
|
||||
* <strong>Components</strong> {@link javax.swing.JComboBox}, {@link javax.swing.JSpinner},
|
||||
* {@link javax.swing.JTextField}, {@link javax.swing.JFormattedTextField} and {@link javax.swing.JPasswordField}
|
||||
* {@link javax.swing.JTextField}, {@link javax.swing.JFormattedTextField} and {@link javax.swing.JPasswordField}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Boolean}
|
||||
*/
|
||||
String COMPONENT_ROUND_RECT = "JComponent.roundRect";
|
||||
|
||||
//---- Popup --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies whether a drop shadow is painted if the component is shown in a popup
|
||||
* or if the component is the owner of another component that is shown in a popup.
|
||||
@@ -167,6 +181,8 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String POPUP_DROP_SHADOW_PAINTED = "Popup.dropShadowPainted";
|
||||
|
||||
//---- JProgressBar -------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies whether the progress bar has always the larger height even if no string is painted.
|
||||
* <p>
|
||||
@@ -183,6 +199,8 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String PROGRESS_BAR_SQUARE = "JProgressBar.square";
|
||||
|
||||
//---- JRootPane ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies whether the menu bar is embedded into the title pane if custom
|
||||
* window decorations are enabled. Default is {@code true}.
|
||||
@@ -192,6 +210,8 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String MENU_BAR_EMBEDDED = "JRootPane.menuBarEmbedded";
|
||||
|
||||
//---- JScrollBar ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies whether the decrease/increase arrow buttons of a scrollbar are shown.
|
||||
* <p>
|
||||
@@ -208,6 +228,8 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String SCROLL_PANE_SMOOTH_SCROLLING = "JScrollPane.smoothScrolling";
|
||||
|
||||
//---- JTabbedPane --------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies whether separators are shown between tabs.
|
||||
* <p>
|
||||
@@ -232,6 +254,27 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String TABBED_PANE_HAS_FULL_BORDER = "JTabbedPane.hasFullBorder";
|
||||
|
||||
/**
|
||||
* Specifies the minimum width of a tab.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}
|
||||
*/
|
||||
String TABBED_PANE_MINIMUM_TAB_WIDTH = "JTabbedPane.minimumTabWidth";
|
||||
|
||||
/**
|
||||
* Specifies the maximum width of a tab.
|
||||
* <p>
|
||||
* Applied only if tab does not have a custom tab component
|
||||
* (see {@link javax.swing.JTabbedPane#setTabComponentAt(int, java.awt.Component)}).
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}
|
||||
*/
|
||||
String TABBED_PANE_MAXIMUM_TAB_WIDTH = "JTabbedPane.maximumTabWidth";
|
||||
|
||||
/**
|
||||
* Specifies the height of a tab.
|
||||
* <p>
|
||||
@@ -240,14 +283,316 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String TABBED_PANE_TAB_HEIGHT = "JTabbedPane.tabHeight";
|
||||
|
||||
/**
|
||||
* Specifies the insets of a tab.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.awt.Insets}
|
||||
*/
|
||||
String TABBED_PANE_TAB_INSETS = "JTabbedPane.tabInsets";
|
||||
|
||||
/**
|
||||
* Specifies the insets of the tab area.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.awt.Insets}
|
||||
*/
|
||||
String TABBED_PANE_TAB_AREA_INSETS = "JTabbedPane.tabAreaInsets";
|
||||
|
||||
/**
|
||||
* Specifies whether tabs are closable.
|
||||
* If set to {@code true} on a tabbed pane component, all tabs in that tabbed pane are closable.
|
||||
* To make individual tabs closable, set it to {@code true} on a tab content component.
|
||||
* <p>
|
||||
* Note that you have to specify a callback (see {@link #TABBED_PANE_TAB_CLOSABLE})
|
||||
* that is invoked when the user clicks a tab close button.
|
||||
* The callback is responsible for closing the tab.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Boolean}
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_CLOSE_CALLBACK
|
||||
*/
|
||||
String TABBED_PANE_TAB_CLOSABLE = "JTabbedPane.tabClosable";
|
||||
|
||||
/**
|
||||
* Specifies the tooltip text used for tab close buttons.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_CLOSABLE
|
||||
*/
|
||||
String TABBED_PANE_TAB_CLOSE_TOOLTIPTEXT = "JTabbedPane.tabCloseToolTipText";
|
||||
|
||||
/**
|
||||
* Specifies the callback that is invoked when a tab close button is clicked.
|
||||
* The callback is responsible for closing the tab.
|
||||
* <p>
|
||||
* Either use a {@link java.util.function.IntConsumer} that received the tab index as parameter:
|
||||
* <pre>{@code
|
||||
* myTabbedPane.putClientProperty( "JTabbedPane.tabCloseCallback",
|
||||
* (IntConsumer) tabIndex -> {
|
||||
* // close tab here
|
||||
* } );
|
||||
* }</pre>
|
||||
* Or use a {@link java.util.function.BiConsumer}<javax.swing.JTabbedPane, Integer>
|
||||
* that received the tabbed pane and the tab index as parameters:
|
||||
* <pre>{@code
|
||||
* myTabbedPane.putClientProperty( "JTabbedPane.tabCloseCallback",
|
||||
* (BiConsumer<JTabbedPane, Integer>) (tabbedPane, tabIndex) -> {
|
||||
* // close tab here
|
||||
* } );
|
||||
* }</pre>
|
||||
* If you need to check whether a modifier key (e.g. Alt or Shift) was pressed
|
||||
* while the user clicked the tab close button, use {@link java.awt.EventQueue#getCurrentEvent}
|
||||
* to get current event, check whether it is a {@link java.awt.event.MouseEvent}
|
||||
* and invoke its methods. E.g.
|
||||
* <pre>{@code
|
||||
* AWTEvent e = EventQueue.getCurrentEvent();
|
||||
* boolean shift = (e instanceof MouseEvent) ? ((MouseEvent)e).isShiftDown() : false;
|
||||
* }</pre>
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.util.function.IntConsumer}
|
||||
* or {@link java.util.function.BiConsumer}<javax.swing.JTabbedPane, Integer>
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_CLOSABLE
|
||||
*/
|
||||
String TABBED_PANE_TAB_CLOSE_CALLBACK = "JTabbedPane.tabCloseCallback";
|
||||
|
||||
/**
|
||||
* Specifies the display policy for the "more tabs" button,
|
||||
* which shows a popup menu with the (partly) hidden tabs.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #TABBED_PANE_POLICY_NEVER} or
|
||||
* {@link #TABBED_PANE_POLICY_AS_NEEDED}
|
||||
*/
|
||||
String TABBED_PANE_TABS_POPUP_POLICY = "JTabbedPane.tabsPopupPolicy";
|
||||
|
||||
/**
|
||||
* Specifies the display policy for the forward/backward scroll arrow buttons.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #TABBED_PANE_POLICY_NEVER},
|
||||
* {@link #TABBED_PANE_POLICY_AS_NEEDED} or
|
||||
* {@link #TABBED_PANE_POLICY_AS_NEEDED_SINGLE}
|
||||
*/
|
||||
String TABBED_PANE_SCROLL_BUTTONS_POLICY = "JTabbedPane.scrollButtonsPolicy";
|
||||
|
||||
/**
|
||||
* Display never.
|
||||
*
|
||||
* @see #TABBED_PANE_TABS_POPUP_POLICY
|
||||
* @see #TABBED_PANE_SCROLL_BUTTONS_POLICY
|
||||
*/
|
||||
String TABBED_PANE_POLICY_NEVER = "never";
|
||||
|
||||
/**
|
||||
* Display only when needed.
|
||||
* <p>
|
||||
* If used for {@link #TABBED_PANE_SCROLL_BUTTONS_POLICY}, both scroll arrow buttons
|
||||
* are either shown or hidden. Buttons are disabled if scrolling in that
|
||||
* direction is not applicable.
|
||||
*
|
||||
* @see #TABBED_PANE_TABS_POPUP_POLICY
|
||||
* @see #TABBED_PANE_SCROLL_BUTTONS_POLICY
|
||||
*/
|
||||
String TABBED_PANE_POLICY_AS_NEEDED = "asNeeded";
|
||||
|
||||
/**
|
||||
* Display single button only when needed.
|
||||
* <p>
|
||||
* If scroll button placement is trailing, then this option is ignored
|
||||
* and both buttons are shown or hidden as needed.
|
||||
*
|
||||
* @see #TABBED_PANE_SCROLL_BUTTONS_POLICY
|
||||
*/
|
||||
String TABBED_PANE_POLICY_AS_NEEDED_SINGLE = "asNeededSingle";
|
||||
|
||||
/**
|
||||
* Specifies the placement of the forward/backward scroll arrow buttons.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #TABBED_PANE_PLACEMENT_BOTH} or
|
||||
* {@link #TABBED_PANE_PLACEMENT_TRAILING}
|
||||
*/
|
||||
String TABBED_PANE_SCROLL_BUTTONS_PLACEMENT = "JTabbedPane.scrollButtonsPlacement";
|
||||
|
||||
/**
|
||||
* The forward/backward scroll arrow buttons are placed on both sides of the tab area.
|
||||
* The backward scroll button at the left/top side.
|
||||
* The forward scroll button at the right/bottom side.
|
||||
*
|
||||
* @see #TABBED_PANE_SCROLL_BUTTONS_PLACEMENT
|
||||
*/
|
||||
String TABBED_PANE_PLACEMENT_BOTH = "both";
|
||||
|
||||
/**
|
||||
* The forward/backward scroll arrow buttons are placed on the trailing side of the tab area.
|
||||
*
|
||||
* @see #TABBED_PANE_SCROLL_BUTTONS_PLACEMENT
|
||||
*/
|
||||
String TABBED_PANE_PLACEMENT_TRAILING = "trailing";
|
||||
|
||||
/**
|
||||
* Specifies the alignment of the tab area.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer} or {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link SwingConstants#LEADING} (default)
|
||||
* {@link SwingConstants#TRAILING},
|
||||
* {@link SwingConstants#CENTER},
|
||||
* {@link #TABBED_PANE_ALIGN_LEADING} (default),
|
||||
* {@link #TABBED_PANE_ALIGN_TRAILING},
|
||||
* {@link #TABBED_PANE_ALIGN_CENTER} or
|
||||
* {@link #TABBED_PANE_ALIGN_FILL}
|
||||
*/
|
||||
String TABBED_PANE_TAB_AREA_ALIGNMENT = "JTabbedPane.tabAreaAlignment";
|
||||
|
||||
/**
|
||||
* Specifies the horizontal alignment of the tab title and icon.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
|
||||
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer} or {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link SwingConstants#LEADING},
|
||||
* {@link SwingConstants#TRAILING},
|
||||
* {@link SwingConstants#CENTER} (default),
|
||||
* {@link #TABBED_PANE_ALIGN_LEADING},
|
||||
* {@link #TABBED_PANE_ALIGN_TRAILING} or
|
||||
* {@link #TABBED_PANE_ALIGN_CENTER} (default)
|
||||
*/
|
||||
String TABBED_PANE_TAB_ALIGNMENT = "JTabbedPane.tabAlignment";
|
||||
|
||||
/**
|
||||
* Align to the leading edge.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_AREA_ALIGNMENT
|
||||
* @see #TABBED_PANE_TAB_ALIGNMENT
|
||||
*/
|
||||
String TABBED_PANE_ALIGN_LEADING = "leading";
|
||||
|
||||
/**
|
||||
* Align to the trailing edge.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_AREA_ALIGNMENT
|
||||
* @see #TABBED_PANE_TAB_ALIGNMENT
|
||||
*/
|
||||
String TABBED_PANE_ALIGN_TRAILING = "trailing";
|
||||
|
||||
/**
|
||||
* Align to center.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_AREA_ALIGNMENT
|
||||
* @see #TABBED_PANE_TAB_ALIGNMENT
|
||||
*/
|
||||
String TABBED_PANE_ALIGN_CENTER = "center";
|
||||
|
||||
/**
|
||||
* Stretch to fill all available space.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_AREA_ALIGNMENT
|
||||
*/
|
||||
String TABBED_PANE_ALIGN_FILL = "fill";
|
||||
|
||||
/**
|
||||
* Specifies how the tabs should be sized.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #TABBED_PANE_TAB_WIDTH_MODE_PREFERRED} (default),
|
||||
* {@link #TABBED_PANE_TAB_WIDTH_MODE_EQUAL} or
|
||||
* {@link #TABBED_PANE_TAB_WIDTH_MODE_COMPACT}
|
||||
*/
|
||||
String TABBED_PANE_TAB_WIDTH_MODE = "JTabbedPane.tabWidthMode";
|
||||
|
||||
/**
|
||||
* Tab width is adjusted to tab icon and title.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_WIDTH_MODE
|
||||
*/
|
||||
String TABBED_PANE_TAB_WIDTH_MODE_PREFERRED = "preferred";
|
||||
|
||||
/**
|
||||
* All tabs in a tabbed pane has same width.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_WIDTH_MODE
|
||||
*/
|
||||
String TABBED_PANE_TAB_WIDTH_MODE_EQUAL = "equal";
|
||||
|
||||
/**
|
||||
* Unselected tabs are smaller because they show only the tab icon, but no tab title.
|
||||
* Selected tabs show both.
|
||||
*
|
||||
* @see #TABBED_PANE_TAB_WIDTH_MODE
|
||||
*/
|
||||
String TABBED_PANE_TAB_WIDTH_MODE_COMPACT = "compact";
|
||||
|
||||
/**
|
||||
* Specifies the tab icon placement (relative to tab title).
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.Integer}<br>
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link SwingConstants#LEADING} (default),
|
||||
* {@link SwingConstants#TRAILING},
|
||||
* {@link SwingConstants#TOP} or
|
||||
* {@link SwingConstants#BOTTOM}
|
||||
*/
|
||||
String TABBED_PANE_TAB_ICON_PLACEMENT = "JTabbedPane.tabIconPlacement";
|
||||
|
||||
/**
|
||||
* Specifies a component that will be placed at the leading edge of the tabs area.
|
||||
* <p>
|
||||
* For top and bottom tab placement, the layed out component size will be
|
||||
* the preferred component width and the tab area height.<br>
|
||||
* For left and right tab placement, the layed out component size will be
|
||||
* the tab area width and the preferred component height.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.awt.Component}
|
||||
*/
|
||||
String TABBED_PANE_LEADING_COMPONENT = "JTabbedPane.leadingComponent";
|
||||
|
||||
/**
|
||||
* Specifies a component that will be placed at the trailing edge of the tabs area.
|
||||
* <p>
|
||||
* For top and bottom tab placement, the layed out component size will be
|
||||
* the available horizontal space (minimum is preferred component width) and the tab area height.<br>
|
||||
* For left and right tab placement, the layed out component size will be
|
||||
* the tab area width and the available vertical space (minimum is preferred component height).
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||
* <strong>Value type</strong> {@link java.awt.Component}
|
||||
*/
|
||||
String TABBED_PANE_TRAILING_COMPONENT = "JTabbedPane.trailingComponent";
|
||||
|
||||
//---- JTextField ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Specifies whether all text is selected when the text component gains focus.
|
||||
* <p>
|
||||
* <strong>Component</strong> {@link javax.swing.JTextField} (and subclasses)<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong> {@link #SELECT_ALL_ON_FOCUS_POLICY_NEVER},
|
||||
* {@link #SELECT_ALL_ON_FOCUS_POLICY_ONCE} (default) or
|
||||
* {@link #SELECT_ALL_ON_FOCUS_POLICY_ALWAYS}
|
||||
* <strong>Allowed Values</strong>
|
||||
* {@link #SELECT_ALL_ON_FOCUS_POLICY_NEVER},
|
||||
* {@link #SELECT_ALL_ON_FOCUS_POLICY_ONCE} (default) or
|
||||
* {@link #SELECT_ALL_ON_FOCUS_POLICY_ALWAYS}
|
||||
*/
|
||||
String SELECT_ALL_ON_FOCUS_POLICY = "JTextField.selectAllOnFocusPolicy";
|
||||
|
||||
@@ -282,6 +627,8 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String PLACEHOLDER_TEXT = "JTextField.placeholderText";
|
||||
|
||||
//---- JToggleButton ------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Height of underline if toggle button type is {@link #BUTTON_TYPE_TAB}.
|
||||
* <p>
|
||||
@@ -306,6 +653,8 @@ public interface FlatClientProperties
|
||||
*/
|
||||
String TAB_BUTTON_SELECTED_BACKGROUND = "JToggleButton.tab.selectedBackground";
|
||||
|
||||
//---- helper methods -----------------------------------------------------
|
||||
|
||||
/**
|
||||
* Checks whether a client property of a component has the given value.
|
||||
*/
|
||||
@@ -348,14 +697,4 @@ public interface FlatClientProperties
|
||||
Object value = c.getClientProperty( key );
|
||||
return (value instanceof Color) ? (Color) value : defaultValue;
|
||||
}
|
||||
|
||||
static int clientPropertyChoice( JComponent c, String key, String... choices ) {
|
||||
Object value = c.getClientProperty( key );
|
||||
for( int i = 0; i < choices.length; i++ ) {
|
||||
if( choices[i].equals( value ) )
|
||||
return i;
|
||||
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +170,9 @@ public abstract class FlatLaf
|
||||
|
||||
@Override
|
||||
public Icon getDisabledIcon( JComponent component, Icon icon ) {
|
||||
if( icon instanceof DisabledIconProvider )
|
||||
return ((DisabledIconProvider)icon).getDisabledIcon();
|
||||
|
||||
if( icon instanceof ImageIcon ) {
|
||||
Object grayFilter = UIManager.get( "Component.grayFilter" );
|
||||
ImageFilter filter = (grayFilter instanceof ImageFilter)
|
||||
@@ -762,4 +765,24 @@ public abstract class FlatLaf
|
||||
super( image );
|
||||
}
|
||||
}
|
||||
|
||||
//---- interface DisabledIconProvider -------------------------------------
|
||||
|
||||
/**
|
||||
* A provider for disabled icons.
|
||||
* <p>
|
||||
* This is intended to be implemented by {@link javax.swing.Icon} implementations
|
||||
* that provide the ability to paint disabled state.
|
||||
* <p>
|
||||
* Used in {@link FlatLaf#getDisabledIcon(JComponent, Icon)} to create a disabled icon from an enabled icon.
|
||||
*/
|
||||
public interface DisabledIconProvider
|
||||
{
|
||||
/**
|
||||
* Returns an icon with a disabled appearance.
|
||||
*
|
||||
* @return a disabled icon
|
||||
*/
|
||||
Icon getDisabledIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +92,14 @@ public interface FlatSystemProperties
|
||||
*/
|
||||
String MENUBAR_EMBEDDED = "flatlaf.menuBarEmbedded";
|
||||
|
||||
/**
|
||||
* Specifies whether animations are enabled.
|
||||
* <p>
|
||||
* <strong>Allowed Values</strong> {@code false} and {@code true}<br>
|
||||
* <strong>Default</strong> {@code true}
|
||||
*/
|
||||
String ANIMATION = "flatlaf.animation";
|
||||
|
||||
/**
|
||||
* Specifies whether vertical text position is corrected when UI is scaled on HiDPI screens.
|
||||
* <p>
|
||||
|
||||
@@ -583,7 +583,7 @@ public class IntelliJTheme
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return theme.name;
|
||||
return getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -211,14 +211,17 @@ class UIDefaultsLoader
|
||||
}
|
||||
|
||||
// override UI defaults with globals
|
||||
for( Object okey : defaults.keySet() ) {
|
||||
if( okey instanceof String && ((String)okey).contains( "." ) ) {
|
||||
String key = (String) okey;
|
||||
String globalKey = key.substring( key.lastIndexOf( '.' ) + 1 );
|
||||
String globalValue = globals.get( globalKey );
|
||||
if( globalValue != null && !properties.containsKey( key ) )
|
||||
properties.put( key, globalValue );
|
||||
}
|
||||
for( Object key : defaults.keySet() ) {
|
||||
int dot;
|
||||
if( !(key instanceof String) ||
|
||||
properties.containsKey( key ) ||
|
||||
(dot = ((String)key).lastIndexOf( '.' )) < 0 )
|
||||
continue;
|
||||
|
||||
String globalKey = ((String)key).substring( dot + 1 );
|
||||
String globalValue = globals.get( globalKey );
|
||||
if( globalValue != null )
|
||||
properties.put( key, globalValue );
|
||||
}
|
||||
|
||||
Function<String, String> propertiesGetter = key -> {
|
||||
|
||||
@@ -27,7 +27,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
/**
|
||||
* "ascendingSort" icon for {@link javax.swing.table.JTableHeader}.
|
||||
*
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault Table.sortIconColor Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
@@ -35,7 +35,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
public class FlatAscendingSortIcon
|
||||
extends FlatAbstractIcon
|
||||
{
|
||||
protected final boolean chevron = "chevron".equals( UIManager.getString( "Component.arrowType" ) );
|
||||
protected final boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) );
|
||||
protected final Color sortIconColor = UIManager.getColor( "Table.sortIconColor" );
|
||||
|
||||
public FlatAscendingSortIcon() {
|
||||
|
||||
@@ -27,7 +27,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
/**
|
||||
* "descendingSort" icon for {@link javax.swing.table.JTableHeader}.
|
||||
*
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault Table.sortIconColor Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
@@ -35,7 +35,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
public class FlatDescendingSortIcon
|
||||
extends FlatAbstractIcon
|
||||
{
|
||||
protected final boolean chevron = "chevron".equals( UIManager.getString( "Component.arrowType" ) );
|
||||
protected final boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) );
|
||||
protected final Color sortIconColor = UIManager.getColor( "Table.sortIconColor" );
|
||||
|
||||
public FlatDescendingSortIcon() {
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
/**
|
||||
* "arrow" icon for {@link javax.swing.JMenu}.
|
||||
*
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault Menu.icon.arrowColor Color
|
||||
* @uiDefault Menu.icon.disabledArrowColor Color
|
||||
* @uiDefault Menu.selectionForeground Color
|
||||
@@ -39,7 +39,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
public class FlatMenuArrowIcon
|
||||
extends FlatAbstractIcon
|
||||
{
|
||||
protected final boolean chevron = "chevron".equals( UIManager.getString( "Component.arrowType" ) );
|
||||
protected final boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) );
|
||||
protected final Color arrowColor = UIManager.getColor( "Menu.icon.arrowColor" );
|
||||
protected final Color disabledArrowColor = UIManager.getColor( "Menu.icon.disabledArrowColor" );
|
||||
protected final Color selectionForeground = UIManager.getColor( "Menu.selectionForeground" );
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* https://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.formdev.flatlaf.icons;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.geom.Line2D;
|
||||
import java.awt.geom.Path2D;
|
||||
import javax.swing.UIManager;
|
||||
import com.formdev.flatlaf.ui.FlatButtonUI;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
|
||||
/**
|
||||
* "close" icon for closable tabs in {@link javax.swing.JTabbedPane}.
|
||||
*
|
||||
* @uiDefault TabbedPane.closeSize Dimension
|
||||
* @uiDefault TabbedPane.closeArc int
|
||||
* @uiDefault TabbedPane.closeCrossPlainSize float
|
||||
* @uiDefault TabbedPane.closeCrossFilledSize float
|
||||
* @uiDefault TabbedPane.closeCrossLineWidth float
|
||||
* @uiDefault TabbedPane.closeBackground Color
|
||||
* @uiDefault TabbedPane.closeForeground Color
|
||||
* @uiDefault TabbedPane.closeHoverBackground Color
|
||||
* @uiDefault TabbedPane.closeHoverForeground Color
|
||||
* @uiDefault TabbedPane.closePressedBackground Color
|
||||
* @uiDefault TabbedPane.closePressedForeground Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class FlatTabbedPaneCloseIcon
|
||||
extends FlatAbstractIcon
|
||||
{
|
||||
protected final Dimension size = UIManager.getDimension( "TabbedPane.closeSize" );
|
||||
protected final int arc = UIManager.getInt( "TabbedPane.closeArc" );
|
||||
protected final float crossPlainSize = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossPlainSize", 7.5f );
|
||||
protected final float crossFilledSize = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossFilledSize", crossPlainSize );
|
||||
protected final float closeCrossLineWidth = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossLineWidth", 1f );
|
||||
protected final Color background = UIManager.getColor( "TabbedPane.closeBackground" );
|
||||
protected final Color foreground = UIManager.getColor( "TabbedPane.closeForeground" );
|
||||
protected final Color hoverBackground = UIManager.getColor( "TabbedPane.closeHoverBackground" );
|
||||
protected final Color hoverForeground = UIManager.getColor( "TabbedPane.closeHoverForeground" );
|
||||
protected final Color pressedBackground = UIManager.getColor( "TabbedPane.closePressedBackground" );
|
||||
protected final Color pressedForeground = UIManager.getColor( "TabbedPane.closePressedForeground" );
|
||||
|
||||
public FlatTabbedPaneCloseIcon() {
|
||||
super( 16, 16, null );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
// paint background
|
||||
Color bg = FlatButtonUI.buttonStateColor( c, background, null, null, hoverBackground, pressedBackground );
|
||||
if( bg != null ) {
|
||||
g.setColor( FlatUIUtils.deriveColor( bg, c.getBackground() ) );
|
||||
g.fillRoundRect( (width - size.width) / 2, (height - size.height) / 2,
|
||||
size.width, size.height, arc, arc );
|
||||
}
|
||||
|
||||
// set cross color
|
||||
Color fg = FlatButtonUI.buttonStateColor( c, foreground, null, null, hoverForeground, pressedForeground );
|
||||
g.setColor( FlatUIUtils.deriveColor( fg, c.getForeground() ) );
|
||||
|
||||
float mx = width / 2;
|
||||
float my = height / 2;
|
||||
float r = ((bg != null) ? crossFilledSize : crossPlainSize) / 2;
|
||||
|
||||
// paint cross
|
||||
Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD );
|
||||
path.append( new Line2D.Float( mx - r, my - r, mx + r, my + r ), false );
|
||||
path.append( new Line2D.Float( mx - r, my + r, mx + r, my - r ), false );
|
||||
g.setStroke( new BasicStroke( closeCrossLineWidth ) );
|
||||
g.draw( path );
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
/**
|
||||
* "collapsed" icon for {@link javax.swing.JTree}.
|
||||
*
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault Tree.icon.collapsedColor Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
@@ -41,7 +41,7 @@ public class FlatTreeCollapsedIcon
|
||||
|
||||
FlatTreeCollapsedIcon( Color color ) {
|
||||
super( 11, 11, color );
|
||||
chevron = "chevron".equals( UIManager.getString( "Component.arrowType" ) );
|
||||
chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -42,12 +42,13 @@ public class FlatArrowButton
|
||||
{
|
||||
public static final int DEFAULT_ARROW_WIDTH = 8;
|
||||
|
||||
private final boolean chevron;
|
||||
private final Color foreground;
|
||||
private final Color disabledForeground;
|
||||
private final Color hoverForeground;
|
||||
private final Color hoverBackground;
|
||||
private final Color pressedBackground;
|
||||
protected final boolean chevron;
|
||||
protected final Color foreground;
|
||||
protected final Color disabledForeground;
|
||||
protected final Color hoverForeground;
|
||||
protected final Color hoverBackground;
|
||||
protected final Color pressedForeground;
|
||||
protected final Color pressedBackground;
|
||||
|
||||
private int arrowWidth = DEFAULT_ARROW_WIDTH;
|
||||
private int xOffset = 0;
|
||||
@@ -64,14 +65,21 @@ public class FlatArrowButton
|
||||
|
||||
public FlatArrowButton( int direction, String type, Color foreground, Color disabledForeground,
|
||||
Color hoverForeground, Color hoverBackground, Color pressedBackground )
|
||||
{
|
||||
this( direction, type, foreground, disabledForeground, hoverForeground, hoverBackground, null, pressedBackground );
|
||||
}
|
||||
|
||||
public FlatArrowButton( int direction, String type, Color foreground, Color disabledForeground,
|
||||
Color hoverForeground, Color hoverBackground, Color pressedForeground, Color pressedBackground )
|
||||
{
|
||||
super( direction, Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE );
|
||||
|
||||
this.chevron = "chevron".equals( type );
|
||||
this.chevron = FlatUIUtils.isChevron( type );
|
||||
this.foreground = foreground;
|
||||
this.disabledForeground = disabledForeground;
|
||||
this.hoverForeground = hoverForeground;
|
||||
this.hoverBackground = hoverBackground;
|
||||
this.pressedForeground = pressedForeground;
|
||||
this.pressedBackground = pressedBackground;
|
||||
|
||||
setOpaque( false );
|
||||
@@ -142,6 +150,10 @@ public class FlatArrowButton
|
||||
return background;
|
||||
}
|
||||
|
||||
protected Color deriveForeground( Color foreground ) {
|
||||
return foreground;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getPreferredSize() {
|
||||
return scale( super.getPreferredSize() );
|
||||
@@ -157,24 +169,36 @@ public class FlatArrowButton
|
||||
Graphics2D g2 = (Graphics2D)g;
|
||||
FlatUIUtils.setRenderingHints( g2 );
|
||||
|
||||
int width = getWidth();
|
||||
int height = getHeight();
|
||||
boolean enabled = isEnabled();
|
||||
|
||||
// paint hover or pressed background
|
||||
if( enabled ) {
|
||||
if( isEnabled() ) {
|
||||
Color background = (pressedBackground != null && isPressed())
|
||||
? deriveBackground( pressedBackground )
|
||||
: ((hoverBackground != null && isHover())
|
||||
? deriveBackground( hoverBackground )
|
||||
? pressedBackground
|
||||
: (hoverBackground != null && isHover()
|
||||
? hoverBackground
|
||||
: null);
|
||||
|
||||
if( background != null ) {
|
||||
g.setColor( background );
|
||||
g.fillRect( 0, 0, width, height );
|
||||
g.setColor( deriveBackground( background ) );
|
||||
paintBackground( g2 );
|
||||
}
|
||||
}
|
||||
|
||||
// paint arrow
|
||||
g.setColor( deriveForeground( isEnabled()
|
||||
? (pressedForeground != null && isPressed()
|
||||
? pressedForeground
|
||||
: (hoverForeground != null && isHover()
|
||||
? hoverForeground
|
||||
: foreground))
|
||||
: disabledForeground ) );
|
||||
paintArrow( g2 );
|
||||
}
|
||||
|
||||
protected void paintBackground( Graphics2D g ) {
|
||||
g.fillRect( 0, 0, getWidth(), getHeight() );
|
||||
}
|
||||
|
||||
protected void paintArrow( Graphics2D g ) {
|
||||
int direction = getDirection();
|
||||
boolean vert = (direction == NORTH || direction == SOUTH);
|
||||
|
||||
@@ -193,8 +217,8 @@ public class FlatArrowButton
|
||||
rh++;
|
||||
}
|
||||
|
||||
int x = Math.round( (width - rw) / 2f + scale( (float) xOffset ) );
|
||||
int y = Math.round( (height - rh) / 2f + scale( (float) yOffset ) );
|
||||
int x = Math.round( (getWidth() - rw) / 2f + scale( (float) xOffset ) );
|
||||
int y = Math.round( (getHeight() - rh) / 2f + scale( (float) yOffset ) );
|
||||
|
||||
// move arrow for round borders
|
||||
Container parent = getParent();
|
||||
@@ -202,20 +226,17 @@ public class FlatArrowButton
|
||||
x -= scale( parent.getComponentOrientation().isLeftToRight() ? 1 : -1 );
|
||||
|
||||
// paint arrow
|
||||
g.setColor( enabled
|
||||
? (isHover() && hoverForeground != null ? hoverForeground : foreground)
|
||||
: disabledForeground );
|
||||
g.translate( x, y );
|
||||
/*debug
|
||||
debugPaint( g2, vert, rw, rh );
|
||||
debugPaint( g, vert, rw, rh );
|
||||
debug*/
|
||||
Shape arrowShape = createArrowShape( direction, chevron, w, h );
|
||||
if( chevron ) {
|
||||
g2.setStroke( new BasicStroke( scale( 1f ) ) );
|
||||
g2.draw( arrowShape );
|
||||
g.setStroke( new BasicStroke( scale( 1f ) ) );
|
||||
g.draw( arrowShape );
|
||||
} else {
|
||||
// triangle
|
||||
g2.fill( arrowShape );
|
||||
g.fill( arrowShape );
|
||||
}
|
||||
g.translate( -x, -y );
|
||||
}
|
||||
|
||||
@@ -254,15 +254,23 @@ public class FlatButtonUI
|
||||
(icon == null && text != null && ("...".equals( text ) || text.length() == 1));
|
||||
}
|
||||
|
||||
// same indices as in parameters to clientPropertyChoice()
|
||||
static final int TYPE_OTHER = -1;
|
||||
static final int TYPE_SQUARE = 0;
|
||||
static final int TYPE_ROUND_RECT = 1;
|
||||
|
||||
static int getButtonType( Component c ) {
|
||||
return (c instanceof AbstractButton)
|
||||
? clientPropertyChoice( (AbstractButton) c, BUTTON_TYPE, BUTTON_TYPE_SQUARE, BUTTON_TYPE_ROUND_RECT )
|
||||
: TYPE_OTHER;
|
||||
if( !(c instanceof AbstractButton) )
|
||||
return TYPE_OTHER;
|
||||
|
||||
Object value = ((AbstractButton)c).getClientProperty( BUTTON_TYPE );
|
||||
if( !(value instanceof String) )
|
||||
return TYPE_OTHER;
|
||||
|
||||
switch( (String) value ) {
|
||||
case BUTTON_TYPE_SQUARE: return TYPE_SQUARE;
|
||||
case BUTTON_TYPE_ROUND_RECT: return TYPE_ROUND_RECT;
|
||||
default: return TYPE_OTHER;
|
||||
}
|
||||
}
|
||||
|
||||
static boolean isHelpButton( Component c ) {
|
||||
|
||||
@@ -36,13 +36,15 @@ public class FlatCaret
|
||||
implements UIResource
|
||||
{
|
||||
private final String selectAllOnFocusPolicy;
|
||||
private final boolean selectAllOnMouseClick;
|
||||
|
||||
private boolean wasFocused;
|
||||
private boolean wasTemporaryLost;
|
||||
private boolean isMousePressed;
|
||||
|
||||
public FlatCaret( String selectAllOnFocusPolicy ) {
|
||||
public FlatCaret( String selectAllOnFocusPolicy, boolean selectAllOnMouseClick ) {
|
||||
this.selectAllOnFocusPolicy = selectAllOnFocusPolicy;
|
||||
this.selectAllOnMouseClick = selectAllOnMouseClick;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,7 +63,7 @@ public class FlatCaret
|
||||
|
||||
@Override
|
||||
public void focusGained( FocusEvent e ) {
|
||||
if( !wasTemporaryLost && !isMousePressed )
|
||||
if( !wasTemporaryLost && (!isMousePressed || selectAllOnMouseClick) )
|
||||
selectAllOnFocusGained();
|
||||
wasTemporaryLost = false;
|
||||
wasFocused = true;
|
||||
|
||||
@@ -85,7 +85,7 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault ComboBox.editorColumns int
|
||||
* @uiDefault ComboBox.maximumRowCount int
|
||||
* @uiDefault ComboBox.buttonStyle String auto (default), button or none
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault Component.isIntelliJTheme boolean
|
||||
* @uiDefault Component.borderColor Color
|
||||
* @uiDefault Component.disabledBorderColor Color
|
||||
|
||||
@@ -45,6 +45,7 @@ import javax.swing.plaf.ComponentUI;
|
||||
* @uiDefault Component.isIntelliJTheme boolean
|
||||
* @uiDefault FormattedTextField.placeholderForeground Color
|
||||
* @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always
|
||||
* @uiDefault TextComponent.selectAllOnMouseClick boolean
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
|
||||
@@ -20,9 +20,7 @@ import static com.formdev.flatlaf.util.UIScale.scale;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
@@ -40,16 +38,8 @@ public class FlatMenuBarBorder
|
||||
|
||||
@Override
|
||||
public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
Graphics2D g2 = (Graphics2D) g.create();
|
||||
try {
|
||||
float lineHeight = scale( (float) 1 );
|
||||
|
||||
FlatUIUtils.setRenderingHints( g2 );
|
||||
g2.setColor( borderColor );
|
||||
g2.fill( new Rectangle2D.Float( x, y + height - lineHeight, width, lineHeight ) );
|
||||
} finally {
|
||||
g2.dispose();
|
||||
}
|
||||
float lineHeight = scale( (float) 1 );
|
||||
FlatUIUtils.paintFilledRectangle( g, borderColor, x, y + height - lineHeight, width, lineHeight );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -63,6 +63,7 @@ import com.formdev.flatlaf.util.HiDPIUtils;
|
||||
* @uiDefault PasswordField.showCapsLock boolean
|
||||
* @uiDefault PasswordField.capsLockIcon Icon
|
||||
* @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always
|
||||
* @uiDefault TextComponent.selectAllOnMouseClick boolean
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
@@ -144,7 +145,8 @@ public class FlatPasswordFieldUI
|
||||
|
||||
@Override
|
||||
protected Caret createCaret() {
|
||||
return new FlatCaret( UIManager.getString( "TextComponent.selectAllOnFocusPolicy" ) );
|
||||
return new FlatCaret( UIManager.getString( "TextComponent.selectAllOnFocusPolicy" ),
|
||||
UIManager.getBoolean( "TextComponent.selectAllOnMouseClick" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -218,7 +218,7 @@ public class FlatPopupFactory
|
||||
* and corrects the y-location so that the tooltip is placed above the mouse location.
|
||||
*/
|
||||
private Point fixToolTipLocation( Component owner, Component contents, int x, int y ) {
|
||||
if( !(contents instanceof JToolTip) )
|
||||
if( !(contents instanceof JToolTip) || !wasInvokedFromToolTipManager() )
|
||||
return null;
|
||||
|
||||
Point mouseLocation = MouseInfo.getPointerInfo().getLocation();
|
||||
@@ -233,6 +233,16 @@ public class FlatPopupFactory
|
||||
return new Point( x, mouseLocation.y - tipSize.height - UIScale.scale( 20 ) );
|
||||
}
|
||||
|
||||
private boolean wasInvokedFromToolTipManager() {
|
||||
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
for( StackTraceElement stackTraceElement : stackTrace ) {
|
||||
if( "javax.swing.ToolTipManager".equals( stackTraceElement.getClassName() ) &&
|
||||
"showTipWindow".equals( stackTraceElement.getMethodName() ) )
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//---- class NonFlashingPopup ---------------------------------------------
|
||||
|
||||
private class NonFlashingPopup
|
||||
|
||||
@@ -37,6 +37,7 @@ import javax.swing.JMenuBar;
|
||||
import javax.swing.JRootPane;
|
||||
import javax.swing.LookAndFeel;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.plaf.BorderUIResource;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.UIResource;
|
||||
@@ -45,6 +46,7 @@ import com.formdev.flatlaf.FlatClientProperties;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.util.HiDPIUtils;
|
||||
import com.formdev.flatlaf.util.SystemInfo;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
/**
|
||||
* Provides the Flat LaF UI delegate for {@link javax.swing.JRootPane}.
|
||||
@@ -54,6 +56,7 @@ import com.formdev.flatlaf.util.SystemInfo;
|
||||
* @uiDefault RootPane.border Border
|
||||
* @uiDefault RootPane.activeBorderColor Color
|
||||
* @uiDefault RootPane.inactiveBorderColor Color
|
||||
* @uiDefault TitlePane.borderColor Color optional
|
||||
*
|
||||
* <!-- FlatWindowResizer -->
|
||||
*
|
||||
@@ -71,6 +74,8 @@ public class FlatRootPaneUI
|
||||
static final boolean canUseJBRCustomDecorations
|
||||
= SystemInfo.isJetBrainsJVM_11_orLater && SystemInfo.isWindows_10_orLater;
|
||||
|
||||
protected final Color borderColor = UIManager.getColor( "TitlePane.borderColor" );
|
||||
|
||||
protected JRootPane rootPane;
|
||||
protected FlatTitlePane titlePane;
|
||||
protected FlatWindowResizer windowResizer;
|
||||
@@ -89,11 +94,21 @@ public class FlatRootPaneUI
|
||||
|
||||
if( rootPane.getWindowDecorationStyle() != JRootPane.NONE )
|
||||
installClientDecorations();
|
||||
else
|
||||
installBorder();
|
||||
|
||||
if( canUseJBRCustomDecorations )
|
||||
JBRCustomDecorations.install( rootPane );
|
||||
}
|
||||
|
||||
protected void installBorder() {
|
||||
if( borderColor != null ) {
|
||||
Border b = rootPane.getBorder();
|
||||
if( b == null || b instanceof UIResource )
|
||||
rootPane.setBorder( new FlatWindowTitleBorder( borderColor ) );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uninstallUI( JComponent c ) {
|
||||
super.uninstallUI( c );
|
||||
@@ -119,11 +134,8 @@ public class FlatRootPaneUI
|
||||
}
|
||||
|
||||
// enable dark window appearance on macOS when running in JetBrains Runtime
|
||||
if( SystemInfo.isJetBrainsJVM && SystemInfo.isMacOS_10_14_Mojave_orLater ) {
|
||||
LookAndFeel laf = UIManager.getLookAndFeel();
|
||||
boolean isDark = laf instanceof FlatLaf && ((FlatLaf)laf).isDark();
|
||||
c.putClientProperty( "jetbrains.awt.windowDarkAppearance", isDark );
|
||||
}
|
||||
if( SystemInfo.isJetBrainsJVM && SystemInfo.isMacOS_10_14_Mojave_orLater )
|
||||
c.putClientProperty( "jetbrains.awt.windowDarkAppearance", FlatLaf.isLafDark() );
|
||||
}
|
||||
|
||||
protected void installClientDecorations() {
|
||||
@@ -203,6 +215,8 @@ public class FlatRootPaneUI
|
||||
uninstallClientDecorations();
|
||||
if( rootPane.getWindowDecorationStyle() != JRootPane.NONE )
|
||||
installClientDecorations();
|
||||
else
|
||||
installBorder();
|
||||
break;
|
||||
|
||||
case FlatClientProperties.MENU_BAR_EMBEDDED:
|
||||
@@ -252,8 +266,9 @@ public class FlatRootPaneUI
|
||||
int width = Math.max( titlePaneSize.width, contentSize.width );
|
||||
int height = titlePaneSize.height + contentSize.height;
|
||||
if( titlePane == null || !titlePane.isMenuBarEmbedded() ) {
|
||||
Dimension menuBarSize = (rootPane.getJMenuBar() != null)
|
||||
? getSizeFunc.apply( rootPane.getJMenuBar() )
|
||||
JMenuBar menuBar = rootPane.getJMenuBar();
|
||||
Dimension menuBarSize = (menuBar != null && menuBar.isVisible())
|
||||
? getSizeFunc.apply( menuBar )
|
||||
: new Dimension();
|
||||
|
||||
width = Math.max( width, menuBarSize.width );
|
||||
@@ -290,7 +305,7 @@ public class FlatRootPaneUI
|
||||
}
|
||||
|
||||
JMenuBar menuBar = rootPane.getJMenuBar();
|
||||
if( menuBar != null ) {
|
||||
if( menuBar != null && menuBar.isVisible() ) {
|
||||
if( titlePane != null && titlePane.isMenuBarEmbedded() ) {
|
||||
titlePane.validate();
|
||||
menuBar.setBounds( titlePane.getMenuBarBounds() );
|
||||
@@ -372,4 +387,40 @@ public class FlatRootPaneUI
|
||||
: false;
|
||||
}
|
||||
}
|
||||
|
||||
//---- class FlatWindowTitleBorder ----------------------------------------
|
||||
|
||||
private static class FlatWindowTitleBorder
|
||||
extends BorderUIResource.EmptyBorderUIResource
|
||||
{
|
||||
private final Color borderColor;
|
||||
|
||||
FlatWindowTitleBorder( Color borderColor ) {
|
||||
super( 0, 0, 0, 0 );
|
||||
this.borderColor = borderColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
if( showBorder( c ) ) {
|
||||
float lineHeight = UIScale.scale( (float) 1 );
|
||||
FlatUIUtils.paintFilledRectangle( g, borderColor, x, y, width, lineHeight );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Insets getBorderInsets( Component c, Insets insets ) {
|
||||
insets.set( showBorder( c ) ? 1 : 0, 0, 0, 0 );
|
||||
return insets;
|
||||
}
|
||||
|
||||
private boolean showBorder( Component c ) {
|
||||
Container parent = c.getParent();
|
||||
return
|
||||
(parent instanceof JFrame &&
|
||||
(((JFrame)parent).getJMenuBar() == null ||
|
||||
!((JFrame)parent).getJMenuBar().isVisible())) ||
|
||||
parent instanceof JDialog;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault ScrollBar.pressedTrackColor Color optional
|
||||
* @uiDefault ScrollBar.pressedThumbColor Color optional
|
||||
* @uiDefault ScrollBar.pressedThumbWithTrack boolean
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault ScrollBar.showButtons boolean
|
||||
* @uiDefault ScrollBar.buttonArrowColor Color
|
||||
* @uiDefault ScrollBar.buttonDisabledArrowColor Color
|
||||
|
||||
@@ -59,7 +59,7 @@ import com.formdev.flatlaf.FlatClientProperties;
|
||||
*
|
||||
* @uiDefault Component.minimumWidth int
|
||||
* @uiDefault Spinner.buttonStyle String button (default) or none
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault Component.isIntelliJTheme boolean
|
||||
* @uiDefault Component.borderColor Color
|
||||
* @uiDefault Component.disabledBorderColor Color
|
||||
|
||||
@@ -17,11 +17,18 @@
|
||||
package com.formdev.flatlaf.ui;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Container;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JSplitPane;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.ToolTipManager;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicSplitPaneDivider;
|
||||
@@ -42,10 +49,15 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
*
|
||||
* <!-- FlatSplitPaneUI -->
|
||||
*
|
||||
* @uiDefault Component.arrowType String triangle (default) or chevron
|
||||
* @uiDefault Component.arrowType String chevron (default) or triangle
|
||||
* @uiDefault SplitPane.continuousLayout boolean
|
||||
* @uiDefault SplitPaneDivider.oneTouchArrowColor Color
|
||||
* @uiDefault SplitPaneDivider.oneTouchHoverArrowColor Color
|
||||
* @uiDefault SplitPaneDivider.style String grip (default) or plain
|
||||
* @uiDefault SplitPaneDivider.gripColor Color
|
||||
* @uiDefault SplitPaneDivider.gripDotCount int
|
||||
* @uiDefault SplitPaneDivider.gripDotSize int
|
||||
* @uiDefault SplitPaneDivider.gripGap int
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
@@ -54,8 +66,8 @@ public class FlatSplitPaneUI
|
||||
{
|
||||
protected String arrowType;
|
||||
private Boolean continuousLayout;
|
||||
private Color oneTouchArrowColor;
|
||||
private Color oneTouchHoverArrowColor;
|
||||
protected Color oneTouchArrowColor;
|
||||
protected Color oneTouchHoverArrowColor;
|
||||
|
||||
public static ComponentUI createUI( JComponent c ) {
|
||||
return new FlatSplitPaneUI();
|
||||
@@ -90,8 +102,16 @@ public class FlatSplitPaneUI
|
||||
protected class FlatSplitPaneDivider
|
||||
extends BasicSplitPaneDivider
|
||||
{
|
||||
protected final String style = UIManager.getString( "SplitPaneDivider.style" );
|
||||
protected final Color gripColor = UIManager.getColor( "SplitPaneDivider.gripColor" );
|
||||
protected final int gripDotCount = FlatUIUtils.getUIInt( "SplitPaneDivider.gripDotCount", 3 );
|
||||
protected final int gripDotSize = FlatUIUtils.getUIInt( "SplitPaneDivider.gripDotSize", 3 );
|
||||
protected final int gripGap = FlatUIUtils.getUIInt( "SplitPaneDivider.gripGap", 2 );
|
||||
|
||||
protected FlatSplitPaneDivider( BasicSplitPaneUI ui ) {
|
||||
super( ui );
|
||||
|
||||
setLayout( new FlatDividerLayout() );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -109,16 +129,64 @@ public class FlatSplitPaneUI
|
||||
return new FlatOneTouchButton( false );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
super.propertyChange( e );
|
||||
|
||||
switch( e.getPropertyName() ) {
|
||||
case JSplitPane.DIVIDER_LOCATION_PROPERTY:
|
||||
// necessary to show/hide one-touch buttons on expand/collapse
|
||||
revalidate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint( Graphics g ) {
|
||||
super.paint( g );
|
||||
|
||||
if( "plain".equals( style ) )
|
||||
return;
|
||||
|
||||
FlatUIUtils.setRenderingHints( (Graphics2D) g );
|
||||
|
||||
g.setColor( gripColor );
|
||||
paintGrip( g, 0, 0, getWidth(), getHeight() );
|
||||
}
|
||||
|
||||
protected void paintGrip( Graphics g, int x, int y, int width, int height ) {
|
||||
FlatUIUtils.paintGrip( g, x, y, width, height,
|
||||
splitPane.getOrientation() == JSplitPane.VERTICAL_SPLIT,
|
||||
gripDotCount, gripDotSize, gripGap, true );
|
||||
}
|
||||
|
||||
protected boolean isLeftCollapsed() {
|
||||
int location = splitPane.getDividerLocation();
|
||||
Insets insets = splitPane.getInsets();
|
||||
return (orientation == JSplitPane.VERTICAL_SPLIT)
|
||||
? location == insets.top
|
||||
: location == insets.left;
|
||||
}
|
||||
|
||||
protected boolean isRightCollapsed() {
|
||||
int location = splitPane.getDividerLocation();
|
||||
Insets insets = splitPane.getInsets();
|
||||
return (orientation == JSplitPane.VERTICAL_SPLIT)
|
||||
? location == (splitPane.getHeight() - getHeight() - insets.bottom)
|
||||
: location == (splitPane.getWidth() - getWidth() - insets.right);
|
||||
}
|
||||
|
||||
//---- class FlatOneTouchButton ---------------------------------------
|
||||
|
||||
private class FlatOneTouchButton
|
||||
protected class FlatOneTouchButton
|
||||
extends FlatArrowButton
|
||||
{
|
||||
private final boolean left;
|
||||
protected final boolean left;
|
||||
|
||||
public FlatOneTouchButton( boolean left ) {
|
||||
protected FlatOneTouchButton( boolean left ) {
|
||||
super( SwingConstants.NORTH, arrowType, oneTouchArrowColor, null, oneTouchHoverArrowColor, null );
|
||||
setCursor( Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR ) );
|
||||
ToolTipManager.sharedInstance().registerComponent( this );
|
||||
|
||||
this.left = left;
|
||||
}
|
||||
@@ -129,7 +197,67 @@ public class FlatSplitPaneUI
|
||||
? (left ? SwingConstants.NORTH : SwingConstants.SOUTH)
|
||||
: (left ? SwingConstants.WEST : SwingConstants.EAST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getToolTipText( MouseEvent e ) {
|
||||
String key = (orientation == JSplitPane.VERTICAL_SPLIT)
|
||||
? (left
|
||||
? (isRightCollapsed()
|
||||
? "SplitPaneDivider.expandBottomToolTipText"
|
||||
: "SplitPaneDivider.collapseTopToolTipText")
|
||||
: (isLeftCollapsed()
|
||||
? "SplitPaneDivider.expandTopToolTipText"
|
||||
: "SplitPaneDivider.collapseBottomToolTipText"))
|
||||
: (left
|
||||
? (isRightCollapsed()
|
||||
? "SplitPaneDivider.expandRightToolTipText"
|
||||
: "SplitPaneDivider.collapseLeftToolTipText")
|
||||
: (isLeftCollapsed()
|
||||
? "SplitPaneDivider.expandLeftToolTipText"
|
||||
: "SplitPaneDivider.collapseRightToolTipText"));
|
||||
|
||||
// get text from client property
|
||||
Object value = splitPane.getClientProperty( key );
|
||||
if( value instanceof String )
|
||||
return (String) value;
|
||||
|
||||
// get text from bundle
|
||||
return UIManager.getString( key, getLocale() );
|
||||
}
|
||||
}
|
||||
|
||||
//---- class FlatDividerLayout ----------------------------------------
|
||||
|
||||
protected class FlatDividerLayout
|
||||
extends DividerLayout
|
||||
{
|
||||
@Override
|
||||
public void layoutContainer( Container c ) {
|
||||
super.layoutContainer( c );
|
||||
|
||||
if( leftButton == null || rightButton == null || !splitPane.isOneTouchExpandable() )
|
||||
return;
|
||||
|
||||
// increase side of buttons, which makes them easier to hit by the user
|
||||
// and avoids cut arrows at small divider sizes
|
||||
int extraSize = UIScale.scale( 4 );
|
||||
if( orientation == JSplitPane.VERTICAL_SPLIT ) {
|
||||
leftButton.setSize( leftButton.getWidth() + extraSize, leftButton.getHeight() );
|
||||
rightButton.setBounds( leftButton.getX() + leftButton.getWidth(), rightButton.getY(),
|
||||
rightButton.getWidth() + extraSize, rightButton.getHeight() );
|
||||
} else {
|
||||
leftButton.setSize( leftButton.getWidth(), leftButton.getHeight() + extraSize );
|
||||
rightButton.setBounds( rightButton.getX(), leftButton.getY() + leftButton.getHeight(),
|
||||
rightButton.getWidth(), rightButton.getHeight() + extraSize );
|
||||
}
|
||||
|
||||
// hide buttons if not applicable
|
||||
boolean leftCollapsed = isLeftCollapsed();
|
||||
if( leftCollapsed )
|
||||
rightButton.setLocation( leftButton.getLocation() );
|
||||
leftButton.setVisible( !leftCollapsed );
|
||||
rightButton.setVisible( !isRightCollapsed() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ import com.formdev.flatlaf.util.HiDPIUtils;
|
||||
* @uiDefault Component.isIntelliJTheme boolean
|
||||
* @uiDefault TextField.placeholderForeground Color
|
||||
* @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always
|
||||
* @uiDefault TextComponent.selectAllOnMouseClick boolean
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
@@ -121,7 +122,8 @@ public class FlatTextFieldUI
|
||||
|
||||
@Override
|
||||
protected Caret createCaret() {
|
||||
return new FlatCaret( UIManager.getString( "TextComponent.selectAllOnFocusPolicy" ) );
|
||||
return new FlatCaret( UIManager.getString( "TextComponent.selectAllOnFocusPolicy"),
|
||||
UIManager.getBoolean( "TextComponent.selectAllOnMouseClick" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -76,6 +76,7 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault TitlePane.foreground Color
|
||||
* @uiDefault TitlePane.inactiveForeground Color
|
||||
* @uiDefault TitlePane.embeddedForeground Color
|
||||
* @uiDefault TitlePane.borderColor Color optional
|
||||
* @uiDefault TitlePane.iconSize Dimension
|
||||
* @uiDefault TitlePane.iconMargins Insets
|
||||
* @uiDefault TitlePane.titleMargins Insets
|
||||
@@ -97,6 +98,7 @@ public class FlatTitlePane
|
||||
protected final Color activeForeground = UIManager.getColor( "TitlePane.foreground" );
|
||||
protected final Color inactiveForeground = UIManager.getColor( "TitlePane.inactiveForeground" );
|
||||
protected final Color embeddedForeground = UIManager.getColor( "TitlePane.embeddedForeground" );
|
||||
protected final Color borderColor = UIManager.getColor( "TitlePane.borderColor" );
|
||||
|
||||
protected final Insets menuBarMargins = UIManager.getInsets( "TitlePane.menuBarMargins" );
|
||||
protected final Dimension iconSize = UIManager.getDimension( "TitlePane.iconSize" );
|
||||
@@ -157,7 +159,7 @@ public class FlatTitlePane
|
||||
@Override
|
||||
public Dimension getPreferredSize() {
|
||||
JMenuBar menuBar = rootPane.getJMenuBar();
|
||||
return (menuBar != null && isMenuBarEmbedded())
|
||||
return (menuBar != null && menuBar.isVisible() && isMenuBarEmbedded())
|
||||
? FlatUIUtils.addInsets( menuBar.getPreferredSize(), UIScale.scale( menuBarMargins ) )
|
||||
: new Dimension();
|
||||
}
|
||||
@@ -238,7 +240,7 @@ public class FlatTitlePane
|
||||
}
|
||||
|
||||
protected void activeChanged( boolean active ) {
|
||||
boolean hasEmbeddedMenuBar = rootPane.getJMenuBar() != null && isMenuBarEmbedded();
|
||||
boolean hasEmbeddedMenuBar = rootPane.getJMenuBar() != null && rootPane.getJMenuBar().isVisible() && isMenuBarEmbedded();
|
||||
Color background = FlatUIUtils.nonUIResource( active ? activeBackground : inactiveBackground );
|
||||
Color foreground = FlatUIUtils.nonUIResource( active ? activeForeground : inactiveForeground );
|
||||
Color titleForeground = (hasEmbeddedMenuBar && active) ? FlatUIUtils.nonUIResource( embeddedForeground ) : foreground;
|
||||
@@ -422,6 +424,10 @@ public class FlatTitlePane
|
||||
protected void menuBarChanged() {
|
||||
menuBarPlaceholder.invalidate();
|
||||
|
||||
// necessary for the case that an embedded menu bar is made invisible
|
||||
// and a border color is specified
|
||||
repaint();
|
||||
|
||||
// update title foreground color
|
||||
EventQueue.invokeLater( () -> {
|
||||
activeChanged( window == null || window.isActive() );
|
||||
@@ -662,12 +668,13 @@ debug*/
|
||||
public Insets getBorderInsets( Component c, Insets insets ) {
|
||||
super.getBorderInsets( c, insets );
|
||||
|
||||
// if menu bar is embedded, add bottom insets of menu bar border
|
||||
Border menuBarBorder = getMenuBarBorder();
|
||||
if( menuBarBorder != null ) {
|
||||
// if menu bar is embedded, add bottom insets of menu bar border
|
||||
Insets menuBarInsets = menuBarBorder.getBorderInsets( c );
|
||||
insets.bottom += menuBarInsets.bottom;
|
||||
}
|
||||
} else if( borderColor != null && (rootPane.getJMenuBar() == null || !rootPane.getJMenuBar().isVisible()) )
|
||||
insets.bottom += UIScale.scale( 1 );
|
||||
|
||||
if( hasJBRCustomDecoration() )
|
||||
insets = FlatUIUtils.addInsets( insets, JBRWindowTopBorder.getInstance().getBorderInsets() );
|
||||
@@ -677,10 +684,16 @@ debug*/
|
||||
|
||||
@Override
|
||||
public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
// if menu bar is embedded, paint menu bar border
|
||||
// paint bottom border
|
||||
Border menuBarBorder = getMenuBarBorder();
|
||||
if( menuBarBorder != null )
|
||||
if( menuBarBorder != null ) {
|
||||
// if menu bar is embedded, paint menu bar border
|
||||
menuBarBorder.paintBorder( c, g, x, y, width, height );
|
||||
} else if( borderColor != null && (rootPane.getJMenuBar() == null || !rootPane.getJMenuBar().isVisible()) ) {
|
||||
// paint border between title pane and content if border color is specified
|
||||
float lineHeight = UIScale.scale( (float) 1 );
|
||||
FlatUIUtils.paintFilledRectangle( g, borderColor, x, y + height - lineHeight, width, lineHeight );
|
||||
}
|
||||
|
||||
if( hasJBRCustomDecoration() )
|
||||
JBRWindowTopBorder.getInstance().paintBorder( c, g, x, y, width, height );
|
||||
@@ -688,7 +701,7 @@ debug*/
|
||||
|
||||
protected Border getMenuBarBorder() {
|
||||
JMenuBar menuBar = rootPane.getJMenuBar();
|
||||
return (menuBar != null && isMenuBarEmbedded()) ? menuBar.getBorder() : null;
|
||||
return (menuBar != null && menuBar.isVisible() && isMenuBarEmbedded()) ? menuBar.getBorder() : null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,15 +16,16 @@
|
||||
|
||||
package com.formdev.flatlaf.ui;
|
||||
|
||||
import static com.formdev.flatlaf.util.UIScale.*;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import javax.swing.JToolBar;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.UIManager;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
/**
|
||||
* Border for {@link javax.swing.JToolBar}.
|
||||
@@ -39,7 +40,7 @@ public class FlatToolBarBorder
|
||||
{
|
||||
private static final int DOT_COUNT = 4;
|
||||
private static final int DOT_SIZE = 2;
|
||||
private static final int GRIP_WIDTH = DOT_SIZE * 3;
|
||||
private static final int GRIP_SIZE = DOT_SIZE * 3;
|
||||
|
||||
protected final Color gripColor = UIManager.getColor( "ToolBar.gripColor" );
|
||||
|
||||
@@ -64,35 +65,27 @@ public class FlatToolBarBorder
|
||||
}
|
||||
|
||||
protected void paintGrip( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
int dotSize = scale( DOT_SIZE );
|
||||
int gapSize = dotSize;
|
||||
int gripSize = (dotSize * DOT_COUNT) + ((gapSize * (DOT_COUNT - 1)));
|
||||
Rectangle r = calculateGripBounds( c, x, y, width, height );
|
||||
FlatUIUtils.paintGrip( g, r.x, r.y, r.width, r.height,
|
||||
((JToolBar)c).getOrientation() == SwingConstants.VERTICAL,
|
||||
DOT_COUNT, DOT_SIZE, DOT_SIZE, false );
|
||||
}
|
||||
|
||||
// include toolbar margin in grip position calculation
|
||||
Insets insets = getBorderInsets( c );
|
||||
protected Rectangle calculateGripBounds( Component c, int x, int y, int width, int height ) {
|
||||
// include toolbar margin in grip bounds calculation
|
||||
Insets insets = super.getBorderInsets( c, new Insets( 0, 0, 0, 0 ) );
|
||||
Rectangle r = FlatUIUtils.subtractInsets( new Rectangle( x, y, width, height ), insets );
|
||||
|
||||
// calculate grip position
|
||||
boolean horizontal = ((JToolBar)c).getOrientation() == SwingConstants.HORIZONTAL;
|
||||
if( horizontal ) {
|
||||
if( c.getComponentOrientation().isLeftToRight() )
|
||||
x += insets.left - (dotSize * 2);
|
||||
else
|
||||
x += width - insets.right + dotSize;
|
||||
y += Math.round( (height - gripSize) / 2f );
|
||||
} else {
|
||||
// vertical
|
||||
x += Math.round( (width - gripSize) / 2f );
|
||||
y += insets.top - (dotSize * 2);
|
||||
}
|
||||
// calculate grip bounds
|
||||
int gripSize = UIScale.scale( GRIP_SIZE );
|
||||
if( ((JToolBar)c).getOrientation() == SwingConstants.HORIZONTAL ) {
|
||||
if( !c.getComponentOrientation().isLeftToRight() )
|
||||
r.x = r.x + r.width - gripSize;
|
||||
r.width = gripSize;
|
||||
} else
|
||||
r.height = gripSize;
|
||||
|
||||
// paint dots
|
||||
for( int i = 0; i < DOT_COUNT; i++ ) {
|
||||
g.fillOval( x, y, dotSize, dotSize );
|
||||
if( horizontal )
|
||||
y += dotSize + gapSize;
|
||||
else
|
||||
x += dotSize + gapSize;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -101,7 +94,7 @@ public class FlatToolBarBorder
|
||||
|
||||
// add grip inset if floatable
|
||||
if( c instanceof JToolBar && ((JToolBar)c).isFloatable() ) {
|
||||
int gripInset = scale( GRIP_WIDTH );
|
||||
int gripInset = UIScale.scale( GRIP_SIZE );
|
||||
if( ((JToolBar)c).getOrientation() == SwingConstants.HORIZONTAL ) {
|
||||
if( c.getComponentOrientation().isLeftToRight() )
|
||||
insets.left += gripInset;
|
||||
|
||||
@@ -32,6 +32,7 @@ import java.awt.event.FocusEvent;
|
||||
import java.awt.event.FocusListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
@@ -127,6 +128,10 @@ public class FlatUIUtils
|
||||
return (value instanceof Number) ? ((Number)value).floatValue() : defaultValue;
|
||||
}
|
||||
|
||||
public static boolean isChevron( String arrowType ) {
|
||||
return !"triangle".equals( arrowType );
|
||||
}
|
||||
|
||||
public static Color nonUIResource( Color c ) {
|
||||
return (c instanceof UIResource) ? new Color( c.getRGB(), true ) : c;
|
||||
}
|
||||
@@ -379,6 +384,52 @@ public class FlatUIUtils
|
||||
return new RoundRectangle2D.Float( x, y, w, h, arc, arc );
|
||||
}
|
||||
|
||||
static void paintFilledRectangle( Graphics g, Color color, float x, float y, float w, float h ) {
|
||||
Graphics2D g2 = (Graphics2D) g.create();
|
||||
try {
|
||||
FlatUIUtils.setRenderingHints( g2 );
|
||||
g2.setColor( color );
|
||||
g2.fill( new Rectangle2D.Float( x, y, w, h ) );
|
||||
} finally {
|
||||
g2.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static void paintGrip( Graphics g, int x, int y, int width, int height,
|
||||
boolean horizontal, int dotCount, int dotSize, int gap, boolean centerPrecise )
|
||||
{
|
||||
dotSize = UIScale.scale( dotSize );
|
||||
gap = UIScale.scale( gap );
|
||||
int gripSize = (dotSize * dotCount) + ((gap * (dotCount - 1)));
|
||||
|
||||
// calculate grip position
|
||||
float gx;
|
||||
float gy;
|
||||
if( horizontal ) {
|
||||
gx = x + Math.round( (width - gripSize) / 2f );
|
||||
gy = y + ((height - dotSize) / 2f);
|
||||
|
||||
if( !centerPrecise )
|
||||
gy = Math.round( gy );
|
||||
} else {
|
||||
// vertical
|
||||
gx = x + ((width - dotSize) / 2f);
|
||||
gy = y + Math.round( (height - gripSize) / 2f );
|
||||
|
||||
if( !centerPrecise )
|
||||
gx = Math.round( gx );
|
||||
}
|
||||
|
||||
// paint dots
|
||||
for( int i = 0; i < dotCount; i++ ) {
|
||||
((Graphics2D)g).fill( new Ellipse2D.Float( gx, gy, dotSize, dotSize ) );
|
||||
if( horizontal )
|
||||
gx += dotSize + gap;
|
||||
else
|
||||
gy += dotSize + gap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill background with parent's background color because the visible component
|
||||
* is smaller than its bounds (for the focus decoration).
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.formdev.flatlaf.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import javax.swing.Timer;
|
||||
import com.formdev.flatlaf.FlatSystemProperties;
|
||||
|
||||
/**
|
||||
* Simple animator based on ideas and concepts from "Filthy Rich Clients" book
|
||||
@@ -39,6 +40,15 @@ public class Animator
|
||||
private long startTime;
|
||||
private Timer timer;
|
||||
|
||||
/**
|
||||
* Checks whether animations are enabled (the default) or disabled via
|
||||
* system property {@code flatlaf.animation} set to {@code false}.
|
||||
* This allows disabling all animations at command line with {@code -Dflatlaf.animation=false}.
|
||||
*/
|
||||
public static boolean useAnimation() {
|
||||
return FlatSystemProperties.getBoolean( FlatSystemProperties.ANIMATION, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an animation that runs duration milliseconds.
|
||||
* Use {@link #addTarget(TimingTarget)} to receive timing events
|
||||
@@ -86,7 +96,7 @@ public class Animator
|
||||
* Sets the duration of the animation in milliseconds.
|
||||
*
|
||||
* @throws IllegalStateException if animation is running
|
||||
* @throws IllegalArgumentException if duration is <= zero
|
||||
* @throws IllegalArgumentException if duration is <= zero
|
||||
*/
|
||||
public void setDuration( int duration ) {
|
||||
throwExceptionIfRunning();
|
||||
@@ -108,7 +118,7 @@ public class Animator
|
||||
*
|
||||
* @param resolution the resolution of the animation in milliseconds
|
||||
* @throws IllegalStateException if animation is running
|
||||
* @throws IllegalArgumentException if resolution is <= zero
|
||||
* @throws IllegalArgumentException if resolution is <= zero
|
||||
*/
|
||||
public void setResolution( int resolution ) {
|
||||
throwExceptionIfRunning();
|
||||
@@ -174,14 +184,17 @@ public class Animator
|
||||
timeToStop = false;
|
||||
startTime = System.nanoTime() / 1000000;
|
||||
|
||||
timer = new Timer( resolution, e -> {
|
||||
if( !hasBegun ) {
|
||||
begin();
|
||||
hasBegun = true;
|
||||
}
|
||||
if( timer == null ) {
|
||||
timer = new Timer( resolution, e -> {
|
||||
if( !hasBegun ) {
|
||||
begin();
|
||||
hasBegun = true;
|
||||
}
|
||||
|
||||
timingEvent( getTimingFraction() );
|
||||
} );
|
||||
timingEvent( getTimingFraction() );
|
||||
} );
|
||||
} else
|
||||
timer.setDelay( resolution );
|
||||
timer.setInitialDelay( 0 );
|
||||
timer.start();
|
||||
}
|
||||
@@ -203,10 +216,11 @@ public class Animator
|
||||
}
|
||||
|
||||
private void stop( boolean cancel ) {
|
||||
if( timer != null ) {
|
||||
if( !running )
|
||||
return;
|
||||
|
||||
if( timer != null )
|
||||
timer.stop();
|
||||
timer = null;
|
||||
}
|
||||
|
||||
if( !cancel )
|
||||
end();
|
||||
@@ -215,6 +229,15 @@ public class Animator
|
||||
timeToStop = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restarts the animation.
|
||||
* Invokes {@link #cancel()} and {@link #start()}.
|
||||
*/
|
||||
public void restart() {
|
||||
cancel();
|
||||
start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether this animation is running.
|
||||
*/
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.formdev.flatlaf.util;
|
||||
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@@ -27,7 +28,7 @@ import com.formdev.flatlaf.FlatLaf;
|
||||
|
||||
/**
|
||||
* Provides Java version compatibility methods.
|
||||
*
|
||||
* <p>
|
||||
* WARNING: This is private API and may change.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
@@ -35,10 +36,12 @@ import com.formdev.flatlaf.FlatLaf;
|
||||
public class JavaCompatibility
|
||||
{
|
||||
private static Method drawStringUnderlineCharAtMethod;
|
||||
private static Method getClippedStringMethod;
|
||||
|
||||
/**
|
||||
* Java 8: sun.swing.SwingUtilities2.drawStringUnderlineCharAt( JComponent c,
|
||||
* Graphics g, String text, int underlinedIndex, int x, int y )
|
||||
* <br>
|
||||
* Java 9: javax.swing.plaf.basic.BasicGraphicsUtils.drawStringUnderlineCharAt( JComponent c,
|
||||
* Graphics2D g, String string, int underlinedIndex, float x, float y )
|
||||
*/
|
||||
@@ -71,4 +74,37 @@ public class JavaCompatibility
|
||||
throw new RuntimeException( ex );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Java 8: sun.swing.SwingUtilities2.clipStringIfNecessary( JComponent c,
|
||||
* FontMetrics fm, String string, int availTextWidth )
|
||||
* <br>
|
||||
* Java 9: javax.swing.plaf.basic.BasicGraphicsUtils.getClippedString( JComponent c,
|
||||
* FontMetrics fm, String string, int availTextWidth )
|
||||
*/
|
||||
public static String getClippedString( JComponent c, FontMetrics fm, String string, int availTextWidth ) {
|
||||
synchronized( JavaCompatibility.class ) {
|
||||
if( getClippedStringMethod == null ) {
|
||||
try {
|
||||
Class<?> cls = Class.forName( SystemInfo.isJava_9_orLater
|
||||
? "javax.swing.plaf.basic.BasicGraphicsUtils"
|
||||
: "sun.swing.SwingUtilities2" );
|
||||
getClippedStringMethod = cls.getMethod( SystemInfo.isJava_9_orLater
|
||||
? "getClippedString"
|
||||
: "clipStringIfNecessary",
|
||||
new Class[] { JComponent.class, FontMetrics.class, String.class, int.class } );
|
||||
} catch( Exception ex ) {
|
||||
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
|
||||
throw new RuntimeException( ex );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
return (String) getClippedStringMethod.invoke( null, c, fm, string, availTextWidth );
|
||||
} catch( IllegalAccessException | IllegalArgumentException | InvocationTargetException ex ) {
|
||||
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
|
||||
throw new RuntimeException( ex );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,20 @@
|
||||
|
||||
package com.formdev.flatlaf.util;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Image;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
//
|
||||
// NOTE:
|
||||
// This implementation is for Java 8 only.
|
||||
// There is also a variant for Java 9 and later.
|
||||
//
|
||||
// Make sure that the API is in sync.
|
||||
//
|
||||
|
||||
/**
|
||||
* Support for multi-resolution images available since Java 9.
|
||||
*
|
||||
@@ -28,26 +37,86 @@ import java.util.function.Function;
|
||||
*/
|
||||
public class MultiResolutionImageSupport
|
||||
{
|
||||
/**
|
||||
* Checks whether multi-resolution image support is available.
|
||||
*
|
||||
* @return {@code true} when running on Java 9 or later; {@code false} on Java 8
|
||||
*/
|
||||
public static boolean isAvailable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given image is a multi-resolution image that implements
|
||||
* the interface {@code java.awt.image.MultiResolutionImage}.
|
||||
*/
|
||||
public static boolean isMultiResolutionImage( Image image ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a multi-resolution image from the given resolution variants.
|
||||
*
|
||||
* @param baseImageIndex index of the base image in the resolution variants array
|
||||
* @param resolutionVariants image resolution variants (sorted by size; smallest first)
|
||||
* @return a multi-resolution image on Java 9 or later; the base image on Java 8
|
||||
*/
|
||||
public static Image create( int baseImageIndex, Image... resolutionVariants ) {
|
||||
return resolutionVariants[baseImageIndex];
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a multi-resolution image for the given dimensions.
|
||||
* Initially the image does not contain any image data.
|
||||
* The real images are created (and cached) on demand by invoking the given producer function.
|
||||
* <p>
|
||||
* The given dimensions array is only used for {@link #getResolutionVariants(Image)}.
|
||||
* The producer function may be invoked with any dimension (that is not contained in
|
||||
* dimensions array) and is expected to produce a image for the passed in dimension.
|
||||
*
|
||||
* @param baseImageIndex index of the base image in the dimensions array
|
||||
* @param dimensions dimensions of resolution variants (sorted by size; smallest first)
|
||||
* @param producer producer function that creates a real image for the requested size
|
||||
* @return a multi-resolution image on Java 9 or later; the base image on Java 8
|
||||
*/
|
||||
public static Image create( int baseImageIndex, Dimension[] dimensions, Function<Dimension, Image> producer ) {
|
||||
return producer.apply( dimensions[baseImageIndex] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a multi-resolution image that maps images from another multi-resolution image
|
||||
* using the given mapper function.
|
||||
* <p>
|
||||
* Can be used to apply filter to multi-resolution images on demand.
|
||||
* E.g. passed in image is for "enabled" state and mapper function creates images
|
||||
* for "disabled" state.
|
||||
*
|
||||
* @param image a multi-resolution image that is mapped using the given mapper function
|
||||
* @param mapper mapper function that maps a single resolution variant to a new image (e.g. applying an filter)
|
||||
* @return a multi-resolution image on Java 9 or later; a mapped image on Java 8
|
||||
*/
|
||||
public static Image map( Image image, Function<Image, Image> mapper ) {
|
||||
return mapper.apply( image );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the image variant that best matches the given width and height.
|
||||
* <p>
|
||||
* If the given image is a multi-resolution image then invokes
|
||||
* {@code java.awt.image.MultiResolutionImage.getResolutionVariant(destImageWidth, destImageHeight)}.
|
||||
* Otherwise returns the given image.
|
||||
*/
|
||||
public static Image getResolutionVariant( Image image, int destImageWidth, int destImageHeight ) {
|
||||
return image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all resolution variants.
|
||||
* <p>
|
||||
* If the given image is a multi-resolution image then invokes
|
||||
* {@code java.awt.image.MultiResolutionImage.getResolutionVariants()}.
|
||||
* Otherwise returns a list containing only the given image.
|
||||
*/
|
||||
public static List<Image> getResolutionVariants( Image image ) {
|
||||
return Collections.singletonList( image );
|
||||
}
|
||||
|
||||
@@ -26,6 +26,13 @@ import java.util.List;
|
||||
*/
|
||||
public class StringUtils
|
||||
{
|
||||
/**
|
||||
* Returns {@code true} if given string is {@code null} or length is zero.
|
||||
*/
|
||||
public static boolean isEmpty( String string ) {
|
||||
return string == null || string.isEmpty();
|
||||
}
|
||||
|
||||
public static String removeLeading( String string, String leading ) {
|
||||
return string.startsWith( leading )
|
||||
? string.substring( leading.length() )
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.formdev.flatlaf.util;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Image;
|
||||
import java.awt.image.AbstractMultiResolutionImage;
|
||||
import java.awt.image.BaseMultiResolutionImage;
|
||||
@@ -27,6 +28,14 @@ import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import javax.swing.ImageIcon;
|
||||
|
||||
//
|
||||
// NOTE:
|
||||
// This implementation is for Java 9 and later.
|
||||
// There is also a variant for Java 8.
|
||||
//
|
||||
// Make sure that the API is in sync.
|
||||
//
|
||||
|
||||
/**
|
||||
* Support for multi-resolution images available since Java 9.
|
||||
*
|
||||
@@ -46,6 +55,10 @@ public class MultiResolutionImageSupport
|
||||
return new BaseMultiResolutionImage( baseImageIndex, resolutionVariants );
|
||||
}
|
||||
|
||||
public static Image create( int baseImageIndex, Dimension[] dimensions, Function<Dimension, Image> producer ) {
|
||||
return new ProducerMultiResolutionImage( dimensions, producer );
|
||||
}
|
||||
|
||||
public static Image map( Image image, Function<Image, Image> mapper ) {
|
||||
return image instanceof MultiResolutionImage
|
||||
? new MappedMultiResolutionImage( image, mapper )
|
||||
@@ -66,6 +79,9 @@ public class MultiResolutionImageSupport
|
||||
|
||||
//---- class MappedMultiResolutionImage -----------------------------------
|
||||
|
||||
/**
|
||||
* A multi-resolution image implementation that maps images on demand for requested sizes.
|
||||
*/
|
||||
private static class MappedMultiResolutionImage
|
||||
extends AbstractMultiResolutionImage
|
||||
{
|
||||
@@ -102,8 +118,52 @@ public class MultiResolutionImageSupport
|
||||
|
||||
private Image mapAndCacheImage( Image image ) {
|
||||
return cache.computeIfAbsent( image, img -> {
|
||||
// using ImageIcon here makes sure that the image is loaded
|
||||
return new ImageIcon( mapper.apply( img ) ).getImage();
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
//---- class ProducerMultiResolutionImage ---------------------------------
|
||||
|
||||
/**
|
||||
* A multi-resolution image implementation that produces images on demand for requested sizes.
|
||||
*/
|
||||
private static class ProducerMultiResolutionImage
|
||||
extends AbstractMultiResolutionImage
|
||||
{
|
||||
private final Dimension[] dimensions;
|
||||
private final Function<Dimension, Image> producer;
|
||||
private final IdentityHashMap<Dimension, Image> cache = new IdentityHashMap<>();
|
||||
|
||||
ProducerMultiResolutionImage( Dimension[] dimensions, Function<Dimension, Image> producer ) {
|
||||
this.dimensions = dimensions;
|
||||
this.producer = producer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Image getResolutionVariant( double destImageWidth, double destImageHeight ) {
|
||||
return produceAndCacheImage( new Dimension( (int) destImageWidth, (int) destImageHeight ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Image> getResolutionVariants() {
|
||||
List<Image> mappedVariants = new ArrayList<>();
|
||||
for( Dimension size : dimensions )
|
||||
mappedVariants.add( produceAndCacheImage( size ) );
|
||||
return mappedVariants;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Image getBaseImage() {
|
||||
return produceAndCacheImage( dimensions[0] );
|
||||
}
|
||||
|
||||
private Image produceAndCacheImage( Dimension size ) {
|
||||
return cache.computeIfAbsent( size, size2 -> {
|
||||
// using ImageIcon here makes sure that the image is loaded
|
||||
return new ImageIcon( producer.apply( size2 ) ).getImage();
|
||||
} );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,10 +254,20 @@ SplitPaneDivider.oneTouchHoverArrowColor=#7A7D81
|
||||
|
||||
TabbedPane.underlineColor=#4A88C7
|
||||
TabbedPane.disabledUnderlineColor=#7a7a7a
|
||||
TabbedPane.hoverColor=#2e3133
|
||||
TabbedPane.hoverColor=darken($TabbedPane.background,5%,derived noAutoInverse)
|
||||
TabbedPane.focusColor=#3d4b5c
|
||||
TabbedPane.contentAreaColor=#646464
|
||||
|
||||
TabbedPane.buttonHoverBackground=darken($TabbedPane.background,5%,derived noAutoInverse)
|
||||
TabbedPane.buttonPressedBackground=darken($TabbedPane.background,8%,derived noAutoInverse)
|
||||
|
||||
TabbedPane.closeBackground=null
|
||||
TabbedPane.closeForeground=@disabledText
|
||||
TabbedPane.closeHoverBackground=lighten($TabbedPane.background,5%,derived)
|
||||
TabbedPane.closeHoverForeground=@foreground
|
||||
TabbedPane.closePressedBackground=lighten($TabbedPane.background,10%,derived)
|
||||
TabbedPane.closePressedForeground=$TabbedPane.closeHoverForeground
|
||||
|
||||
|
||||
#---- Table ----
|
||||
|
||||
|
||||
@@ -199,6 +199,7 @@ ComboBox.minimumWidth=72
|
||||
ComboBox.editorColumns=0
|
||||
ComboBox.maximumRowCount=15
|
||||
[mac]ComboBox.showPopupOnNavigation=true
|
||||
# allowed values: auto, button or none
|
||||
ComboBox.buttonStyle=auto
|
||||
ComboBox.background=@textComponentBackground
|
||||
ComboBox.buttonBackground=@textComponentBackground
|
||||
@@ -211,6 +212,7 @@ Component.innerFocusWidth={float}0.5
|
||||
Component.innerOutlineWidth={float}1
|
||||
Component.arc=5
|
||||
Component.minimumWidth=64
|
||||
# allowed values: chevron or triangle
|
||||
Component.arrowType=chevron
|
||||
Component.hideMnemonics=true
|
||||
|
||||
@@ -518,6 +520,7 @@ Spinner.buttonDisabledArrowColor=$ComboBox.buttonDisabledArrowColor
|
||||
Spinner.buttonHoverArrowColor=$ComboBox.buttonHoverArrowColor
|
||||
Spinner.padding=@textComponentMargin
|
||||
Spinner.editorBorderPainted=false
|
||||
# allowed values: button or none
|
||||
Spinner.buttonStyle=button
|
||||
|
||||
|
||||
@@ -532,6 +535,12 @@ SplitPane.oneTouchButtonOffset={scaledInteger}2
|
||||
|
||||
SplitPaneDivider.border=null
|
||||
SplitPaneDivider.oneTouchArrowColor=$ComboBox.buttonArrowColor
|
||||
# allowed values: grip or plain
|
||||
SplitPaneDivider.style=grip
|
||||
SplitPaneDivider.gripColor=@icon
|
||||
SplitPaneDivider.gripDotCount=3
|
||||
SplitPaneDivider.gripDotSize={integer}3
|
||||
SplitPaneDivider.gripGap=2
|
||||
|
||||
|
||||
#---- TabbedPane ----
|
||||
@@ -546,10 +555,39 @@ TabbedPane.tabInsets=4,12,4,12
|
||||
TabbedPane.tabAreaInsets=0,0,0,0
|
||||
TabbedPane.selectedTabPadInsets=0,0,0,0
|
||||
TabbedPane.tabRunOverlay=0
|
||||
TabbedPane.tabsOverlapBorder=true
|
||||
TabbedPane.tabsOverlapBorder=false
|
||||
TabbedPane.disabledForeground=@disabledText
|
||||
TabbedPane.shadow=@background
|
||||
TabbedPane.contentBorderInsets=null
|
||||
# allowed values: moreTabsButton or arrowButtons
|
||||
TabbedPane.hiddenTabsNavigation=moreTabsButton
|
||||
# allowed values: leading, trailing, center or fill
|
||||
TabbedPane.tabAreaAlignment=leading
|
||||
# allowed values: leading, trailing or center
|
||||
TabbedPane.tabAlignment=center
|
||||
# allowed values: preferred, equal or compact
|
||||
TabbedPane.tabWidthMode=preferred
|
||||
|
||||
# allowed values: chevron or triangle
|
||||
TabbedPane.arrowType=chevron
|
||||
TabbedPane.buttonInsets=2,1,2,1
|
||||
TabbedPane.buttonArc=$Button.arc
|
||||
|
||||
# allowed values: wrap or scroll
|
||||
#TabbedPane.tabLayoutPolicy=scroll
|
||||
# allowed values: never or asNeeded
|
||||
TabbedPane.tabsPopupPolicy=asNeeded
|
||||
# allowed values: never, asNeeded or asNeededSingle
|
||||
TabbedPane.scrollButtonsPolicy=asNeededSingle
|
||||
# allowed values: both or trailing
|
||||
TabbedPane.scrollButtonsPlacement=both
|
||||
|
||||
TabbedPane.closeIcon=com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon
|
||||
TabbedPane.closeSize=16,16
|
||||
TabbedPane.closeArc=4
|
||||
TabbedPane.closeCrossPlainSize={float}7.5
|
||||
TabbedPane.closeCrossFilledSize=$TabbedPane.closeCrossPlainSize
|
||||
TabbedPane.closeCrossLineWidth={float}1
|
||||
|
||||
|
||||
#---- Table ----
|
||||
@@ -596,8 +634,9 @@ TextArea.background=@textComponentBackground
|
||||
|
||||
#---- TextComponent ----
|
||||
|
||||
# allowed values: "never", "once" (default) or "always"
|
||||
# allowed values: never, once or always
|
||||
TextComponent.selectAllOnFocusPolicy=once
|
||||
TextComponent.selectAllOnMouseClick=false
|
||||
TextComponent.arc=0
|
||||
|
||||
|
||||
|
||||
@@ -266,10 +266,20 @@ SplitPaneDivider.oneTouchHoverArrowColor=#333
|
||||
|
||||
TabbedPane.underlineColor=#4083C9
|
||||
TabbedPane.disabledUnderlineColor=#ababab
|
||||
TabbedPane.hoverColor=#d9d9d9
|
||||
TabbedPane.hoverColor=darken($TabbedPane.background,7%,derived)
|
||||
TabbedPane.focusColor=#dae4ed
|
||||
TabbedPane.contentAreaColor=#bfbfbf
|
||||
|
||||
TabbedPane.buttonHoverBackground=darken($TabbedPane.background,7%,derived)
|
||||
TabbedPane.buttonPressedBackground=darken($TabbedPane.background,10%,derived)
|
||||
|
||||
TabbedPane.closeBackground=null
|
||||
TabbedPane.closeForeground=@disabledText
|
||||
TabbedPane.closeHoverBackground=darken($TabbedPane.background,20%,derived)
|
||||
TabbedPane.closeHoverForeground=@foreground
|
||||
TabbedPane.closePressedBackground=darken($TabbedPane.background,25%,derived)
|
||||
TabbedPane.closePressedForeground=$TabbedPane.closeHoverForeground
|
||||
|
||||
|
||||
#---- Table ----
|
||||
|
||||
|
||||
@@ -46,3 +46,20 @@ FileChooser.refreshActionLabelText=Refresh
|
||||
FileChooser.newFolderActionLabelText=New Folder
|
||||
FileChooser.listViewActionLabelText=List
|
||||
FileChooser.detailsViewActionLabelText=Details
|
||||
|
||||
|
||||
#---- SplitPaneDivider ----
|
||||
|
||||
SplitPaneDivider.collapseLeftToolTipText=Collapse Left Pane
|
||||
SplitPaneDivider.collapseRightToolTipText=Collapse Right Pane
|
||||
SplitPaneDivider.collapseTopToolTipText=Collapse Top Pane
|
||||
SplitPaneDivider.collapseBottomToolTipText=Collapse Bottom Pane
|
||||
SplitPaneDivider.expandLeftToolTipText=Expand Left Pane
|
||||
SplitPaneDivider.expandRightToolTipText=Expand Right Pane
|
||||
SplitPaneDivider.expandTopToolTipText=Expand Top Pane
|
||||
SplitPaneDivider.expandBottomToolTipText=Expand Bottom Pane
|
||||
|
||||
|
||||
#---- TabbedPane ----
|
||||
|
||||
TabbedPane.moreTabsButtonToolTipText=Show Hidden Tabs
|
||||
|
||||
@@ -46,3 +46,8 @@ FileChooser.refreshActionLabelText=Aktualisieren
|
||||
FileChooser.newFolderActionLabelText=Neuer Ordner
|
||||
FileChooser.listViewActionLabelText=Liste
|
||||
FileChooser.detailsViewActionLabelText=Details
|
||||
|
||||
|
||||
#---- TabbedPane ----
|
||||
|
||||
TabbedPane.moreTabsButtonToolTipText=Verdeckte Tabs anzeigen
|
||||
|
||||
@@ -141,11 +141,16 @@ class DemoFrame
|
||||
private void windowDecorationsChanged() {
|
||||
boolean windowDecorations = windowDecorationsCheckBoxMenuItem.isSelected();
|
||||
|
||||
// change window decoration of demo main frame
|
||||
dispose();
|
||||
setUndecorated( windowDecorations );
|
||||
getRootPane().setWindowDecorationStyle( windowDecorations ? JRootPane.FRAME : JRootPane.NONE );
|
||||
menuBarEmbeddedCheckBoxMenuItem.setEnabled( windowDecorations );
|
||||
setVisible( true );
|
||||
|
||||
// enable/disable window decoration for later created frames/dialogs
|
||||
JFrame.setDefaultLookAndFeelDecorated( windowDecorations );
|
||||
JDialog.setDefaultLookAndFeelDecorated( windowDecorations );
|
||||
}
|
||||
|
||||
private void menuBarEmbeddedChanged() {
|
||||
@@ -675,11 +680,12 @@ class DemoFrame
|
||||
|
||||
//======== tabbedPane ========
|
||||
{
|
||||
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
|
||||
tabbedPane.addChangeListener(e -> selectedTabChanged());
|
||||
tabbedPane.addTab("Basic Components", basicComponentsPanel);
|
||||
tabbedPane.addTab("More Components", moreComponentsPanel);
|
||||
tabbedPane.addTab("Data Components", dataComponentsPanel);
|
||||
tabbedPane.addTab("SplitPane & Tabs", tabsPanel);
|
||||
tabbedPane.addTab("Tabs", tabsPanel);
|
||||
tabbedPane.addTab("Option Pane", optionPanePanel);
|
||||
tabbedPane.addTab("Extras", extrasPanel1);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -64,6 +64,7 @@ new FormModel {
|
||||
name: "contentPanel"
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabbedPane"
|
||||
"tabLayoutPolicy": 1
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
@@ -86,7 +87,7 @@ new FormModel {
|
||||
add( new FormComponent( "com.formdev.flatlaf.demo.TabsPanel" ) {
|
||||
name: "tabsPanel"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "SplitPane & Tabs"
|
||||
"title": "Tabs"
|
||||
} )
|
||||
add( new FormComponent( "com.formdev.flatlaf.demo.OptionPanePanel" ) {
|
||||
name: "optionPanePanel"
|
||||
|
||||
@@ -101,6 +101,18 @@ class MoreComponentsPanel
|
||||
JButton button8 = new JButton();
|
||||
JToggleButton toggleButton6 = new JToggleButton();
|
||||
JButton button1 = new JButton();
|
||||
JLabel splitPaneLabel = new JLabel();
|
||||
JSplitPane splitPane3 = new JSplitPane();
|
||||
JSplitPane splitPane1 = new JSplitPane();
|
||||
JPanel panel10 = new JPanel();
|
||||
JLabel label1 = new JLabel();
|
||||
JPanel panel11 = new JPanel();
|
||||
JLabel label2 = new JLabel();
|
||||
JSplitPane splitPane2 = new JSplitPane();
|
||||
JPanel panel12 = new JPanel();
|
||||
JLabel label5 = new JLabel();
|
||||
JPanel panel13 = new JPanel();
|
||||
JLabel label6 = new JLabel();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
@@ -122,7 +134,8 @@ class MoreComponentsPanel
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
"[]" +
|
||||
"[100,top]"));
|
||||
|
||||
//---- scrollPaneLabel ----
|
||||
scrollPaneLabel.setText("JScrollPane:");
|
||||
@@ -386,6 +399,81 @@ class MoreComponentsPanel
|
||||
toolBar1.add(button1);
|
||||
}
|
||||
add(toolBar1, "cell 1 10 3 1,growx");
|
||||
|
||||
//---- splitPaneLabel ----
|
||||
splitPaneLabel.setText("JSplitPane:");
|
||||
add(splitPaneLabel, "cell 0 11");
|
||||
|
||||
//======== splitPane3 ========
|
||||
{
|
||||
splitPane3.setResizeWeight(0.5);
|
||||
|
||||
//======== splitPane1 ========
|
||||
{
|
||||
splitPane1.setResizeWeight(0.5);
|
||||
|
||||
//======== panel10 ========
|
||||
{
|
||||
panel10.setBackground(new Color(217, 163, 67));
|
||||
panel10.setLayout(new BorderLayout());
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("LEFT");
|
||||
label1.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label1.setForeground(Color.white);
|
||||
panel10.add(label1, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane1.setLeftComponent(panel10);
|
||||
|
||||
//======== panel11 ========
|
||||
{
|
||||
panel11.setBackground(new Color(98, 181, 67));
|
||||
panel11.setLayout(new BorderLayout());
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("RIGHT");
|
||||
label2.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label2.setForeground(Color.white);
|
||||
panel11.add(label2, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane1.setRightComponent(panel11);
|
||||
}
|
||||
splitPane3.setLeftComponent(splitPane1);
|
||||
|
||||
//======== splitPane2 ========
|
||||
{
|
||||
splitPane2.setOrientation(JSplitPane.VERTICAL_SPLIT);
|
||||
splitPane2.setResizeWeight(0.5);
|
||||
|
||||
//======== panel12 ========
|
||||
{
|
||||
panel12.setBackground(new Color(242, 101, 34));
|
||||
panel12.setLayout(new BorderLayout());
|
||||
|
||||
//---- label5 ----
|
||||
label5.setText("TOP");
|
||||
label5.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label5.setForeground(Color.white);
|
||||
panel12.add(label5, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane2.setTopComponent(panel12);
|
||||
|
||||
//======== panel13 ========
|
||||
{
|
||||
panel13.setBackground(new Color(64, 182, 224));
|
||||
panel13.setLayout(new BorderLayout());
|
||||
|
||||
//---- label6 ----
|
||||
label6.setText("BOTTOM");
|
||||
label6.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label6.setForeground(Color.white);
|
||||
panel13.add(label6, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane2.setBottomComponent(panel13);
|
||||
}
|
||||
splitPane3.setRightComponent(splitPane2);
|
||||
}
|
||||
add(splitPane3, "cell 1 11 4 1,grow");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
|
||||
if( FlatLafDemo.screenshotsMode ) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -9,7 +9,7 @@ new FormModel {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[][][][][]"
|
||||
"$rowConstraints": "[][][][][][][][][][][]"
|
||||
"$rowConstraints": "[][][][][][][][][][][][100,top]"
|
||||
} ) {
|
||||
name: "this"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
@@ -358,9 +358,90 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 10 3 1,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "splitPaneLabel"
|
||||
"text": "JSplitPane:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 11"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane3"
|
||||
"resizeWeight": 0.5
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane1"
|
||||
"resizeWeight": 0.5
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel10"
|
||||
"background": new java.awt.Color( 217, 163, 67, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "LEFT"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel11"
|
||||
"background": new java.awt.Color( 98, 181, 67, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
"text": "RIGHT"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane2"
|
||||
"orientation": 0
|
||||
"resizeWeight": 0.5
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel12"
|
||||
"background": new java.awt.Color( 242, 101, 34, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label5"
|
||||
"text": "TOP"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel13"
|
||||
"background": new java.awt.Color( 64, 182, 224, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label6"
|
||||
"text": "BOTTOM"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 11 4 1,grow"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 700, 420 )
|
||||
"size": new java.awt.Dimension( 700, 550 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,213 +3,604 @@ JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8"
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
root: new FormRoot {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.defaultVariableLocal": true
|
||||
}
|
||||
"$setComponentNames": true
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[grow,fill]"
|
||||
"$rowConstraints": "[grow,fill]"
|
||||
"$columnConstraints": "[grow,fill]para[fill]para[fill]"
|
||||
"$rowConstraints": "[grow,fill]para[][]"
|
||||
} ) {
|
||||
name: "this"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
||||
"$columnSpecs": "70dlu:grow, unrelgap, 70dlu:grow"
|
||||
"$rowSpecs": "default, linegap, fill:70dlu, pargap, pref, linegap, fill:80dlu:grow, unrelgap, fill:80dlu:grow, unrelgap, pref"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[grow,fill]"
|
||||
"$rowConstraints": "[][fill]para[]0[][]para[][]para[][]"
|
||||
} ) {
|
||||
name: "panel9"
|
||||
name: "panel1"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "splitPaneLabel"
|
||||
"text": "JSplitPane:"
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) )
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane3"
|
||||
"resizeWeight": 0.5
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane1"
|
||||
"resizeWeight": 0.5
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel10"
|
||||
"background": new java.awt.Color( 217, 163, 67, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "LEFT"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel11"
|
||||
"background": new java.awt.Color( 98, 181, 67, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
"text": "RIGHT"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
name: "tabPlacementLabel"
|
||||
"text": "Tab placement"
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "tabPlacementToolBar"
|
||||
"floatable": false
|
||||
"border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "topPlacementButton"
|
||||
"text": "top"
|
||||
"selected": true
|
||||
"$buttonGroup": new FormReference( "tabPlacementButtonGroup" )
|
||||
"font": &SwingDerivedFont0 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane2"
|
||||
"orientation": 0
|
||||
"resizeWeight": 0.5
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel12"
|
||||
"background": new java.awt.Color( 242, 101, 34, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "TOP"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel13"
|
||||
"background": new java.awt.Color( 64, 182, 224, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "BOTTOM"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "bottomPlacementButton"
|
||||
"text": "bottom"
|
||||
"$buttonGroup": new FormReference( "tabPlacementButtonGroup" )
|
||||
"font": #SwingDerivedFont0
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridY": 3
|
||||
"gridWidth": 3
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "leftPlacementButton"
|
||||
"text": "left"
|
||||
"$buttonGroup": new FormReference( "tabPlacementButtonGroup" )
|
||||
"font": #SwingDerivedFont0
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "rightPlacementButton"
|
||||
"text": "right"
|
||||
"$buttonGroup": new FormReference( "tabPlacementButtonGroup" )
|
||||
"font": #SwingDerivedFont0
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToolBar$Separator" ) {
|
||||
name: "separator1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollButton"
|
||||
"text": "scroll"
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "borderButton"
|
||||
"text": "border"
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "borderChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0,alignx right,growx 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabPlacementTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1,width 300:300,height 100:100"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabbedPaneLabel"
|
||||
"text": "JTabbedPane:"
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 1
|
||||
"gridY": 5
|
||||
name: "tabLayoutLabel"
|
||||
"text": "Tab layout"
|
||||
"font": &SwingDerivedFont1 new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "tabLayoutToolBar"
|
||||
"floatable": false
|
||||
"border": &EmptyBorder0 new javax.swing.border.EmptyBorder( 0, 0, 0, 0 )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollTabLayoutButton"
|
||||
"text": "scroll"
|
||||
"$buttonGroup": new FormReference( "tabLayoutButtonGroup" )
|
||||
"font": &SwingDerivedFont2 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
"selected": true
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabLayoutChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "wrapTabLayoutButton"
|
||||
"text": "wrap"
|
||||
"$buttonGroup": new FormReference( "tabLayoutButtonGroup" )
|
||||
"font": #SwingDerivedFont2
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabLayoutChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2,alignx right,growx 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "scrollLayoutNoteLabel"
|
||||
"text": "(use mouse wheel to scroll; arrow button shows hidden tabs)"
|
||||
"enabled": false
|
||||
"font": &SwingDerivedFont3 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "wrapLayoutNoteLabel"
|
||||
"text": "(probably better to use scroll layout?)"
|
||||
"enabled": false
|
||||
"font": #SwingDerivedFont3
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabbedPane1"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 1
|
||||
"gridY": 7
|
||||
name: "scrollLayoutTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabbedPane3"
|
||||
"tabPlacement": 2
|
||||
name: "wrapLayoutTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4,width 100:100,height pref*2px"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "closableTabsLabel"
|
||||
"text": "Closable tabs"
|
||||
"font": #SwingDerivedFont1
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 3
|
||||
"gridY": 7
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "closableTabsToolBar"
|
||||
"floatable": false
|
||||
"border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "squareCloseButton"
|
||||
"text": "square"
|
||||
"font": &SwingDerivedFont4 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
"$buttonGroup": new FormReference( "closableTabsButtonGroup" )
|
||||
"selected": true
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "closeButtonStyleChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "circleCloseButton"
|
||||
"text": "circle"
|
||||
"font": #SwingDerivedFont4
|
||||
"$buttonGroup": new FormReference( "closableTabsButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "closeButtonStyleChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "redCrossCloseButton"
|
||||
"text": "red cross"
|
||||
"font": #SwingDerivedFont4
|
||||
"$buttonGroup": new FormReference( "closableTabsButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "closeButtonStyleChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5,alignx right,growx 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabbedPane2"
|
||||
"tabPlacement": 3
|
||||
name: "closableTabsTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 6"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabAreaComponentsLabel"
|
||||
"text": "Custom tab area components"
|
||||
"font": #SwingDerivedFont1
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridY": 9
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 7"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "tabAreaComponentsToolBar"
|
||||
"floatable": false
|
||||
"border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "leadingComponentButton"
|
||||
"text": "leading"
|
||||
"font": &SwingDerivedFont5 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
"selected": true
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customComponentsChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "trailingComponentButton"
|
||||
"text": "trailing"
|
||||
"font": #SwingDerivedFont5
|
||||
"selected": true
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customComponentsChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 7,alignx right,growx 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabbedPane4"
|
||||
"tabPlacement": 4
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 3
|
||||
"gridY": 9
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[][][][fill][]"
|
||||
"$rowConstraints": "[center]"
|
||||
} ) {
|
||||
name: "panel14"
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "moreTabsCheckBox"
|
||||
"text": "More tabs"
|
||||
"mnemonic": 77
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "moreTabsChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "tabScrollCheckBox"
|
||||
"text": "Use scroll layout"
|
||||
"mnemonic": 83
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabScrollChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0,alignx left,growx 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showTabSeparatorsCheckBox"
|
||||
"text": "Show tab separators"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabSeparatorsChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "hideContentSeparatorCheckBox"
|
||||
"text": "Hide content separator"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hideContentSeparatorChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "hasFullBorderCheckBox"
|
||||
"text": "Show content border"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hasFullBorderChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 0,alignx left,growx 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridY": 11
|
||||
"gridWidth": 3
|
||||
name: "customComponentsTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 8"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[grow,fill]"
|
||||
"$rowConstraints": "[]0[][fill][center][center][center]para[center]0[][center][center][center][]"
|
||||
} ) {
|
||||
name: "panel2"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabIconPlacementLabel"
|
||||
"text": "Tab icon placement"
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabIconPlacementNodeLabel"
|
||||
"text": "(top/bottom/leading/trailing)"
|
||||
"enabled": false
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "iconTopTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "iconBottomTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "iconLeadingTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "iconTrailingTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabAreaAlignmentLabel"
|
||||
"text": "Tab area alignment"
|
||||
"font": &SwingDerivedFont6 new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 6"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabAreaAlignmentNoteLabel"
|
||||
"text": "(leading/center/trailing/fill)"
|
||||
"enabled": false
|
||||
"font": &SwingDerivedFont7 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 7"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "alignLeadingTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 8"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "alignCenterTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 9"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "alignTrailingTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 10"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "alignFillTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 11"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0,growy"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[grow,fill]"
|
||||
"$rowConstraints": "[]0[][][][]para[][][]para[]0[]"
|
||||
} ) {
|
||||
name: "panel3"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabWidthModeLabel"
|
||||
"text": "Tab width mode"
|
||||
"font": #SwingDerivedFont6
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabWidthModeNoteLabel"
|
||||
"text": "(preferred/equal/compact)"
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false )
|
||||
"enabled": false
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "widthPreferredTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "widthEqualTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "widthCompactTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "minMaxTabWidthLabel"
|
||||
"text": "Minimum/maximum tab width"
|
||||
"font": new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false )
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "minimumTabWidthTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 6"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "maximumTabWidthTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 7"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabAlignmentLabel"
|
||||
"text": "Tab title alignment"
|
||||
"font": #SwingDerivedFont6
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 8"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$columnConstraints": "[grow,fill]para[fill]"
|
||||
"$rowConstraints": "[][][][]"
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
} ) {
|
||||
name: "panel5"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabAlignmentNoteLabel"
|
||||
"text": "(leading/center/trailing)"
|
||||
"enabled": false
|
||||
"font": #SwingDerivedFont7
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabAlignmentNoteLabel2"
|
||||
"text": "(trailing)"
|
||||
"enabled": false
|
||||
"font": #SwingDerivedFont7
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0,alignx right,growx 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabAlignLeadingTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabAlignVerticalTabbedPane"
|
||||
"tabPlacement": 2
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1 1 3,growy"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabAlignCenterTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||
name: "tabAlignTrailingTabbedPane"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 9"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSeparator" ) {
|
||||
name: "separator2"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1 3 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[][fill]para[fill][fill]para"
|
||||
"$rowConstraints": "[][center]"
|
||||
} ) {
|
||||
name: "panel4"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": true
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "scrollButtonsPolicyLabel"
|
||||
"text": "Scroll buttons policy:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "scrollButtonsPolicyToolBar"
|
||||
"floatable": false
|
||||
"border": #EmptyBorder0
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollAsNeededSingleButton"
|
||||
"text": "asNeededSingle"
|
||||
"font": #SwingDerivedFont2
|
||||
"selected": true
|
||||
"$buttonGroup": new FormReference( "scrollButtonsPolicyButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollAsNeededButton"
|
||||
"text": "asNeeded"
|
||||
"font": #SwingDerivedFont2
|
||||
"$buttonGroup": new FormReference( "scrollButtonsPolicyButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollNeverButton"
|
||||
"text": "never"
|
||||
"font": #SwingDerivedFont2
|
||||
"$buttonGroup": new FormReference( "scrollButtonsPolicyButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "scrollButtonsPlacementLabel"
|
||||
"text": "Scroll buttons placement:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "scrollButtonsPlacementToolBar"
|
||||
"floatable": false
|
||||
"border": #EmptyBorder0
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollBothButton"
|
||||
"text": "both"
|
||||
"font": #SwingDerivedFont2
|
||||
"selected": true
|
||||
"$buttonGroup": new FormReference( "scrollButtonsPlacementButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPlacementChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "scrollTrailingButton"
|
||||
"text": "trailing"
|
||||
"font": #SwingDerivedFont2
|
||||
"$buttonGroup": new FormReference( "scrollButtonsPlacementButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPlacementChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tabsPopupPolicyLabel"
|
||||
"text": "Tabs popup policy:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "tabsPopupPolicyToolBar"
|
||||
"floatable": false
|
||||
"border": #EmptyBorder0
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "popupAsNeededButton"
|
||||
"text": "asNeeded"
|
||||
"font": #SwingDerivedFont2
|
||||
"selected": true
|
||||
"$buttonGroup": new FormReference( "tabsPopupPolicyButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsPopupPolicyChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JToggleButton" ) {
|
||||
name: "popupNeverButton"
|
||||
"text": "never"
|
||||
"font": #SwingDerivedFont2
|
||||
"$buttonGroup": new FormReference( "tabsPopupPolicyButtonGroup" )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsPopupPolicyChanged", false ) )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showTabSeparatorsCheckBox"
|
||||
"text": "Show tab separators"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabSeparatorsChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 1 2 1"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2 3 1"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 700, 515 )
|
||||
"size": new java.awt.Dimension( 1075, 895 )
|
||||
} )
|
||||
add( new FormNonVisual( "javax.swing.ButtonGroup" ) {
|
||||
name: "tabPlacementButtonGroup"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 5, 915 )
|
||||
} )
|
||||
add( new FormNonVisual( "javax.swing.ButtonGroup" ) {
|
||||
name: "closableTabsButtonGroup"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 5, 970 )
|
||||
} )
|
||||
add( new FormNonVisual( "javax.swing.ButtonGroup" ) {
|
||||
name: "tabLayoutButtonGroup"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 5, 1020 )
|
||||
} )
|
||||
add( new FormNonVisual( "javax.swing.ButtonGroup" ) {
|
||||
name: "tabsPopupPolicyButtonGroup"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 200, 915 )
|
||||
} )
|
||||
add( new FormNonVisual( "javax.swing.ButtonGroup" ) {
|
||||
name: "scrollButtonsPolicyButtonGroup"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 200, 965 )
|
||||
} )
|
||||
add( new FormNonVisual( "javax.swing.ButtonGroup" ) {
|
||||
name: "scrollButtonsPlacementButtonGroup"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 200, 1020 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,10 @@ public class IJThemesClassGenerator
|
||||
if( nameSep >= 0 )
|
||||
name = name.substring( nameSep + 1 ).trim();
|
||||
|
||||
String themeName = name;
|
||||
if( "material-theme-ui-lite".equals( resourcePath ) )
|
||||
themeName += " (Material)";
|
||||
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for( String n : name.split( " " ) ) {
|
||||
if( n.length() == 0 || n.equals( "-" ) )
|
||||
@@ -87,7 +91,8 @@ public class IJThemesClassGenerator
|
||||
String classBody = CLASS_HEADER + CLASS_TEMPLATE
|
||||
.replace( "${subPackage}", subPackage )
|
||||
.replace( "${themeClass}", themeClass )
|
||||
.replace( "${themeFile}", themeFile );
|
||||
.replace( "${themeFile}", themeFile )
|
||||
.replace( "${themeName}", themeName );
|
||||
|
||||
File toDir = new File( toPath );
|
||||
if( resourcePath != null )
|
||||
@@ -101,10 +106,10 @@ public class IJThemesClassGenerator
|
||||
allInfos.append( THEME_TEMPLATE
|
||||
.replace( "${subPackage}", subPackage )
|
||||
.replace( "${themeClass}", themeClass )
|
||||
.replace( "${themeName}", name ) );
|
||||
.replace( "${themeName}", themeName ) );
|
||||
|
||||
markdownTable.append( String.format( "[%s](%s) | `com.formdev.flatlaf.intellijthemes%s.%s`\n",
|
||||
name, ti.sourceCodeUrl, subPackage, themeClass ) );
|
||||
themeName, ti.sourceCodeUrl, subPackage, themeClass ) );
|
||||
}
|
||||
|
||||
private static void writeFile( Path out, String content ) {
|
||||
@@ -132,6 +137,11 @@ public class IJThemesClassGenerator
|
||||
" * See the License for the specific language governing permissions and\n" +
|
||||
" * limitations under the License.\n" +
|
||||
" */\n" +
|
||||
"\n" +
|
||||
"//\n" +
|
||||
"// DO NOT MODIFY\n" +
|
||||
"// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator\n" +
|
||||
"//\n" +
|
||||
"\n";
|
||||
|
||||
private static final String CLASS_TEMPLATE =
|
||||
@@ -156,6 +166,11 @@ public class IJThemesClassGenerator
|
||||
" public ${themeClass}() {\n" +
|
||||
" super( Utils.loadTheme( \"${themeFile}\" ) );\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" @Override\n" +
|
||||
" public String getName() {\n" +
|
||||
" return \"${themeName}\";\n" +
|
||||
" }\n" +
|
||||
"}\n";
|
||||
|
||||
private static final String ALL_THEMES_TEMPLATE =
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 0C8.02219 0 6.08879 0.58649 4.4443 1.6853C2.79981 2.78412 1.51809 4.3459 0.761209 6.17317C0.00433284 8.00043 -0.193701 10.0111 0.192152 11.9509C0.578004 13.8907 1.53041 15.6725 2.92894 17.0711C4.32746 18.4696 6.10929 19.422 8.0491 19.8079C9.98891 20.1937 11.9996 19.9957 13.8268 19.2388C15.6541 18.4819 17.2159 17.2002 18.3147 15.5557C19.4135 13.9112 20 11.9778 20 10C20 7.34784 18.9464 4.8043 17.0711 2.92893C15.1957 1.05357 12.6522 0 10 0ZM10 18.2C8.3782 18.2 6.79281 17.7191 5.44433 16.8181C4.09585 15.917 3.04483 14.6364 2.42419 13.138C1.80355 11.6397 1.64117 9.9909 1.95757 8.40026C2.27396 6.80961 3.05494 5.34852 4.20173 4.20172C5.34852 3.05493 6.80962 2.27396 8.40026 1.95756C9.99091 1.64116 11.6397 1.80355 13.138 2.42419C14.6364 3.04483 15.917 4.09584 16.8181 5.44432C17.7191 6.79281 18.2 8.37819 18.2 10C18.1974 12.174 17.3326 14.2581 15.7954 15.7954C14.2581 17.3326 12.174 18.1974 10 18.2ZM10.9 9.43L14.46 11.09L13.7 12.72L9.10001 10.57V4H10.9V9.43Z" fill="#9AA7B0" fill-opacity="0.8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#389FD6" fill-rule="evenodd" d="M14.0431479,8.44999981 L14.3048222,13.4430431 L12.574725,11.885269 C11.4741571,13.1817306 9.83248424,14.0044386 7.99865879,14.0044386 C5.03921121,14.0044386 2.58020312,11.8617896 2.08827651,9.04314243 L3.94798986,9.10858763 C4.43427312,10.8903005 6.0642585,12.2000519 8.00015362,12.2000519 C9.30169687,12.2000519 10.4649641,11.6080237 11.2353504,10.6785714 L9.05000019,8.71167959 L14.0431479,8.44999981 Z M7.99865879,2.00443857 C10.9184669,2.00443857 13.3511517,4.09007371 13.888219,6.85284133 L12.0226275,6.7880427 C11.5024638,5.05933714 9.89836709,3.8000774 8.00015362,3.8000774 C6.69883692,3.8000774 5.53574811,4.39189956 4.76535914,5.32107268 L6.95482203,7.29304326 L1.96167436,7.55472304 L1.70000005,2.56167973 L3.42768119,4.11762166 C4.52821742,2.82461451 6.1676575,2.00443857 7.99865879,2.00443857 Z" transform="rotate(3 8.002 8.004)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 981 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<polygon fill="#59A869" points="13.789 2.09 15.535 3.837 6.292 13.08 1.95 8.738 3.698 6.99 6.293 9.585"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 199 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="#389FD6" fill-rule="evenodd" transform="translate(1)">
|
||||
<path d="M10.9000003,4.89999992 L14.0999999,4.89999992 L9.9000001,9.09999973 L5.70000029,4.89999992 L8.90000027,4.89999992 L8.90000027,0.899999917 L10.9000003,0.899999917 L10.9000003,4.89999992 Z" transform="rotate(90 9.9 5)"/>
|
||||
<path d="M5.0999999,10.9000001 L8.29999971,10.9000001 L4.0999999,15.0999999 L-0.0999999046,10.9000001 L3.0999999,10.9000001 L3.0999999,6.9000001 L5.0999999,6.9000001 L5.0999999,10.9000001 Z" transform="matrix(0 1 1 0 -6.9 6.9)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 630 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<polygon fill="#F4AF3D" fill-rule="evenodd" points="7.998 11.522 3.673 14.311 4.989 9.336 1 6.084 6.138 5.798 7.998 1 9.858 5.798 14.996 6.084 11.007 9.336 12.323 14.311"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 266 B |
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<rect width="12" height="2" x="2" y="3" fill="#6E6E6E"/>
|
||||
<rect width="12" height="2" x="2" y="7" fill="#6E6E6E"/>
|
||||
<rect width="12" height="2" x="2" y="11" fill="#6E6E6E"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 320 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#9AA7B0" fill-opacity=".8" d="M1,1 L15,1 L15,14 L1,14 L1,1 Z M2,4 L2,13 L14,13 L14,4 L2,4 Z"/>
|
||||
<rect width="10" height="7" x="3" y="5" fill="#40B6E0" fill-opacity=".6"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 326 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#7F8B91" fill-opacity=".9" fill-rule="evenodd" d="M11.038136,9.94904865 L13.9980971,12.9090097 L12.9374369,13.9696699 L9.98176525,11.0139983 C9.14925083,11.6334368 8.11743313,12 7,12 C4.23857625,12 2,9.76142375 2,7 C2,4.23857625 4.23857625,2 7,2 C9.76142375,2 12,4.23857625 12,7 C12,8.1028408 11.642948,9.12228765 11.038136,9.94904865 Z M7,11 C9.209139,11 11,9.209139 11,7 C11,4.790861 9.209139,3 7,3 C4.790861,3 3,4.790861 3,7 C3,9.209139 4.790861,11 7,11 Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 567 B |
@@ -49,7 +49,7 @@ Tools
|
||||
|
||||
A simple UI inspector that shows information about UI component at mouse
|
||||
location in a tooltip, which may be useful while developing an application.
|
||||
Should be not installed in released applications.
|
||||
Should not be installed in released applications.
|
||||
|
||||
Once installed with following code (e.g. in method `main`), it can be activated
|
||||
for the active window with the given keystroke:
|
||||
|
||||
@@ -73,10 +73,10 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* <p>
|
||||
* When the UI inspector is active some additional keys are available:
|
||||
* <ul>
|
||||
* <li>press <kbd>Esc</kbd> key to disable UI inspector</li>
|
||||
* <li>press <kbd>Ctrl</kbd> key to increase inspection level, which shows
|
||||
* <li>press {@code Esc} key to disable UI inspector</li>
|
||||
* <li>press {@code Ctrl} key to increase inspection level, which shows
|
||||
* information about parent of UI component at mouse location</li>
|
||||
* <li>press <kbd>Shift</kbd> key to decrease inspection level</li>
|
||||
* <li>press {@code Shift} key to decrease inspection level</li>
|
||||
* </ul>
|
||||
*
|
||||
* @author Karl Tauber
|
||||
@@ -106,6 +106,8 @@ public class FlatInspector
|
||||
/**
|
||||
* Installs a key listener into the application that allows enabling and disabling
|
||||
* the UI inspector with the given keystroke (e.g. "ctrl shift alt X").
|
||||
*
|
||||
* @param activationKeys a keystroke (e.g. "ctrl shift alt X")
|
||||
*/
|
||||
public static void install( String activationKeys ) {
|
||||
KeyStroke keyStroke = KeyStroke.getKeyStroke( activationKeys );
|
||||
@@ -216,6 +218,9 @@ public class FlatInspector
|
||||
|
||||
this.enabled = enabled;
|
||||
|
||||
// make sure that glass pane is not opaque, which is not the case in WebLaF
|
||||
((JComponent)rootPane.getGlassPane()).setOpaque( false );
|
||||
|
||||
rootPane.getGlassPane().setVisible( enabled );
|
||||
|
||||
Toolkit toolkit = Toolkit.getDefaultToolkit();
|
||||
|
||||
@@ -18,50 +18,203 @@ package com.formdev.flatlaf.extras;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.Paint;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.RGBImageFilter;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.UIManager;
|
||||
import com.formdev.flatlaf.FlatIconColors;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.FlatLaf.DisabledIconProvider;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
import com.formdev.flatlaf.util.Graphics2DProxy;
|
||||
import com.formdev.flatlaf.util.GrayFilter;
|
||||
import com.formdev.flatlaf.util.MultiResolutionImageSupport;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
import com.kitfox.svg.SVGDiagram;
|
||||
import com.kitfox.svg.SVGException;
|
||||
import com.kitfox.svg.SVGUniverse;
|
||||
|
||||
/**
|
||||
* An icon that loads and paints SVG.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class FlatSVGIcon
|
||||
implements Icon
|
||||
extends ImageIcon
|
||||
implements DisabledIconProvider
|
||||
{
|
||||
// use own SVG universe so that it can not be cleared from anywhere
|
||||
private static final SVGUniverse svgUniverse = new SVGUniverse();
|
||||
|
||||
private final String name;
|
||||
private final int width;
|
||||
private final int height;
|
||||
private final float scale;
|
||||
private final boolean disabled;
|
||||
private final ClassLoader classLoader;
|
||||
|
||||
private SVGDiagram diagram;
|
||||
private boolean dark;
|
||||
|
||||
/**
|
||||
* Creates an SVG icon from the given resource name.
|
||||
* <p>
|
||||
* The SVG attributes {@code width} and {@code height} (or {@code viewBox})
|
||||
* in the tag {@code <svg>} are used as icon size.
|
||||
*
|
||||
* @param name the name of the SVG resource (a '/'-separated path)
|
||||
* @see ClassLoader#getResource(String)
|
||||
*/
|
||||
public FlatSVGIcon( String name ) {
|
||||
this( name, null );
|
||||
this( name, -1, -1, 1, false, null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an SVG icon from the given resource name.
|
||||
* The SVG file is loaded from the given class loader.
|
||||
* <p>
|
||||
* The SVG attributes {@code width} and {@code height} (or {@code viewBox})
|
||||
* in the tag {@code <svg>} are used as icon size.
|
||||
*
|
||||
* @param name the name of the SVG resource (a '/'-separated path)
|
||||
* @param classLoader the class loader used to load the SVG resource
|
||||
* @see ClassLoader#getResource(String)
|
||||
*/
|
||||
public FlatSVGIcon( String name, ClassLoader classLoader ) {
|
||||
this( name, -1, -1, 1, false, classLoader );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an SVG icon from the given resource name with the given width and height.
|
||||
* <p>
|
||||
* The icon is scaled if the given size is different to the size specified in the SVG file.
|
||||
*
|
||||
* @param name the name of the SVG resource (a '/'-separated path)
|
||||
* @param width the width of the icon
|
||||
* @param height the height of the icon
|
||||
* @see ClassLoader#getResource(String)
|
||||
*/
|
||||
public FlatSVGIcon( String name, int width, int height ) {
|
||||
this( name, width, height, 1, false, null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an SVG icon from the given resource name with the given width and height.
|
||||
* The SVG file is loaded from the given class loader.
|
||||
* <p>
|
||||
* The icon is scaled if the given size is different to the size specified in the SVG file.
|
||||
*
|
||||
* @param name the name of the SVG resource (a '/'-separated path)
|
||||
* @param width the width of the icon
|
||||
* @param height the height of the icon
|
||||
* @param classLoader the class loader used to load the SVG resource
|
||||
* @see ClassLoader#getResource(String)
|
||||
*/
|
||||
public FlatSVGIcon( String name, int width, int height, ClassLoader classLoader ) {
|
||||
this( name, width, height, 1, false, classLoader );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an SVG icon from the given resource name that is scaled by the given amount.
|
||||
* <p>
|
||||
* The SVG attributes {@code width} and {@code height} (or {@code viewBox})
|
||||
* in the tag {@code <svg>} are used as base icon size, which is multiplied
|
||||
* by the given scale factor.
|
||||
*
|
||||
* @param name the name of the SVG resource (a '/'-separated path)
|
||||
* @param scale the amount by which the icon size is scaled
|
||||
* @see ClassLoader#getResource(String)
|
||||
*/
|
||||
public FlatSVGIcon( String name, float scale ) {
|
||||
this( name, -1, -1, scale, false, null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an SVG icon from the given resource name that is scaled by the given amount.
|
||||
* The SVG file is loaded from the given class loader.
|
||||
* <p>
|
||||
* The SVG attributes {@code width} and {@code height} (or {@code viewBox})
|
||||
* in the tag {@code <svg>} are used as base icon size, which is multiplied
|
||||
* by the given scale factor.
|
||||
*
|
||||
* @param name the name of the SVG resource (a '/'-separated path)
|
||||
* @param scale the amount by which the icon size is scaled
|
||||
* @param classLoader the class loader used to load the SVG resource
|
||||
* @see ClassLoader#getResource(String)
|
||||
*/
|
||||
public FlatSVGIcon( String name, float scale, ClassLoader classLoader ) {
|
||||
this( name, -1, -1, scale, false, classLoader );
|
||||
}
|
||||
|
||||
private FlatSVGIcon( String name, int width, int height, float scale, boolean disabled, ClassLoader classLoader ) {
|
||||
this.name = name;
|
||||
this.classLoader = classLoader;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.scale = scale;
|
||||
this.disabled = disabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new icon with given width and height, which is derived from this icon.
|
||||
*
|
||||
* @param width the width of the new icon
|
||||
* @param height the height of the new icon
|
||||
* @return a new icon
|
||||
*/
|
||||
public FlatSVGIcon derive( int width, int height ) {
|
||||
if( width == this.width && height == this.height )
|
||||
return this;
|
||||
|
||||
FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, false, classLoader );
|
||||
icon.diagram = diagram;
|
||||
icon.dark = dark;
|
||||
return icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new icon with given scaling, which is derived from this icon.
|
||||
*
|
||||
* @param scale the amount by which the icon size is scaled
|
||||
* @return a new icon
|
||||
*/
|
||||
public FlatSVGIcon derive( float scale ) {
|
||||
if( scale == this.scale )
|
||||
return this;
|
||||
|
||||
FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, false, classLoader );
|
||||
icon.diagram = diagram;
|
||||
icon.dark = dark;
|
||||
return icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new icon with disabled appearance, which is derived from this icon.
|
||||
*
|
||||
* @return a new icon
|
||||
*/
|
||||
@Override
|
||||
public Icon getDisabledIcon() {
|
||||
if( disabled )
|
||||
return this;
|
||||
|
||||
FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, true, classLoader );
|
||||
icon.diagram = diagram;
|
||||
icon.dark = dark;
|
||||
return icon;
|
||||
}
|
||||
|
||||
private void update() {
|
||||
@@ -91,34 +244,59 @@ public class FlatSVGIcon
|
||||
return cl.getResource( name );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the SVG file was found.
|
||||
*
|
||||
* @return whether the SVG file was found
|
||||
*/
|
||||
public boolean hasFound() {
|
||||
update();
|
||||
return diagram != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the scaled width of the icon.
|
||||
*/
|
||||
@Override
|
||||
public int getIconWidth() {
|
||||
if( width > 0 )
|
||||
return scaleSize( width );
|
||||
|
||||
update();
|
||||
return (int) UIScale.scale( (diagram != null) ? diagram.getWidth() : 16 );
|
||||
return scaleSize( (diagram != null) ? Math.round( diagram.getWidth() ) : 16 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the scaled height of the icon.
|
||||
*/
|
||||
@Override
|
||||
public int getIconHeight() {
|
||||
if( height > 0 )
|
||||
return scaleSize( height );
|
||||
|
||||
update();
|
||||
return (int) UIScale.scale( (diagram != null) ? diagram.getHeight() : 16 );
|
||||
return scaleSize( (diagram != null) ? Math.round( diagram.getHeight() ) : 16 );
|
||||
}
|
||||
|
||||
private int scaleSize( int size ) {
|
||||
int scaledSize = UIScale.scale( size );
|
||||
if( scale != 1 )
|
||||
scaledSize = Math.round( scaledSize * scale );
|
||||
return scaledSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintIcon( Component c, Graphics g, int x, int y ) {
|
||||
update();
|
||||
|
||||
// check whether icon is outside of clipping area
|
||||
Rectangle clipBounds = g.getClipBounds();
|
||||
if( clipBounds != null && !clipBounds.intersects( new Rectangle( x, y, getIconWidth(), getIconHeight() ) ) )
|
||||
return;
|
||||
|
||||
// get gray filter
|
||||
RGBImageFilter grayFilter = null;
|
||||
if( c != null && !c.isEnabled() ) {
|
||||
if( disabled ) {
|
||||
Object grayFilterObj = UIManager.get( "Component.grayFilter" );
|
||||
grayFilter = (grayFilterObj instanceof RGBImageFilter)
|
||||
? (RGBImageFilter) grayFilterObj
|
||||
@@ -147,6 +325,14 @@ public class FlatSVGIcon
|
||||
g.clipRect( 0, 0, getIconWidth(), getIconHeight() );
|
||||
|
||||
UIScale.scaleGraphics( g );
|
||||
if( width > 0 || height > 0 ) {
|
||||
double sx = (width > 0) ? width / diagram.getWidth() : 1;
|
||||
double sy = (height > 0) ? height / diagram.getHeight() : 1;
|
||||
if( sx != 1 || sy != 1 )
|
||||
g.scale( sx, sy );
|
||||
}
|
||||
if( scale != 1 )
|
||||
g.scale( scale, scale );
|
||||
|
||||
diagram.setIgnoringClipHeuristic( true );
|
||||
|
||||
@@ -162,6 +348,39 @@ public class FlatSVGIcon
|
||||
g.fillRect( x, y, getIconWidth(), getIconHeight() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Image getImage() {
|
||||
update();
|
||||
|
||||
// base size
|
||||
int iconWidth = getIconWidth();
|
||||
int iconHeight = getIconHeight();
|
||||
|
||||
Dimension[] dimensions = new Dimension[] {
|
||||
new Dimension( iconWidth, iconHeight ),
|
||||
new Dimension( iconWidth * 2, iconHeight * 2 ),
|
||||
};
|
||||
|
||||
Function<Dimension, Image> producer = size -> {
|
||||
BufferedImage image = new BufferedImage( size.width, size.height, BufferedImage.TYPE_INT_ARGB );
|
||||
Graphics2D g = image.createGraphics();
|
||||
try {
|
||||
// scale from base size to passed size
|
||||
double sx = (size.width > 0) ? (float) size.width / iconWidth : 1;
|
||||
double sy = (size.height > 0) ? (float) size.height / iconHeight : 1;
|
||||
if( sx != 1 || sy != 1 )
|
||||
g.scale( sx, sy );
|
||||
|
||||
paintIcon( null, g, 0, 0 );
|
||||
} finally {
|
||||
g.dispose();
|
||||
}
|
||||
return image;
|
||||
};
|
||||
|
||||
return MultiResolutionImageSupport.create( 0, dimensions, producer );
|
||||
}
|
||||
|
||||
private static Boolean darkLaf;
|
||||
|
||||
private static boolean isDarkLaf() {
|
||||
|
||||
@@ -76,6 +76,8 @@ public class FlatUIDefaultsInspector
|
||||
/**
|
||||
* Installs a key listener into the application that allows enabling and disabling
|
||||
* the UI inspector with the given keystroke (e.g. "ctrl shift alt Y").
|
||||
*
|
||||
* @param activationKeys a keystroke (e.g. "ctrl shift alt Y")
|
||||
*/
|
||||
public static void install( String activationKeys ) {
|
||||
KeyStroke keyStroke = KeyStroke.getKeyStroke( activationKeys );
|
||||
|
||||
@@ -30,46 +30,84 @@ import com.kitfox.svg.SVGDiagram;
|
||||
import com.kitfox.svg.SVGException;
|
||||
|
||||
/**
|
||||
* Utility methods for SVG.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class SVGUtils
|
||||
{
|
||||
/**
|
||||
* Creates from the given SVG a list of icon images with different sizes that
|
||||
* can be used for windows headers. The SVG should have a size of 16 x 16.
|
||||
* can be used for windows headers. The SVG should have a size of 16x16,
|
||||
* otherwise it is scaled.
|
||||
*
|
||||
* @param svgName the name of the SVG resource (a '/'-separated path)
|
||||
* @return list of icon images with different sizes (16x16, 24x24, 32x32, 48x48 and 64x64)
|
||||
* @throws RuntimeException if failed to load or render SVG file
|
||||
* @see JWindow#setIconImages(List)
|
||||
*/
|
||||
public static List<Image> createWindowIconImages( String svgName ) {
|
||||
SVGDiagram diagram = loadSVG( svgName );
|
||||
|
||||
return Arrays.asList(
|
||||
svg2image( svgName, 1f ), // 16 x 16
|
||||
svg2image( svgName, 1.5f ), // 24 x 24
|
||||
svg2image( svgName, 2f ), // 32 x 32
|
||||
svg2image( svgName, 3f ), // 48 x 48
|
||||
svg2image( svgName, 4f ) // 64 x 64
|
||||
svg2image( diagram, 16, 16 ),
|
||||
svg2image( diagram, 24, 24 ),
|
||||
svg2image( diagram, 32, 32 ),
|
||||
svg2image( diagram, 48, 48 ),
|
||||
svg2image( diagram, 64, 64 )
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a buffered image and renders the given SVG into it.
|
||||
*
|
||||
* @param svgName the name of the SVG resource (a '/'-separated path)
|
||||
* @param width the width of the image
|
||||
* @param height the height of the image
|
||||
* @return the image
|
||||
* @throws RuntimeException if failed to load or render SVG file
|
||||
*/
|
||||
public static BufferedImage svg2image( String svgName, int width, int height ) {
|
||||
return svg2image( loadSVG( svgName ), width, height );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a buffered image and renders the given SVG into it.
|
||||
*
|
||||
* @param svgName the name of the SVG resource (a '/'-separated path)
|
||||
* @param scaleFactor the amount by which the SVG size is scaled
|
||||
* @return the image
|
||||
* @throws RuntimeException if failed to load or render SVG file
|
||||
*/
|
||||
public static BufferedImage svg2image( String svgName, float scaleFactor ) {
|
||||
try {
|
||||
URL url = SVGUtils.class.getResource( svgName );
|
||||
SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram( url.toURI() );
|
||||
SVGDiagram diagram = loadSVG( svgName );
|
||||
int width = (int) (diagram.getWidth() * scaleFactor);
|
||||
int height = (int) (diagram.getHeight() * scaleFactor);
|
||||
return svg2image( diagram, width, height );
|
||||
}
|
||||
|
||||
BufferedImage image = new BufferedImage(
|
||||
(int) (diagram.getWidth() * scaleFactor),
|
||||
(int) (diagram.getHeight() * scaleFactor),
|
||||
BufferedImage.TYPE_INT_ARGB );
|
||||
/**
|
||||
* Creates a buffered image and renders the given SVGDiagram into it.
|
||||
*
|
||||
* @param diagram the SVG diagram
|
||||
* @param width the width of the image
|
||||
* @param height the height of the image
|
||||
* @return the image
|
||||
* @throws RuntimeException if failed to render SVG file
|
||||
*/
|
||||
public static BufferedImage svg2image( SVGDiagram diagram, int width, int height ) {
|
||||
try {
|
||||
BufferedImage image = new BufferedImage( width, height, BufferedImage.TYPE_INT_ARGB );
|
||||
|
||||
Graphics2D g = image.createGraphics();
|
||||
try {
|
||||
g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
|
||||
g.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR );
|
||||
|
||||
if( scaleFactor != 1f )
|
||||
g.scale( scaleFactor, scaleFactor );
|
||||
double sx = width / diagram.getWidth();
|
||||
double sy = height / diagram.getHeight();
|
||||
if( sx != 1 || sy != 1 )
|
||||
g.scale( sx, sy );
|
||||
|
||||
diagram.setIgnoringClipHeuristic( true );
|
||||
|
||||
@@ -79,7 +117,23 @@ public class SVGUtils
|
||||
}
|
||||
return image;
|
||||
|
||||
} catch( URISyntaxException | SVGException ex ) {
|
||||
} catch( SVGException ex ) {
|
||||
throw new RuntimeException( ex );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a SVG file.
|
||||
*
|
||||
* @param svgName the name of the SVG resource (a '/'-separated path)
|
||||
* @return the SVG diagram
|
||||
* @throws RuntimeException if failed to load SVG file
|
||||
*/
|
||||
private static SVGDiagram loadSVG( String svgName ) {
|
||||
try {
|
||||
URL url = SVGUtils.class.getResource( svgName );
|
||||
return SVGCache.getSVGUniverse().getDiagram( url.toURI() );
|
||||
} catch( URISyntaxException ex ) {
|
||||
throw new RuntimeException( ex );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,6 +95,19 @@ public class TriStateCheckBox
|
||||
repaint();
|
||||
}
|
||||
|
||||
public Boolean getValue() {
|
||||
switch( state ) {
|
||||
default:
|
||||
case INDETERMINATE: return null;
|
||||
case SELECTED: return true;
|
||||
case UNSELECTED: return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void setValue( Boolean value ) {
|
||||
setState( value == null ? State.INDETERMINATE : (value ? State.SELECTED : State.UNSELECTED) );
|
||||
}
|
||||
|
||||
public boolean isThirdStateEnabled() {
|
||||
return thirdStateEnabled;
|
||||
}
|
||||
|
||||
@@ -80,33 +80,33 @@ Material Theme UI Lite:
|
||||
|
||||
Name | Class
|
||||
-----|------
|
||||
[Arc Dark](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkIJTheme`
|
||||
[Arc Dark Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkContrastIJTheme`
|
||||
[Atom One Dark](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkIJTheme`
|
||||
[Atom One Dark Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkContrastIJTheme`
|
||||
[Atom One Light](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightIJTheme`
|
||||
[Atom One Light Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightContrastIJTheme`
|
||||
[Dracula](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaIJTheme`
|
||||
[Dracula Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaContrastIJTheme`
|
||||
[GitHub](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubIJTheme`
|
||||
[GitHub Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubContrastIJTheme`
|
||||
[Light Owl](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlIJTheme`
|
||||
[Light Owl Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlContrastIJTheme`
|
||||
[Material Darker](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerIJTheme`
|
||||
[Material Darker Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerContrastIJTheme`
|
||||
[Material Deep Ocean](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanIJTheme`
|
||||
[Material Deep Ocean Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanContrastIJTheme`
|
||||
[Material Lighter](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterIJTheme`
|
||||
[Material Lighter Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterContrastIJTheme`
|
||||
[Material Oceanic](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicIJTheme`
|
||||
[Material Oceanic Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicContrastIJTheme`
|
||||
[Material Palenight](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightIJTheme`
|
||||
[Material Palenight Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightContrastIJTheme`
|
||||
[Monokai Pro](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProIJTheme`
|
||||
[Monokai Pro Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProContrastIJTheme`
|
||||
[Night Owl](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlIJTheme`
|
||||
[Night Owl Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlContrastIJTheme`
|
||||
[Solarized Dark](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkIJTheme`
|
||||
[Solarized Dark Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkContrastIJTheme`
|
||||
[Solarized Light](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightIJTheme`
|
||||
[Solarized Light Contrast](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightContrastIJTheme`
|
||||
[Arc Dark (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkIJTheme`
|
||||
[Arc Dark Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkContrastIJTheme`
|
||||
[Atom One Dark (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkIJTheme`
|
||||
[Atom One Dark Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkContrastIJTheme`
|
||||
[Atom One Light (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightIJTheme`
|
||||
[Atom One Light Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightContrastIJTheme`
|
||||
[Dracula (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaIJTheme`
|
||||
[Dracula Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaContrastIJTheme`
|
||||
[GitHub (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubIJTheme`
|
||||
[GitHub Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubContrastIJTheme`
|
||||
[Light Owl (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlIJTheme`
|
||||
[Light Owl Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlContrastIJTheme`
|
||||
[Material Darker (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerIJTheme`
|
||||
[Material Darker Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerContrastIJTheme`
|
||||
[Material Deep Ocean (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanIJTheme`
|
||||
[Material Deep Ocean Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanContrastIJTheme`
|
||||
[Material Lighter (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterIJTheme`
|
||||
[Material Lighter Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterContrastIJTheme`
|
||||
[Material Oceanic (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicIJTheme`
|
||||
[Material Oceanic Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicContrastIJTheme`
|
||||
[Material Palenight (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightIJTheme`
|
||||
[Material Palenight Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightContrastIJTheme`
|
||||
[Monokai Pro (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProIJTheme`
|
||||
[Monokai Pro Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProContrastIJTheme`
|
||||
[Night Owl (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlIJTheme`
|
||||
[Night Owl Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlContrastIJTheme`
|
||||
[Solarized Dark (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkIJTheme`
|
||||
[Solarized Dark Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkContrastIJTheme`
|
||||
[Solarized Light (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightIJTheme`
|
||||
[Solarized Light Contrast (Material)](https://github.com/mallowigi/material-theme-ui-lite) | `com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightContrastIJTheme`
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import javax.swing.UIManager.LookAndFeelInfo;
|
||||
@@ -52,35 +57,35 @@ public class FlatAllIJThemes
|
||||
new LookAndFeelInfo( "Solarized Light", "com.formdev.flatlaf.intellijthemes.FlatSolarizedLightIJTheme" ),
|
||||
new LookAndFeelInfo( "Spacegray", "com.formdev.flatlaf.intellijthemes.FlatSpacegrayIJTheme" ),
|
||||
new LookAndFeelInfo( "Vuesion", "com.formdev.flatlaf.intellijthemes.FlatVuesionIJTheme" ),
|
||||
new LookAndFeelInfo( "Arc Dark", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkIJTheme" ),
|
||||
new LookAndFeelInfo( "Arc Dark Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Dark", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Dark Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Light", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Light Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Dracula", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaIJTheme" ),
|
||||
new LookAndFeelInfo( "Dracula Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "GitHub", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubIJTheme" ),
|
||||
new LookAndFeelInfo( "GitHub Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Light Owl", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlIJTheme" ),
|
||||
new LookAndFeelInfo( "Light Owl Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Darker", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Darker Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Deep Ocean", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Deep Ocean Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Lighter", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Lighter Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Oceanic", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Oceanic Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Palenight", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Palenight Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Monokai Pro", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProIJTheme" ),
|
||||
new LookAndFeelInfo( "Monokai Pro Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Night Owl", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlIJTheme" ),
|
||||
new LookAndFeelInfo( "Night Owl Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Dark", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Dark Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Light", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Light Contrast", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Arc Dark (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkIJTheme" ),
|
||||
new LookAndFeelInfo( "Arc Dark Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatArcDarkContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Dark (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Dark Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneDarkContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Light (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightIJTheme" ),
|
||||
new LookAndFeelInfo( "Atom One Light Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatAtomOneLightContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Dracula (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaIJTheme" ),
|
||||
new LookAndFeelInfo( "Dracula Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatDraculaContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "GitHub (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubIJTheme" ),
|
||||
new LookAndFeelInfo( "GitHub Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatGitHubContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Light Owl (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlIJTheme" ),
|
||||
new LookAndFeelInfo( "Light Owl Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatLightOwlContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Darker (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Darker Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDarkerContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Deep Ocean (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Deep Ocean Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialDeepOceanContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Lighter (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Lighter Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialLighterContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Oceanic (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Oceanic Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialOceanicContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Palenight (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightIJTheme" ),
|
||||
new LookAndFeelInfo( "Material Palenight Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMaterialPalenightContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Monokai Pro (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProIJTheme" ),
|
||||
new LookAndFeelInfo( "Monokai Pro Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatMonokaiProContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Night Owl (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlIJTheme" ),
|
||||
new LookAndFeelInfo( "Night Owl Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatNightOwlContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Dark (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Dark Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedDarkContrastIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Light (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightIJTheme" ),
|
||||
new LookAndFeelInfo( "Solarized Light Contrast (Material)", "com.formdev.flatlaf.intellijthemes.materialthemeuilite.FlatSolarizedLightContrastIJTheme" ),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatArcDarkIJTheme
|
||||
public FlatArcDarkIJTheme() {
|
||||
super( Utils.loadTheme( "arc_theme_dark.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Arc Dark";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatArcDarkOrangeIJTheme
|
||||
public FlatArcDarkOrangeIJTheme() {
|
||||
super( Utils.loadTheme( "arc_theme_dark_orange.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Arc Dark - Orange";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatArcIJTheme
|
||||
public FlatArcIJTheme() {
|
||||
super( Utils.loadTheme( "arc-theme.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Arc";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatArcOrangeIJTheme
|
||||
public FlatArcOrangeIJTheme() {
|
||||
super( Utils.loadTheme( "arc-theme-orange.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Arc - Orange";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatCarbonIJTheme
|
||||
public FlatCarbonIJTheme() {
|
||||
super( Utils.loadTheme( "Carbon.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Carbon";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatCobalt2IJTheme
|
||||
public FlatCobalt2IJTheme() {
|
||||
super( Utils.loadTheme( "Cobalt_2.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Cobalt 2";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatCyanLightIJTheme
|
||||
public FlatCyanLightIJTheme() {
|
||||
super( Utils.loadTheme( "Cyan.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Cyan light";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatDarkFlatIJTheme
|
||||
public FlatDarkFlatIJTheme() {
|
||||
super( Utils.loadTheme( "DarkFlatTheme.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dark Flat";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatDarkPurpleIJTheme
|
||||
public FlatDarkPurpleIJTheme() {
|
||||
super( Utils.loadTheme( "DarkPurple.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dark purple";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatDraculaIJTheme
|
||||
public FlatDraculaIJTheme() {
|
||||
super( Utils.loadTheme( "Dracula.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dracula";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGradiantoDarkFuchsiaIJTheme
|
||||
public FlatGradiantoDarkFuchsiaIJTheme() {
|
||||
super( Utils.loadTheme( "Gradianto_dark_fuchsia.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gradianto Dark Fuchsia";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGradiantoDeepOceanIJTheme
|
||||
public FlatGradiantoDeepOceanIJTheme() {
|
||||
super( Utils.loadTheme( "Gradianto_deep_ocean.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gradianto Deep Ocean";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGradiantoMidnightBlueIJTheme
|
||||
public FlatGradiantoMidnightBlueIJTheme() {
|
||||
super( Utils.loadTheme( "Gradianto_midnight_blue.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gradianto Midnight Blue";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGrayIJTheme
|
||||
public FlatGrayIJTheme() {
|
||||
super( Utils.loadTheme( "Gray.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gray";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGruvboxDarkHardIJTheme
|
||||
public FlatGruvboxDarkHardIJTheme() {
|
||||
super( Utils.loadTheme( "gruvbox_dark_hard.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gruvbox Dark Hard";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGruvboxDarkMediumIJTheme
|
||||
public FlatGruvboxDarkMediumIJTheme() {
|
||||
super( Utils.loadTheme( "gruvbox_dark_medium.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gruvbox Dark Medium";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGruvboxDarkSoftIJTheme
|
||||
public FlatGruvboxDarkSoftIJTheme() {
|
||||
super( Utils.loadTheme( "gruvbox_dark_soft.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Gruvbox Dark Soft";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatHiberbeeDarkIJTheme
|
||||
public FlatHiberbeeDarkIJTheme() {
|
||||
super( Utils.loadTheme( "HiberbeeDark.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Hiberbee Dark";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatHighContrastIJTheme
|
||||
public FlatHighContrastIJTheme() {
|
||||
super( Utils.loadTheme( "HighContrast.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "High contrast";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatLightFlatIJTheme
|
||||
public FlatLightFlatIJTheme() {
|
||||
super( Utils.loadTheme( "LightFlatTheme.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Light Flat";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatMaterialDesignDarkIJTheme
|
||||
public FlatMaterialDesignDarkIJTheme() {
|
||||
super( Utils.loadTheme( "MaterialTheme.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Material Design Dark";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatMonocaiIJTheme
|
||||
public FlatMonocaiIJTheme() {
|
||||
super( Utils.loadTheme( "Monocai.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Monocai";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatNordIJTheme
|
||||
public FlatNordIJTheme() {
|
||||
super( Utils.loadTheme( "nord.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Nord";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatOneDarkIJTheme
|
||||
public FlatOneDarkIJTheme() {
|
||||
super( Utils.loadTheme( "one_dark.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "One Dark";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatSolarizedDarkIJTheme
|
||||
public FlatSolarizedDarkIJTheme() {
|
||||
super( Utils.loadTheme( "SolarizedDark.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Solarized Dark";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatSolarizedLightIJTheme
|
||||
public FlatSolarizedLightIJTheme() {
|
||||
super( Utils.loadTheme( "SolarizedLight.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Solarized Light";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatSpacegrayIJTheme
|
||||
public FlatSpacegrayIJTheme() {
|
||||
super( Utils.loadTheme( "Spacegray.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Spacegray";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatVuesionIJTheme
|
||||
public FlatVuesionIJTheme() {
|
||||
super( Utils.loadTheme( "vuesion_theme.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Vuesion";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatArcDarkContrastIJTheme
|
||||
public FlatArcDarkContrastIJTheme() {
|
||||
super( Utils.loadTheme( "Arc Dark Contrast.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Arc Dark Contrast (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatArcDarkIJTheme
|
||||
public FlatArcDarkIJTheme() {
|
||||
super( Utils.loadTheme( "Arc Dark.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Arc Dark (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatAtomOneDarkContrastIJTheme
|
||||
public FlatAtomOneDarkContrastIJTheme() {
|
||||
super( Utils.loadTheme( "Atom One Dark Contrast.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Atom One Dark Contrast (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatAtomOneDarkIJTheme
|
||||
public FlatAtomOneDarkIJTheme() {
|
||||
super( Utils.loadTheme( "Atom One Dark.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Atom One Dark (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatAtomOneLightContrastIJTheme
|
||||
public FlatAtomOneLightContrastIJTheme() {
|
||||
super( Utils.loadTheme( "Atom One Light Contrast.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Atom One Light Contrast (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatAtomOneLightIJTheme
|
||||
public FlatAtomOneLightIJTheme() {
|
||||
super( Utils.loadTheme( "Atom One Light.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Atom One Light (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatDraculaContrastIJTheme
|
||||
public FlatDraculaContrastIJTheme() {
|
||||
super( Utils.loadTheme( "Dracula Contrast.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dracula Contrast (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatDraculaIJTheme
|
||||
public FlatDraculaIJTheme() {
|
||||
super( Utils.loadTheme( "Dracula.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dracula (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGitHubContrastIJTheme
|
||||
public FlatGitHubContrastIJTheme() {
|
||||
super( Utils.loadTheme( "GitHub Contrast.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "GitHub Contrast (Material)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
//
|
||||
// DO NOT MODIFY
|
||||
// Generated with com.formdev.flatlaf.demo.intellijthemes.IJThemesClassGenerator
|
||||
//
|
||||
|
||||
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
|
||||
|
||||
import com.formdev.flatlaf.IntelliJTheme;
|
||||
@@ -35,4 +40,9 @@ public class FlatGitHubIJTheme
|
||||
public FlatGitHubIJTheme() {
|
||||
super( Utils.loadTheme( "GitHub.theme.json" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "GitHub (Material)";
|
||||
}
|
||||
}
|
||||
|
||||