diff --git a/.classpath b/.classpath index cc3e50cf..a5d40376 100644 --- a/.classpath +++ b/.classpath @@ -6,8 +6,9 @@ - + + @@ -16,6 +17,5 @@ - diff --git a/README.html b/README.html index 901b0c81..1a037634 100644 --- a/README.html +++ b/README.html @@ -372,9 +372,9 @@ size for the JVM being used to run Pamguard i.e. how much memory it gets to use. The default max size usually being too low.

The -Djava.library.path=lib64 tells the JVM that it should -look in the folder called "lib64" for the required shared libraries -(change to lib -for the 32 bit version).

+look in the folder called "lib64" for the required shared libraries (change +to lib for the +32 bit version).

For "Mixed" and "Viewer" modes just add a "-m" or "-v" to the list of java arguments. On Windows @@ -452,7 +452,6 @@ lang=EN-US>Latest Version 2.02.05 October 2022

Changes to GUI to make dialog shorter for low DPI screens.

-

Complete rewrite of the classification system to have nested classifiers which can be enabled or disabled.

@@ -500,7 +499,7 @@ audio files.

Bug Fixes

Soundtrap DWV import. Will now generate binary -files even if DWV file doesn’t exist (which is correct behavior in quiet +files even if DWV file doesnÂ’t exist (which is correct behavior in quiet conditions when no clicks were detected).

Spectrogram. Changes to stop occasional @@ -511,6 +510,10 @@ monitors so that data fields are sized correctly.

Fixed a memory leak in ROCCA

+

Fixed issues with options in Click Detector +bearing time display which (when using planar and 3D arrays) allow you to plot +relative to the array, the vessel, or North.

+

Version 2.02.03 February 2022

@@ -531,7 +534,7 @@ running in real time. Added template names based on file names.

#13 Merging files when offline processing file folders: Had an error introduced in last release which caused it to fail to recognise gaps between files, meaning that some output data (i.e. after a gap) would have an -incorrect time stamp. This did not affect data if the ‘merge contiguous files’ +incorrect time stamp. This did not affect data if the ‘merge contiguous filesĂ‚Â’ option was not selected.

#14 Logger forms data were not plotting correctly. This was @@ -605,7 +608,7 @@ href="http://www.pamguard.org/downloads.php?cat_id=3">here.

Detection Group Localiser

-

This module has been renamed “Detection Grouper”, so as to +

This module has been renamed “Detection Grouper”, so as to avoid confusion with the Group 3D localizer. This is because the Detection Grouper is more for organizing data into groups to be localized than it is for doing localization.

@@ -709,16 +712,16 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb new CPOD features

15.        -Better interpolation of data by the Decimator when decimating/upsampling by a -non-integer amount

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Better interpolation of data by the Decimator when +decimating/upsampling by a non-integer amount

16.        Noise Level Outputs - as an aid to performance diagnosis, some detectors -(currently the GPL, Click Detector and Whistle and Moan Detector) are -outputting additional noise metrics to their binary output files. These can be -read with the PAMGuard +(currently the GPL, Click Detector and Whistle and Moan Detector) are outputting +additional noise metrics to their binary output files. These can be read with +the PAMGuard Matlab library and used to diagnose system performance in varying noise conditions. Improved displays within PAMGuard for these noise metrics will be included in a future release.

@@ -726,10 +729,10 @@ included in a future release.

17.        An implementation of the Generalized Power Law Detector, developed by Tyler -Helble ([Helble et al., ‘A generalized power-law detection algorithm for -humpback whale vocalizations’, The Journal of the Acoustical Society of -America, vol. 131, no. 4, pp. 2682–2699, 2012) is now available. For details, -see the online help

+Helble ([Helble et al., ‘A generalized power-law detection algorithm for humpback +whale vocalizations’, The Journal of the Acoustical Society of America, vol. +131, no. 4, pp. 2682–2699, 2012) is now available. For details, see the online +help

18.        @@ -816,8 +819,8 @@ Measurement module.

Upgrades

1.        -Speed up adding subdetections to superdetections.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Speed up adding subdetections to superdetections.

2.        &nb Add functionality for bluetooth headsets.

2.        -Add user-facing option to adjust the startup delay for the time-correction -(Global Time module). This provides a workaround to speed up analysis of -thousands of wav files (i.e. by setting startup delay to 0 instead of default -value of 2000 ms).

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Add user-facing option to adjust the startup delay for the +time-correction (Global Time module). This provides a workaround to speed up +analysis of thousands of wav files (i.e. by setting startup delay to 0 instead +of default value of 2000 ms).

3.        -Add support for RS Aqua time format.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Add support for RS Aqua time format.

4.        @@ -1055,9 +1058,9 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb Bug 433. Custom storage options were being lost when Pamguard restarted.

2.        -Bug 434. Pamguard Viewer mode was having problems importing settings from psfx -file.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Bug 434. Pamguard Viewer mode was having problems importing +settings from psfx file.

3.        @@ -1105,8 +1108,8 @@ files.

13.        -Bug 445. Overlay data in FX spectrogram display gets out of sync with -underlying spectrogram image.

+Bug 445. Overlay data in FX spectrogram display gets out of sync with underlying +spectrogram image.

14.        @@ -1194,10 +1197,10 @@ Detector display.

Upgrades

1.        -This version of PAMGuard has been upgraded to make it compatible with Java 12. -psfx files generated in previous beta releases should be compatible with this -version, and vice-versa.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       This version of PAMGuard has been upgraded to make it +compatible with Java 12. psfx files generated in previous beta releases should +be compatible with this version, and vice-versa.

2.        @@ -1352,8 +1355,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb lang=EN-US> Better display of microseconds in dialogs.

4.        -Added adaptive noise filter to Ishmael Detectors.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Added adaptive noise filter to Ishmael Detectors.

5.        -

Beta Version -2.00.14c October 2018

+

Beta Version 2.00.14c +October 2018

PAMGuard Version 2 contains major updates. You should read and understand the notes listed for

9.        -Bug 391. Click Detector not registering change in multi-threading -option.

+Bug 391. Click Detector not registering change in multi-threading option.

10.        @@ -1611,9 +1613,9 @@ position for hydrophone 0.

Upgrades

1.        -Better way of coupling scrollers in User Display panels - see new options in -main menu.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Better way of coupling scrollers in User Display panels - +see new options in main menu.

2.        @@ -1743,8 +1745,7 @@ will be converted.

4.        -Many updates to the Video Range module. Will currently only work with -landmarks.

+Many updates to the Video Range module. Will currently only work with landmarks.

@@ -1807,8 +1808,8 @@ Beta versions

11.        -Bug 366. Rocca manual whistle contour extraction throws error when -trying to classify a boxed whistle

+Bug 366. Rocca manual whistle contour extraction throws error when trying +to classify a boxed whistle

Upgrades

@@ -1877,8 +1878,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb

10.       -Bug 354. Whistle Classifier was crashing if user accidentally entered -invalid parameters. Have added diagnostics to prevent this.

+Bug 354. Whistle Classifier was crashing if user accidentally entered invalid +parameters. Have added diagnostics to prevent this.

Upgrades

@@ -1994,7 +1995,7 @@ file format is the addition of a Unique Data Identifier (UID) to each unit of data. This is intended to aid in offline analysis by making it easier for the user to link what they are seeing on different PAMGuard displays and also to link with any data post processed in Matlab or other custom analysis software. -UID’s are also added to PAMGuard database tables.

+UIDĂ‚Â’s are also added to PAMGuard database tables.

Converting Old Data

@@ -2002,13 +2003,13 @@ UID viewer they will automatically be converted. For safety, the original binary files will not be overwritten and the new data will be placed in a new folder on your computer with the same path as the old data, but suffixed with -‘_WithUID’, e.g. if your binary data were previously stored in the folder +‘_WithUIDĂ‚Â’, e.g. if your binary data were previously stored in the folder C:\MySurvey\binarydata the new data will be written to C:\MySurvey\binarydata_WithUID.

The additional UID column will be added to all database tables and populated with unique values. For data which are stored -in both the binary files and in database tables, the same UID’s will be used in +in both the binary files and in database tables, the same UIDĂ‚Â’s will be used in both data stores.

New Displays

@@ -2023,11 +2024,11 @@ Note that this display is only available if you are running Java 8 or later. Event Marking and the Detection Group Localiser -

A new system of event marking which can be -used both online and offline has been added to PAMGuard. Details are in the -PAMGuard help file (Displays/Display Marking). Data can be selected on the Map, -the Spectrogram Display and the new Time Display FX in a similar way and sent -to other PAMGuard modules. The new marking and data selection system works with +

A new system of event marking which can be used +both online and offline has been added to PAMGuard. Details are in the PAMGuard +help file (Displays/Display Marking). Data can be selected on the Map, the +Spectrogram Display and the new Time Display FX in a similar way and sent to +other PAMGuard modules. The new marking and data selection system works with the new Detection Group Localiser. The Detection Group Localiser extends the functionality which always existed in the click detector to other types of data (e.g. Whistles) so that they can be grouped and tracked using target motion @@ -2152,8 +2153,8 @@ happens when the user selects save as new configuration. This has been fixed.

       Bug 315. code searched for file in working folder, which is the installation folder when starting PAMGuard using a shortcut link. But when -double-clicking on a psf, the working folder is the location of the psf. This -has been fixed.

+double-clicking on a psf, the working folder is the location of the psf. This has +been fixed.

7.      Module code development remains largely unchanged, in most cases simply requiring the addition of an interface class. - Instructions for the development of new modules utilizing the plug-in -scheme can be found here.  Plug-in modules can be downloaded from the PAMGuard website here, but developers are encouraged to host and maintain their own modules.

@@ -2191,8 +2192,8 @@ own modules.

Modules of interest to the general PAM community will remain as part of the core PAMGuard installation. However, specialized modules which are useful to only a small number of users have been -removed and are available as a separate download. The following modules have -been removed:

+removed and are available as a separate download. The following modules have been +removed:

1.            @@ -2243,7 +2244,7 @@ November 2016

1.       Bug 303. Some ASIO sound cards not working with either ASIO system in PAMGuard. For the PAMGuard ASIO system, this was due to a data format used by some sound -cards never being properly implemented. For the “New ASIO system” which is +cards never being properly implemented. For the “New ASIO system” which is based on jAsioHost, the unpacking of that format contained a bug which returned incorrect numbers, so data were swamped with noise. Both systems are now fixed. By preference, users should use the PAMGuard ASIO system since the JAsioHost @@ -2374,9 +2375,9 @@ the database.

2.       -The number of data streams associated with the click -detector has been tidied up so that there are a) All Click, b) Tracked Clicks -(those which are part of an event) and c) Events.

+The number of data streams associated with the click detector +has been tidied up so that there are a) All Click, b) Tracked Clicks (those +which are part of an event) and c) Events.

3.       @@ -2637,12 +2638,12 @@ boundaries when file durations are set to a maximum fixed value.

5.       -Bug 262. Access to SQLite database conversion. This would fail when -tables were present which were not created by PAMGuard.  Fixes have been -put in place for spaces in the table name or for not having an 'Id' column. -Fixes have not been implemented for spaces in a column name or use of a -reserved word as a column name, however if either of these problems do exist it -will no longer crash but issue a clear warning and carry onto the next table.

+Bug 262. Access to SQLite database conversion. This would fail when tables +were present which were not created by PAMGuard.  Fixes have been put in +place for spaces in the table name or for not having an 'Id' column. Fixes have +not been implemented for spaces in a column name or use of a reserved word as a +column name, however if either of these problems do exist it will no longer +crash but issue a clear warning and carry onto the next table.

 

@@ -3071,12 +3072,12 @@ marine mammal survey package. See online help for details.

Alarms (Utilities Group)

-

This is a general system of visual and audio alarms -developed by Doug Gillespie for use on a variety of projects. The alarms can be -coupled to any module or detector in PAMGuard. Where appropriate, modules can -control which of their data will cause an alarm action (e.g. in the Click -detector you can set which types of classified click will fire the alarm). See -online help for details.  

+

This is a general system of visual and audio alarms developed +by Doug Gillespie for use on a variety of projects. The alarms can be coupled +to any module or detector in PAMGuard. Where appropriate, modules can control +which of their data will cause an alarm action (e.g. in the Click detector you +can set which types of classified click will fire the alarm). See online help +for details.  

Noise Band Monitor (Sound Processing Group)

@@ -3140,8 +3141,8 @@ Millisecond time is also now included in the output file names.

Datagram options in Viewer have been improved so that the user has to verify the time binning for datagrams the first time the viewer is -run and can also change the time bins from the File menu (See the -File/BinaryStore/Datagram options menu.

+run and can also change the time bins from the File menu (See the File/BinaryStore/Datagram +options menu.

Viewer Configuration

@@ -3577,8 +3578,8 @@ the correct data stream. This has been fixed.

'         Whistle classifier has some new features in the classifier training -panel. It is also now possible to export training data files directly from -binary data files.

+panel. It is also now possible to export training data files directly from binary +data files.

'         @@ -3831,10 +3832,10 @@ port is closed. Might prevent a few problems when using a GPS.

Crashes caused in real time or Mixed Mode if the number of software channels exceeds the number of hydrophones configured in the array manager. It is of course illogical to have software channels which are not -assigned to a hydrophone, so rather than entirely prevent PAMGUARD from -crashing I have inserted additional checks into the hydrophone array dialog -which will prevent the user from closing that dialog unless all software -channels are assigned to a hydrophone.

+assigned to a hydrophone, so rather than entirely prevent PAMGUARD from crashing +I have inserted additional checks into the hydrophone array dialog which will +prevent the user from closing that dialog unless all software channels are +assigned to a hydrophone.

Version 1.8.01 Beta February 2010

@@ -3929,17 +3930,17 @@ classifier is still available).

'         -Bearing ambiguity resolution for planar and volumetric arrays. New features -in array dialog for estimations of errors on array location. These feed into to -a maximum likelihood estimate of angles from small 2D or 3D sub arrays to give -two polar angle coordinates. this can be used to resolve left right ambiguity -and is implemented for both the click and the whistle/moan detectors. As a -result, the click detector bearing time display can now be set to go from -180 -to 180 degrees rather than 0 - 180 degrees. In this case, clicks in the upper -half of the bearing display will be to port and clicks in the right half will -be to starboard. As you pass a whale which is to port, the clicks will move UP -the display. In the long term, I hope to turn this display around so that time -is up the screen rather than across. 

+Bearing ambiguity resolution for planar and volumetric arrays. New +features in array dialog for estimations of errors on array location. These +feed into to a maximum likelihood estimate of angles from small 2D or 3D sub arrays +to give two polar angle coordinates. this can be used to resolve left right +ambiguity and is implemented for both the click and the whistle/moan detectors. +As a result, the click detector bearing time display can now be set to go from +-180 to 180 degrees rather than 0 - 180 degrees. In this case, clicks in the +upper half of the bearing display will be to port and clicks in the right half +will be to starboard. As you pass a whale which is to port, the clicks will +move UP the display. In the long term, I hope to turn this display around so +that time is up the screen rather than across. 

Small features and bug fixes

@@ -4228,8 +4229,8 @@ acquisition. 

Bug fixes

-

Speed up of graphics, particularly regarding large -quantities of gps track  data

+

Speed up of graphics, particularly regarding large quantities +of gps track  data

National Instruments cards with names > 20 characters long are now correctly  recognised.

diff --git a/buildconfigurations/Build PAMGuard DG.launch b/buildconfigurations/Build PAMGuard DG.launch deleted file mode 100644 index 21d3145c..00000000 --- a/buildconfigurations/Build PAMGuard DG.launch +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index ab94c57a..b88e86ad 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -74,9 +74,9 @@ javafx-maven-plugin 0.0.6 - 16 - 16 - 16 + 17 + 17 + 17 diff --git a/pom.xml b/pom.xml index 50cfd095..4c03eb41 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.pamguard Pamguard - 2.02.04ac + 2.02.05 Pamguard Java12+ Pamguard for Java 12+, using Maven to control dependcies www.pamguard.org @@ -76,9 +76,9 @@ javafx-maven-plugin 0.0.6 - 16 - 16 - 16 + 17 + 17 + 17 @@ -391,6 +391,13 @@ ${javafx.version} + + + net.synedra + validatorfx + 0.4.0 + + org.apache.commons @@ -777,7 +784,7 @@ pamguard.org x3 - 2.0.0 + 2.1.0 @@ -825,6 +832,13 @@ swingx-all 1.6.5-1 + + + + io.github.mkpaz + atlantafx-base + 1.0.0 + diff --git a/repo/pamguard/org/x3/1.0.0/_remote.repositories b/repo/pamguard/org/x3/1.0.0/_remote.repositories new file mode 100644 index 00000000..1f6591fb --- /dev/null +++ b/repo/pamguard/org/x3/1.0.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Fri Aug 14 15:49:24 CEST 2020 +x3-1.0.0.pom>= +x3-1.0.0.jar>= diff --git a/repo/pamguard/org/x3/1.0.0/x3-1.0.0.jar b/repo/pamguard/org/x3/1.0.0/x3-1.0.0.jar new file mode 100644 index 00000000..44650770 Binary files /dev/null and b/repo/pamguard/org/x3/1.0.0/x3-1.0.0.jar differ diff --git a/repo/pamguard/org/x3/1.0.0/x3-1.0.0.pom b/repo/pamguard/org/x3/1.0.0/x3-1.0.0.pom new file mode 100644 index 00000000..a8907409 --- /dev/null +++ b/repo/pamguard/org/x3/1.0.0/x3-1.0.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + pamguard.org + x3 + 1.0.0 + POM was created from install:install-file + diff --git a/repo/pamguard/org/x3/2.0.0/_remote.repositories b/repo/pamguard/org/x3/2.0.0/_remote.repositories new file mode 100644 index 00000000..fd5facc2 --- /dev/null +++ b/repo/pamguard/org/x3/2.0.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Fri Sep 25 10:46:11 CEST 2020 +x3-2.0.0.pom>= +x3-2.0.0.jar>= diff --git a/repo/pamguard/org/x3/2.0.0/m2e-lastUpdated.properties b/repo/pamguard/org/x3/2.0.0/m2e-lastUpdated.properties new file mode 100644 index 00000000..166b02cc --- /dev/null +++ b/repo/pamguard/org/x3/2.0.0/m2e-lastUpdated.properties @@ -0,0 +1,39 @@ +#Fri Jan 14 08:14:25 GMT 2022 +repo|file\:///Users/au671271/pamguard/PAMGuard/repo|sources=1632311094649 +central|https\://jmachund.jfrog.io/artifactory/jpam2|javadoc=1641807924466 +repo|file\:///Users/au671271/git/PAMGuard/repo|javadoc=1642148065400 +github|https\://maven.pkg.github.com/macster110/jpam|sources=1642147913185 +repo|file\:///Users/au671271/pamguard/PAMGuard_16_mvn/repo|sources=1625576160247 +icm|http\://maven.icm.edu.pl/artifactory/repo|javadoc=1600971368390 +talan|https\://nexus.talanlabs.com/content/repositories/releases/|sources=1642147913185 +geomajas|http\://maven.geomajas.org/|javadoc=1642148065400 +central|https\://repo.maven.apache.org/maven2|javadoc=1642065819015 +bedatadriven|https\://nexus.bedatadriven.com/content/groups/public/|sources=1642147913185 +repo|file\:///Users/au671271/pamguard/PAMGuard_12_mvn/repo|sources=1602589977893 +jpamutils|https\://raw.github.com/macster110/jpam/mvn-repo/|javadoc=1642065819015 +icm|http\://maven.icm.edu.pl/artifactory/repo|sources=1600971300139 +geomajas|http\://maven.geomajas.org/|sources=1642147913185 +central|https\://repo1.maven.org/maven2|sources=1642147913185 +central|https\://repo.maven.apache.org/maven2|sources=1642065813019 +github|https\://maven.pkg.github.com/macster110/jpam|javadoc=1642148065400 +bintray-jerady-maven|https\://dl.bintray.com/jerady/maven|sources=1602589977893 +bedatadriven|https\://nexus.bedatadriven.com/content/groups/public/|javadoc=1642148065400 +jpamutils|https\://raw.github.com/macster110/jpam/mvn-repo/|sources=1642065813019 +my-local-repo|file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars|sources=1600949483388 +repo|file\:///Users/au671271/git/PAMGuard/repo|sources=1642147913185 +bintray-macster110-jtorch4pam|macster110|https\://dl.bintray.com/macster110/jtorch4pam|javadoc=1642148065400 +jdl4pam|https\://raw.github.com/macster110/jpam/mvn-repo/|javadoc=1642065819015 +unidata-all|https\://artifacts.unidata.ucar.edu/repository/unidata-all/|sources=1642147913185 +icm|https\://maven.averbis.com/m2/|sources=1601026887474 +bintray-jerady-maven|https\://dl.bintray.com/jerady/maven|javadoc=1602590126606 +talan|https\://nexus.talanlabs.com/content/repositories/releases/|javadoc=1642148065400 +central|https\://jmachund.jfrog.io/artifactory/jpam2|sources=1641807658592 +my-local-repo|file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars|javadoc=1600949605299 +unidata-all|https\://artifacts.unidata.ucar.edu/repository/unidata-all/|javadoc=1642148065400 +icm|https\://maven.averbis.com/m2/|javadoc=1601027283465 +repo|file\:///Users/au671271/pamguard/PAMGuard_12_mvn/repo|javadoc=1602590126606 +jdl4pam|https\://raw.github.com/macster110/jpam/mvn-repo/|sources=1642065813019 +bintray-macster110-jtorch4pam|macster110|https\://dl.bintray.com/macster110/jtorch4pam|sources=1642147913185 +repo|file\:///Users/au671271/pamguard/PAMGuard_16_mvn/repo|javadoc=1625576167973 +repo|file\:///Users/au671271/pamguard/PAMGuard/repo|javadoc=1632313121603 +central|https\://repo1.maven.org/maven2|javadoc=1642148065400 diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0-javadoc.jar.lastUpdated b/repo/pamguard/org/x3/2.0.0/x3-2.0.0-javadoc.jar.lastUpdated new file mode 100644 index 00000000..b678a928 --- /dev/null +++ b/repo/pamguard/org/x3/2.0.0/x3-2.0.0-javadoc.jar.lastUpdated @@ -0,0 +1,38 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Fri Jan 14 08:14:25 GMT 2022 +https\://dl.bintray.com/macster110/jtorch4pam/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.error= +https\://jmachund.jfrog.io/artifactory/jpam2/.lastUpdated=1625576167971 +file\:///Users/au671271/pamguard/PAMGuard/repo/.error= +file\:///Users/au671271/pamguard/PAMGuard_16_mvn/repo/.lastUpdated=1622023729745 +https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1600949601867 +file\:///Users/au671271/git/PAMGuard/repo/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1600949603273 +https\://maven.averbis.com/m2/.lastUpdated=1601027283464 +file\:///Users/au671271/git/PAMGuard/repo/.lastUpdated=1641807924465 +https\://raw.github.com/macster110/jpam/mvn-repo/.lastUpdated=1642065819012 +file\:///Users/au671271/pamguard/PAMGuard_16_mvn/repo/.error= +http\://maven.icm.edu.pl/artifactory/repo/.lastUpdated=1600971368389 +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1600949604396 +http\://maven.icm.edu.pl/artifactory/repo/.error= +https\://repo1.maven.org/maven2/.error= +@default-github-https\://maven.pkg.github.com/macster110/jpam/.lastUpdated=1642148065399 +file\:///Users/au671271/pamguard/PAMGuard/repo/.lastUpdated=1632313121601 +https\://repo1.maven.org/maven2/.lastUpdated=1642148065192 +https\://dl.bintray.com/jerady/maven/.lastUpdated=1600949602327 +http\://maven.geomajas.org/.lastUpdated=1600949604068 +https\://nexus.talanlabs.com/content/repositories/releases/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/repo/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.lastUpdated=1600949601869 +https\://repo.maven.apache.org/maven2/.lastUpdated=1600949605299 +http\://maven.geomajas.org/.error= +https\://jmachund.jfrog.io/artifactory/jpam2/.error= +https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1600949604877 +https\://maven.averbis.com/m2/.error= +https\://repo.maven.apache.org/maven2/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/repo/.lastUpdated=1602590126603 +https\://maven.pkg.github.com/macster110/jpam/.error=Could not transfer artifact pamguard.org\:x3\:jar\:javadoc\:2.0.0 from/to github (https\://maven.pkg.github.com/macster110/jpam)\: Access denied to https\://maven.pkg.github.com/macster110/jpam/pamguard/org/x3/2.0.0/x3-2.0.0-javadoc.jar. Error code 401, +https\://dl.bintray.com/jerady/maven/.error= +https\://raw.github.com/macster110/jpam/mvn-repo/.error= diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0-sources.jar.lastUpdated b/repo/pamguard/org/x3/2.0.0/x3-2.0.0-sources.jar.lastUpdated new file mode 100644 index 00000000..55100bbe --- /dev/null +++ b/repo/pamguard/org/x3/2.0.0/x3-2.0.0-sources.jar.lastUpdated @@ -0,0 +1,38 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Fri Jan 14 08:11:53 GMT 2022 +https\://dl.bintray.com/macster110/jtorch4pam/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.error= +https\://jmachund.jfrog.io/artifactory/jpam2/.lastUpdated=1625576160246 +file\:///Users/au671271/pamguard/PAMGuard/repo/.error= +file\:///Users/au671271/pamguard/PAMGuard_16_mvn/repo/.lastUpdated=1622023729649 +https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1600949479758 +file\:///Users/au671271/git/PAMGuard/repo/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1600949481209 +https\://maven.averbis.com/m2/.lastUpdated=1601026887474 +file\:///Users/au671271/git/PAMGuard/repo/.lastUpdated=1641807658590 +https\://raw.github.com/macster110/jpam/mvn-repo/.lastUpdated=1642065813017 +file\:///Users/au671271/pamguard/PAMGuard_16_mvn/repo/.error= +http\://maven.icm.edu.pl/artifactory/repo/.lastUpdated=1600971300137 +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1600949482388 +http\://maven.icm.edu.pl/artifactory/repo/.error= +https\://repo1.maven.org/maven2/.error= +@default-github-https\://maven.pkg.github.com/macster110/jpam/.lastUpdated=1642147913184 +file\:///Users/au671271/pamguard/PAMGuard/repo/.lastUpdated=1632311094646 +https\://repo1.maven.org/maven2/.lastUpdated=1642147912977 +https\://dl.bintray.com/jerady/maven/.lastUpdated=1600949480238 +http\://maven.geomajas.org/.lastUpdated=1600949482017 +https\://nexus.talanlabs.com/content/repositories/releases/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/repo/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.lastUpdated=1600949479759 +https\://repo.maven.apache.org/maven2/.lastUpdated=1600949483387 +http\://maven.geomajas.org/.error= +https\://jmachund.jfrog.io/artifactory/jpam2/.error= +https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1600949482866 +https\://maven.averbis.com/m2/.error= +https\://repo.maven.apache.org/maven2/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/repo/.lastUpdated=1602589977891 +https\://maven.pkg.github.com/macster110/jpam/.error=Could not transfer artifact pamguard.org\:x3\:jar\:sources\:2.0.0 from/to github (https\://maven.pkg.github.com/macster110/jpam)\: Access denied to https\://maven.pkg.github.com/macster110/jpam/pamguard/org/x3/2.0.0/x3-2.0.0-sources.jar. Error code 401, +https\://dl.bintray.com/jerady/maven/.error= +https\://raw.github.com/macster110/jpam/mvn-repo/.error= diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.lastUpdated b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.lastUpdated new file mode 100644 index 00000000..b2ef3c43 --- /dev/null +++ b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.lastUpdated @@ -0,0 +1,18 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Thu Sep 24 13:58:55 CEST 2020 +https\://dl.bintray.com/macster110/jtorch4pam/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.error= +https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1600948677455 +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1600948714963 +https\://dl.bintray.com/jerady/maven/.lastUpdated=1600948680041 +http\://maven.geomajas.org/.lastUpdated=1600948729479 +https\://nexus.talanlabs.com/content/repositories/releases/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.lastUpdated=1600948677498 +https\://repo.maven.apache.org/maven2/.lastUpdated=1600948686447 +http\://maven.geomajas.org/.error= +https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1600948735430 +https\://repo.maven.apache.org/maven2/.error= +https\://dl.bintray.com/jerady/maven/.error= +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1600948734692 diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.md5 b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.md5 deleted file mode 100644 index f614153f..00000000 --- a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.md5 +++ /dev/null @@ -1 +0,0 @@ -851e2c9b153f1686858523e69d78da20 \ No newline at end of file diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.sha1 b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.sha1 deleted file mode 100644 index 54322ed1..00000000 --- a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -4d89dd98cf0188bb3bfe4afd74dc427ce23d3a41 \ No newline at end of file diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.lastUpdated b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.lastUpdated new file mode 100644 index 00000000..d81ec392 --- /dev/null +++ b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.lastUpdated @@ -0,0 +1,18 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Thu Sep 24 13:57:29 CEST 2020 +https\://dl.bintray.com/macster110/jtorch4pam/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.error= +https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1600948647604 +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1600948648002 +https\://dl.bintray.com/jerady/maven/.lastUpdated=1600948647670 +http\://maven.geomajas.org/.lastUpdated=1600948648672 +https\://nexus.talanlabs.com/content/repositories/releases/.error= +file\:///Users/au671271/pamguard/PAMGuard_12_mvn/src/jars/.lastUpdated=1600948647606 +https\://repo.maven.apache.org/maven2/.lastUpdated=1600948649503 +http\://maven.geomajas.org/.error= +https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1600948649324 +https\://repo.maven.apache.org/maven2/.error= +https\://dl.bintray.com/jerady/maven/.error= +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1600948648816 diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.md5 b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.md5 deleted file mode 100644 index f83e1650..00000000 --- a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.md5 +++ /dev/null @@ -1 +0,0 @@ -e09a0e45701b683f485aedf1349cab24 \ No newline at end of file diff --git a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.sha1 b/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.sha1 deleted file mode 100644 index a9bd70b9..00000000 --- a/repo/pamguard/org/x3/2.0.0/x3-2.0.0.pom.sha1 +++ /dev/null @@ -1 +0,0 @@ -45129eae7b4f9c502cceffe8358fdc7e19ceaa39 \ No newline at end of file diff --git a/repo/pamguard/org/x3/2.1.0/_remote.repositories b/repo/pamguard/org/x3/2.1.0/_remote.repositories new file mode 100644 index 00000000..7415b7b8 --- /dev/null +++ b/repo/pamguard/org/x3/2.1.0/_remote.repositories @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Tue Oct 11 15:59:57 BST 2022 +x3-2.1.0.jar>= +x3-2.1.0.pom>= diff --git a/repo/pamguard/org/x3/2.1.0/m2e-lastUpdated.properties b/repo/pamguard/org/x3/2.1.0/m2e-lastUpdated.properties new file mode 100644 index 00000000..f8f073e8 --- /dev/null +++ b/repo/pamguard/org/x3/2.1.0/m2e-lastUpdated.properties @@ -0,0 +1,13 @@ +#Thu Oct 06 15:38:43 BST 2022 +bedatadriven|https\://nexus.bedatadriven.com/content/groups/public/|javadoc=1665067123455 +repo|file\:///Users/au671271/git/PAMGuard/repo|javadoc=1665067123455 +repo|file\:///Users/au671271/git/PAMGuard/repo|sources=1665067040129 +talan|https\://nexus.talanlabs.com/content/repositories/releases/|sources=1665067040129 +bintray-macster110-jtorch4pam|macster110|https\://dl.bintray.com/macster110/jtorch4pam|javadoc=1665067123455 +bedatadriven|https\://nexus.bedatadriven.com/content/groups/public/|sources=1665067040129 +unidata-all|https\://artifacts.unidata.ucar.edu/repository/unidata-all/|sources=1665067040129 +talan|https\://nexus.talanlabs.com/content/repositories/releases/|javadoc=1665067123455 +central|https\://repo1.maven.org/maven2|sources=1665067040129 +unidata-all|https\://artifacts.unidata.ucar.edu/repository/unidata-all/|javadoc=1665067123455 +bintray-macster110-jtorch4pam|macster110|https\://dl.bintray.com/macster110/jtorch4pam|sources=1665067040129 +central|https\://repo1.maven.org/maven2|javadoc=1665067123455 diff --git a/repo/pamguard/org/x3/2.1.0/x3-2.1.0-javadoc.jar.lastUpdated b/repo/pamguard/org/x3/2.1.0/x3-2.1.0-javadoc.jar.lastUpdated new file mode 100644 index 00000000..0fcb5374 --- /dev/null +++ b/repo/pamguard/org/x3/2.1.0/x3-2.1.0-javadoc.jar.lastUpdated @@ -0,0 +1,14 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Thu Oct 06 15:38:43 BST 2022 +@default-talan-https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1665067122194 +https\://dl.bintray.com/macster110/jtorch4pam/.error=Could not transfer artifact pamguard.org\:x3\:jar\:javadoc\:2.1.0 from/to bintray-macster110-jtorch4pam (https\://dl.bintray.com/macster110/jtorch4pam)\: Remote host terminated the handshake +https\://repo1.maven.org/maven2/.error= +file\:///Users/au671271/git/PAMGuard/repo/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1665067121806 +https\://repo1.maven.org/maven2/.lastUpdated=1665067123455 +https\://nexus.talanlabs.com/content/repositories/releases/.error=Could not transfer artifact pamguard.org\:x3\:jar\:javadoc\:2.1.0 from/to talan (https\://nexus.talanlabs.com/content/repositories/releases/)\: Access denied to https\://nexus.talanlabs.com/content/repositories/releases/pamguard/org/x3/2.1.0/x3-2.1.0-javadoc.jar. Error code 401, Unauthorized +file\:///Users/au671271/git/PAMGuard/repo/.lastUpdated=1665067120886 +4d1f727a0c17e3b21ef2f6654eed0b3113a4db97@default-bintray-macster110-jtorch4pam-https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1665067120883 +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1665067122025 diff --git a/repo/pamguard/org/x3/2.1.0/x3-2.1.0-sources.jar.lastUpdated b/repo/pamguard/org/x3/2.1.0/x3-2.1.0-sources.jar.lastUpdated new file mode 100644 index 00000000..57e346e0 --- /dev/null +++ b/repo/pamguard/org/x3/2.1.0/x3-2.1.0-sources.jar.lastUpdated @@ -0,0 +1,14 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Thu Oct 06 15:37:20 BST 2022 +@default-talan-https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1665067039941 +https\://dl.bintray.com/macster110/jtorch4pam/.error=Could not transfer artifact pamguard.org\:x3\:jar\:sources\:2.1.0 from/to bintray-macster110-jtorch4pam (https\://dl.bintray.com/macster110/jtorch4pam)\: Remote host terminated the handshake +https\://repo1.maven.org/maven2/.error= +file\:///Users/au671271/git/PAMGuard/repo/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1665067039627 +https\://repo1.maven.org/maven2/.lastUpdated=1665067040128 +https\://nexus.talanlabs.com/content/repositories/releases/.error=Could not transfer artifact pamguard.org\:x3\:jar\:sources\:2.1.0 from/to talan (https\://nexus.talanlabs.com/content/repositories/releases/)\: Access denied to https\://nexus.talanlabs.com/content/repositories/releases/pamguard/org/x3/2.1.0/x3-2.1.0-sources.jar. Error code 401, Unauthorized +file\:///Users/au671271/git/PAMGuard/repo/.lastUpdated=1665067038933 +4d1f727a0c17e3b21ef2f6654eed0b3113a4db97@default-bintray-macster110-jtorch4pam-https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1665067038929 +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1665067039782 diff --git a/repo/pamguard/org/x3/2.1.0/x3-2.1.0.jar b/repo/pamguard/org/x3/2.1.0/x3-2.1.0.jar new file mode 100644 index 00000000..d6123190 Binary files /dev/null and b/repo/pamguard/org/x3/2.1.0/x3-2.1.0.jar differ diff --git a/repo/pamguard/org/x3/2.1.0/x3-2.1.0.pom b/repo/pamguard/org/x3/2.1.0/x3-2.1.0.pom new file mode 100644 index 00000000..a786404c --- /dev/null +++ b/repo/pamguard/org/x3/2.1.0/x3-2.1.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + pamguard.org + x3 + 2.1.0 + POM was created from install:install-file + diff --git a/repo/pamguard/org/x3/2.1.0/x3-2.1.0.pom.lastUpdated b/repo/pamguard/org/x3/2.1.0/x3-2.1.0.pom.lastUpdated new file mode 100644 index 00000000..560e7e3c --- /dev/null +++ b/repo/pamguard/org/x3/2.1.0/x3-2.1.0.pom.lastUpdated @@ -0,0 +1,16 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Thu Oct 06 15:51:34 BST 2022 +@default-talan-https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1665067894494 +https\://dl.bintray.com/macster110/jtorch4pam/.error=Could not transfer artifact pamguard.org\:x3\:pom\:2.1.0 from/to bintray-macster110-jtorch4pam (https\://dl.bintray.com/macster110/jtorch4pam)\: Remote host terminated the handshake +@default-repo-file\://${project.basedir}/repo/.lastUpdated=1665067029837 +https\://repo1.maven.org/maven2/.error= +file\:///Users/au671271/git/PAMGuard/repo/.error= +https\://nexus.bedatadriven.com/content/groups/public/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error= +https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1665067032579 +https\://repo1.maven.org/maven2/.lastUpdated=1665067036872 +https\://nexus.talanlabs.com/content/repositories/releases/.error=Could not transfer artifact pamguard.org\:x3\:pom\:2.1.0 from/to talan (https\://nexus.talanlabs.com/content/repositories/releases/)\: Access denied to https\://nexus.talanlabs.com/content/repositories/releases/pamguard/org/x3/2.1.0/x3-2.1.0.pom. Error code 401, Unauthorized +file\://${project.basedir}/repo/.error=Could not transfer artifact pamguard.org\:x3\:pom\:2.1.0 from/to repo (file\://${project.basedir}/repo)\: Repository path /repo does not exist, and cannot be created. +file\:///Users/au671271/git/PAMGuard/repo/.lastUpdated=1665067033714 +4d1f727a0c17e3b21ef2f6654eed0b3113a4db97@default-bintray-macster110-jtorch4pam-https\://dl.bintray.com/macster110/jtorch4pam/.lastUpdated=1665067894257 +https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1665067034011 diff --git a/repo/pamguard/org/x3/maven-metadata-local.xml b/repo/pamguard/org/x3/maven-metadata-local.xml deleted file mode 100644 index dc3ffaf7..00000000 --- a/repo/pamguard/org/x3/maven-metadata-local.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - pamguard.org - x3 - - 2.0.0 - - 2.0.0 - - 20200929205724 - - diff --git a/repo/pamguard/org/x3/maven-metadata-local.xml.md5 b/repo/pamguard/org/x3/maven-metadata-local.xml.md5 deleted file mode 100644 index cdb19915..00000000 --- a/repo/pamguard/org/x3/maven-metadata-local.xml.md5 +++ /dev/null @@ -1 +0,0 @@ -47ffb77b88155d037480604e508371ff \ No newline at end of file diff --git a/repo/pamguard/org/x3/maven-metadata-local.xml.sha1 b/repo/pamguard/org/x3/maven-metadata-local.xml.sha1 deleted file mode 100644 index 922ba975..00000000 --- a/repo/pamguard/org/x3/maven-metadata-local.xml.sha1 +++ /dev/null @@ -1 +0,0 @@ -9c238e70383b552aaaf3161eaeee8ed238d90ff8 \ No newline at end of file diff --git a/src/Acquisition/CheckWavFileHeaders.java b/src/Acquisition/CheckWavFileHeaders.java index a9186da8..bbb2999d 100644 --- a/src/Acquisition/CheckWavFileHeaders.java +++ b/src/Acquisition/CheckWavFileHeaders.java @@ -15,7 +15,7 @@ import javax.swing.JTextArea; import javax.swing.SwingWorker; import javax.swing.border.TitledBorder; -import PamUtils.PamAudioFileFilter; +import Acquisition.pamAudio.PamAudioFileFilter; import PamView.dialog.PamDialog; public class CheckWavFileHeaders extends PamDialog { diff --git a/src/Acquisition/FileInputSystem.java b/src/Acquisition/FileInputSystem.java index 7ee5fb35..771af349 100644 --- a/src/Acquisition/FileInputSystem.java +++ b/src/Acquisition/FileInputSystem.java @@ -47,6 +47,8 @@ import wavFiles.ByteConverter; import Acquisition.filedate.FileDate; import Acquisition.filedate.FileDateDialogStrip; import Acquisition.filedate.FileDateObserver; +import Acquisition.pamAudio.PamAudioFileManager; +import Acquisition.pamAudio.PamAudioFileFilter; import Acquisition.pamAudio.PamAudioSystem; import PamController.PamControlledUnitSettings; import PamController.PamController; @@ -54,7 +56,6 @@ import PamController.PamSettingManager; import PamController.PamSettings; import PamDetection.RawDataUnit; import PamModel.SMRUEnable; -import PamUtils.PamAudioFileFilter; import PamUtils.PamCalendar; import PamUtils.PamFileChooser; import PamView.dialog.PamLabel; @@ -408,7 +409,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe // acquisitionDialog.NotifyChange(); if (file.isFile() && !file.isHidden() && acquisitionDialog != null) { try { - AudioInputStream audioStream = PamAudioSystem.getAudioInputStream(file); + AudioInputStream audioStream = PamAudioFileManager.getInstance().getAudioInputStream(file); // // Get additional information from the header if it's a wav file. // if (WavFileInputStream.class.isAssignableFrom(audioStream.getClass())) { @@ -537,6 +538,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe } public File getCurrentFile() { + System.out.println("fileInputParameters: " + fileInputParameters); if (fileInputParameters.recentFiles == null) return null; if (fileInputParameters.recentFiles.size() < 1) return null; String fileName = fileInputParameters.recentFiles.get(0); @@ -559,8 +561,11 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe public boolean prepareInputFile() { File currentFile = getCurrentFile(); -// System.out.printf("*********************************** Opening file %s\n", currentFile.getName()); - if (currentFile == null) return false; + if (currentFile == null) { + System.out.println("The current file was null"); + return false; + } + System.out.printf("*********************************** Opening file %s\n", currentFile.getName()); try { @@ -568,7 +573,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe audioStream.close(); } - audioStream = PamAudioSystem.getAudioInputStream(currentFile); + audioStream = PamAudioFileManager.getInstance().getAudioInputStream(currentFile); if (audioStream == null) { return false; @@ -645,7 +650,8 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe String audioFileStr = getCurrentFile()==null? "Null File": getCurrentFile().getAbsolutePath(); - System.err.println("FileInputSystem: runFileAnalysis: AudioFilr format is null: " + audioFileStr); + System.err.println("FileInputSystem: runFileAnalysis: AudioFile format is null: " + audioFileStr); + return false; } diff --git a/src/Acquisition/FolderInputSystem.java b/src/Acquisition/FolderInputSystem.java index 96bab40f..86fab5ad 100644 --- a/src/Acquisition/FolderInputSystem.java +++ b/src/Acquisition/FolderInputSystem.java @@ -28,11 +28,12 @@ import Acquisition.layoutFX.DAQSettingsPane; import Acquisition.layoutFX.FolderInputPane; import javafx.application.Platform; import pamguard.GlobalArguments; +import Acquisition.pamAudio.PamAudioFileManager; +import Acquisition.pamAudio.PamAudioFileFilter; import Acquisition.pamAudio.PamAudioSystem; import PamController.PamControlledUnitSettings; import PamController.PamController; import PamController.PamSettings; -import PamUtils.PamAudioFileFilter; import PamUtils.PamCalendar; import PamUtils.PamFileChooser; import PamUtils.PamFileFilter; @@ -429,6 +430,8 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{ File aFile = files[0]; setNewFile(aFile.getAbsolutePath()); } + + /* * The file chooser is returning sub classes of File which are not * serialisable, so we can't use them. We need to convert their @@ -505,7 +508,7 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{ if (file.isFile() && !file.isHidden() && acquisitionDialog != null) { //Hidden files should not be used in analysis... try { - audioStream = PamAudioSystem.getAudioInputStream(file); + audioStream = PamAudioFileManager.getInstance().getAudioInputStream(file); AudioFormat audioFormat = audioStream.getFormat(); fileSamples = audioStream.getFrameLength(); acquisitionDialog.setSampleRate(audioFormat.getSampleRate()); @@ -568,6 +571,7 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{ @Override public File getCurrentFile() { + //System.out.println("All files: " + allFiles); if (allFiles != null && allFiles.size() > currentFile) { return allFiles.get(currentFile); } diff --git a/src/Acquisition/RonaInputSystem.java b/src/Acquisition/RonaInputSystem.java index 9586ac23..6322f30b 100644 --- a/src/Acquisition/RonaInputSystem.java +++ b/src/Acquisition/RonaInputSystem.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Date; +import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.AudioFormat.Encoding; @@ -25,10 +26,11 @@ import org.jflac.metadata.StreamInfo; import org.jflac.util.ByteData; import wavFiles.ByteConverter; +import Acquisition.pamAudio.PamAudioFileManager; +import Acquisition.pamAudio.PamAudioFileFilter; import Acquisition.pamAudio.PamAudioSystem; import PamDetection.RawDataUnit; import PamUtils.FileParts; -import PamUtils.PamAudioFileFilter; import PamUtils.PamCalendar; import PamUtils.PamFileFilter; import PamUtils.PamUtils; @@ -150,7 +152,7 @@ public class RonaInputSystem extends FolderInputSystem { audioStreams[i].close(); } - audioStreams[i] = PamAudioSystem.getAudioInputStream(findChannelFile(currentFile, i, 2)); + audioStreams[i] = PamAudioFileManager.getInstance().getAudioInputStream(findChannelFile(currentFile, i, 2)); audioFormat = audioStreams[i].getFormat(); diff --git a/src/Acquisition/layoutFX/CheckWavHeadersPane.java b/src/Acquisition/layoutFX/CheckWavHeadersPane.java index 60638bae..c97cd6d4 100644 --- a/src/Acquisition/layoutFX/CheckWavHeadersPane.java +++ b/src/Acquisition/layoutFX/CheckWavHeadersPane.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import Acquisition.AudioFileFuncs; import Acquisition.FolderInputSystem; import Acquisition.WavFileFuncs; -import PamUtils.PamAudioFileFilter; +import Acquisition.pamAudio.PamAudioFileFilter; import javafx.geometry.Insets; import javafx.application.Platform; import javafx.beans.property.SimpleDoubleProperty; diff --git a/src/Acquisition/layoutFX/FolderInputPane.java b/src/Acquisition/layoutFX/FolderInputPane.java index b6602e92..d815fd06 100644 --- a/src/Acquisition/layoutFX/FolderInputPane.java +++ b/src/Acquisition/layoutFX/FolderInputPane.java @@ -11,10 +11,9 @@ import org.controlsfx.glyphfont.Glyph; import Acquisition.FileInputParameters; import Acquisition.FolderInputParameters; import Acquisition.FolderInputSystem; +import Acquisition.pamAudio.PamAudioFileFilter; import PamController.PamController; import PamController.PamFolders; -import PamController.SettingsPane; -import PamUtils.PamAudioFileFilter; import PamUtils.PamCalendar; import PamUtils.worker.PamWorker; import PamUtils.worker.filelist.FileListData; @@ -24,7 +23,6 @@ import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.CheckBox; @@ -48,7 +46,6 @@ import pamViewFX.fxNodes.PamComboBox; import pamViewFX.fxNodes.PamHBox; import pamViewFX.fxNodes.PamProgressBar; import pamViewFX.fxNodes.PamVBox; -import pamViewFX.fxNodes.utilityPanes.PamToggleSwitch; /** * Pane for the folder input of the sound acquisition. @@ -413,7 +410,7 @@ public class FolderInputPane extends DAQSettingsPane{ for (int i=0; i{ return; } - System.out.println("File list worker: " + worker ); + //System.out.println("File list worker: " + worker ); //must ensure this is on the FX thread //Platform.runLater(()->{ this.progressBar.progressProperty().bind(worker.getPamWorkProgress().getProgressProperty()); diff --git a/src/Acquisition/offlineFuncs/OfflineWavFileServer.java b/src/Acquisition/offlineFuncs/OfflineWavFileServer.java index fe449b34..c1b6efa6 100644 --- a/src/Acquisition/offlineFuncs/OfflineWavFileServer.java +++ b/src/Acquisition/offlineFuncs/OfflineWavFileServer.java @@ -2,31 +2,22 @@ package Acquisition.offlineFuncs; import java.io.File; import java.io.FileFilter; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.UnsupportedAudioFileException; -import javax.sound.sampled.AudioFormat.Encoding; - import org.jflac.FLACDecoder; -import org.jflac.PCMProcessor; import org.jflac.metadata.Metadata; import org.jflac.metadata.StreamInfo; import org.jflac.sound.spi.FlacAudioFileReader; -import org.jflac.util.ByteData; - import Acquisition.filedate.FileDate; -import Acquisition.pamAudio.PamAudioSystem; +import Acquisition.pamAudio.PamAudioFileManager; +import Acquisition.pamAudio.PamAudioFileLoader; +import Acquisition.pamAudio.PamAudioFileFilter; import PamController.OfflineFileDataStore; -import PamDetection.RawDataUnit; -import PamUtils.PamAudioFileFilter; -import PamUtils.PamCalendar; import PamguardMVC.PamDataBlock; -import PamguardMVC.PamRawDataBlock; import PamguardMVC.dataOffline.OfflineDataLoadInfo; import dataMap.OfflineDataMap; import dataMap.filemaps.FileDataMapPoint; @@ -37,18 +28,13 @@ import wavFiles.ByteConverter; /** * This has been split off from OfflineFileServer so that OfflineFileServer can be used with * other file types. - * @author dg50 + * @author Doug Gillespie * */ public class OfflineWavFileServer extends OfflineFileServer { private FileDate fileDate; - private ByteConverter byteConverter; - - private AudioInputStream audioInputStream; - private AudioFormat audioFormat; - public OfflineWavFileServer(OfflineFileDataStore offlineRawDataStore, FileDate fileDate) { super(offlineRawDataStore); this.fileDate = fileDate; @@ -109,7 +95,10 @@ public class OfflineWavFileServer extends OfflineFileServer { continue; } } - file = mapPoint.getSoundFile();/* + file = mapPoint.getSoundFile(); + + //TODO - this should be integrated into the PamAudioFileManager. + /* * Now need to open file file as an input stream (what a bore !) */ AudioInputStream audioStream; @@ -139,7 +128,7 @@ public class OfflineWavFileServer extends OfflineFileServer { } else { try { - audioStream = PamAudioSystem.getAudioInputStream(file); + audioStream = PamAudioFileManager.getInstance().getAudioInputStream(file); if (audioStream == null) { it.remove(); continue; @@ -166,302 +155,7 @@ public class OfflineWavFileServer extends OfflineFileServer { } - private boolean loadWavData(PamDataBlock dataBlock, OfflineDataLoadInfo offlineDataLoadInfo, - ViewLoadObserver loadObserver) { - - // Debug.out.println("OfflineFileServer: Load Wav Data: " + offlineDataLoadInfo.getCurrentObserver().getObserverName() ); - OfflineDataMap dataMap = getDataMap(); - Iterator mapIt = dataMap.getListIterator(); - FileDataMapPoint mapPoint = findFirstMapPoint(mapIt, offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis()); - if (openSoundFile(mapPoint.getSoundFile()) == false) { - System.out.println("Could not open .wav sound file " + mapPoint.getSoundFile().getAbsolutePath()); - return false; - } - File soundFile; - - byteConverter = ByteConverter.createByteConverter(audioFormat); - long currentTime = mapPoint.getStartTime(); - long prevFileEnd = mapPoint.getEndTime(); - boolean fileGap = false; - int newSamples; - double[][] doubleData; - int nChannels = audioFormat.getChannels(); - int blockSamples = Math.max((int) audioFormat.getSampleRate() / 10, 1000); - int frameSize = audioFormat.getFrameSize(); - if (frameSize < 0) { - frameSize = audioFormat.getChannels()*audioFormat.getSampleSizeInBits()/8; - } - if (frameSize <= 0) { - System.out.println("The frame size is less than zero " + mapPoint.getSoundFile().getAbsolutePath()); - return false; - } - byte[] inputBuffer = new byte[blockSamples * frameSize]; - int bytesRead = 0; - long totalSamples = 0; - // long fileSamples = 0; - long millisecondsGaps = 0; - long ms; - - RawDataUnit newDataUnit; - long skipped = 0; - if (currentTime < offlineDataLoadInfo.getStartMillis()) { - // need to fast forward in current file. - long skipBytes = (long) (((offlineDataLoadInfo.getStartMillis()-currentTime)*audioFormat.getSampleRate()*audioFormat.getFrameSize())/1000.); - try { - skipped = audioInputStream.skip(skipBytes); - // Debug.out.println("Skipped " + skipped); - } catch (IOException e) { - /** - * The datamap point may be longer than the actual file here ? In any case, with the - * NEMO data which is 5 mins per hour, this get's hit for the file before the - * file we want every time ! - */ - // System.out.println("End of audio file " + mapPoint.getSoundFile().getName()); - e.printStackTrace(); - } - currentTime = offlineDataLoadInfo.getStartMillis(); - } - ms = currentTime; - while (ms < offlineDataLoadInfo.getEndMillis() && currentTime < offlineDataLoadInfo.getEndMillis()) { - if (offlineDataLoadInfo.cancel) { - //add the position we got to - offlineDataLoadInfo.setLastLoadInfo(new AquisitionLoadPoint(ms, bytesRead)); - - - break; - } - try { - bytesRead = audioInputStream.read(inputBuffer); - } catch (IOException e) { - e.printStackTrace(); - } - if (bytesRead <= 0) { - skipped = 0 ; //reset ot zero because were not skipping anyu bytes here. - /* - * that's the end of that file, so get the next one if there - * is one, if not then break. - */ - if (mapIt.hasNext() == false) { - break; - } - mapPoint = mapIt.next(); - fileGap = (mapPoint.getStartTime() - prevFileEnd) > 1000; - // if (fileGap) { - // System.out.println(String.format("Sound file gap %3.3fs from %s to %s", - // (double) (mapPoint.getStartTime()-prevFileEnd) / 1000., - // PamCalendar.formatTime(prevFileEnd), PamCalendar.formatTime(mapPoint.getStartTime()))); - // } - prevFileEnd = mapPoint.getEndTime(); - if (!fileGap) { // don't carry on if there is a file gap - if (openSoundFile(mapPoint.getSoundFile()) == false) { - break; - } - // try again to read data. - try { - bytesRead = audioInputStream.read(inputBuffer); - } catch (IOException e) { - e.printStackTrace(); - } - if (bytesRead <= 0) { - break; - } - } - } - newSamples = bytesRead / frameSize; - doubleData = new double[nChannels][newSamples]; - int convertedSamples = byteConverter.bytesToDouble(inputBuffer, doubleData, bytesRead); - ms = getOfflineRawDataStore().getParentProcess().absSamplesToMilliseconds(totalSamples); - ms = currentTime + (long)(totalSamples * 1000 / (double) audioFormat.getSampleRate()); - - for (int ichan = 0; ichan < nChannels; ichan++) { - - newDataUnit = new RawDataUnit(ms, 1 << ichan, totalSamples, newSamples); - newDataUnit.setFileSamples(totalSamples + skipped / frameSize); //set the number samples into the wav file. - newDataUnit.setRawData(doubleData[ichan], true); - - //System.out.println("New wav data: " + PamCalendar.formatDateTime(newDataUnit.getTimeMilliseconds())); - getRawDataBlock().addPamData(newDataUnit); - } - if (fileGap) { - currentTime = mapPoint.getStartTime(); - totalSamples = 0; - // fileSamples = 0; - } - - totalSamples += newSamples; - // fileSamples += newSamples; - } - - // System.out.println("Finished loading wav: " + offlineDataLoadInfo.getCurrentObserver().getObserverName() ); - - return false; - } - - private boolean loadFlacData(PamDataBlock dataBlock, OfflineDataLoadInfo offlineDataLoadInfo, - ViewLoadObserver loadObserver) { - // System.out.println(String.format("Load flac data from ")); - /* - * Only seem able to read whole flac files - so read the whole file - * and just output samples of interest to data units. A bit crude, - * but will probably not be too slow. - */ - OfflineDataMap dataMap = this.getDataMap(); - Iterator mapIt = dataMap.getListIterator(); - FileDataMapPoint mapPoint; - File soundFile; - mapPoint = findFirstMapPoint(mapIt, offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis()); - if (mapPoint == null) { - return false; - } - while (mapPoint != null) { - - // AudioInputStream inputStream; - // try { - // inputStream = new FlacAudioFileReader().getAudioInputStream(mapPoint.getSoundFile()); - // } catch (UnsupportedAudioFileException | IOException e1) { - // // TODO Auto-generated catch block - // e1.printStackTrace(); - // } - FileInputStream fileStream; - try { - fileStream = new FileInputStream(mapPoint.getSoundFile()); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return false; - } - FLACDecoder flacDecoder = new FLACDecoder(fileStream); - // Metadata metaData[] = null; - // try { - // metaData = flacDecoder.readMetadata(); - // } catch (IOException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - flacDecoder.addPCMProcessor(new FlacPCM(mapPoint, dataBlock, fileStream, - offlineDataLoadInfo, loadObserver)); - // StreamInfo streamInfo = flacDecoder.getStreamInfo(); // returns null ! - try { - flacDecoder.decode(); - } catch (IOException e) { - // TODO Auto-generated catch block - // e.printStackTrace(); - return false; - } - if (mapIt.hasNext() == false) { - break; - } - mapPoint = mapIt.next(); - if (mapPoint.getStartTime() > offlineDataLoadInfo.getEndMillis()) { - break; - } - } - return true; - } - - /** - * Only seem to be able to - * @author doug - * - */ - private class FlacPCM implements PCMProcessor { - - private FileInputStream fileStream; - private int frameSize; - private long fileSamples; - private int nChannels; - private FileDataMapPoint mapPoint; - private int totalSamples; - private int sampleRate; - private ViewLoadObserver loadObserver; - private PamRawDataBlock dataBlock; - private OfflineDataLoadInfo offlineDataLoadInfo; - - - long ms=-1; - - public FlacPCM(FileDataMapPoint mapPoint, PamDataBlock dataBlock, FileInputStream fileStream, OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver) { - this.mapPoint = mapPoint; - this.dataBlock = (PamRawDataBlock) dataBlock; - this.fileStream = fileStream; - this.loadObserver = loadObserver; - this.offlineDataLoadInfo=offlineDataLoadInfo; -// System.out.printf("New FLAC decoder %s working from %s to %s\n", offlineDataLoadInfo.toString(), -// PamCalendar.formatDBDateTime(offlineDataLoadInfo.getStartMillis()), -// PamCalendar.formatDBDateTime(offlineDataLoadInfo.getEndMillis())); - } - - @Override - public void processPCM(ByteData byteData) { - if (offlineDataLoadInfo.cancel) { - - try { - fileStream.close(); - ms = Math.max(offlineDataLoadInfo.getStartMillis(), ms); - offlineDataLoadInfo.setLastLoadInfo(new AquisitionLoadPoint(ms, -1)); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - ms = mapPoint.getStartTime() + (long)totalSamples * 1000L / (long)sampleRate; - // System.out.println(String.format("PCM data at %s samps %d (load %s - %s)", PamCalendar.formatTime2(ms, 3), totalSamples, - // PamCalendar.formatTime2(dataStart, 3), PamCalendar.formatTime2(dataEnd, 3))); - if (ms > offlineDataLoadInfo.getEndMillis()) { - try { - fileStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - int newSamples = byteData.getLen() / frameSize; - if (ms >= offlineDataLoadInfo.getStartMillis()) { - double[][] doubleData = new double[nChannels][newSamples]; - byteConverter.bytesToDouble(byteData.getData(), doubleData, byteData.getLen()); - RawDataUnit newDataUnit = null; - for (int ichan = 0; ichan < nChannels; ichan++) { - - newDataUnit = new RawDataUnit(ms, 1 << ichan, totalSamples, newSamples); - newDataUnit.setRawData(doubleData[ichan]); - - dataBlock.addPamData(newDataUnit); - - // GetOutputDataBlock().addPamData(pamDataUnit); - } - } - // System.out.println(String.format("new samps %d at %s", newSamples, PamCalendar.formatTime(ms, 3))); - - totalSamples += newSamples; - - } - - @Override - public void processStreamInfo(StreamInfo streamInfo) { - frameSize = streamInfo.getChannels() * streamInfo.getBitsPerSample() / 8; - byteConverter = ByteConverter.createByteConverter(streamInfo.getBitsPerSample() / 8, false, Encoding.PCM_SIGNED); - fileSamples = streamInfo.getTotalSamples(); - nChannels = streamInfo.getChannels(); - sampleRate = streamInfo.getSampleRate(); - } - - } - - private boolean openSoundFile(File soundFile) { - - try { - audioInputStream = PamAudioSystem.getAudioInputStream(soundFile); - if (audioInputStream == null) return false; - audioFormat = audioInputStream.getFormat(); - } catch (UnsupportedAudioFileException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - return false; - } - - return true; - } + @Override public boolean loadData(PamDataBlock dataBlock, OfflineDataLoadInfo offlineLoadDataInfo, ViewLoadObserver loadObserver) { @@ -482,34 +176,17 @@ public class OfflineWavFileServer extends OfflineFileServer { if (mapPoint == null) { return false; } - if (mapPoint.getSoundFile().getName().toLowerCase().endsWith(".flac")) { - return loadFlacData(dataBlock, offlineLoadDataInfo, loadObserver); + + PamAudioFileLoader audioFile = PamAudioFileManager.getInstance().getAudioLoader(mapPoint.getSoundFile()); + + if (audioFile==null) { + System.err.println("OfflineWavFileServer: could not find audio loader for mapped sound file: " + mapPoint.getSoundFile()); + return false; } -// if (mapPoint.getSoundFile().getName().toLowerCase().endsWith(".wav")) { - if (isStandardAudio(mapPoint.getSoundFile().getName())) { - return loadWavData(dataBlock, offlineLoadDataInfo, loadObserver); - } - - return true; + + return audioFile.loadAudioData(this, dataBlock, offlineLoadDataInfo, loadObserver); + } - private String[] standardAudioTypes = {".wav", ".aif", ".aiff"}; - - /** - * Is it a standard aif or wav audio file which can be opened with the standard reader ? - * @param fileName - * @return - */ - private boolean isStandardAudio(String fileName) { - if (fileName == null) { - return false; - } - fileName = fileName.toLowerCase(); - for (int i = 0; i < standardAudioTypes.length; i++) { - if (fileName.endsWith(standardAudioTypes[i])) { - return true; - } - } - return false; - } + } diff --git a/src/Acquisition/pamAudio/FlacAudioFile.java b/src/Acquisition/pamAudio/FlacAudioFile.java new file mode 100644 index 00000000..13d95b87 --- /dev/null +++ b/src/Acquisition/pamAudio/FlacAudioFile.java @@ -0,0 +1,236 @@ +package Acquisition.pamAudio; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; + +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.UnsupportedAudioFileException; +import javax.sound.sampled.AudioFormat.Encoding; + +import org.jflac.FLACDecoder; +import org.jflac.PCMProcessor; +import org.jflac.metadata.StreamInfo; +import org.jflac.sound.spi.FlacAudioFileReader; +import org.jflac.util.ByteData; + +import Acquisition.offlineFuncs.AquisitionLoadPoint; +import PamDetection.RawDataUnit; +import PamguardMVC.PamDataBlock; +import PamguardMVC.PamRawDataBlock; +import PamguardMVC.dataOffline.OfflineDataLoadInfo; +import dataMap.OfflineDataMap; +import dataMap.filemaps.FileDataMapPoint; +import dataMap.filemaps.OfflineFileServer; +import pamScrollSystem.ViewLoadObserver; +import wavFiles.ByteConverter; + + +/** + * Opens a Flac compressed audio files. + * + * @author Jamie Macaulay, Doug Gillespie + * + */ +public class FlacAudioFile implements PamAudioFileLoader { + + + /** + * Get the file extensions associated with loading these data. + */ + private ArrayList fileExtensions; + + public FlacAudioFile() { + fileExtensions = new ArrayList(Arrays.asList(new String[]{".flac"})); + } + + @Override + public ArrayList getFileExtensions() { + return fileExtensions; + } + + @Override + public String getName() { + return "FLAC"; + } + + @Override + public AudioInputStream getAudioStream(File soundFile) { + if (soundFile != null && isFlacFile(soundFile)) { + try { + return new FlacAudioFileReader().getAudioInputStream(soundFile); + } + catch (UnsupportedAudioFileException | IOException e) { + System.err.println("Could not open flac file: " + soundFile.getName()); + return null; + } + } + return null; + } + + @Override + public boolean loadAudioData(OfflineFileServer offlineFileServer, PamDataBlock dataBlock, OfflineDataLoadInfo offlineDataLoadInfo, + ViewLoadObserver loadObserver) { + // System.out.println(String.format("Load flac data from ")); + /* + * Only seem able to read whole flac files - so read the whole file + * and just output samples of interest to data units. A bit crude, + * but will probably not be too slow. + */ + OfflineDataMap dataMap = offlineFileServer.getDataMap(); + Iterator mapIt = dataMap.getListIterator(); + FileDataMapPoint mapPoint; + File soundFile; + mapPoint = offlineFileServer.findFirstMapPoint(mapIt, offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis()); + if (mapPoint == null) { + return false; + } + while (mapPoint != null) { + + // AudioInputStream inputStream; + // try { + // inputStream = new FlacAudioFileReader().getAudioInputStream(mapPoint.getSoundFile()); + // } catch (UnsupportedAudioFileException | IOException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } + FileInputStream fileStream; + try { + fileStream = new FileInputStream(mapPoint.getSoundFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return false; + } + FLACDecoder flacDecoder = new FLACDecoder(fileStream); + // Metadata metaData[] = null; + // try { + // metaData = flacDecoder.readMetadata(); + // } catch (IOException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + flacDecoder.addPCMProcessor(new FlacPCM(mapPoint, dataBlock, fileStream, + offlineDataLoadInfo, loadObserver)); + // StreamInfo streamInfo = flacDecoder.getStreamInfo(); // returns null ! + try { + flacDecoder.decode(); + } catch (IOException e) { + // TODO Auto-generated catch block + // e.printStackTrace(); + return false; + } + if (mapIt.hasNext() == false) { + break; + } + mapPoint = mapIt.next(); + if (mapPoint.getStartTime() > offlineDataLoadInfo.getEndMillis()) { + break; + } + } + return true; + } + + /** + * Only seem to be able to + * @author doug + * + */ + private class FlacPCM implements PCMProcessor { + + private FileInputStream fileStream; + private int frameSize; + private long fileSamples; + private int nChannels; + private FileDataMapPoint mapPoint; + private int totalSamples; + private int sampleRate; + private ViewLoadObserver loadObserver; + private PamRawDataBlock dataBlock; + private OfflineDataLoadInfo offlineDataLoadInfo; + + + long ms=-1; + private ByteConverter byteConverter; + + public FlacPCM(FileDataMapPoint mapPoint, PamDataBlock dataBlock, FileInputStream fileStream, OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver) { + this.mapPoint = mapPoint; + this.dataBlock = (PamRawDataBlock) dataBlock; + this.fileStream = fileStream; + this.loadObserver = loadObserver; + this.offlineDataLoadInfo=offlineDataLoadInfo; + // System.out.printf("New FLAC decoder %s working from %s to %s\n", offlineDataLoadInfo.toString(), + // PamCalendar.formatDBDateTime(offlineDataLoadInfo.getStartMillis()), + // PamCalendar.formatDBDateTime(offlineDataLoadInfo.getEndMillis())); + } + + @Override + public void processPCM(ByteData byteData) { + if (offlineDataLoadInfo.cancel) { + + try { + fileStream.close(); + ms = Math.max(offlineDataLoadInfo.getStartMillis(), ms); + offlineDataLoadInfo.setLastLoadInfo(new AquisitionLoadPoint(ms, -1)); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + ms = mapPoint.getStartTime() + (long)totalSamples * 1000L / (long)sampleRate; + // System.out.println(String.format("PCM data at %s samps %d (load %s - %s)", PamCalendar.formatTime2(ms, 3), totalSamples, + // PamCalendar.formatTime2(dataStart, 3), PamCalendar.formatTime2(dataEnd, 3))); + if (ms > offlineDataLoadInfo.getEndMillis()) { + try { + fileStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + int newSamples = byteData.getLen() / frameSize; + if (ms >= offlineDataLoadInfo.getStartMillis()) { + double[][] doubleData = new double[nChannels][newSamples]; + byteConverter.bytesToDouble(byteData.getData(), doubleData, byteData.getLen()); + RawDataUnit newDataUnit = null; + for (int ichan = 0; ichan < nChannels; ichan++) { + + newDataUnit = new RawDataUnit(ms, 1 << ichan, totalSamples, newSamples); + newDataUnit.setRawData(doubleData[ichan]); + + dataBlock.addPamData(newDataUnit); + + // GetOutputDataBlock().addPamData(pamDataUnit); + } + } + // System.out.println(String.format("new samps %d at %s", newSamples, PamCalendar.formatTime(ms, 3))); + + totalSamples += newSamples; + + } + + @Override + public void processStreamInfo(StreamInfo streamInfo) { + frameSize = streamInfo.getChannels() * streamInfo.getBitsPerSample() / 8; + byteConverter = ByteConverter.createByteConverter(streamInfo.getBitsPerSample() / 8, false, Encoding.PCM_SIGNED); + fileSamples = streamInfo.getTotalSamples(); + nChannels = streamInfo.getChannels(); + sampleRate = streamInfo.getSampleRate(); + } + + } + + private static boolean isFlacFile(File file) { + String name = file.getName(); + if (name.length() < 5) { + return false; + } + String end = name.substring(name.length()-5).toLowerCase(); + return (end.equals(".flac")); + } + +} diff --git a/src/Acquisition/pamAudio/PamAudioFile.java b/src/Acquisition/pamAudio/PamAudioFile.java new file mode 100644 index 00000000..08076875 --- /dev/null +++ b/src/Acquisition/pamAudio/PamAudioFile.java @@ -0,0 +1,52 @@ +package Acquisition.pamAudio; + +import java.io.File; +import java.util.ArrayList; + +import javax.sound.sampled.AudioInputStream; + +import PamguardMVC.PamDataBlock; +import PamguardMVC.dataOffline.OfflineDataLoadInfo; +import dataMap.filemaps.OfflineFileServer; +import pamScrollSystem.ViewLoadObserver; + +/** + * Interface for PAMGuard opening a sound file. + * + * @author Jamie Macaulay + * + */ +public interface PamAudioFile { + + /** + * Get file extensions associated with the file type + * @return a list of the file extensions (e.g.".wav") + */ + public ArrayList getFileExtensions(); + + + /** + * Get the name of the file. + * @return the name of the file + */ + public String getName(); + + + /** + * Get the audio stream for the file + * @return the audio input stream. + */ + public AudioInputStream getAudioStream(File soundFile); + + /** + * Load a section of audio data. + * @param dataBlock - the data block. + * @param offlineFileServer - the offline file server. + * @param offlineDataLoadInfo - the offline data load info. + * @return true if the file has been loaded + */ + boolean loadAudioData(OfflineFileServer offlineFileServer, PamDataBlock dataBlock, + OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver); + + +} diff --git a/src/Acquisition/pamAudio/PamAudioFileFilter.java b/src/Acquisition/pamAudio/PamAudioFileFilter.java new file mode 100644 index 00000000..2616c2b8 --- /dev/null +++ b/src/Acquisition/pamAudio/PamAudioFileFilter.java @@ -0,0 +1,87 @@ +package Acquisition.pamAudio; + +import java.io.File; + +import org.apache.commons.io.FilenameUtils; + +import PamUtils.PamFileFilter; + +/** + * The file filter for audio files compatible with PAMGuard. + *

+ * All file extensions from all PamAudioFileLoaders in PamAudioManager are + * accepted by the file filter. The file filter will aslo discard compressed + * audio files if there exists a raw audio file of the same name. + * + * @author Jamie Macaulay + * + */ +public class PamAudioFileFilter extends PamFileFilter { + + private PamAudioFileManager pamAudioFileManager; + + public PamAudioFileFilter(PamAudioFileManager pamAudioFileManager) { + + /** + * PamfileFilter converts everything to lower case, so no need to have upper and lower versions of + * each ending. + */ + super("Audio Files", ".wav"); + + this.pamAudioFileManager = pamAudioFileManager; + + //add all the file types. + for (int i=0; i getFileExtensions(); + + + /** + * Get the name of the file. + * @return the name of the file + */ + public String getName(); + + + /** + * Get the audio stream for the file + * @return the audio input stream. + */ + public AudioInputStream getAudioStream(File soundFile); + + /** + * Load a section of audio data. + * @param dataBlock - the data block. + * @param offlineFileServer - the offline file server. + * @param offlineDataLoadInfo - the offline data load info. + * @return true if the file has been loaded + */ + public boolean loadAudioData(OfflineFileServer offlineFileServer, PamDataBlock dataBlock, + OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver); + + +} diff --git a/src/Acquisition/pamAudio/PamAudioFileManager.java b/src/Acquisition/pamAudio/PamAudioFileManager.java new file mode 100644 index 00000000..18188b9e --- /dev/null +++ b/src/Acquisition/pamAudio/PamAudioFileManager.java @@ -0,0 +1,173 @@ +package Acquisition.pamAudio; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.UnsupportedAudioFileException; + +import org.codehaus.plexus.util.FileUtils; + +/** + * Central class for opening sound files. + *

+ * PamAudioFieManager holds a list of PamAudioFile classes. Each PamAudioFile + * can open a certain type of sound file e.g. flac or raw wav files. + * PamAudioFieManager provides fucntions around the list to open files, provide + * file filters etc. + * + * @author Jamie Macaulay + * + */ +public class PamAudioFileManager { + + /** + * Instance of the PamAudioFieManager. + */ + private static PamAudioFileManager pamAudioFileManager; + + /** + * The pam audio file types. + */ + private ArrayList pamAudioFileTypes; + + /** + * The default file loader for raw files. A reference to this is kept so that + * file loaders can preferentially select raw files over compressed file if they + * have the same name e.g. if using a folder of uncompressed SoundTrap data that + * contains both .sud and .wav files then only .wav files should be read. + */ + private WavAudioFile rawFileLoader; + + public PamAudioFileManager() { + pamAudioFileTypes = new ArrayList(); + + /***** Add new audio file types here *****/ + pamAudioFileTypes.add(rawFileLoader = new WavAudioFile()); + pamAudioFileTypes.add(new FlacAudioFile()); + pamAudioFileTypes.add(new SudAudioFile()); + + } + + /** + * Get the audio file loader for a file. + * + * @param soundFile - the sound file + * @return the audio file loader. + */ + public PamAudioFileLoader getAudioLoader(File soundFile) { + for (int i = 0; i < pamAudioFileTypes.size(); i++) { + if (isExtension(soundFile, pamAudioFileTypes.get(i))) { + return pamAudioFileTypes.get(i); + } + } + return null; + } + + /** + * Check if a file has an extension supported by a PamAudioFile. + * + * @param file + * @param pamAudioFile + */ + public boolean isExtension(File file, PamAudioFileLoader pamAudioFile) { + for (int i = 0; i < pamAudioFile.getFileExtensions().size(); i++) { + if (isSoundFile(file, pamAudioFile.getFileExtensions().get(i))) { + return true; + } + } + return false; + } + + public boolean isSoundFile(File soundFile, String soundExtension) { + String extension = FileUtils.getExtension(soundFile.getName()); + + //System.out.println("Sound Extension: " + soundExtension + " File extension: " + extension); + return (soundExtension.equals(extension) || soundExtension.equals("." + extension)); + } + + /** + * Open an audio input stream. If the file is a Wav file, then it will attempt + * to read the file with PAMGuards bespoke audio stream reader. This includes + * support for wav files which are > 2GByte in size and also works for floating + * point 32 bit files (which the Java one doesn't). If that fails, or if its not + * a wav file, then the standard java AudioInputStream is used. + * + * @param file file to open + * @return a new audio input stream + * @throws UnsupportedAudioFileException thrown if it can't understand the audio + * format. + * @throws IOException + */ + public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException { + // if (file != null && isWavFile(file) && file.length() > largeFileSize) { + if (file.exists() == false) { + System.err.println("PamAudioFileManager: the input file was null"); + return null; + } + + AudioInputStream stream = null; + for (int i = 0; i < pamAudioFileTypes.size(); i++) { + System.out.println(file.getName() + " " + pamAudioFileTypes.get(i).getName()); + if (isExtension(file, pamAudioFileTypes.get(i))) { + //System.out.println("Get stream for: " +pamAudioFileTypes.get(i).getName()); + stream = pamAudioFileTypes.get(i).getAudioStream(file); + if (pamAudioFileTypes != null) { + break; + } + } + } + + if (stream == null) { + // have a punt at opening as a default audiostream + //System.out.println("Try default stream for: " +file.getName() ); + + stream = new WavAudioFile().getAudioStream(file); + } + + if (stream == null) { + System.err.println("PamAudioFileManager: unable to open an AudioStream for " + file.getName()); + } + + return stream; + + } + + /** + * Get the instance of the PamAudioManager + */ + public static PamAudioFileManager getInstance() { + if (pamAudioFileManager == null) { + pamAudioFileManager = new PamAudioFileManager(); + } + return pamAudioFileManager; + } + + /** + * Get the audio file filter + * + * @return the audio file filter. + */ + public PamAudioFileFilter getAudioFileFilter() { + return new PamAudioFileFilter(this); + } + + /** + * Get the current audio file + * + * @return a list oif the current audio loaders. + */ + public ArrayList getAudioFileLoaders() { + return this.pamAudioFileTypes; + } + + /** + * Get the default file loader for raw files. + * @return the default file loader for raw files. + */ + public WavAudioFile getRawFileLoader() { + return rawFileLoader; + } + +} diff --git a/src/Acquisition/pamAudio/PamAudioSystem.java b/src/Acquisition/pamAudio/PamAudioSystem.java index e63b19bd..ae50726f 100644 --- a/src/Acquisition/pamAudio/PamAudioSystem.java +++ b/src/Acquisition/pamAudio/PamAudioSystem.java @@ -10,7 +10,13 @@ import javax.sound.sampled.UnsupportedAudioFileException; //import org.kc7bfi.jflac.sound.spi.FlacAudioFileReader; import org.jflac.sound.spi.FlacAudioFileReader; - +/** + * Now replaced with PamAudioFileManager. + * + * @author Jamie Macaulay + * + */ +@Deprecated public class PamAudioSystem { private static final long largeFileSize = 01L<<31; @@ -42,7 +48,7 @@ public class PamAudioSystem { return new FlacAudioFileReader().getAudioInputStream(file); } catch (UnsupportedAudioFileException e) { - + } } else if (file != null && isSudFile(file)) { @@ -50,14 +56,15 @@ public class PamAudioSystem { return new SudAudioFileReader().getAudioInputStream(file); } catch (UnsupportedAudioFileException e) { - + //e.printStackTrace(); } } try { - return AudioSystem.getAudioInputStream(file); + return AudioSystem.getAudioInputStream(file); } catch (Exception e) { System.out.println("Error in audio file " + file.getName() + ": " + e.getMessage()); + e.printStackTrace(); return null; } } @@ -93,10 +100,10 @@ public class PamAudioSystem { */ private static boolean isSudFile(File file) { String name = file.getName(); - if (name.length() < 5) { + if (name.length() < 4) { return false; } - String end = name.substring(name.length()-5).toLowerCase(); + String end = name.substring(name.length()-4).toLowerCase(); return (end.equals(".sud")); } diff --git a/src/Acquisition/pamAudio/SudAudioFile.java b/src/Acquisition/pamAudio/SudAudioFile.java new file mode 100644 index 00000000..b496301d --- /dev/null +++ b/src/Acquisition/pamAudio/SudAudioFile.java @@ -0,0 +1,63 @@ +package Acquisition.pamAudio; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; + +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.UnsupportedAudioFileException; + +/** + * Opens a .sud audio file. + *

+ * Sud files contain X3 compressed audio data. The sud + * file reader opens files, creating a map of the file and saving + * the map as a.sudx file so it can be read more rapidly when the file + * is next accessed. + *

+ * The SudioAudioInput stream fully implements AudioInputStream and so + * sud files can be accessed using much of the same code as .wav files. + * + * @author Jamie Macaulay + * + */ +public class SudAudioFile extends WavAudioFile { + + + public SudAudioFile() { + super(); + fileExtensions = new ArrayList(Arrays.asList(new String[]{".sud"})); + } + + @Override + public String getName() { + return "SUD"; + } + + + @Override + public AudioInputStream getAudioStream(File soundFile) { + if (soundFile.exists() == false) { + System.err.println("The sud file does not exist: " + soundFile); + return null; + } + if (soundFile != null) { + try { + return new SudAudioFileReader().getAudioInputStream(soundFile); + } + // don't do anything and it will try the built in Audiosystem + catch (UnsupportedAudioFileException e) { + System.err.println("Could not open sud file: not a supported file " + soundFile.getName()); + + e.printStackTrace(); + } catch (IOException e) { + System.err.println("Could not open sud file: IO Exception: " + soundFile.getName()); + + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/Acquisition/pamAudio/SudAudioFileReader.java b/src/Acquisition/pamAudio/SudAudioFileReader.java index 0a88149e..ba407e54 100644 --- a/src/Acquisition/pamAudio/SudAudioFileReader.java +++ b/src/Acquisition/pamAudio/SudAudioFileReader.java @@ -2,6 +2,7 @@ package Acquisition.pamAudio; import java.io.File; import java.io.IOException; +import org.pamguard.x3.sud.*; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.UnsupportedAudioFileException; @@ -13,11 +14,41 @@ import javax.sound.sampled.UnsupportedAudioFileException; * */ public class SudAudioFileReader { - + /** + * The current sud audio input stream + */ + SudAudioInputStream sudAudioInputStream; + + /** + * Parameters for opening .sud files. + */ + SudParams sudParams; + + + public SudAudioFileReader() { + sudParams = new SudParams(); + //set up the sud params for default. i.e. just read files and + //don't save any decompressed or meta data. + sudParams.saveWav = false; + sudParams.saveMeta = false; + sudParams.zeroPad = true; + } + + /** + * Get the audio input streamn. + * @param file - the .sud file to open. + * @return the sud AudioStream. + * @throws UnsupportedAudioFileException + * @throws IOException + */ public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException { - // TODO Auto-generated method stub - return null; + try { + sudAudioInputStream = SudAudioInputStream.openInputStream(file, sudParams, false); + } catch (Exception e) { + e.printStackTrace(); + } + return sudAudioInputStream; } } diff --git a/src/Acquisition/pamAudio/WavAudioFile.java b/src/Acquisition/pamAudio/WavAudioFile.java new file mode 100644 index 00000000..bf0ec6d0 --- /dev/null +++ b/src/Acquisition/pamAudio/WavAudioFile.java @@ -0,0 +1,250 @@ +package Acquisition.pamAudio; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.UnsupportedAudioFileException; + +import org.codehaus.plexus.util.FileUtils; +import Acquisition.offlineFuncs.AquisitionLoadPoint; +import PamDetection.RawDataUnit; +import PamguardMVC.PamDataBlock; +import PamguardMVC.dataOffline.OfflineDataLoadInfo; +import dataMap.OfflineDataMap; +import dataMap.filemaps.FileDataMapPoint; +import dataMap.filemaps.OfflineFileServer; +import pamScrollSystem.ViewLoadObserver; +import wavFiles.ByteConverter; + +/** + * Wav audio file - opens any raw audio file. + *

+ * This should be used a standard class for opening audio files + * + * @author Jamie Macaulay, Doug Gillepsie + * + */ +public class WavAudioFile implements PamAudioFileLoader { + + /** + * The audio input stream of the last loaded file. + */ + private AudioInputStream audioInputStream; + + /** + * The audioformat of the last laoded file. + */ + private AudioFormat audioFormat; + + /** + * Get the file extensions associated with loading these data. + */ + protected ArrayList fileExtensions; + + public WavAudioFile() { + fileExtensions = new ArrayList(Arrays.asList(new String[]{".wav", ".aif", ".aiff"})); + } + + @Override + public ArrayList getFileExtensions() { + return fileExtensions; + } + + @Override + public String getName() { + return "WAV"; + } + + @Override + public boolean loadAudioData(OfflineFileServer offlineFileServer, PamDataBlock dataBlock, OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver) { + + // Debug.out.println("OfflineFileServer: Load Wav Data: " + offlineDataLoadInfo.getCurrentObserver().getObserverName() ); + OfflineDataMap dataMap = offlineFileServer.getDataMap(); + Iterator mapIt = dataMap.getListIterator(); + FileDataMapPoint mapPoint = offlineFileServer.findFirstMapPoint(mapIt, offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis()); + + if (openSoundFile(mapPoint.getSoundFile()) == false) { + System.out.println("Could not open .wav sound file " + mapPoint.getSoundFile().getAbsolutePath()); + return false; + } + File soundFile; + + ByteConverter byteConverter = ByteConverter.createByteConverter(audioFormat); + long currentTime = mapPoint.getStartTime(); + long prevFileEnd = mapPoint.getEndTime(); + boolean fileGap = false; + int newSamples; + double[][] doubleData; + int nChannels = audioFormat.getChannels(); + int blockSamples = Math.max((int) audioFormat.getSampleRate() / 10, 1000); + int frameSize = audioFormat.getFrameSize(); + if (frameSize < 0) { + frameSize = audioFormat.getChannels()*audioFormat.getSampleSizeInBits()/8; + } + if (frameSize <= 0) { + System.out.println("The frame size is less than zero " + mapPoint.getSoundFile().getAbsolutePath()); + return false; + } + byte[] inputBuffer = new byte[blockSamples * frameSize]; + int bytesRead = 0; + long totalSamples = 0; + // long fileSamples = 0; + long millisecondsGaps = 0; + long ms; + + RawDataUnit newDataUnit; + long skipped = 0; + if (currentTime < offlineDataLoadInfo.getStartMillis()) { + // need to fast forward in current file. + long skipBytes = (long) (((offlineDataLoadInfo.getStartMillis()-currentTime)*audioFormat.getSampleRate()*audioFormat.getFrameSize())/1000.); + try { + + //System.out.println("Skipped " + skipped+ " " + skipBytes + " " + audioInputStream.available()); + skipped = audioInputStream.skip(skipBytes); + //System.out.println("Offline " + (offlineDataLoadInfo.getStartMillis()-currentTime) + " ms : frame size: " + audioFormat.getFrameSize()); + + } catch (IOException e) { + /** + * The datamap point may be longer than the actual file here ? In any case, with the + * NEMO data which is 5 mins per hour, this get's hit for the file before the + * file we want every time ! + */ + // System.out.println("End of audio file " + mapPoint.getSoundFile().getName()); + e.printStackTrace(); + } + currentTime = offlineDataLoadInfo.getStartMillis(); + } + ms = currentTime; + while (ms < offlineDataLoadInfo.getEndMillis() && currentTime < offlineDataLoadInfo.getEndMillis()) { + if (offlineDataLoadInfo.cancel) { + //add the position we got to + offlineDataLoadInfo.setLastLoadInfo(new AquisitionLoadPoint(ms, bytesRead)); + + + break; + } + try { + if (inputBuffer.length 1000; + // if (fileGap) { + // System.out.println(String.format("Sound file gap %3.3fs from %s to %s", + // (double) (mapPoint.getStartTime()-prevFileEnd) / 1000., + // PamCalendar.formatTime(prevFileEnd), PamCalendar.formatTime(mapPoint.getStartTime()))); + // } + prevFileEnd = mapPoint.getEndTime(); + if (!fileGap) { // don't carry on if there is a file gap + if (openSoundFile(mapPoint.getSoundFile()) == false) { + break; + } + // try again to read data. + try { + bytesRead = audioInputStream.read(inputBuffer); + } catch (IOException e) { + e.printStackTrace(); + } + if (bytesRead <= 0) { + break; + } + } + } + newSamples = bytesRead / frameSize; + doubleData = new double[nChannels][newSamples]; + int convertedSamples = byteConverter.bytesToDouble(inputBuffer, doubleData, bytesRead); + ms = offlineFileServer.getOfflineRawDataStore().getParentProcess().absSamplesToMilliseconds(totalSamples); + ms = currentTime + (long)(totalSamples * 1000 / (double) audioFormat.getSampleRate()); + + for (int ichan = 0; ichan < nChannels; ichan++) { + + newDataUnit = new RawDataUnit(ms, 1 << ichan, totalSamples, newSamples); + newDataUnit.setFileSamples(totalSamples + skipped / frameSize); //set the number samples into the wav file. + newDataUnit.setRawData(doubleData[ichan], true); + + //System.out.println("New wav data: " + PamCalendar.formatDateTime(newDataUnit.getTimeMilliseconds())); + offlineFileServer.getRawDataBlock().addPamData(newDataUnit); + } + if (fileGap) { + currentTime = mapPoint.getStartTime(); + totalSamples = 0; + // fileSamples = 0; + } + + totalSamples += newSamples; + // fileSamples += newSamples; + } + + // System.out.println("Finished loading wav: " + offlineDataLoadInfo.getCurrentObserver().getObserverName() ); + + return false; + } + + + /** + * Open a sound file. + * @param soundFile + * @return + */ + private boolean openSoundFile(File soundFile) { + + audioInputStream = getAudioStream(soundFile); + if (audioInputStream == null) return false; + audioFormat = audioInputStream.getFormat(); + + return true; + } + + + @Override + public AudioInputStream getAudioStream(File soundFile) { + if (soundFile.exists() == false) return null; + if (soundFile != null && isSoundFile(soundFile)) { + try { + return WavFileInputStream.openInputStream(soundFile); + } + catch (UnsupportedAudioFileException | IOException e) { + e.printStackTrace(); + // don't do anything and it will try the built in Audiosystem + System.err.println("Could not open wav file: trying default audio stream: " + soundFile.getName()); + } + } + try { + return AudioSystem.getAudioInputStream(soundFile); + } + catch (Exception e) { + System.out.println("Error in audio file " + soundFile.getName() + ": " + e.getMessage()); + e.printStackTrace(); + return null; + } + } + + + public boolean isSoundFile(File soundFile) { + String extension = FileUtils.getExtension(soundFile.getName()); + return (extension.equals(".wav")); + } + + +} diff --git a/src/IshmaelDetector/MatchFiltParamsDialog.java b/src/IshmaelDetector/MatchFiltParamsDialog.java index 4442a2c6..28aa086b 100644 --- a/src/IshmaelDetector/MatchFiltParamsDialog.java +++ b/src/IshmaelDetector/MatchFiltParamsDialog.java @@ -33,8 +33,8 @@ import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; +import Acquisition.pamAudio.PamAudioFileFilter; import PamDetection.RawDataUnit; -import PamUtils.PamAudioFileFilter; import PamUtils.PamFileChooser; diff --git a/src/Localiser/algorithms/timeDelayLocalisers/bearingLoc/DelayOptionsPaneFX.java b/src/Localiser/algorithms/timeDelayLocalisers/bearingLoc/DelayOptionsPaneFX.java new file mode 100644 index 00000000..fa81ad92 --- /dev/null +++ b/src/Localiser/algorithms/timeDelayLocalisers/bearingLoc/DelayOptionsPaneFX.java @@ -0,0 +1,221 @@ +package Localiser.algorithms.timeDelayLocalisers.bearingLoc; + + +import Localiser.DelayMeasurementParams; +import PamController.SettingsPane; +import fftFilter.FFTFilterParams; +import javafx.scene.Node; +import javafx.scene.control.CheckBox; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.control.Tooltip; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Pane; +import pamViewFX.fxNodes.PamButton; +import pamViewFX.fxNodes.PamGridPane; +import pamViewFX.fxNodes.PamSpinner; +import pamViewFX.fxNodes.pamDialogFX.PamDialogFX; +import pamViewFX.fxNodes.utilityPanes.SimpleFilterPaneFX; + +public class DelayOptionsPaneFX extends SettingsPane { + + + private CheckBox filterBearings, envelopeBearings, useLeadingEdge, upSample; + private PamButton filterSettings; + private Label filterDescription; + + /** + * The current delay measurement parameters. + */ + private DelayMeasurementParams delayMeasurementParams; + + + /** + * Check box for restricting samples. + */ + private CheckBox restrictSamples; + + /** + * Restrict the number of samples. + */ + private TextField restrictSamplesField; + + private PamSpinner upSampleSpinner; + + + private SimpleFilterPaneFX simpleFilterPane = new SimpleFilterPaneFX(); + + public DelayOptionsPaneFX() { + super(null); + // TODO Auto-generated constructor stub + } + + + public Pane createDelayOptionsPane() { + int gridy=0; + + PamGridPane mainPanel = new PamGridPane(); +// mainPanel.setBorder(new TitledBorder("Delay measurement options")); + mainPanel.add(filterBearings = new CheckBox("Filter data before measurement"), 0,gridy); + PamGridPane.setColumnSpan(filterBearings, 2); + filterBearings.setOnAction((action)->{ + enableControls(); + }); + gridy++; + + mainPanel.add(filterSettings = new PamButton("Settings"), 0,gridy); + filterSettings.setOnAction((action)->{ + FFTFilterParams newParams = simpleFilterPane.getParams(delayMeasurementParams.delayFilterParams); + if (newParams != null) { + delayMeasurementParams.delayFilterParams = newParams.clone(); + describeFilter(); + } + }); + gridy++; + + mainPanel.add(filterDescription = new Label(" "), 0,gridy); + gridy++; + mainPanel.add(upSample = new CheckBox("Up sample data x2"), 0,gridy); + upSample.setTooltip(new Tooltip("Up sampling data to a higher frequency can improve timing accuracy for narrow band clicks (i.e. harbour porpoise)")); + gridy++; + + + //SpinnerListModel spinnerModel = new SpinnerListModel(Arrays.asList(new Integer[] {2,3,4})); //restrict the spinenr options. + + mainPanel.add(upSampleSpinner = new PamSpinner(2,4,2,1), 0,gridy); + upSampleSpinner.valueProperty().addListener((obsval, oldVa, newVal)->{ + upSample.setText("Up sample data x" + this.upSampleSpinner.getValue()); + }); + gridy++; + + mainPanel.add(envelopeBearings = new CheckBox("Use waveform envelope"), 0, gridy); + gridy++; + + + mainPanel.add(new Label(" "), 0, gridy); + gridy++; + + mainPanel.add(new Label(" "), 0, gridy); + gridy++; + + + mainPanel.add(useLeadingEdge = new CheckBox("Use envelope leading edge only"), 0, gridy); + gridy++; + PamGridPane.setColumnSpan(useLeadingEdge, 2); + envelopeBearings.setOnAction((action)->{ + enableControls(); + }); + envelopeBearings.setOnAction((action)->{ + enableControls(); + }); + PamGridPane.setColumnSpan(envelopeBearings, 2); + + + //restrict + mainPanel.add(restrictSamples = new CheckBox("Restrict length"), 0, gridy); + gridy++; + PamGridPane.setColumnSpan(restrictSamples, 2); + restrictSamples.setOnAction((action)->{ + enableControls(); + }); + mainPanel.add(restrictSamplesField = new TextField(), 2, gridy); + + + restrictSamples.setTooltip(new Tooltip("In environments where echoes are an issue restricting inital samples of detections " + + "(e.g. click snippets) is a simple but effective way to increase the accuracy of time delay calculations. " + + "WARNING: Remember that this must cover the potential time delay in grouped detections ")); + filterBearings.setTooltip(new Tooltip("Filter data prior to bearing measurement to imporve accuracy")); + filterSettings.setTooltip(new Tooltip("Setup filter options")); + envelopeBearings.setTooltip(new Tooltip("Using the envelope can provide more accurate bearings for some narrowband pulses")); + filterDescription.setTooltip(new Tooltip("Current filter settings")); + useLeadingEdge.setTooltip(new Tooltip("For long pulses, or where there are echoes, restrict the calculation to the leading edge of the envelope")); + + BorderPane pane = new BorderPane(); + pane.setCenter(mainPanel); + + return pane; + } + + + private void enableControls() { + filterSettings.setDisable(!filterBearings.isSelected()); + filterDescription.setDisable(!filterBearings.isSelected()); + useLeadingEdge.setDisable(!envelopeBearings.isSelected()); + restrictSamplesField.setDisable(!restrictSamples.isSelected()); + if (!envelopeBearings.isSelected()) { +// useLeadingEdge.setSelected(false); + } + } + + private void describeFilter() { + if (delayMeasurementParams == null || delayMeasurementParams.delayFilterParams == null) { + filterDescription.setText("No filter"); + return; + } + filterDescription.setText(delayMeasurementParams.delayFilterParams.toString()); + } + + @Override + public void setParams(DelayMeasurementParams delayMeasurementParams) { + this.delayMeasurementParams = delayMeasurementParams; + filterBearings.setSelected(delayMeasurementParams.filterBearings); + upSample.setSelected(delayMeasurementParams.getUpSample() > 1); + envelopeBearings.setSelected(delayMeasurementParams.envelopeBearings); + useLeadingEdge.setSelected(delayMeasurementParams.useLeadingEdge); + restrictSamples.setSelected(delayMeasurementParams.useRestrictedBins); + restrictSamplesField.setText(String.format("%d", delayMeasurementParams.restrictedBins)); + + upSample.setText("Up sample data x" + this.upSampleSpinner.getValue()); + + enableControls(); + describeFilter(); + } + + @Override + public DelayMeasurementParams getParams(DelayMeasurementParams delayMeasurementParams) { + delayMeasurementParams.delayFilterParams = this.delayMeasurementParams.delayFilterParams; + delayMeasurementParams.filterBearings = filterBearings.isSelected(); + delayMeasurementParams.setUpSample(upSample.isSelected() ? ((Integer) this.upSampleSpinner.getValue()).intValue() : 1); + delayMeasurementParams.envelopeBearings = envelopeBearings.isSelected(); + delayMeasurementParams.useLeadingEdge = useLeadingEdge.isSelected() && delayMeasurementParams.envelopeBearings; + + delayMeasurementParams.useRestrictedBins=this.restrictSamples.isSelected(); + + try { + delayMeasurementParams.restrictedBins=Integer.valueOf(this.restrictSamplesField.getText()); + } + catch(Exception e) { + PamDialogFX.showWarning(null, "Delay measurement settings", "The entry in the samples text field is invalid."); + return null; + } + + if (delayMeasurementParams.useRestrictedBins && delayMeasurementParams.restrictedBins<10) { + PamDialogFX.showWarning(null, "Delay measurement settings", "The entry in the samples text field is invalid. It must be >= 10"); + return null; + } + + if (delayMeasurementParams.filterBearings && delayMeasurementParams.delayFilterParams == null) { + PamDialogFX.showWarning(null, "Delay measurement settings", "Filter parameters have not been set"); + return null; + } + return null; + } + + @Override + public String getName() { + return "Delay Measurment Params"; + } + + @Override + public Node getContentNode() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void paneInitialized() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/PamController/PamSettingManager.java b/src/PamController/PamSettingManager.java index 782c1a05..e9119294 100644 --- a/src/PamController/PamSettingManager.java +++ b/src/PamController/PamSettingManager.java @@ -1,19 +1,19 @@ /* PAMGUARD - Passive Acoustic Monitoring GUARDianship. - * To assist in the Detection Classification and Localisation + * To assist in the Detection Classification and Localisation * of marine mammals (cetaceans). - * - * Copyright (C) 2006 - * + * + * Copyright (C) 2006 + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -100,10 +100,10 @@ import amplifier.AmpParameters; /** * @author Doug Gillespie - * + * * Singleton class for managing Pam settings - where and how they are stored in * a persistent way between runs. - * + * * Any class that wants is settings saved should register with the * PamSettingsManager. *

@@ -122,8 +122,8 @@ import amplifier.AmpParameters; * type and settings version. Once one is found, it is given the reference to * the settings data which t is responsible for casting into whatever class it * requires. - * - * + * + * */ public class PamSettingManager { @@ -135,34 +135,34 @@ public class PamSettingManager { /** * List of modules that have / want PAMGUARD Settings - * which get stored in the psf file and / or the database store. + * which get stored in the psf file and / or the database store. */ private ArrayList owners; /** * List of modules that specifically use settings from the database - * storage. + * storage. */ private ArrayList databaseOwners; /** * List of modules that are stored globally on the PC - * with a single common psf type file. + * with a single common psf type file. */ private ArrayList globalOwners; private ArrayList globalSettings; /** - * List of settings used by 'normal' modules. + * List of settings used by 'normal' modules. */ private ArrayList initialSettingsList; /** - * List of settings used specifically by databases. + * List of settings used specifically by databases. * This list never get's stored anywhere, but is just held - * in memory so that the database identified at startup in - * viewer and mixed modes gets reloaded later on . + * in memory so that the database identified at startup in + * viewer and mixed modes gets reloaded later on . */ private ArrayList databaseSettingsList; @@ -172,7 +172,7 @@ public class PamSettingManager { static public final String fileEndx = "psfx"; static public final String fileEndXML = "psfxml"; private static boolean saveAsPSFX = true; - + static public String getCurrentSettingsFileEnd() { if (saveAsPSFX) { return fileEndx; @@ -183,7 +183,7 @@ public class PamSettingManager { } /** - * Name of the file that contains a list of recent psf files. + * Name of the file that contains a list of recent psf files. */ transient private final String settingsListFileName = "PamSettingsFilesUID"; @@ -206,13 +206,13 @@ public class PamSettingManager { public static final int LIST_UNITS = 0x1; /** - * Identifier for modules which are part of the database system. + * Identifier for modules which are part of the database system. */ public static final int LIST_DATABASESTUFF = 0x2; /** - * Stuff which is global to the computer system (at the user level). - * Invented for colour settings, might extend to other things too. + * Stuff which is global to the computer system (at the user level). + * Invented for colour settings, might extend to other things too. */ public static final int LIST_SYSTEMGLOBAL = 0x4; @@ -221,7 +221,7 @@ public class PamSettingManager { */ static private final int SAVE_PSF = 0x1; /** - * Save settings to database tables (if available). + * Save settings to database tables (if available). */ static private final int SAVE_DATABASE = 0x2; @@ -243,7 +243,7 @@ public class PamSettingManager { private boolean programStart = true; private SettingsFileData settingsFileData; - + private PamSettingManager() { owners = new ArrayList(); @@ -274,9 +274,9 @@ public class PamSettingManager { * Flag to indicate that initialisation of PAMGUARD has completed. */ private boolean initializationComplete = false; - + /** - * Called everytime anything in the model changes. + * Called everytime anything in the model changes. * @param changeType type of change */ public void notifyModelChanged(int changeType) { @@ -286,14 +286,14 @@ public class PamSettingManager { } /** - * Register a PAMGAURD module that wants to store settings in a + * Register a PAMGAURD module that wants to store settings in a * serialised file (.psf file) and / or have those settings stored - * in the database settings table. - *

Normally, all modules will + * in the database settings table. + *

Normally, all modules will * call this for at least one set of settings. Often the PamSettings - * is implemented by the class that extends PamControlledunit, but + * is implemented by the class that extends PamControlledunit, but * it's also possible to have multiple sub modules, processes or displays - * implemnt PamSettings so that different settings for different bits of + * implemnt PamSettings so that different settings for different bits of * a PamControlledUnit are stored separately. * @see PamSettings * @see PamControlledUnit @@ -306,15 +306,15 @@ public class PamSettingManager { } /** - * Register modules that have settings information that - * should be stored in serialised form in - * psf files and database Pamguard_Settings tables. + * Register modules that have settings information that + * should be stored in serialised form in + * psf files and database Pamguard_Settings tables. * @param pamUnit Unit containing the settings * @param whichLists which lists to store the settings in.

- * N.B. These are internal lists and not the external storage. Basically + * N.B. These are internal lists and not the external storage. Basically * any database modules connected with settings should to in LIST_DATABASESTUFF - * everything else (including the normal database) should go to LISTS_UNITS - * @return true if settings registered sucessfully. + * everything else (including the normal database) should go to LISTS_UNITS + * @return true if settings registered sucessfully. */ public boolean registerSettings(PamSettings pamUnit, int whichLists) { @@ -342,10 +342,10 @@ public class PamSettingManager { } /** - * Find settings for a particular user in one or more lists. - * @param user PamSettings user. - * @param whichLists lists to search - * @return settings object. + * Find settings for a particular user in one or more lists. + * @param user PamSettings user. + * @param whichLists lists to search + * @return settings object. */ private PamControlledUnitSettings findSettings(PamSettings user, int whichLists) { PamControlledUnitSettings settings = null; @@ -373,18 +373,18 @@ public class PamSettingManager { } /** * Find settings in a list of settings, ignoring settings which have - * already been used by a module. + * already been used by a module. * @param settingsList settings list - * @param usedSettings list of settings that have already been used. - * @param user module that uses the settings. - * @return Settings object. + * @param usedSettings list of settings that have already been used. + * @param user module that uses the settings. + * @return Settings object. */ - private PamControlledUnitSettings findSettings(ArrayList settingsList, + private PamControlledUnitSettings findSettings(ArrayList settingsList, boolean[] usedSettings, PamSettings user) { if (settingsList == null) return null; // go through the list and see if any match this module. Avoid repeats. for (int i = 0; i < settingsList.size(); i++) { - if (usedSettings != null && usedSettings[i]) continue; + if (usedSettings != null && usedSettings[i]) continue; if (isSettingsUnit(user, settingsList.get(i))) { if (usedSettings != null) { usedSettings[i] = true; @@ -393,10 +393,10 @@ public class PamSettingManager { } } /* - * To improve complex module loading where settings may be saved by multiple sub-modules, in + * To improve complex module loading where settings may be saved by multiple sub-modules, in * July 2015 many modules which had fixed settings had their settings names and types changed ! * Therefore these modules won't have found their settings on the first go, so need to also check - * against the alternate names defined for each class. + * against the alternate names defined for each class. * It should be possible to work out from the settingsUser.Class what changes may have been made ! */ SettingsNameChange otherName = SettingsNameChanger.getInstance().findNameChange(user); @@ -404,7 +404,7 @@ public class PamSettingManager { return null; } for (int i = 0; i < settingsList.size(); i++) { - if (usedSettings != null && usedSettings[i]) continue; + if (usedSettings != null && usedSettings[i]) continue; if (isSettingsUnit(otherName, settingsList.get(i))) { if (usedSettings != null) { usedSettings[i] = true; @@ -419,7 +419,7 @@ public class PamSettingManager { /** * Searches a list of settings for settings with a - * specific type. + * specific type. * @param unitType * @return PamControlledUnitSettings or null if none found * @see PamControlledUnitSettings @@ -437,8 +437,8 @@ public class PamSettingManager { } /** - * Find settings in a list of settings by name and by type. - * @param settingsList settings list to search + * Find settings in a list of settings by name and by type. + * @param settingsList settings list to search * @param unitType unit name * @param unitName unit type * @return settings object @@ -468,11 +468,11 @@ public class PamSettingManager { } /** - * Find a settings owner for a type, name and class. + * Find a settings owner for a type, name and class. * @param unitType unit Type * @param unitName unit Name * @param unitClass unit Class - * @return Settings owner or null. + * @return Settings owner or null. */ public PamSettings findSettingsOwner(String unitType, String unitName, String unitClassName) { for (PamSettings owner:owners) { @@ -491,8 +491,8 @@ public class PamSettingManager { /** * Call just before PAMGUARD exits to save the settings - * either to psf and / or database tables. - * @return true if settings saved sucessfully. + * either to psf and / or database tables. + * @return true if settings saved sucessfully. */ public boolean saveFinalSettings() { int runMode = PamController.getInstance().getRunMode(); @@ -511,9 +511,9 @@ public class PamSettingManager { } /** - * Save settings to a psf file and / or the database tables. + * Save settings to a psf file and / or the database tables. * @param saveWhere - * @return true if sucessful + * @return true if sucessful */ public boolean saveSettings(int saveWhere) { @@ -541,7 +541,7 @@ public class PamSettingManager { } /** * Always save the settings file data (list of recent files) since it includes - * static information such as whether to show day tips. + * static information such as whether to show day tips. */ saveSettingsFileData(); @@ -559,8 +559,8 @@ public class PamSettingManager { } /** - * Save configuration settings to the default (most recently used) psf file. - * @return true if successful. + * Save configuration settings to the default (most recently used) psf file. + * @return true if successful. */ public boolean saveSettingsToFile(String fileName) { if (saveAsPSFX) { @@ -586,7 +586,7 @@ public class PamSettingManager { ObjectOutputStream outStream = openOutputFile(setFile.getAbsolutePath()); for (PamSettings gs:globalOwners) { - PamControlledUnitSettings pus = new PamControlledUnitSettings(gs.getUnitType(), + PamControlledUnitSettings pus = new PamControlledUnitSettings(gs.getUnitType(), gs.getUnitName(), gs.getClass().getName(), gs.getSettingsVersion(), gs.getSettingsReference()); try { outStream.writeObject(pus); @@ -604,7 +604,7 @@ public class PamSettingManager { ObjectInputStream ois = null; boolean ok= true; try { - ois = new ObjectInputStream(new FileInputStream(setFile)); + ois = new ObjectInputStream(new FileInputStream(setFile)); } catch (IOException e) { ok = false; @@ -636,8 +636,8 @@ public class PamSettingManager { } /** - * Save configuration settings to the default (most recently used) psf file. - * @return true if successful. + * Save configuration settings to the default (most recently used) psf file. + * @return true if successful. */ public boolean saveSettingsToPSFFile(String fileName) { @@ -650,9 +650,9 @@ public class PamSettingManager { for (int i = 0; i < owners.size(); i++) { pamSettingsList .add(new PamControlledUnitSettings(owners.get(i) - .getUnitType(), owners.get(i).getUnitName(), + .getUnitType(), owners.get(i).getUnitName(), owners.get(i).getClass().getName(), - owners.get(i).getSettingsVersion(), + owners.get(i).getSettingsVersion(), owners.get(i).getSettingsReference())); } int nUsed = pamSettingsList.size(); @@ -666,14 +666,14 @@ public class PamSettingManager { if (initialSettingsList != null) { for (int i = 0; i < initialSettingsList.size(); i++) { if (settingsUsed != null && settingsUsed.length > i && settingsUsed[i]) continue; - + // if this is a duplicate of something already in the list, warn the user and find out if they want to remove it if (thisIsADuplicate(pamSettingsList, initialSettingsList.get(i))) { if (firstDuplicateFound) { firstDuplicateFound = false; String msg = "Duplicate settings have been found in the psf file. Please select whether to keep them in the psf, or to" + " delete them. Duplicate settings will not cause Pamguard to crash, however they will enlarge the psf file over time."; - int ans; + int ans; if (PamGUIManager.getGUIType()==PamGUIManager.FX) ans = WarnOnce.showWarningFX(PamController.getInstance().getGuiManagerFX().getMainScene().getOwner(), "Duplicate settings encountered", PamUtilsFX.htmlToNormal(msg), AlertType.WARNING, null, null, "Keep Duplicates", "Delete Duplicates"); else ans = WarnOnce.showWarning(null, "Duplicate settings encountered", msg, WarnOnce.OK_CANCEL_OPTION, null, null,"Keep Duplicates", "Delete Duplicates"); @@ -684,7 +684,7 @@ public class PamSettingManager { if (purgeDuplicates) continue; pamSettingsList.add(initialSettingsList.get(i)); } - + // if this is not a duplicate, go ahead and add it to the list else { pamSettingsList.add(initialSettingsList.get(i)); @@ -713,7 +713,7 @@ public class PamSettingManager { return false; } - // try { // experimenting with xml output. + // try { // experimenting with xml output. // FileOutputStream fos = new FileOutputStream("pamguard.xml"); // XMLEncoder xe = new XMLEncoder(fos); // for (int i = 0; i < nUsed; i++) { @@ -737,7 +737,7 @@ public class PamSettingManager { /** * Checks if the PamControlledSettings object is already in the settings ArrayList. Comparison is done by - * checking the unit type and unit name. + * checking the unit type and unit name. * @param pamSettingsList the ArrayList containing the PamControlledUnitSettings * @param settingToCheck the PamControlledUnitSettings to check * @return true if it is in the list, false if not @@ -755,7 +755,7 @@ public class PamSettingManager { } /** - * Save configuration settings to a PSFX file (XML). + * Save configuration settings to a PSFX file (XML). * @return true if successful. */ public boolean saveSettingsToXMLFile(File file) { @@ -770,9 +770,9 @@ public class PamSettingManager { for (int i = 0; i < owners.size(); i++) { pamSettingsList .add(new PamControlledUnitSettings(owners.get(i) - .getUnitType(), owners.get(i).getUnitName(), - owners.get(i).getClass().getName(), - owners.get(i).getSettingsVersion(), + .getUnitType(), owners.get(i).getUnitName(), + owners.get(i).getClass().getName(), + owners.get(i).getSettingsVersion(), owners.get(i).getSettingsReference())); } int nUsed = pamSettingsList.size(); @@ -823,16 +823,16 @@ public class PamSettingManager { // e.printStackTrace(); // } // System.out.println("done!"); - // + // // } System.out.println("The code for objectToXMLFile(Object serialisableObject, File file) has been commented out!!"); } /** - * Load the PAMGAURD settings either from psf file or from - * a database, depending on the run mode and type of settings required. + * Load the PAMGAURD settings either from psf file or from + * a database, depending on the run mode and type of settings required. * @param runMode - * @return OK if load was successful. + * @return OK if load was successful. */ public int loadPAMSettings(int runMode) { int ans = LOAD_SETTINGS_OK; @@ -856,7 +856,7 @@ public class PamSettingManager { ans = loadNormalSettings(); break; default: - return LOAD_SETTINGS_CANCEL; + return LOAD_SETTINGS_CANCEL; } if (ans == LOAD_SETTINGS_OK) { initialiseRegisteredModules(); @@ -865,36 +865,36 @@ public class PamSettingManager { } /** - * Load settings perfectly 'normally' from a psf file. - * @return OK whether or not any settings were loaded. + * Load settings perfectly 'normally' from a psf file. + * @return OK whether or not any settings were loaded. */ private int loadNormalSettings() { return loadPSFSettings(); } /** - * Load settings for viewer mode. These must come from - * an old PAMGUARD database containing settings information. - * @return true if settings loaded sucessfully. + * Load settings for viewer mode. These must come from + * an old PAMGUARD database containing settings information. + * @return true if settings loaded sucessfully. */ private int loadViewerSettings() { return loadDBSettings(); } /** - * Load settings for mixed mode. These must come from - * an old PAMGUARD database containing settings information. - * @return true if settings loaded sucessfully. + * Load settings for mixed mode. These must come from + * an old PAMGUARD database containing settings information. + * @return true if settings loaded sucessfully. */ private int loadMixedModeSettings() { return loadDBSettings(); } /** - * Some modules may have already registered before the + * Some modules may have already registered before the * settings were loaded, so this function is called - * as soon as they are loaded which sends settings to - * all modules in the list. + * as soon as they are loaded which sends settings to + * all modules in the list. */ private void initialiseRegisteredModules() { if (owners == null) { @@ -919,9 +919,9 @@ public class PamSettingManager { /** * Open the file that contains a list of files and optionally open a dialog - * giving the list of recent files. + * giving the list of recent files. *

- * Unfortunately, as soon as this gets called the first time, it tries to + * Unfortunately, as soon as this gets called the first time, it tries to * open a database to get more settings information and different database * plug ins all start trying to get more settings and it goes round and round and * round. Need to ensure that these loop around only get given the general settings @@ -935,14 +935,14 @@ public class PamSettingManager { } if (loadingLocalSettings) return LOAD_SETTINGS_OK; if ( - // settingsFileData.showFileList && + // settingsFileData.showFileList && programStart) { SettingsFileData newData = showSettingsDailog(settingsFileData); if (newData != null) { settingsFileData = newData.clone(); /* * Save the settings file data immediately so that if we crash, this file - * is still at the top of the list next time we run. + * is still at the top of the list next time we run. */ saveSettingsFileData(); } @@ -953,19 +953,19 @@ public class PamSettingManager { } File ff = settingsFileData.getFirstFile(); } - + // if we are running a psf remotely, add it to the SettingsFileData list else { setDefaultFile(PamSettingManager.remote_psf); } initialSettingsList = loadSettingsFromFile(); - //XMLSettings + //XMLSettings // initialSettingsList = loadSettingsFromXMLFile(); /*TODO FIXME -implement this properly (see also PamGui-line 478) to enable saving menu item * so far it works for some settings- one it doesn't work for is File Folder Acquisition - * + * * output from loading XML * ------------------------------------ PAMGUARD Version 1.11.02j branch SMRU @@ -979,7 +979,7 @@ public class PamSettingManager { os.version 6.1 java.library.path lib For further information and bug reporting visit www.pamguard.org - If possible, bug reports and support requests should + If possible, bug reports and support requests should contain a copy of the full text displayed in this window. (Windows users right click on window title bar for edit / copy options) @@ -1004,7 +1004,7 @@ public class PamSettingManager { * ------------------------------------- * Looks like not ALL information has been stored correctly-might be best to contact XStream about resolution - * + * */ @@ -1016,7 +1016,7 @@ public class PamSettingManager { * Load data from settings files. *

* This is just the general data - the list of recently used - * psf files and recent database files. + * psf files and recent database files. */ public boolean loadLocalSettings() { @@ -1027,25 +1027,25 @@ public class PamSettingManager { if (PamSettingManager.RUN_REMOTE == false) { if (settingsFileData != null) { TipOfTheDayManager.getInstance().setShowAtStart(settingsFileData.showTipAtStartup); - if (settingsFileData.showTipAtStartup) { + if (settingsFileData.showTipAtStartup) { if (PamGUIManager.isSwing()) { TipOfTheDayManager.getInstance().showTip(null, null); } } } } - + // if the scaling factor = 0 (happens on first load), set it to 1. Then scale the display if (settingsFileData.getScalingFactor()==0.0) { settingsFileData.setScalingFactor(1.0); } scaleDisplay(settingsFileData.getScalingFactor()); - - - boolean ok = true; // always ok if non - database settings are used. + + + boolean ok = true; // always ok if non - database settings are used. // // if (PamController.getInstance().getRunMode() != PamController.RUN_NORMAL) { - // ok = loadDBSettings(); + // ok = loadDBSettings(); // } loadingLocalSettings = false; @@ -1058,9 +1058,9 @@ public class PamSettingManager { * Adjust the size of the text by the scaleFactor variable. This was added in response to the issue of PAMGuard not * scaling properly on 4K monitors. Things that aren't affected by this code: buttons and icons, the window title font, * the time font, and the html in the help files. - * + * * In order to finish this off, put more work into scaling the button images. - * + * * @param scalingFactor */ private void scaleDisplay(double scalingFactor) { @@ -1103,14 +1103,14 @@ public class PamSettingManager { "Tree.font", "Viewport.font" }; - //TODO - does work with NIMBUS look and feel. + //TODO - does work with NIMBUS look and feel. for (int i=0; i ownersList, String unitType, String unitName) { PamSettings owner; @@ -1233,8 +1233,8 @@ public class PamSettingManager { } /** - * Load PAMGUARD settings from a psf OR a psfx file. - * @return Array list of settings. + * Load PAMGUARD settings from a psf OR a psfx file. + * @return Array list of settings. */ private ArrayList loadSettingsFromFile() { String inputFile = getSettingsFileName(); @@ -1256,13 +1256,13 @@ public class PamSettingManager { return null; } /** - * Load PAMGUARD settings from a psf file. - * @return Array list of settings. + * Load PAMGUARD settings from a psf file. + * @return Array list of settings. */ private ArrayList loadSettingsFromPSFFile() { - ArrayList newSettingsList = + ArrayList newSettingsList = new ArrayList(); PamControlledUnitSettings newSetting; @@ -1299,9 +1299,9 @@ public class PamSettingManager { catch (IOException io){ System.out.println(io.getMessage()); /** - * DG 10/8/2015 There is a break here, basically if I change the + * DG 10/8/2015 There is a break here, basically if I change the * serialVerionUID of any class it will get stuck in an infinite loop - * unless I break - so don't ever change serialVersionUID's !!!!! + * unless I break - so don't ever change serialVersionUID's !!!!! */ break; } @@ -1377,8 +1377,8 @@ public class PamSettingManager { //XMLSettings // /** - // * Load PAMGUARD settings from a psf file. - // * @return Array list of settings. + // * Load PAMGUARD settings from a psf file. + // * @return Array list of settings. // */ // private ArrayList loadSettingsFromXMLFile() { // @@ -1419,24 +1419,24 @@ public class PamSettingManager { /** - * Quick print list of all settings to work out wtf is going on. + * Quick print list of all settings to work out wtf is going on. * @param newSettingsList */ private void listSettings( ArrayList newSettingsList) { int iSet = 0; for (PamControlledUnitSettings set:newSettingsList) { - System.out.printf("%02d Type %s Name %s Class %s\n", iSet++, set.getUnitType(), + System.out.printf("%02d Type %s Name %s Class %s\n", iSet++, set.getUnitType(), set.getUnitName(), set.getSettings().getClass().toString()); } } - + /** * Similar to listSettings, but instead of listing all modules only list them once but with a note if * there are duplicates - * + * * @param newSettingsList */ private boolean summarizeSettings(ArrayList newSettingsList) { @@ -1456,19 +1456,19 @@ public class PamSettingManager { alreadySeen[j] = true; } } -// System.out.printf("Type: %s; Name: %s; Class: %s; is found in psf settings %d time(s)\n", set.getUnitType(), +// System.out.printf("Type: %s; Name: %s; Class: %s; is found in psf settings %d time(s)\n", set.getUnitType(), // set.getUnitName(), set.getSettings().getClass().toString(), count); if (count>1) duplicatesFound=true; } return duplicatesFound; } - + /** * See if a particular PamControlledUnitSettings object is the right one - * for a particular module that wants some settings. + * for a particular module that wants some settings. * @param settingsUser User of settings - * @param settings Settings object. - * @return true if matched. + * @param settings Settings object. + * @return true if matched. */ public boolean isSettingsUnit(PamSettings settingsUser, PamControlledUnitSettings settings) { if (settings.getUnitName() == null || settingsUser.getUnitName() == null) return false; @@ -1476,10 +1476,10 @@ public class PamSettingManager { if (settings.getUnitName().equals(settingsUser.getUnitName()) - && settings.getUnitType().equals(settingsUser.getUnitType()) + && settings.getUnitType().equals(settingsUser.getUnitType()) && settings.versionNo == settingsUser.getSettingsVersion()){ return true; - } + } return false; } @@ -1487,10 +1487,10 @@ public class PamSettingManager { /** * Name check used when the initial setting search failed but it's been found that there has been a type - * name change within the settings user. + * name change within the settings user. * @param otherName alternate name information - * @param settings PAm Settings. - * @return true if seem to be the same. + * @param settings PAm Settings. + * @return true if seem to be the same. */ private boolean isSettingsUnit(SettingsNameChange otherName, PamControlledUnitSettings settings) { if (otherName.getModuleClass().getName().equals(settings.getOwnerClassName())) { @@ -1506,8 +1506,8 @@ public class PamSettingManager { } /** - * Open psf file for settings serialised output. - * @return stream handle. + * Open psf file for settings serialised output. + * @return stream handle. */ public ObjectOutputStream openOutputFile(String outputFile) { try { @@ -1521,7 +1521,7 @@ public class PamSettingManager { /** * Open psf file for settings input.
does no work with psfx files - * @return stream handle. + * @return stream handle. */ private ObjectInputStream openInputFile() { // System.out.println("Loading settings from " + getSettingsFileName()); @@ -1543,7 +1543,7 @@ public class PamSettingManager { // +"\nThis is expected on first use." // , // "PamSettingManager", - // JOptionPane.WARNING_MESSAGE); + // JOptionPane.WARNING_MESSAGE); // userNotifiedAbsentSettingsFile= true; // } String msg = "You are opening new configuration file: " + getSettingsFileName(); @@ -1560,13 +1560,13 @@ public class PamSettingManager { // /** // * Returns total gobbledygook - need to improve the way - // * PAMGAURD creates new psf files. - // * @return lies. + // * PAMGAURD creates new psf files. + // * @return lies. // */ // private ObjectInputStream openInputFileResource() { // try { // return new ObjectInputStream( //new FileInputStream( - // ClassLoader.getSystemResourceAsStream("DefaultPamguardSettings.psf")); + // ClassLoader.getSystemResourceAsStream("DefaultPamguardSettings.psf")); // } catch (Exception Ex) { //// //Ex.printStackTrace(); //// System.out.println("Serialized default settings file not found!"); @@ -1582,8 +1582,8 @@ public class PamSettingManager { // } /** - * The settings list file is a file containing a list of recently - * used psf files. + * The settings list file is a file containing a list of recently + * used psf files. * @return The settings list file */ private File getSettingsListFile() { @@ -1603,7 +1603,7 @@ public class PamSettingManager { /** * Get a file for global settings - * @return File for global settings storage. + * @return File for global settings storage. */ private File getGlobalSettingsFile() { String fileName = pamguard.Pamguard.getSettingsFolder() + File.separator + gloablListfileName + settingsListFileEnd; @@ -1611,7 +1611,7 @@ public class PamSettingManager { } /** - * Get a list of recently used databases. + * Get a list of recently used databases. * @return list of recently used databases */ private File getDatabaseListFile() { @@ -1620,13 +1620,13 @@ public class PamSettingManager { } /** - * Get the settings folder name and if necessary, - * create the folder since it may not exist. - * + * Get the settings folder name and if necessary, + * create the folder since it may not exist. + * * 2019/10/02 mo * MOVED TO pamguard.Pamguard AS A STATIC FUNCTION, SO THAT WE CAN ACCESS * IT FOR THE LOG FILE WHEN PAMGUARD FIRST STARTS - * + * * @return folder name string, (with no file separator on the end) */ // private String getSettingsFolder() { @@ -1637,24 +1637,24 @@ public class PamSettingManager { // if (f.exists() == false) { // f.mkdirs(); // } -// // default folder doesn't work for psf since it saves the settings file back into the wrong place. +// // default folder doesn't work for psf since it saves the settings file back into the wrong place. //// String defFolder = PamFolders.getDefaultProjectFolder(); // return settingsFolder; // } /** * Now that the database is becoming much more fundamental to settings - * storage and retrieval, the latest database settings should go into + * storage and retrieval, the latest database settings should go into * the main settings file. This contains a list of recent databases. The trouble is, - * the settings are spread amongst several different settings object (e.g. one that - * tells us what type of database, another that tells us a list of recent databases - * for a specific database type, etc. + * the settings are spread amongst several different settings object (e.g. one that + * tells us what type of database, another that tells us a list of recent databases + * for a specific database type, etc. *

* We therefore need some modules (i.e. database ones) to also store their settings * in a general settings list so that they can be read in before any other settings * are read in. So each unit when it registers, says whether it should be included in - * the general list as well as the specific data file. - * + * the general list as well as the specific data file. + * */ public boolean loadSettingsFileData() { ObjectInputStream is = null; @@ -1698,25 +1698,25 @@ public class PamSettingManager { * will do is copy all psf files from the installed directory * over into the settingsFolder and then populate the list * in a settings list file so that users get a reasonably - * coherent startup experience. + * coherent startup experience. */ private void createSettingsListFile() { /** - * List all psf files in the program folder. - * I think that we should already be working in that folder, - * so can just list the files. + * List all psf files in the program folder. + * I think that we should already be working in that folder, + * so can just list the files. */ settingsFileData = new SettingsFileData(); PamFileFilter psfFilter = new PamFileFilter("psf files", ".psf"); - - // if we're running the beta version, also add in psfx files. To test for beta, check if + + // if we're running the beta version, also add in psfx files. To test for beta, check if // the version number starts with anything besides a 1 if (!PamguardVersionInfo.version.startsWith("1")) { psfFilter.addFileType(".psfx"); } psfFilter.setAcceptFolders(false); String settingsFolder = pamguard.Pamguard.getSettingsFolder() + File.separator; - // list files in the current folder. + // list files in the current folder. String userDir = System.getProperty("user.dir"); File folder = new File(userDir); File[] psfFiles = folder.listFiles(psfFilter); @@ -1728,7 +1728,7 @@ public class PamSettingManager { File newFile = new File(settingsFolder + File.separator + aFile.getName()); // aFile.renameTo(newFile); copyFile(aFile, newFile); - // then add it to the list. + // then add it to the list. settingsFileData.setFirstFile(newFile); } } @@ -1762,7 +1762,7 @@ public class PamSettingManager { } /** - * Save the list of recently used settings files. + * Save the list of recently used settings files. * @return true if write OK. */ private boolean saveSettingsFileData() { @@ -1793,9 +1793,9 @@ public class PamSettingManager { } /** - * Loads the details of the last database to be opened. This will + * Loads the details of the last database to be opened. This will * probably be in the form of multiple serialised objects since - * the database information is spread amongst several plug in sub-modules. + * the database information is spread amongst several plug in sub-modules. * @return true if settings data loaded ok */ private boolean loadDatabaseFileData() { @@ -1840,8 +1840,8 @@ public class PamSettingManager { return true; } /** - * Save the details of the most recently used database. - * @return true if successful. + * Save the details of the most recently used database. + * @return true if successful. */ private boolean saveDatabaseFileData() { @@ -1857,7 +1857,7 @@ public class PamSettingManager { for (int i = 0; i < databaseOwners.size(); i++) { dbOwner = databaseOwners.get(i); aSet = new PamControlledUnitSettings(dbOwner.getUnitType(), - dbOwner.getUnitName(), dbOwner.getClass().getName(), + dbOwner.getUnitName(), dbOwner.getClass().getName(), dbOwner.getSettingsVersion(), dbOwner.getSettingsReference()); databaseSettingsList.add(aSet); } @@ -1869,15 +1869,15 @@ public class PamSettingManager { return false; } - // write out the settings for all units in the general owners list. + // write out the settings for all units in the general owners list. ArrayList generalSettingsList; generalSettingsList = new ArrayList(); for (int i = 0; i < databaseOwners.size(); i++) { generalSettingsList .add(new PamControlledUnitSettings(databaseOwners.get(i) - .getUnitType(), databaseOwners.get(i).getUnitName(), - databaseOwners.get(i).getClass().getName(), - databaseOwners.get(i).getSettingsVersion(), + .getUnitType(), databaseOwners.get(i).getUnitName(), + databaseOwners.get(i).getClass().getName(), + databaseOwners.get(i).getSettingsVersion(), databaseOwners.get(i).getSettingsReference())); } try { @@ -1903,13 +1903,13 @@ public class PamSettingManager { * Get the most recently used settings file name. We have added a switch in here * to allow for the direct setting of the psf used from the command line. This * can be used in remote on non remote deployments. - * @return File name string. + * @return File name string. */ public String getSettingsFileName() { if (PamSettingManager.remote_psf != null) { // System.out.println("Automatically loading settings from " + remote_psf); return remote_psf; - } + } else { if (settingsFileData == null || settingsFileData.getFirstFile() == null) { return null; @@ -1937,7 +1937,7 @@ public class PamSettingManager { } /** - * Save settings to a new psf file. + * Save settings to a new psf file. * @param frame parent frame for dialog. */ public void saveSettingsAs(JFrame frame) { @@ -1981,7 +1981,7 @@ public class PamSettingManager { } // /** - // * Save settings to a new psf file. + // * Save settings to a new psf file. // * @param frame parent frame for dialog. // */ // public void saveSettingsAsXML(JFrame frame) { @@ -2017,15 +2017,15 @@ public class PamSettingManager { /** - * Set the default (first) file in the settings file data. - * @param defaultFile File name string. + * Set the default (first) file in the settings file data. + * @param defaultFile File name string. */ public void setDefaultFile(String defaultFile) { /** - * If saving from viewer or mixed mode, then the + * If saving from viewer or mixed mode, then the * settingsFileData may not have been loaded, in which case - * load it now so that old psf names remain in the list. + * load it now so that old psf names remain in the list. */ if (settingsFileData == null) { // System.out.println("Must load settings file first"); @@ -2043,7 +2043,7 @@ public class PamSettingManager { * Pop up the dialog that's shown at start up to show * a list of recent settings file and give the opportunity * for browsing for more. IF the new settings file is - * different from the current one, then send a command off + * different from the current one, then send a command off * to the Controller to re-do the entire Pamguard system model * @param frame parent frame for dialog (can be null) */ @@ -2054,7 +2054,7 @@ public class PamSettingManager { if (settingsFileData != null) { currentFile = settingsFileData.getFirstFile(); } - SettingsFileData newData = showSettingsDailog(settingsFileData); + SettingsFileData newData = showSettingsDailog(settingsFileData); if (newData == null) { return; } @@ -2062,7 +2062,7 @@ public class PamSettingManager { if (settingsFileData.getFirstFile() != currentFile) { settingsFileData.setFirstFile(currentFile); saveSettingsFileData(); - // rebuild the entire model. + // rebuild the entire model. PamControllerInterface pamController = PamController.getInstance(); if (pamController == null) return; pamController.totalModelRebuild(); @@ -2071,7 +2071,7 @@ public class PamSettingManager { } /** - * Import a configuration during viewer mode operation. + * Import a configuration during viewer mode operation. * @param frame */ public void importSettings(JFrame frame) { @@ -2082,22 +2082,22 @@ public class PamSettingManager { if (settingsFileData != null) { currentFile = settingsFileData.getFirstFile(); } - - + + SettingsFileData newData = showSettingsDailog(settingsFileData); if (newData == null) { return; } - + ArrayList settings = loadSettingsFromFile(); if (settings == null) { String msg = "Unable to load settings from " + getSettingsFileName(); WarnOnce.showWarning(frame, "Settings Import", msg, WarnOnce.OK_OPTION); return; } - + /* - * Should now have a valid settings file. Import the data from it. + * Should now have a valid settings file. Import the data from it. */ PamSettingsGroup pamSettingsGroup = new PamSettingsGroup(System.currentTimeMillis()); for (PamControlledUnitSettings pus:settings) { @@ -2112,10 +2112,10 @@ public class PamSettingManager { * Load a settings file and return the contents in a settings group * object. Give the time of the settings group as the time the file * was modified. the settings load code is a bit of a mess - this function - * has been written mainly so that it can be called from Matlab and r - * so that those languages can load PAMGuard settings. - * @param psfFile psf file object. - * @return loaded settings from the file. + * has been written mainly so that it can be called from Matlab and r + * so that those languages can load PAMGuard settings. + * @param psfFile psf file object. + * @return loaded settings from the file. */ public PamSettingsGroup loadSettings(File psfFile) { if (psfFile == null) { @@ -2150,7 +2150,7 @@ public class PamSettingManager { catch (ClassNotFoundException Ex){ // print and continue - there may be othere things we can deal with. Ex.printStackTrace(); - + } catch (Exception Ex) { Ex.printStackTrace(); @@ -2178,8 +2178,8 @@ public class PamSettingManager { } /** - * - * @return everything about every set of settings currently loaded. + * + * @return everything about every set of settings currently loaded. */ public PamSettingsGroup getCurrentSettingsGroup() { PamSettingsGroup psg = new PamSettingsGroup(PamCalendar.getTimeInMillis()); @@ -2187,7 +2187,7 @@ public class PamSettingManager { PamSettings ps; for (int i = 0; i < owners.size(); i++) { ps = owners.get(i); - pcus = new PamControlledUnitSettings(ps.getUnitType(), ps.getUnitName(), + pcus = new PamControlledUnitSettings(ps.getUnitType(), ps.getUnitName(), ps.getClass().getName(), ps.getSettingsVersion(), ps.getSettingsReference()); psg.addSettings(pcus); @@ -2198,9 +2198,9 @@ public class PamSettingManager { /** * Load some old settings into all modules. *

Currently used in viewer mode to load reloaded settings - * from binary files and the database. + * from binary files and the database. * @param settingsGroup settings group to load. - * @param send these new settings round to all existing modules. + * @param send these new settings round to all existing modules. */ public void loadSettingsGroup(PamSettingsGroup settingsGroup, boolean notifyExisting) { ArrayList tempSettingsList = settingsGroup.getUnitSettings(); @@ -2208,7 +2208,7 @@ public class PamSettingManager { /////////////deleteDBsettings /* TODO FIXME -better way? TEMPORARY - GW - * delete DB settings so when old settings psf is restored over current settings + * delete DB settings so when old settings psf is restored over current settings * the current DB will not be changed!! */ ArrayList DBsettingTypes = new ArrayList(); @@ -2251,13 +2251,13 @@ public class PamSettingManager { } return null; } - + /** - * Find a list of unit settings by type and name. If both are specified, then it's going to - * (hopefully only return one setting. Otherwise, with null or wildcard names we may get many. + * Find a list of unit settings by type and name. If both are specified, then it's going to + * (hopefully only return one setting. Otherwise, with null or wildcard names we may get many. * @param unitType unit type, can be wildcard * or null * @param unitName unit name, can be wildcard * or null - * @return Array list of settings. + * @return Array list of settings. */ public ArrayList findPamSettings(String unitType, String unitName) { if (owners == null) { @@ -2279,19 +2279,19 @@ public class PamSettingManager { } foundSettings.add(owner); } - + return foundSettings; } - - + + /** - * Show a dialog to allow the user to select a .psf file path. - * @param settingsFileData - * @return the settings file data. + * Show a dialog to allow the user to select a .psf file path. + * @param settingsFileData + * @return the settings file data. */ private SettingsFileData showSettingsDailog(SettingsFileData settingsFileData) { SettingsFileData newData; - int flag=PamGUIManager.getGUIType(); + int flag=PamGUIManager.getGUIType(); switch (flag) { case PamGUIManager.SWING: newData = SettingsFileDialog.showDialog(null, settingsFileData); @@ -2312,10 +2312,10 @@ public class PamSettingManager { public ArrayList getInitialSettingsList() { return initialSettingsList; } - + /** * Get the current scaling factor - * + * * @return */ public double getCurrentDisplayScaling() { @@ -2330,11 +2330,11 @@ public class PamSettingManager { if (newScalingFactor != 0 && newScalingFactor != settingsFileData.getScalingFactor()) { // scaleDisplay(newScalingFactor); settingsFileData.setScalingFactor(newScalingFactor); - + String message = "You have changed PAMGuard's display scaling. Please restart PAMGuard in order to update your display."; int ans = WarnOnce.showWarning(frame, "New Display Scaling", message, WarnOnce.OK_OPTION); } - + } } diff --git a/src/PamModel/PamModel.java b/src/PamModel/PamModel.java index 4a70c05e..153fa2eb 100644 --- a/src/PamModel/PamModel.java +++ b/src/PamModel/PamModel.java @@ -765,6 +765,7 @@ final public class PamModel implements PamModelInterface, PamSettings { mi.addDependency(new PamDependency(ClickDetection.class, "clickDetector.ClickControl")); mi.setToolTipText("Classifies clicks based on an ideal template to match and a template to reject. " + "An example of this is to classify beaked whale clicks in an environment with dolphin clicks"); + mi.addGUICompatabilityFlag(PamGUIManager.FX); mi.setModulesMenuGroup(classifierGroup); diff --git a/src/PamUtils/PamAudioFileFilter.java b/src/PamUtils/PamAudioFileFilter.java index 1ed40470..b903cbf7 100644 --- a/src/PamUtils/PamAudioFileFilter.java +++ b/src/PamUtils/PamAudioFileFilter.java @@ -1,5 +1,7 @@ package PamUtils; +import PamUtils.PamFileFilter; + public class PamAudioFileFilter extends PamFileFilter { public PamAudioFileFilter() { diff --git a/src/PamUtils/PamFileFilter.java b/src/PamUtils/PamFileFilter.java index 564e08b6..4ad318f5 100644 --- a/src/PamUtils/PamFileFilter.java +++ b/src/PamUtils/PamFileFilter.java @@ -33,7 +33,7 @@ public class PamFileFilter extends javax.swing.filechooser.FileFilter implements private String prefix = null; - private boolean acceptFolders = true; + protected boolean acceptFolders = true; public PamFileFilter(String description, String defExtension) { diff --git a/src/PamUtils/worker/filelist/WavFileType.java b/src/PamUtils/worker/filelist/WavFileType.java index 6861f82c..a00aa420 100644 --- a/src/PamUtils/worker/filelist/WavFileType.java +++ b/src/PamUtils/worker/filelist/WavFileType.java @@ -6,6 +6,7 @@ import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; +import Acquisition.pamAudio.PamAudioFileManager; import Acquisition.pamAudio.PamAudioSystem; import PamController.PamGUIManager; import javafx.beans.property.BooleanProperty; @@ -64,7 +65,7 @@ public class WavFileType extends File { */ private AudioFormat getAudioFormat(File file) { try { - AudioInputStream audioStream = PamAudioSystem.getAudioInputStream(file); + AudioInputStream audioStream = PamAudioFileManager.getInstance().getAudioInputStream(file); AudioFormat audioFormat = audioStream.getFormat(); diff --git a/src/PamUtils/worker/filelist/WavListWorker.java b/src/PamUtils/worker/filelist/WavListWorker.java index 9c320297..5c0d233a 100644 --- a/src/PamUtils/worker/filelist/WavListWorker.java +++ b/src/PamUtils/worker/filelist/WavListWorker.java @@ -2,7 +2,7 @@ package PamUtils.worker.filelist; import java.io.File; -import PamUtils.PamAudioFileFilter; +import Acquisition.pamAudio.PamAudioFileFilter; /** * Worker which extracts acoustic files from a folder. diff --git a/src/PamguardMVC/uid/binaryUIDFunctions.java b/src/PamguardMVC/uid/binaryUIDFunctions.java index d5d89d30..f8959935 100644 --- a/src/PamguardMVC/uid/binaryUIDFunctions.java +++ b/src/PamguardMVC/uid/binaryUIDFunctions.java @@ -120,8 +120,8 @@ public class binaryUIDFunctions { } } } catch (Exception e) { - System.out.println("Error reading binary UID data from log file"); - e.printStackTrace(); + System.out.println("Error reading binary UID data from log file" + logFileData); +// e.printStackTrace(); } // try (BufferedReader br = new BufferedReader(new FileReader(logFileData))) { @@ -531,10 +531,12 @@ public class binaryUIDFunctions { out.close(); } } catch (TransformerException e) { - e.printStackTrace(); + System.err.println(e.getMessage()); +// e.printStackTrace(); return false; } catch (IOException e) { - e.printStackTrace(); + System.err.println(e.getMessage()); +// e.printStackTrace(); return false; } return true; diff --git a/src/Resources/css/nord-dark.css b/src/Resources/css/nord-dark.css new file mode 100644 index 00000000..132db4d3 --- /dev/null +++ b/src/Resources/css/nord-dark.css @@ -0,0 +1,3664 @@ +.root { + -color-dark: #232730; + -color-light: #fdfdfe; + -color-base-0: #ECEFF4; + -color-base-1: #E5E9F0; + -color-base-2: #D8DEE9; + -color-base-3: #c7ceda; + -color-base-4: #b7becb; + -color-base-5: #979fae; + -color-base-6: #788192; + -color-base-7: #4C566A; + -color-base-8: #3B4252; + -color-base-9: #2E3440; + -color-accent-0: #d2dce8; + -color-accent-1: #bccadc; + -color-accent-2: #98aeca; + -color-accent-3: #859fc0; + -color-accent-4: #7190b6; + -color-accent-5: #5E81AC; + -color-accent-6: #537297; + -color-accent-7: #476283; + -color-accent-8: #3c536e; + -color-accent-9: #314359; + -color-success-0: #d1e5e5; + -color-success-1: #aacfce; + -color-success-2: #82b8b8; + -color-success-3: #6fadac; + -color-success-4: #5ba2a1; + -color-success-5: #508f8e; + -color-success-6: #457b7a; + -color-success-7: #3a6867; + -color-success-8: #2f5454; + -color-success-9: #244140; + -color-warning-0: #f1dcd5; + -color-warning-1: #e9c7bc; + -color-warning-2: #e1b1a2; + -color-warning-3: #daa08d; + -color-warning-4: #d5937e; + -color-warning-5: #bb7a65; + -color-warning-6: #a66c5a; + -color-warning-7: #925f4e; + -color-warning-8: #7d5143; + -color-warning-9: #684438; + -color-danger-0: #eacacd; + -color-danger-1: #dfb1b5; + -color-danger-2: #d29097; + -color-danger-3: #c57179; + -color-danger-4: #bf616a; + -color-danger-5: #ac575f; + -color-danger-6: #994e55; + -color-danger-7: #86444a; + -color-danger-8: #733a40; + -color-danger-9: #603135; + -color-fg-default: #ECEFF4; + -color-fg-muted: #979fae; + -color-fg-subtle: #788192; + -color-fg-emphasis: #fdfdfe; + -color-bg-default: #2E3440; + -color-bg-overlay: #2E3440; + -color-bg-subtle: #3B4252; + -color-bg-inset: #232730; + -color-border-default: rgba(120, 129, 146, 0.65); + -color-border-muted: #4C566A; + -color-border-subtle: #3B4252; + -color-shadow-default: #232730; + -color-neutral-emphasis-plus: #788192; + -color-neutral-emphasis: #4C566A; + -color-neutral-muted: rgba(76, 86, 106, 0.4); + -color-neutral-subtle: rgba(76, 86, 106, 0.2); + -color-accent-fg: #98aeca; + -color-accent-emphasis: #5E81AC; + -color-accent-muted: rgba(113, 144, 182, 0.4); + -color-accent-subtle: rgba(113, 144, 182, 0.1); + -color-warning-fg: #e1b1a2; + -color-warning-emphasis: #bb7a65; + -color-warning-muted: rgba(213, 147, 126, 0.4); + -color-warning-subtle: rgba(213, 147, 126, 0.1); + -color-success-fg: #82b8b8; + -color-success-emphasis: #508f8e; + -color-success-muted: rgba(91, 162, 161, 0.4); + -color-success-subtle: rgba(91, 162, 161, 0.1); + -color-danger-fg: #d29097; + -color-danger-emphasis: #bf616a; + -color-danger-muted: rgba(191, 97, 106, 0.4); + -color-danger-subtle: rgba(191, 97, 106, 0.1); + -color-chart-1: #f3622d; + -color-chart-2: #fba71b; + -color-chart-3: #57b757; + -color-chart-4: #41a9c9; + -color-chart-5: #4258c9; + -color-chart-6: #9a42c8; + -color-chart-7: #c84164; + -color-chart-8: #888888; + -color-chart-1-alpha70: rgba(243, 98, 45, 0.7); + -color-chart-2-alpha70: rgba(251, 167, 27, 0.7); + -color-chart-3-alpha70: rgba(87, 183, 87, 0.7); + -color-chart-4-alpha70: rgba(65, 169, 201, 0.7); + -color-chart-5-alpha70: rgba(66, 88, 201, 0.7); + -color-chart-6-alpha70: rgba(154, 66, 200, 0.7); + -color-chart-7-alpha70: rgba(200, 65, 100, 0.7); + -color-chart-8-alpha70: rgba(136, 136, 136, 0.7); + -color-chart-1-alpha20: rgba(243, 98, 45, 0.2); + -color-chart-2-alpha20: rgba(251, 167, 27, 0.2); + -color-chart-3-alpha20: rgba(87, 183, 87, 0.2); + -color-chart-4-alpha20: rgba(65, 169, 201, 0.2); + -color-chart-5-alpha20: rgba(66, 88, 201, 0.2); + -color-chart-6-alpha20: rgba(154, 66, 200, 0.2); + -color-chart-7-alpha20: rgba(200, 65, 100, 0.2); + -color-chart-8-alpha20: rgba(136, 136, 136, 0.2); + -fx-background-color: -color-bg-default; + -fx-font-size: 14px; + -fx-background-radius: inherit; + -fx-background-insets: inherit; + -fx-padding: inherit; +} +.root.popup { + -fx-background-color: transparent; +} + +.ikonli-font-icon { + -fx-icon-color: -color-fg-default; + -fx-fill: -color-fg-default; + -fx-icon-size: 18px; +} + +.mnemonic-underline { + -fx-stroke: transparent; +} + +.text { + -fx-font-smoothing-type: lcd; + -fx-bounds-type: logical_vertical_center; +} + +Text { + -fx-fill: -color-fg-default; +} + +.title-1 { + -fx-font-size: 2em; + -fx-font-weight: bolder; +} + +.title-2 { + -fx-font-size: 1.75em; + -fx-font-weight: bolder; +} + +.title-3 { + -fx-font-size: 1.5em; + -fx-font-weight: bolder; +} + +.title-4 { + -fx-font-size: 1.25em; + -fx-font-weight: normal; +} + +.text-caption { + -fx-font-size: 1em; + -fx-font-weight: bold; +} + +.text-small { + -fx-font-size: 0.8em; +} + +.text.accent { + -fx-fill: -color-accent-fg; +} + +.label.accent { + -fx-text-fill: -color-accent-fg; +} + +.text.success { + -fx-fill: -color-success-fg; +} + +.label.success { + -fx-text-fill: -color-success-fg; +} + +.text.warning { + -fx-fill: -color-warning-fg; +} + +.label.warning { + -fx-text-fill: -color-warning-fg; +} + +.text.danger { + -fx-fill: -color-danger-fg; +} + +.label.danger { + -fx-text-fill: -color-danger-fg; +} + +.text-bold { + -fx-font-weight: bold; +} + +.text-bolder { + -fx-font-weight: bolder; +} + +.text-normal { + -fx-font-weight: normal; +} + +.text-lighter { + -fx-font-weight: lighter; +} + +.text-italic { + -fx-font-style: italic; +} + +.text-oblique { + -fx-font-style: oblique; +} + +.text-underlined { + -fx-underline: true; +} + +.text-strikethrough { + -fx-strikethrough: true; +} + +.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} + +.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} + +.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} + +.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-7; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 8px 12px 8px 12px; +} +.button .font-icon, .button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.button:disabled { + -fx-opacity: 0.55; +} +.button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.button.button-icon { + -fx-padding: 8px; +} +.button.button-icon > .text { + visibility: hidden; +} +.button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.button.button-circle .text { + visibility: hidden; +} +.button.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.button.left-pill:hover, .button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.button.center-pill:hover, .button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.button.right-pill:hover, .button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-text-fill: -color-button-fg-hover; + -fx-opacity: 0.9; +} +.button:hover:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-hover; +} +.button:hover .font-icon, .button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; + -fx-text-fill: -color-button-fg-focused; +} +.button:focused .font-icon, .button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.button:armed, .button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.button:armed .font-icon, .button:armed .ikonli-font-icon, .button:focused:armed .font-icon, .button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.button:default, .button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button:default.button-outlined, .button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button:default.flat, .button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} +.button.flat:hover { + -fx-underline: true; +} +.button.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.button.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.button.rounded { + -fx-background-radius: 10em; +} + +.combo-box-base { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 1; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; +} +.combo-box-base:disabled { + -fx-opacity: 0.55; +} +.combo-box-base:success, .combo-box-base:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.combo-box-base:danger, .combo-box-base:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.combo-box-base:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.combo-box-base.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.combo-box-base.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.combo-box-base.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.combo-box-base.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base > .arrow-button { + -fx-padding: 8px 12px 8px 12px; +} +.combo-box-base > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.combo-box-base > .text-field { + -fx-background-insets: 0, 1 0 1 1; + -fx-background-radius: 1 0 0 1; +} +.combo-box-base:success > .arrow-button > .arrow { + -fx-background-color: -color-success-fg; +} +.combo-box-base:danger > .arrow-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.combo-box-base.alt-icon > .arrow-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.combo-box > .list-cell { + -fx-background-color: transparent; + -fx-text-fill: -color-fg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box:success > .list-cell { + -fx-text-fill: -color-success-fg; +} +.combo-box:danger > .list-cell { + -fx-text-fill: -color-danger-fg; +} + +.combo-box-popup > .list-view { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 1; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-cell-size: 0; + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:hover { + -fx-background-color: -color-base-8; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, .combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected:hover { + -fx-background-color: -color-base-7; +} +.combo-box-popup > .list-view > .placeholder > .label { + -fx-text-fill: -color-fg-muted; +} + +.choice-box { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 1; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-padding: 8px 12px 8px 12px; +} +.choice-box:disabled { + -fx-opacity: 0.55; +} +.choice-box:success, .choice-box:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.choice-box:danger, .choice-box:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.choice-box:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.choice-box.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.choice-box.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.choice-box.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.choice-box.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box > .label { + -fx-text-fill: -color-fg-default; +} +.choice-box > .open-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.choice-box:success > .label { + -fx-text-fill: -color-success-fg; +} +.choice-box:success > .open-button > .arrow { + -fx-background-color: -color-success-fg; +} +.choice-box:danger > .label { + -fx-text-fill: -color-danger-fg; +} +.choice-box:danger > .open-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.choice-box.alt-icon > .open-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected { + -color-cell-fg: -color-cell-fg-selected; + -fx-background-color: -color-cell-border, -color-cell-bg-selected; +} + +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell .table-cell:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell .tree-table-cell:selected { + -fx-background-color: -color-cell-bg-selected; + -fx-background-insets: 0 0 2 0; +} + +.cell .text-input { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.cell .check-box { + -fx-padding: 0 6px 0 0; +} +.cell .choice-box { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 12px 0 0; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; +} +.cell .combo-box { + -fx-background-color: transparent; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; + -fx-background-radius: 0; +} +.cell .combo-box .cell.list-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.list-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-7; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.list-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.55; +} +.list-view > .virtual-flow:disabled { + -fx-opacity: 0.55; +} +.list-view.edge-to-edge { + -fx-border-width: 0; +} +.list-view .list-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0 0.5em 0 0.5em; + -fx-cell-size: 2.8em; + -fx-border-width: 0 0 1 0; + -fx-border-color: transparent; +} +.list-view.bordered .list-cell { + -fx-border-color: -color-cell-border; +} +.list-view.dense .list-cell { + -fx-cell-size: 2em; +} +.list-view.striped .list-cell { + -fx-border-width: 0; +} +.list-view.striped .list-cell:odd { + -fx-background-color: -color-cell-bg-odd; +} + +.table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-7; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.55; +} +.table-view > .virtual-flow:disabled { + -fx-opacity: 0.55; +} +.table-view.edge-to-edge { + -fx-border-width: 0; +} +.table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.table-view.bordered .table-row-cell > .table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.table-view.bordered .table-row-cell > .table-cell:empty { + -fx-border-color: transparent; +} +.table-view.dense .table-row-cell { + -fx-cell-size: 2em; +} +.table-view.striped .table-row-cell { + -fx-background-insets: 0; +} +.table-view.striped.bordered .table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.table-view.striped .table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.table-view .table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; +} +.table-view .table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.table-view .table-row-cell:empty > .table-cell { + -fx-border-color: transparent; +} +.table-view .table-row-cell > .table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.table-view .table-row-cell > .table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .table-row-cell > .table-cell:last-visible, +.tree-table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell > .tree-table-cell:last-visible { + -fx-border-color: transparent; +} + +.table-view .table-row-cell > .table-cell.check-box-table-cell, +.table-view .table-row-cell > .table-cell.font-icon-table-cell, +.tree-table-view .tree-table-row-cell > .tree-table-cell.check-box-tree-table-cell { + -fx-alignment: CENTER_LEFT; +} + +.tree-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-7; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.tree-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.55; +} +.tree-view > .virtual-flow:disabled { + -fx-opacity: 0.55; +} +.tree-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-view.dense .tree-cell { + -fx-padding: 0.25em 0 0.25em 0; +} + +.tree-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0.5em 0 0.5em 0; + -fx-indent: 1em; +} +.tree-cell > .tree-disclosure-node { + -fx-padding: 5px 0.5em 0 0.5em; + -fx-background-color: transparent; +} + +.tree-cell > .tree-disclosure-node > .arrow, +.tree-table-row-cell > .tree-disclosure-node > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-cell-fg; + -fx-padding: 0.333333em 0.229em 0.333333em 0.229em; +} + +.tree-cell:expanded > .tree-disclosure-node > .arrow, +.tree-table-row-cell:expanded > .tree-disclosure-node > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} + +.tree-table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-7; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.tree-table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.55; +} +.tree-table-view > .virtual-flow:disabled { + -fx-opacity: 0.55; +} +.tree-table-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.tree-table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.tree-table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.tree-table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.tree-table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.tree-table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.tree-table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.tree-table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.tree-table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.tree-table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.tree-table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell:empty { + -fx-border-color: transparent; +} +.tree-table-view.dense .tree-table-row-cell { + -fx-cell-size: 2em; +} +.tree-table-view.dense .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 0.6em 0.5em 0 0.5em; +} +.tree-table-view.striped .tree-table-row-cell { + -fx-background-insets: 0; +} +.tree-table-view.striped.bordered .tree-table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view.striped .tree-table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.tree-table-view .tree-table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; + -fx-indent: 1em; +} +.tree-table-view .tree-table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.tree-table-view .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 1em 0.5em 0 0.5em; + -fx-background-color: transparent; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.menu-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0 0 0 0, 0 0 1 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.menu-bar > .container > .menu-button { + -fx-background-color: transparent; + -fx-background-insets: 0 0 1px 0; + -fx-background-radius: 0; + -fx-padding: 8px 12px 8px 12px; +} +.menu-bar > .container > .menu-button > .label { + -fx-padding: 0; + -fx-text-fill: -color-fg-default; +} +.menu-bar > .container > .menu-button > .arrow-button { + -fx-padding: 0; +} +.menu-bar > .container > .menu-button > .arrow-button > .arrow { + -fx-padding: 0; + -fx-background-color: transparent; +} +.menu-bar > .container > .menu-button:hover, .menu-bar > .container > .menu-button:focused, .menu-bar > .container > .menu-button:showing { + -fx-background-color: -color-base-7, -color-base-7; +} + +.menu { + -fx-background-color: transparent; +} +.menu > .right-container > .arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} + +.menu-up-arrow { + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-down-arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-item { + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; +} +.menu-item > .graphic-container { + -fx-padding: 0 6px 0 0; +} +.menu-item > .label { + -fx-padding: 0 1em 0 0; + -fx-text-fill: -color-fg-default; +} +.menu-item > .left-container { + -fx-padding: 0 1em 0 0; +} +.menu-item > .right-container { + -fx-padding: 0 0 0 0.5em; +} +.menu-item:focused { + -fx-background-color: -color-base-7, -color-base-7; +} +.menu-item:disabled { + -fx-opacity: 0.55; + -fx-background-color: -color-bg-default; +} + +.radio-menu-item:checked > .left-container > .radio, +.check-menu-item:checked > .left-container > .check { + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-min-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-height: 0.75em; + -fx-max-width: 0.75em; +} + +.caption-menu-item { + -fx-padding: 8px 12px 8px 12px; +} +.caption-menu-item:hover, .caption-menu-item:focused, .caption-menu-item:pressed { + -fx-background-color: transparent; +} +.caption-menu-item > .label > .text { + -fx-font-weight: bold; +} + +.context-menu { + -fx-background-color: -color-border-muted, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-padding: 2px 2px 2px 2px; + -fx-background-radius: 1; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); +} +.context-menu > .scroll-arrow { + -fx-padding: 0.5em; + -fx-background-color: transparent; +} +.context-menu > .scroll-arrow:hover { + -fx-background-color: -color-base-7; + -fx-text-fill: -color-fg-default; +} +.context-menu .separator:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.context-menu .separator:horizontal .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0.5em 0 0.5em; +} + +.context-menu:show-mnemonics > .mnemonic-underline, +.menu:show-mnemonics > .mnemonic-underline, +.menu-bar:show-mnemonics > .mnemonic-underline, +.menu-item > .label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.pagination { + -fx-padding: 0; + -fx-arrow-button-gap: 4; + -fx-arrows-visible: true; + -fx-tooltip-visible: false; + -fx-page-information-visible: true; + -fx-page-information-alignment: bottom; +} +.pagination > .page { + -fx-background-color: transparent; +} +.pagination > .pagination-control { + -fx-background-color: transparent; + -fx-font-size: 1em; +} +.pagination > .pagination-control > .control-box { + -fx-padding: 2em 0 0 0; + -fx-spacing: 2; + -fx-alignment: CENTER; +} +.pagination > .pagination-control > .control-box .number-button { + -fx-padding: 0; +} +.pagination > .pagination-control > .control-box > .left-arrow-button > .left-arrow { + -fx-shape: "M14 7l-5 5 5 5V7z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .control-box > .right-arrow-button > .right-arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .page-information { + -fx-padding: 0.5em 0 0 0; +} +.pagination.bullet > .pagination-control > .control-box { + -fx-spacing: 0; +} +.pagination.bullet > .pagination-control > .control-box > .left-arrow-button { + -fx-background-radius: 1; + -fx-padding: 0 0.25em 0 0.083em; +} +.pagination.bullet > .pagination-control > .control-box > .right-arrow-button { + -fx-background-radius: 1; + -fx-padding: 0 0.083em 0 0.25em; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button { + -fx-background-radius: 0, 1, 1; + -fx-background-color: transparent, -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 5, 6; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: transparent, -color-accent-emphasis; +} + +.slider { + -color-slider-thumb: -color-fg-default; + -color-slider-thumb-border: -color-fg-default; + -color-slider-track: -color-border-muted; + -color-slider-track-progress: -color-accent-emphasis; + -color-slider-tick: -color-fg-muted; +} +.slider.large { + -color-slider-thumb: -color-fg-default; + -color-slider-thumb-border: -color-fg-default; +} +.slider > .thumb { + -fx-background-color: -color-slider-thumb-border, -color-slider-thumb; + -fx-background-insets: 0, 2px; + -fx-background-radius: 1; +} +.slider > .track { + -fx-background-color: transparent, -color-slider-track; + -fx-background-radius: 1; +} +.slider > .progress { + -fx-background-color: transparent, -color-slider-track-progress; +} +.slider > .axis { + -fx-tick-label-fill: -color-slider-tick; + -fx-tick-length: 5px; + -fx-minor-tick-length: 3px; +} +.slider > .axis > .axis-tick-mark, +.slider > .axis > .axis-minor-tick-mark { + -fx-stroke: -color-slider-tick; +} +.slider:disabled { + -fx-opacity: 0.55; +} +.slider:horizontal > .thumb { + -fx-padding: 10px 4px 10px 4px; +} +.slider:horizontal > .track { + -fx-padding: 10px 0 10px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider:horizontal > .progress { + -fx-background-radius: 1; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .thumb { + -fx-padding: 8px 4px 8px 4px; +} +.slider.small:horizontal > .track { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.large:horizontal > .thumb { + -fx-padding: 14px 4px 14px; +} +.slider.large:horizontal > .track { + -fx-padding: 14px 0 14px 0; + -fx-background-insets: 0, 2px 0 2px 0; +} +.slider.large:horizontal > .progress { + -fx-padding: 14px 0 14px 0; + -fx-background-insets: 0, 2px 0 2px 0; +} +.slider:vertical > .thumb { + -fx-padding: 4px 10px 4px 10px; +} +.slider:vertical > .track { + -fx-padding: 0 10px 0 10px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider:vertical > .progress { + -fx-background-radius: 1 1 1 1; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .thumb { + -fx-padding: 4px 8px 4px 8px; +} +.slider.small:vertical > .track { + -fx-padding: 0 8px 0 8px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.large:vertical > .thumb { + -fx-padding: 4px 14px 4px 14px; +} +.slider.large:vertical > .track { + -fx-padding: 0 14px 0 14px; + -fx-background-insets: 0, 0 2px 0 2px; +} +.slider.large:vertical > .progress { + -fx-padding: 0 14px 0 14px; + -fx-background-insets: 0, 0 2px 0 2px; +} + +.tool-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0, 0 0 1px 0; + -fx-padding: 4px 0.3em 4px 0.3em; + -fx-spacing: 4px; + -fx-alignment: CENTER_LEFT; +} +.tool-bar > .container > .button, +.tool-bar > .container > .menu-button, +.tool-bar > .container > .split-menu-button { + -color-button-bg: -color-bg-subtle; + -fx-background-insets: 0; +} +.tool-bar > .container .toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-bg-selected: -color-base-7; + -color-button-fg-selected: -color-fg-default; + -fx-background-insets: 0; +} +.tool-bar > .container > .separator { + -fx-orientation: vertical; +} +.tool-bar > .tool-bar-overflow-button { + -fx-padding: 0 0.3em 0 4px; +} +.tool-bar > .tool-bar-overflow-button > .arrow { + -fx-shape: "M5.06 5 4 6.06 7.94 10 4 13.94 5.06 15l5-5z M11 5 9.94 6.06 13.88 10l-3.94 3.94L11 15l5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tool-bar:vertical { + -fx-background-insets: 0, 0 1px 0 0; + -fx-padding: 0.3em 4px 0.3em 4px; + -fx-alignment: TOP_LEFT; +} +.tool-bar:vertical > .container > .separator { + -fx-orientation: horizontal; +} +.tool-bar:vertical > .tool-bar-overflow-button { + -fx-padding: 4px 0 0.3em 0; +} +.tool-bar:vertical.right { + -fx-background-insets: 0, 0 0 0 1px; +} +.tool-bar.bottom { + -fx-background-insets: 0, 1px 0 0 0; +} + +.toggle-switch { + -fx-thumb-move-animation-time: 200; +} +.toggle-switch > .label-container > .label { + -fx-font-size: 1em; + -fx-text-fill: -color-fg-default; + -fx-padding: 2px 6px 2px 0; +} +.toggle-switch > .thumb { + -fx-background-color: -color-border-default, -color-fg-emphasis; + -fx-background-insets: 0, 3px; + -fx-background-radius: 1; + -fx-padding: 0.8em; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-opacity: 0.8; +} +.toggle-switch > .thumb-area { + -fx-background-radius: 1; + -fx-background-color: -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 1px; + -fx-padding: 0.8em 1.6em 0.8em 1.6em; +} +.toggle-switch:selected > .thumb { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; + -fx-opacity: 1; +} +.toggle-switch:selected > .thumb-area { + -fx-background-color: -color-accent-emphasis; + -fx-background-insets: 0; +} +.toggle-switch:disabled { + -fx-opacity: 0.55; +} + +.accordion > .titled-pane.first-titled-pane > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 1 1 0 0; +} +.accordion > .titled-pane > .title { + -fx-background-insets: 0, 0 1px 1px 1px; + -fx-background-radius: 0; +} + +.bread-crumb-bar > .button.flat { + -fx-padding: 8px 2px 8px 9px; + -fx-content-display: RIGHT; +} +.bread-crumb-bar > .button.flat.first { + -fx-padding: 8px 2px 8px 12px; +} +.bread-crumb-bar > .button.flat.last { + -fx-padding: 8px 12px 8px 9px; +} +.bread-crumb-bar > .button.flat.last .font-icon, .bread-crumb-bar > .button.flat.last .ikonli-font-icon { + -fx-min-width: 0; + -fx-pref-width: 0; + -fx-max-width: 0; + visibility: hidden; +} + +.chart { + -fx-padding: 4px; +} +.chart > .chart-title { + -fx-font-size: 1.25em; +} +.chart > .chart-content { + -fx-padding: 10px; +} +.chart > .chart-content > .chart-plot-background { + -fx-background-color: -color-bg-default; +} +.chart:disabled > .chart-content { + -fx-opacity: 0.55; +} +.chart:disabled > .chart-content .label { + -fx-opacity: 1; +} +.chart > .chart-legend { + -fx-padding: 6px; +} +.chart .axis { + -fx-axis-color: -color-border-default; + -fx-tick-label-font-size: 0.8em; + -fx-tick-label-fill: -color-fg-default; +} +.chart .axis:top { + -fx-border-color: transparent transparent -fx-axis-color transparent; +} +.chart .axis:right { + -fx-border-color: transparent transparent transparent -fx-axis-color; +} +.chart .axis:bottom { + -fx-border-color: -fx-axis-color transparent transparent transparent; +} +.chart .axis:left { + -fx-border-color: transparent -fx-axis-color transparent transparent; +} +.chart .axis:top > .axis-label, .chart .axis:left > .axis-label { + -fx-padding: 0 0 4px 0; +} +.chart .axis:bottom > .axis-label, .chart .axis:right > .axis-label { + -fx-padding: 4px 0 0 0; +} +.chart .axis > .axis-tick-mark, +.chart .axis > .axis-minor-tick-mark { + -fx-fill: none; + -fx-stroke: -fx-axis-color; +} +.chart .chart-horizontal-grid-lines, +.chart .chart-vertical-grid-lines { + -fx-stroke: -color-border-muted; + -fx-stroke-dash-array: 0.25em, 0.25em; +} +.chart .chart-alternative-row-fill, +.chart .chart-alternative-column-fill { + -fx-fill: none; + -fx-stroke: none; +} +.chart .chart-vertical-zero-line, +.chart .chart-horizontal-zero-line { + -fx-stroke: -color-fg-default; +} + +.chart-symbol { + -fx-background-color: -color-chart-1; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color1.chart-symbol { + -fx-background-color: -color-chart-2; + -fx-background-radius: 0; +} + +.default-color2.chart-symbol { + -fx-background-color: -color-chart-3; + -fx-background-radius: 0; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.default-color3.chart-symbol { + -fx-background-color: -color-chart-4; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,10 L0,10 L0,8 L4,5 L0,2 L0,0 Z"; +} + +.default-color4.chart-symbol { + -fx-background-color: -color-chart-5; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M5,0 L10,8 L0,8 Z"; +} + +.default-color5.chart-symbol { + -fx-background-color: -color-chart-6, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color6.chart-symbol { + -fx-background-color: -color-chart-7, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 0; +} + +.default-color7.chart-symbol { + -fx-background-color: -color-chart-8, white; + -fx-background-radius: 0; + -fx-background-insets: 0, 2.5; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.chart-line-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.chart-series-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 3px; +} + +.default-color0.chart-line-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-line-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-line-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-line-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-line-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-line-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-line-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-line-symbol { + -fx-background-color: -color-chart-8, white; +} + +.default-color0.chart-series-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-line { + -fx-stroke: -color-chart-8; +} + +.chart-area-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-padding: 3px; +} + +.default-color0.chart-area-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-area-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-area-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-area-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-area-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-area-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-area-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-area-symbol { + -fx-background-color: -color-chart-8, white; +} + +.chart-series-area-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 1px; +} + +.default-color0.chart-series-area-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-area-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-area-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-area-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-area-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-area-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-area-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-area-line { + -fx-stroke: -color-chart-8; +} + +.chart-series-area-fill { + -fx-stroke: none; + -fx-fill: -color-chart-1-alpha20; +} + +.default-color0.chart-series-area-fill { + -fx-fill: -color-chart-1-alpha20; +} + +.default-color1.chart-series-area-fill { + -fx-fill: -color-chart-2-alpha20; +} + +.default-color2.chart-series-area-fill { + -fx-fill: -color-chart-3-alpha20; +} + +.default-color3.chart-series-area-fill { + -fx-fill: -color-chart-4-alpha20; +} + +.default-color4.chart-series-area-fill { + -fx-fill: -color-chart-5-alpha20; +} + +.default-color5.chart-series-area-fill { + -fx-fill: -color-chart-6-alpha20; +} + +.default-color6.chart-series-area-fill { + -fx-fill: -color-chart-7-alpha20; +} + +.default-color7.chart-series-area-fill { + -fx-fill: -color-chart-8-alpha20; +} + +.area-legend-symbol { + -fx-padding: 6px; + -fx-background-radius: 6px; + -fx-background-insets: 0, 3; +} + +.bubble-legend-symbol { + -fx-background-radius: 8px; + -fx-padding: 8px; +} + +.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; + -fx-background-color: radial-gradient(center 50% 50%, radius 80%, derive(-fx-bubble-fill, 20%), derive(-fx-bubble-fill, -30%)); +} + +.default-color0.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; +} + +.default-color1.chart-bubble { + -fx-bubble-fill: -color-chart-2-alpha70; +} + +.default-color2.chart-bubble { + -fx-bubble-fill: -color-chart-3-alpha70; +} + +.default-color3.chart-bubble { + -fx-bubble-fill: -color-chart-4-alpha70; +} + +.default-color4.chart-bubble { + -fx-bubble-fill: -color-chart-5-alpha70; +} + +.default-color5.chart-bubble { + -fx-bubble-fill: -color-chart-6-alpha70; +} + +.default-color6.chart-bubble { + -fx-bubble-fill: -color-chart-7-alpha70; +} + +.default-color7.chart-bubble { + -fx-bubble-fill: -color-chart-8-alpha70; +} + +.chart-bar { + -fx-bar-fill: -color-chart-1; + -fx-background-color: linear-gradient(to right, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); + -fx-background-insets: 0; +} + +.chart-bar.danger { + -fx-background-insets: 1 0 0 0; +} + +.bar-chart:horizontal .chart-bar { + -fx-background-insets: 0 0 0 1; +} + +.bar-chart:horizontal .chart-bar, +.stacked-bar-chart:horizontal .chart-bar { + -fx-background-color: linear-gradient(to bottom, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); +} + +.default-color0.chart-bar { + -fx-bar-fill: -color-chart-1; +} + +.default-color1.chart-bar { + -fx-bar-fill: -color-chart-2; +} + +.default-color2.chart-bar { + -fx-bar-fill: -color-chart-3; +} + +.default-color3.chart-bar { + -fx-bar-fill: -color-chart-4; +} + +.default-color4.chart-bar { + -fx-bar-fill: -color-chart-5; +} + +.default-color5.chart-bar { + -fx-bar-fill: -color-chart-6; +} + +.default-color6.chart-bar { + -fx-bar-fill: -color-chart-7; +} + +.default-color7.chart-bar { + -fx-bar-fill: -color-chart-8; +} + +.bar-legend-symbol { + -fx-padding: 8px; +} + +.chart-pie { + -fx-pie-color: -color-chart-1; + -fx-background-color: radial-gradient(radius 100%, derive(-fx-pie-color, 20%), derive(-fx-pie-color, -10%)); + -fx-background-insets: 1; + -fx-border-color: -color-bg-default; +} + +.chart-pie-label { + -fx-padding: 3px; + -fx-fill: -color-fg-default; +} + +.chart-pie-label-line { + -fx-stroke: derive(-color-bg-default, -20%); +} + +.default-color0.chart-pie { + -fx-pie-color: -color-chart-1; +} + +.default-color1.chart-pie { + -fx-pie-color: -color-chart-2; +} + +.default-color2.chart-pie { + -fx-pie-color: -color-chart-3; +} + +.default-color3.chart-pie { + -fx-pie-color: -color-chart-4; +} + +.default-color4.chart-pie { + -fx-pie-color: -color-chart-5; +} + +.default-color5.chart-pie { + -fx-pie-color: -color-chart-6; +} + +.default-color6.chart-pie { + -fx-pie-color: -color-chart-7; +} + +.default-color7.chart-pie { + -fx-pie-color: -color-chart-8; +} + +.danger.chart-pie { + -fx-pie-color: transparent; + -fx-background-color: white; +} + +.pie-legend-symbol.chart-pie { + -fx-background-radius: 8px; + -fx-padding: 8px; + -fx-border-color: none; +} + +.check-box { + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.check-box > .box { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-padding: 3px 4px 3px 4px; + -fx-alignment: CENTER; +} +.check-box > .box > .mark { + -fx-background-color: -color-bg-default; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.check-box:indeterminate > .box > .mark { + -fx-background-color: -color-fg-muted; + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.check-box:disabled { + -fx-opacity: 0.55; +} +.check-box:disabled > .box { + -fx-opacity: 0.55; +} +.check-box:selected > .box { + -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; +} +.check-box:selected > .box > .mark { + -fx-background-color: -color-fg-emphasis; +} +.check-box:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.color-picker > .color-picker-label { + -fx-padding: 8px 12px 8px 12px; +} +.color-picker > .color-picker-label > .label { + -fx-text-fill: -color-fg-default; +} +.color-picker > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: -color-border-default; +} +.color-picker.button > .color-picker-label { + -fx-padding: 0; +} + +.color-palette { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-spacing: 10px; + -fx-padding: 1em; +} +.color-palette > .color-picker-grid { + -fx-padding: 0.5px; + -fx-snap-to-pixel: false; +} +.color-palette > .color-picker-grid > .color-square { + -fx-background-color: transparent; + -fx-padding: 0.5px; +} + +.color-palette-region { + -fx-effect: dropshadow(gaussian, transparent, 12, 0, 0, 8); +} +.color-palette-region > .color-square.hover-square { + -fx-background-color: -color-accent-fg, -color-bg-default; + -fx-background-insets: -2, -1; + -fx-background-radius: 5, 0; + -fx-scale-x: 1.5; + -fx-scale-y: 1.5; + -fx-border-color: -color-accent-fg; + -fx-border-insets: -1, -1; +} + +.custom-color-dialog { + -fx-background-color: -color-bg-default; + -fx-padding: 1.25em; + -fx-spacing: 1.25em; +} +.custom-color-dialog > .color-rect-pane { + -fx-spacing: 1em; + -fx-pref-height: 16em; + -fx-alignment: TOP-LEFT; + -fx-fill-height: true; +} +.custom-color-dialog > .color-rect-pane > .color-rect { + -fx-min-width: 16em; + -fx-min-height: 16em; +} +.custom-color-dialog > .color-rect-pane > .color-rect .color-rect-border { + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-rect #color-rect-indicator { + -fx-background-color: none; + -fx-border-color: white; + -fx-border-radius: 0.4166667em; + -fx-pref-width: 0.833333em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.4166667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .color-rect-pane > .color-bar { + -fx-min-width: 1.666667em; + -fx-min-height: 16.666667em; + -fx-max-width: 1.666667em; + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-bar #color-bar-indicator { + -fx-border-radius: 0.333333em; + -fx-border-color: white; + -fx-pref-width: 2em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.1666667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .label { + -fx-padding: 0 0 0 2px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #current-new-color-border { + -fx-border-color: -color-border-default; + -fx-border-width: 1px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .color-rect { + -fx-min-width: 10em; + -fx-pref-width: 10em; + -fx-min-height: 1.75em; + -fx-pref-height: 1.75em; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer1 { + -fx-min-height: 5px; + -fx-pref-height: 5px; + -fx-max-height: 5px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer2 { + -fx-min-height: 1em; + -fx-pref-height: 1em; + -fx-max-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane { + -fx-hgap: 6px; + -fx-vgap: 6px; +} +.custom-color-dialog > .controls-pane #settings-pane > .customcolor-controls-background { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 13px 0 5px 0, 14px 1px 6px 1px; + -fx-background-radius: 1; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-label { + -fx-min-width: 5.75em; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-unit { + -fx-min-width: 1.5em; + -fx-pref-width: 1.5em; + -fx-max-width: 1.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > .slider { + -fx-pref-width: 10em; +} +.custom-color-dialog > .controls-pane #settings-pane > .color-input-field { + -fx-max-width: 4em; + -fx-pref-width: 4em; + -fx-min-width: 4em; + -fx-pref-column-count: 3; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-side { + -fx-min-width: 0.5em; + -fx-pref-width: 0.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-bottom { + -fx-min-height: 1em; + -fx-pref-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane > .web-field { + -fx-pref-column-count: 6; + -fx-pref-width: 8em; +} +.custom-color-dialog > .controls-pane #settings-pane > .webcolor-field:dir(rtl) > .text-field:dir(ltr) { + -fx-alignment: BASELINE_RIGHT; +} +.custom-color-dialog > .controls-pane > #buttons-hbox { + -fx-spacing: 10px; + -fx-padding: 1em 0 0 0; + -fx-alignment: BOTTOM_RIGHT; +} +.custom-color-dialog > .controls-pane .transparent-pattern { + -fx-background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCOTBEQkE1RjJFMjA2ODExOUExMUM5NDhFOTUyQzM3MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRkE3MDZERThFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRkE3MDZERDhFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk4MDExNzQwNzIwNjgxMTg3MUZDMUExNDFCMTYwNzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjkwREJBNUYyRTIwNjgxMTlBMTFDOTQ4RTk1MkMzNzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71FDCdAAAAKElEQVR42mI8c+YMAwwYGxvD2UwMOADpEoz///+Hc86ePUsLOwACDABC1ghwV8TLOQAAAABJRU5ErkJggg=="); + -fx-background-repeat: repeat; + -fx-background-size: auto; +} + +.custom-text-field:left-node-visible { + -fx-padding: 8px 12px 8px 0; +} +.custom-text-field:left-node-visible .left-pane { + -fx-padding: 0 4px 0 6px; +} +.custom-text-field:right-node-visible { + -fx-padding: 8px 0 8px 12px; +} +.custom-text-field:right-node-visible .right-pane { + -fx-padding: 0 6px 0 4px; +} +.custom-text-field:left-node-visible:right-node-visible { + -fx-padding: 8px 0 8px 0; +} +.custom-text-field:success .font-icon, .custom-text-field:success .ikonli-font-icon { + -fx-icon-color: -color-success-fg; + -fx-fill: -color-success-fg; +} +.custom-text-field:danger .font-icon, .custom-text-field:danger .ikonli-font-icon { + -fx-icon-color: -color-danger-fg; + -fx-fill: -color-danger-fg; +} + +.combo-box-base.date-picker > .arrow-button { + -fx-cursor: hand; +} +.combo-box-base.date-picker > .arrow-button > .arrow { + -fx-shape: "M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V10h16v11zm0-13H4V5h16v3z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-default; + -fx-padding: 0.416667em; +} + +.date-picker-popup { + -color-date-bg: -color-bg-default; + -color-date-border: -color-border-default; + -color-date-month-year-bg: -color-bg-default; + -color-date-month-year-fg: -color-fg-default; + -color-date-day-bg: -color-bg-default; + -color-date-day-bg-hover: -color-bg-subtle; + -color-date-day-bg-selected: -color-accent-emphasis; + -color-date-day-fg: -color-fg-default; + -color-date-day-fg-hover: -color-fg-default; + -color-date-day-fg-selected: -color-fg-emphasis; + -color-date-week-bg: -color-bg-default; + -color-date-week-fg: -color-accent-fg; + -color-date-today-bg: -color-accent-subtle; + -color-date-today-fg: -color-accent-fg; + -color-date-other-month-fg: -color-fg-muted; + -color-date-chrono-fg: -color-success-fg; + -fx-background-color: -color-date-border, -color-date-bg; + -fx-background-insets: 0, 1; + -fx-background-radius: 0; + -fx-alignment: CENTER; + -fx-spacing: 0; + -fx-padding: 1px; +} +.date-picker-popup > .month-year-pane { + -fx-padding: 8px 8px 8px 8px; + -fx-background-color: -color-date-month-year-bg; + -fx-background-insets: 0; +} +.date-picker-popup > .month-year-pane > .spinner { + -fx-spacing: 4px; + -fx-alignment: CENTER; + -fx-fill-height: false; + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-font-size: 1.1em; +} +.date-picker-popup > .month-year-pane > .spinner > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .label { + -fx-alignment: CENTER; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .secondary-label { + -fx-alignment: BASELINE_CENTER; + -fx-padding: 0.5em 0 0 0; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .calendar-grid { + -fx-background-color: -color-date-bg; + -fx-padding: 8px; +} +.date-picker-popup > .calendar-grid > .date-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-alignment: BASELINE_CENTER; + -fx-opacity: 1; + -fx-text-fill: -color-date-day-fg; +} +.date-picker-popup > .calendar-grid > .week-number-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-week-bg; + -fx-text-fill: -color-date-week-fg; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .day-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-day-bg; +} +.date-picker-popup > .calendar-grid > .day-cell > .secondary-text { + -fx-fill: -color-date-chrono-fg; +} +.date-picker-popup > .calendar-grid > .day-cell:disabled { + -fx-opacity: 0.55; +} +.date-picker-popup > .calendar-grid .day-name-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .hijrah-day-cell { + -fx-alignment: TOP_LEFT; + -fx-padding: 0.083333em 4px 0.083333em 0.333333em; + -fx-cell-size: 2.75em; +} +.date-picker-popup > .calendar-grid > .today { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; + -fx-font-weight: bold; +} + +.inline-date-picker { + -fx-effect: none; +} +.inline-date-picker > .top-node, +.inline-date-picker > .bottom-node { + -fx-padding: 8px 16px 8px 16px; +} +.inline-date-picker > .month-year-pane { + -fx-padding: 8px 16px 8px 16px; + -fx-alignment: CENTER_LEFT; + -fx-spacing: 6px; +} +.inline-date-picker > .month-year-pane > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.inline-date-picker > .month-year-pane > .back-button { + -fx-padding: 0 1em 0 0; +} +.inline-date-picker > .month-year-pane > .back-button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .forward-button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .label { + -fx-text-fill: -color-date-month-year-fg; + -fx-font-size: 1.1em; +} +.inline-date-picker:disabled > .calendar-grid { + -fx-opacity: 0.55; +} +.inline-date-picker:disabled > .calendar-grid > .day-cell:disabled { + -fx-opacity: 1; +} + +.date-picker-popup > .calendar-grid > .selected, +.date-picker-popup > .calendar-grid > .selected > .secondary-text, +.date-picker-popup > .calendar-grid > .previous-month.selected, +.date-picker-popup > .calendar-grid > .previous-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.selected { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; + -fx-font-weight: normal; +} + +.date-picker-popup > .calendar-grid > .day-cell:hover { + -fx-background-color: -color-date-day-bg-hover; +} + +.date-picker-popup > .calendar-grid > .today:hover { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; +} + +.date-picker-popup > .calendar-grid > .selected:hover { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; +} + +.date-picker-popup > .calendar-grid > .previous-month, +.date-picker-popup > .calendar-grid > .next-month, +.date-picker-popup > .calendar-grid > .previous-month.today, +.date-picker-popup > .calendar-grid > .next-month.today, +.date-picker-popup > .calendar-grid > .previous-month > .secondary-text, +.date-picker-popup > .calendar-grid > .next-month > .secondary-text { + -fx-text-fill: -color-date-other-month-fg; + -fx-fill: -color-date-other-month-fg; + -fx-font-weight: normal; +} + +.dialog-pane { + -fx-background-color: -color-bg-default; + -fx-padding: 0; + -fx-max-width: 600px; +} +.dialog-pane > .expandable-content { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container { + -fx-padding: 2em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container > .details-button { + -fx-padding: 0; + -fx-alignment: BASELINE_LEFT; + -fx-focus-traversable: false; + -fx-text-fill: -color-fg-default; +} +.dialog-pane > .button-bar > .container > .details-button:hover { + -fx-underline: true; +} +.dialog-pane > .content { + -fx-padding: 1em 1em 0 1em; +} +.dialog-pane > .content.label { + -fx-alignment: TOP_LEFT; +} +.dialog-pane:header > .header-panel { + -fx-padding: 1em 1em 1em 1em; + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.dialog-pane:header > .header-panel > .label { + -fx-wrap-text: true; +} +.dialog-pane:header > .header-panel > .graphic-container { + -fx-padding: 0 0 0 1em; +} +.dialog-pane:no-header > .content { + -fx-padding: 1em 1em 0 0; +} +.dialog-pane:no-header > * > .graphic-container { + -fx-padding: 1em 1em 0 1em; +} +.dialog-pane.information > .header-panel { + -fx-background-color: -color-accent-fg, -color-bg-subtle; +} +.dialog-pane.information > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.warning > .header-panel { + -fx-background-color: -color-warning-fg, -color-bg-subtle; +} +.dialog-pane.warning > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.error > .header-panel { + -fx-background-color: -color-danger-fg, -color-bg-subtle; +} +.dialog-pane.error > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} + +.alert.information.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.warning.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.error.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.confirmation.dialog-pane, +.text-input-dialog.dialog-pane, +.choice-dialog.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.html-editor { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-padding: 2px; +} +.html-editor:contains-focus { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.html-editor .tool-bar { + -fx-padding: 4px; +} +.html-editor .button, +.html-editor .toggle-button { + -fx-background-insets: 0; +} +.html-editor .toggle-button { + -color-button-bg-selected: -color-base-6; + -color-button-border-focused: transparent; +} + +.color-picker.html-editor-foreground { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-background { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-foreground > .color-picker-label > .picker-color > .picker-color-rect, .color-picker.html-editor-background > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: none; +} + +.color-picker.html-editor-foreground { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Text-Color.png"); +} + +.color-picker.html-editor-background { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Background-Color.png"); +} + +.html-editor-cut { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Cut.png"); +} + +.html-editor-copy { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Copy.png"); +} + +.html-editor-paste { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Paste.png"); +} + +.html-editor-align-left { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Left.png"); +} + +.html-editor-align-center { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Center.png"); +} + +.html-editor-align-right { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Right.png"); +} + +.html-editor-align-justify { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Justify.png"); +} + +.html-editor-outdent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent.png"); +} + +.html-editor-outdent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent-rtl.png"); +} + +.html-editor-indent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent.png"); +} + +.html-editor-indent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent-rtl.png"); +} + +.html-editor-bullets { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets.png"); +} + +.html-editor-bullets:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets-rtl.png"); +} + +.html-editor-numbers { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered.png"); +} + +.html-editor-numbers:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered-rtl.png"); +} + +.html-editor-bold { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bold.png"); +} + +.html-editor-italic { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Italic.png"); +} + +.html-editor-underline { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Underline.png"); +} + +.html-editor-strike { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Strikethrough.png"); +} + +.html-editor-hr { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Break.png"); +} + +.hyperlink { + -color-link-fg: -color-accent-fg; + -color-link-fg-visited: -color-fg-default; + -color-link-fg-armed: -color-fg-default; + -fx-cursor: hand; + -fx-underline: true; + -fx-text-fill: -color-link-fg; +} +.hyperlink:visited { + -fx-text-fill: -color-link-fg-visited; +} +.hyperlink:armed { + -fx-text-fill: -color-link-fg-armed; + -fx-underline: false; +} +.hyperlink:disabled { + -fx-opacity: 0.55; +} +.hyperlink:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-fill; +} + +.label { + -fx-text-fill: -color-fg-default; +} +.label:disabled { + -fx-opacity: 0.55; +} +.label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-button, +.split-menu-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-7; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 0; + -fx-alignment: CENTER_LEFT; +} +.menu-button .font-icon, .menu-button .ikonli-font-icon, +.split-menu-button .font-icon, +.split-menu-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.menu-button:disabled, +.split-menu-button:disabled { + -fx-opacity: 0.55; +} +.menu-button:show-mnemonics > .mnemonic-underline, +.split-menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 8px; +} +.menu-button.button-icon > .text, +.split-menu-button.button-icon > .text { + visibility: hidden; +} +.menu-button.button-circle, +.split-menu-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.menu-button.button-circle .text, +.split-menu-button.button-circle .text { + visibility: hidden; +} +.menu-button.left-pill, +.split-menu-button.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.menu-button.left-pill:hover, .menu-button.left-pill:focused, +.split-menu-button.left-pill:hover, +.split-menu-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.center-pill, +.split-menu-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.menu-button.center-pill:hover, .menu-button.center-pill:focused, +.split-menu-button.center-pill:hover, +.split-menu-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.right-pill, +.split-menu-button.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.menu-button.right-pill:hover, .menu-button.right-pill:focused, +.split-menu-button.right-pill:hover, +.split-menu-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button > .label, +.split-menu-button > .label { + -fx-padding: 8px 12px 8px 12px; + -fx-text-fill: -color-button-fg; +} +.menu-button > .arrow-button, +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 0; +} +.menu-button > .arrow-button > .arrow, +.split-menu-button > .arrow-button > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-button-fg; + -fx-min-width: 0.5em; +} +.menu-button:openvertically > .arrow-button > .arrow, +.split-menu-button:openvertically > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.menu-button:show-mnemonics > .label > .mnemonic-underline, +.split-menu-button:show-mnemonics > .label > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 0; +} +.menu-button:hover, +.split-menu-button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-opacity: 0.9; +} +.menu-button:hover > .label, +.split-menu-button:hover > .label { + -fx-text-fill: -color-button-fg-hover; +} +.menu-button:hover > .arrow-button > .arrow, +.split-menu-button:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-hover; +} +.menu-button:hover .font-icon, .menu-button:hover .ikonli-font-icon, +.split-menu-button:hover .font-icon, +.split-menu-button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.menu-button:focused, +.split-menu-button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; +} +.menu-button:focused > .label, +.split-menu-button:focused > .label { + -fx-text-fill: -color-button-fg-focused; +} +.menu-button:focused > .arrow-button > .arrow, +.split-menu-button:focused > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-focused; +} +.menu-button:focused .font-icon, .menu-button:focused .ikonli-font-icon, +.split-menu-button:focused .font-icon, +.split-menu-button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.menu-button:armed, .menu-button:focused:armed, +.split-menu-button:armed, +.split-menu-button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .label, .menu-button:focused:armed > .label, +.split-menu-button:armed > .label, +.split-menu-button:focused:armed > .label { + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .arrow-button > .arrow, .menu-button:focused:armed > .arrow-button > .arrow, +.split-menu-button:armed > .arrow-button > .arrow, +.split-menu-button:focused:armed > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-pressed; +} +.menu-button:armed .font-icon, .menu-button:armed .ikonli-font-icon, .menu-button:focused:armed .font-icon, .menu-button:focused:armed .ikonli-font-icon, +.split-menu-button:armed .font-icon, +.split-menu-button:armed .ikonli-font-icon, +.split-menu-button:focused:armed .font-icon, +.split-menu-button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.menu-button.accent, +.split-menu-button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.accent.button-outlined, +.split-menu-button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.accent.flat, +.split-menu-button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.menu-button.success, +.split-menu-button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.success.button-outlined, +.split-menu-button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.success.flat, +.split-menu-button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.menu-button.danger, +.split-menu-button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.danger.button-outlined, +.split-menu-button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.danger.flat, +.split-menu-button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.menu-button.flat, +.split-menu-button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} + +.menu-button.no-arrow > .arrow-button { + -fx-padding: 0; +} +.menu-button.no-arrow > .arrow-button > .arrow { + -fx-shape: none; + -fx-scale-shape: false; + -fx-min-width: -1; +} + +.split-menu-button > .label { + -fx-padding: 8px 6px 8px 12px; +} +.split-menu-button:hover > .arrow-button, .split-menu-button:focused:hover > .arrow-button { + -fx-background-color: -color-neutral-emphasis-plus; + -fx-background-insets: 1px; + -fx-background-radius: 1; + -fx-border-color: transparent; + -fx-opacity: 0.75; +} +.split-menu-button:hover > .arrow-button > .arrow, .split-menu-button:focused:hover > .arrow-button > .arrow { + -fx-background-color: -color-fg-emphasis; + -fx-opacity: 1; +} +.split-menu-button:default:hover > .arrow-button, .split-menu-button.accent:hover > .arrow-button, .split-menu-button.success:hover > .arrow-button, .split-menu-button.danger:hover > .arrow-button { + -fx-background-color: -color-fg-emphasis; +} +.split-menu-button:default:hover > .arrow-button > .arrow, .split-menu-button.accent:hover > .arrow-button > .arrow, .split-menu-button.success:hover > .arrow-button > .arrow, .split-menu-button.danger:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-bg-hover; +} +.split-menu-button.button-outlined:hover > .arrow-button, .split-menu-button.button-outlined:focused > .arrow-button { + -color-button-fg: -color-fg-emphasis; +} +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 12px; + -fx-background-radius: 0 1 1 0; + -fx-border-color: -color-button-fg; + -fx-border-width: 0 0 0 0.75px; + -fx-border-insets: 7px 0 7px 0; +} + +.popover { + -fx-background-color: -color-bg-overlay; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); +} +.popover > .border { + -fx-stroke: -color-border-default; + -fx-stroke-width: 1px; +} +.popover > .content { + -fx-padding: 10px 10px 10px 10px; +} +.popover > .content > .title { + -fx-padding: 0 0 1em 0; +} +.popover > .content > .title > .text { + -fx-text-fill: -color-fg-default; + -fx-font-size: 1.25em; + -fx-alignment: CENTER_LEFT; +} +.popover > .content > .title > .icon > .graphics > .circle { + -fx-fill: transparent; +} +.popover > .content > .title > .icon > .graphics > .line { + -fx-stroke: -color-fg-default; + -fx-stroke-width: 1px; +} + +.progress-bar { + -color-progress-bar-track: -color-bg-subtle; + -color-progress-bar-fill: -color-accent-emphasis; + -fx-indeterminate-bar-length: 60; + -fx-indeterminate-bar-escape: true; + -fx-indeterminate-bar-flip: true; + -fx-indeterminate-bar-animation-time: 2; +} +.progress-bar > .track { + -fx-background-color: -color-progress-bar-track; + -fx-background-insets: 0; + -fx-background-radius: 1; +} +.progress-bar > .bar { + -fx-background-color: -color-progress-bar-fill; + -fx-background-insets: 0; + -fx-background-radius: 1; + -fx-padding: 0.4em; +} +.progress-bar.small > .bar { + -fx-padding: 2px; +} +.progress-bar.medium > .bar { + -fx-padding: 0.4em; +} +.progress-bar.large > .bar { + -fx-padding: 0.8em; +} +.progress-bar:disabled { + -fx-opacity: 0.55; +} + +.progress-indicator { + -fx-indeterminate-segment-count: 12; + -fx-spin-enabled: true; +} +.progress-indicator > .determinate-indicator > .indicator { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; +} +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0.6em; +} +.progress-indicator > .determinate-indicator > .tick { + -fx-background-color: -color-fg-emphasis; + -fx-background-insets: 0; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; +} +.progress-indicator > .determinate-indicator > .percentage { + -fx-font-size: 0.8em; + -fx-fill: -color-fg-default; +} +.progress-indicator > .determinate-indicator:disabled { + -fx-opacity: 0.55; +} +.progress-indicator:indeterminate > .spinner { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-border-color: transparent; + -fx-border-width: 0; + -fx-border-radius: 0; + -fx-padding: 0; +} +.progress-indicator:indeterminate .segment { + -fx-background-color: -color-accent-emphasis; +} +.progress-indicator:indeterminate .segment0 { + -fx-shape: "M41.98 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment1 { + -fx-shape: "M33.75 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment2 { + -fx-shape: "M22.49 3.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment3 { + -fx-shape: "M11.24 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment4 { + -fx-shape: "M3.01 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment5 { + -fx-shape: "M0.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment6 { + -fx-shape: "M3.01 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment7 { + -fx-shape: "M11.25 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment8 { + -fx-shape: "M22.5 48.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment9 { + -fx-shape: "M33.75 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment10 { + -fx-shape: "M41.98 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment11 { + -fx-shape: "M45.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} + +.radio-button { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.radio-button > .radio { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-padding: 3px; + -fx-alignment: CENTER; +} +.radio-button > .radio > .dot { + -fx-background-color: transparent, transparent; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.radio-button:disabled { + -fx-opacity: 0.55; +} +.radio-button:disabled > .radio { + -fx-opacity: 0.55; +} +.radio-button:selected > .radio { + -fx-background-color: -color-accent-emphasis; +} +.radio-button:selected > .radio > .dot { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; +} +.radio-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.scroll-bar { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-bar > .thumb { + -fx-background-color: -color-fg-muted; + -fx-background-radius: 1; +} +.scroll-bar > .track { + -fx-background-color: transparent; + -fx-border-radius: 0; +} +.scroll-bar > .increment-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .increment-button > .increment-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar > .decrement-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .decrement-button > .decrement-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar:horizontal { + -fx-pref-height: 8px; +} +.scroll-bar:vertical { + -fx-pref-width: 8px; +} +.scroll-bar:hover, .scroll-bar:pressed, .scroll-bar:focused { + -fx-opacity: 1; +} + +.scroll-pane { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.scroll-pane > .viewport { + -fx-background-color: transparent; +} +.scroll-pane > .corner { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-pane:disabled > .scroll-bar { + -fx-opacity: 0.25; +} + +.separator:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator:horizontal > .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0 0 0; +} +.separator:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator:vertical > .line { + -fx-border-color: transparent transparent transparent -color-border-muted; + -fx-border-insets: 0 0 0 1px; +} +.separator.small:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.separator.small:vertical { + -fx-padding: 0 0.25em 0 0.25em; +} +.separator.medium:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator.medium:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator.large:horizontal { + -fx-padding: 1.5em 0 1.5em 0; +} +.separator.large:vertical { + -fx-padding: 0 1.5em 0 1.5em; +} + +.spinner { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default; + -fx-border-radius: 1; + -fx-border-width: 1px; +} +.spinner > .text-field { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0; + -fx-padding: 7px 11px 7px 11px; +} +.spinner > .increment-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: 0; + -fx-background-radius: 0 1 0 0; + -fx-padding: 10px; +} +.spinner > .increment-arrow-button:hover { + -fx-background-color: -color-base-6; +} +.spinner > .increment-arrow-button > .increment-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: false; +} +.spinner > .decrement-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: -1 0 0 0; + -fx-background-radius: 0 0 1 0; + -fx-padding: 10px; +} +.spinner > .decrement-arrow-button:hover { + -fx-background-color: -color-base-6; +} +.spinner > .decrement-arrow-button > .decrement-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.spinner:disabled { + -fx-opacity: 0.55; +} +.spinner:focused:focused, .spinner:contains-focus:focused { + -fx-border-color: -color-accent-emphasis; +} +.spinner.arrows-on-left-vertical > .text-field { + -fx-background-radius: 0 1 1 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-vertical > .increment-arrow-button { + -fx-background-radius: 1 0 0 0; +} +.spinner.arrows-on-left-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 0 1; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .text-field { + -fx-background-radius: 0 1 1 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-horizontal > .increment-arrow-button { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0 -1 0 0; +} +.spinner.split-arrows-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-vertical > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-vertical > .increment-arrow-button { + -fx-background-radius: 1 1 0 0; + -fx-background-insets: 0; +} +.spinner.split-arrows-vertical > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 1 1; + -fx-background-insets: 0 0 -1 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} + +.split-pane { + -color-split-divider: -color-border-subtle; + -color-split-divider-pressed: -color-accent-emphasis; + -color-split-grabber: -color-fg-muted; + -color-split-grabber-pressed: -color-accent-emphasis; + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-padding: 0; +} +.split-pane > .split-pane-divider { + -fx-background-color: -color-split-divider; + -fx-padding: 0 2px 0 2px; + -fx-opacity: 0.5; +} +.split-pane > .split-pane-divider > .horizontal-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 10px 2px 10px 2px; +} +.split-pane > .split-pane-divider > .vertical-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 2px 10px 2px 10px; +} +.split-pane > .split-pane-divider:pressed { + -fx-background-color: -color-split-divider-pressed; +} +.split-pane > .split-pane-divider:pressed > .horizontal-grabber, +.split-pane > .split-pane-divider:pressed > .vertical-grabber { + -fx-background-color: -color-split-grabber-pressed; +} +.split-pane > .split-pane-divider:hover { + -fx-opacity: 1; +} +.split-pane > .split-pane-divider:disabled { + -fx-opacity: 0.25; +} + +.tab-pane > .tab-header-area { + -fx-background-insets: 0; + -fx-background-color: -color-bg-default; + -fx-alignment: CENTER; +} +.tab-pane > .tab-header-area > .tab-header-background { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: transparent, transparent; + -fx-padding: 0.3em 0.6em 0.3em 0.6em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-alignment: CENTER; + -fx-text-fill: -color-fg-default; + -fx-padding: 0.4em 0.4em 0.4em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; + -fx-shape: "M 0,0 H1 L 4,3 7,0 H8 V1 L 5,4 8,7 V8 H7 L 4,5 1,8 H0 V7 L 3,4 0,1 Z"; + -fx-scale-shape: false; +} +.tab-pane > .tab-header-area > .headers-region > .tab:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label { + -fx-fill: -color-fg-default; + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label > *, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled { + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled > .tab-container { + -fx-opacity: 0.55; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right > .tab-container > .tab-label { + -fx-padding: 0.2em 0.4em 0.2em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected { + -fx-background-color: -color-border-default, -color-base-7; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:disabled, .tab-pane > .tab-header-area > .headers-region > .tab:right:disabled { + -fx-background-color: transparent; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button { + -fx-padding: 1em; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button:disabled { + -fx-opacity: 0.55; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tab-pane.floating > .tab-header-area { + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0; + -fx-background-color: transparent; + -fx-padding: 0.3em 0 0.3em 3px; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 1; + -fx-border-radius: 1; + -fx-border-width: 1px, 0 3px 0 0; + -fx-border-color: transparent, transparent; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-padding: 0.55em 0.55em 0.55em 0.55em; + -fx-min-width: 150px; + -fx-pref-width: 150px; + -fx-alignment: CENTER_LEFT; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab:hover > .tab-container, .tab-pane.floating > .tab-header-area > .headers-region > .tab:selected > .tab-container { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default, transparent; +} + +.text-input { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-fg-default; + -color-input-border: -color-border-default; + -color-input-bg-focused: -color-bg-default; + -color-input-border-focused: -color-accent-emphasis; + -color-input-bg-highlight: -color-accent-subtle; + -color-input-fg-highlight: -color-fg-default; + -fx-background-color: -color-input-border, -color-input-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-text-fill: -color-input-fg; + -fx-highlight-fill: -color-input-bg-highlight; + -fx-highlight-text-fill: -color-input-fg-highlight; + -fx-prompt-text-fill: -color-fg-subtle; + -fx-padding: 8px 12px 8px 12px; + -fx-cursor: text; +} +.text-input:focused { + -fx-background-color: -color-input-border-focused, -color-input-bg-focused; + -fx-prompt-text-fill: transparent; +} +.text-input:disabled { + -fx-opacity: 0.55; +} +.text-input:disabled > .scroll-pane { + -fx-opacity: 1; +} +.text-input:success { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-success-fg; + -color-input-border: -color-success-emphasis; + -color-input-border-focused: -color-success-emphasis; +} +.text-input:danger { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-danger-fg; + -color-input-border: -color-danger-emphasis; + -color-input-border-focused: -color-danger-emphasis; +} +.text-input.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.text-input.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.text-input.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.text-input.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.text-field.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.text-field.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.text-field.rounded { + -fx-background-radius: 10em; +} + +.text-area { + -fx-padding: 2px; + -fx-cursor: default; +} +.text-area .content { + -fx-cursor: text; + -fx-padding: 8px 12px 8px 12px; +} + +.password-field { + -fx-text-fill: -color-fg-muted; +} + +.titled-pane { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-effect: none; +} +.titled-pane.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} +.titled-pane.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} +.titled-pane.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} +.titled-pane > .title { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-padding: 10px 20px 10px 20px; +} +.titled-pane > .title > .text { + -fx-font-size: 1.25em; +} +.titled-pane > .title > .arrow-button { + -fx-background-color: none; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 10px 0 0; +} +.titled-pane > .title > .arrow-button > .arrow { + -fx-shape: "M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; + -fx-padding: 4px 5px 4px 5px; +} +.titled-pane > .content { + -fx-border-color: -color-border-default; + -fx-border-width: 0 1px 1px 1px; + -fx-border-radius: 0 0 1 1; + -fx-background-radius: 0 0 1 1; + -fx-background-color: -color-bg-default; + -fx-padding: 20px 20px 10px 20px; + -fx-alignment: TOP_LEFT; +} +.titled-pane:disabled > .title > *, +.titled-pane:disabled > .content > * { + -fx-opacity: 0.55; +} +.titled-pane:expanded > .title { + -fx-background-radius: 1 1 0 0; + -fx-background-insets: 0, 1px 1px 0 1px; +} +.titled-pane:collapsed > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; +} +.titled-pane.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-7; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -color-button-bg-selected: -color-accent-emphasis; + -color-button-fg-selected: -color-fg-emphasis; + -fx-padding: 8px 12px 8px 12px; +} +.toggle-button .font-icon, .toggle-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.toggle-button:disabled { + -fx-opacity: 0.55; +} +.toggle-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.toggle-button.button-icon { + -fx-padding: 8px; +} +.toggle-button.button-icon > .text { + visibility: hidden; +} +.toggle-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.toggle-button.button-circle .text { + visibility: hidden; +} +.toggle-button.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.toggle-button.left-pill:hover, .toggle-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.toggle-button.center-pill:hover, .toggle-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.toggle-button.right-pill:hover, .toggle-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected, .toggle-button:selected:focused { + -fx-background-color: -color-button-bg-selected; + -fx-text-fill: -color-button-fg-selected; + -fx-background-insets: 0; +} +.toggle-button:selected .font-icon, .toggle-button:selected .ikonli-font-icon, .toggle-button:selected:focused .font-icon, .toggle-button:selected:focused .ikonli-font-icon { + -fx-fill: -color-button-fg-selected; + -fx-icon-color: -color-button-fg-selected; +} +.toggle-button:show-mnemonics:selected > .mnemonic-underline { + -fx-stroke: -color-button-fg-selected; +} +.toggle-button:selected.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.tooltip { + -fx-background-color: -color-border-default, -color-bg-overlay; + -fx-background-insets: 0, 1px; + -fx-text-fill: -color-fg-default; + -fx-background-radius: 1; + -fx-padding: 8px 12px 8px 12px; + -fx-opacity: 0.85; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); +} diff --git a/src/Resources/css/nord-light.css b/src/Resources/css/nord-light.css new file mode 100644 index 00000000..07f94df1 --- /dev/null +++ b/src/Resources/css/nord-light.css @@ -0,0 +1,3664 @@ +.root { + -color-dark: #232730; + -color-light: #fafafc; + -color-base-0: #eef1f5; + -color-base-1: #E5E9F0; + -color-base-2: #D8DEE9; + -color-base-3: #c7ceda; + -color-base-4: #b7becb; + -color-base-5: #979fae; + -color-base-6: #788192; + -color-base-7: #4C566A; + -color-base-8: #3B4252; + -color-base-9: #2E3440; + -color-accent-0: #d2dce8; + -color-accent-1: #bccadc; + -color-accent-2: #98aeca; + -color-accent-3: #859fc0; + -color-accent-4: #7190b6; + -color-accent-5: #5E81AC; + -color-accent-6: #537297; + -color-accent-7: #476283; + -color-accent-8: #3c536e; + -color-accent-9: #314359; + -color-success-0: #d1e5e5; + -color-success-1: #aacfce; + -color-success-2: #82b8b8; + -color-success-3: #6fadac; + -color-success-4: #5ba2a1; + -color-success-5: #508f8e; + -color-success-6: #457b7a; + -color-success-7: #3a6867; + -color-success-8: #2f5454; + -color-success-9: #244140; + -color-warning-0: #f1dcd5; + -color-warning-1: #e9c7bc; + -color-warning-2: #e1b1a2; + -color-warning-3: #daa08d; + -color-warning-4: #d5937e; + -color-warning-5: #bb7a65; + -color-warning-6: #a66c5a; + -color-warning-7: #925f4e; + -color-warning-8: #7d5143; + -color-warning-9: #684438; + -color-danger-0: #eacacd; + -color-danger-1: #dfb1b5; + -color-danger-2: #d29097; + -color-danger-3: #c57179; + -color-danger-4: #bf616a; + -color-danger-5: #ac575f; + -color-danger-6: #994e55; + -color-danger-7: #86444a; + -color-danger-8: #733a40; + -color-danger-9: #603135; + -color-fg-default: #2E3440; + -color-fg-muted: rgba(76, 86, 106, 0.88); + -color-fg-subtle: #788192; + -color-fg-emphasis: #fafafc; + -color-bg-default: #fafafc; + -color-bg-overlay: #fafafc; + -color-bg-subtle: #eef1f5; + -color-bg-inset: #E5E9F0; + -color-border-default: #c7ceda; + -color-border-muted: #c7ceda; + -color-border-subtle: rgba(35, 39, 48, 0.15); + -color-shadow-default: #c7ceda; + -color-neutral-emphasis-plus: #3B4252; + -color-neutral-emphasis: #4C566A; + -color-neutral-muted: rgba(151, 159, 174, 0.4); + -color-neutral-subtle: rgba(151, 159, 174, 0.1); + -color-accent-fg: #537297; + -color-accent-emphasis: #476283; + -color-accent-muted: rgba(113, 144, 182, 0.4); + -color-accent-subtle: rgba(113, 144, 182, 0.1); + -color-warning-fg: #925f4e; + -color-warning-emphasis: #a66c5a; + -color-warning-muted: rgba(213, 147, 126, 0.4); + -color-warning-subtle: rgba(213, 147, 126, 0.1); + -color-success-fg: #3a6867; + -color-success-emphasis: #457b7a; + -color-success-muted: rgba(91, 162, 161, 0.4); + -color-success-subtle: rgba(91, 162, 161, 0.1); + -color-danger-fg: #994e55; + -color-danger-emphasis: #ac575f; + -color-danger-muted: rgba(191, 97, 106, 0.4); + -color-danger-subtle: rgba(191, 97, 106, 0.15); + -color-chart-1: #f3622d; + -color-chart-2: #fba71b; + -color-chart-3: #57b757; + -color-chart-4: #41a9c9; + -color-chart-5: #4258c9; + -color-chart-6: #9a42c8; + -color-chart-7: #c84164; + -color-chart-8: #888888; + -color-chart-1-alpha70: rgba(243, 98, 45, 0.7); + -color-chart-2-alpha70: rgba(251, 167, 27, 0.7); + -color-chart-3-alpha70: rgba(87, 183, 87, 0.7); + -color-chart-4-alpha70: rgba(65, 169, 201, 0.7); + -color-chart-5-alpha70: rgba(66, 88, 201, 0.7); + -color-chart-6-alpha70: rgba(154, 66, 200, 0.7); + -color-chart-7-alpha70: rgba(200, 65, 100, 0.7); + -color-chart-8-alpha70: rgba(136, 136, 136, 0.7); + -color-chart-1-alpha20: rgba(243, 98, 45, 0.2); + -color-chart-2-alpha20: rgba(251, 167, 27, 0.2); + -color-chart-3-alpha20: rgba(87, 183, 87, 0.2); + -color-chart-4-alpha20: rgba(65, 169, 201, 0.2); + -color-chart-5-alpha20: rgba(66, 88, 201, 0.2); + -color-chart-6-alpha20: rgba(154, 66, 200, 0.2); + -color-chart-7-alpha20: rgba(200, 65, 100, 0.2); + -color-chart-8-alpha20: rgba(136, 136, 136, 0.2); + -fx-background-color: -color-bg-default; + -fx-font-size: 14px; + -fx-background-radius: inherit; + -fx-background-insets: inherit; + -fx-padding: inherit; +} +.root.popup { + -fx-background-color: transparent; +} + +.ikonli-font-icon { + -fx-icon-color: -color-fg-default; + -fx-fill: -color-fg-default; + -fx-icon-size: 18px; +} + +.mnemonic-underline { + -fx-stroke: transparent; +} + +.text { + -fx-font-smoothing-type: lcd; + -fx-bounds-type: logical_vertical_center; +} + +Text { + -fx-fill: -color-fg-default; +} + +.title-1 { + -fx-font-size: 2em; + -fx-font-weight: bolder; +} + +.title-2 { + -fx-font-size: 1.75em; + -fx-font-weight: bolder; +} + +.title-3 { + -fx-font-size: 1.5em; + -fx-font-weight: bolder; +} + +.title-4 { + -fx-font-size: 1.25em; + -fx-font-weight: normal; +} + +.text-caption { + -fx-font-size: 1em; + -fx-font-weight: bold; +} + +.text-small { + -fx-font-size: 0.8em; +} + +.text.accent { + -fx-fill: -color-accent-fg; +} + +.label.accent { + -fx-text-fill: -color-accent-fg; +} + +.text.success { + -fx-fill: -color-success-fg; +} + +.label.success { + -fx-text-fill: -color-success-fg; +} + +.text.warning { + -fx-fill: -color-warning-fg; +} + +.label.warning { + -fx-text-fill: -color-warning-fg; +} + +.text.danger { + -fx-fill: -color-danger-fg; +} + +.label.danger { + -fx-text-fill: -color-danger-fg; +} + +.text-bold { + -fx-font-weight: bold; +} + +.text-bolder { + -fx-font-weight: bolder; +} + +.text-normal { + -fx-font-weight: normal; +} + +.text-lighter { + -fx-font-weight: lighter; +} + +.text-italic { + -fx-font-style: italic; +} + +.text-oblique { + -fx-font-style: oblique; +} + +.text-underlined { + -fx-underline: true; +} + +.text-strikethrough { + -fx-strikethrough: true; +} + +.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} + +.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} + +.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} + +.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.pagination { + -fx-padding: 0; + -fx-arrow-button-gap: 4; + -fx-arrows-visible: true; + -fx-tooltip-visible: false; + -fx-page-information-visible: true; + -fx-page-information-alignment: bottom; +} +.pagination > .page { + -fx-background-color: transparent; +} +.pagination > .pagination-control { + -fx-background-color: transparent; + -fx-font-size: 1em; +} +.pagination > .pagination-control > .control-box { + -fx-padding: 2em 0 0 0; + -fx-spacing: 2; + -fx-alignment: CENTER; +} +.pagination > .pagination-control > .control-box .number-button { + -fx-padding: 0; +} +.pagination > .pagination-control > .control-box > .left-arrow-button > .left-arrow { + -fx-shape: "M14 7l-5 5 5 5V7z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .control-box > .right-arrow-button > .right-arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .page-information { + -fx-padding: 0.5em 0 0 0; +} +.pagination.bullet > .pagination-control > .control-box { + -fx-spacing: 0; +} +.pagination.bullet > .pagination-control > .control-box > .left-arrow-button { + -fx-background-radius: 1; + -fx-padding: 0 0.25em 0 0.083em; +} +.pagination.bullet > .pagination-control > .control-box > .right-arrow-button { + -fx-background-radius: 1; + -fx-padding: 0 0.083em 0 0.25em; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button { + -fx-background-radius: 0, 1, 1; + -fx-background-color: transparent, -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 5, 6; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: transparent, -color-accent-emphasis; +} + +.slider { + -color-slider-thumb: -color-accent-emphasis; + -color-slider-thumb-border: -color-accent-emphasis; + -color-slider-track: -color-border-muted; + -color-slider-track-progress: -color-accent-emphasis; + -color-slider-tick: -color-fg-muted; +} +.slider.large { + -color-slider-thumb: -color-accent-emphasis; + -color-slider-thumb-border: -color-accent-emphasis; +} +.slider > .thumb { + -fx-background-color: -color-slider-thumb-border, -color-slider-thumb; + -fx-background-insets: 0, 2px; + -fx-background-radius: 0; +} +.slider > .track { + -fx-background-color: transparent, -color-slider-track; + -fx-background-radius: 0; +} +.slider > .progress { + -fx-background-color: transparent, -color-slider-track-progress; +} +.slider > .axis { + -fx-tick-label-fill: -color-slider-tick; + -fx-tick-length: 5px; + -fx-minor-tick-length: 3px; +} +.slider > .axis > .axis-tick-mark, +.slider > .axis > .axis-minor-tick-mark { + -fx-stroke: -color-slider-tick; +} +.slider:disabled { + -fx-opacity: 0.6; +} +.slider:horizontal > .thumb { + -fx-padding: 10px 4px 10px 4px; +} +.slider:horizontal > .track { + -fx-padding: 10px 0 10px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider:horizontal > .progress { + -fx-background-radius: 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .thumb { + -fx-padding: 8px 4px 8px 4px; +} +.slider.small:horizontal > .track { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.large:horizontal > .thumb { + -fx-padding: 14px 4px 14px; +} +.slider.large:horizontal > .track { + -fx-padding: 14px 0 14px 0; + -fx-background-insets: 0, 2px 0 2px 0; +} +.slider.large:horizontal > .progress { + -fx-padding: 14px 0 14px 0; + -fx-background-insets: 0, 2px 0 2px 0; +} +.slider:vertical > .thumb { + -fx-padding: 4px 10px 4px 10px; +} +.slider:vertical > .track { + -fx-padding: 0 10px 0 10px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider:vertical > .progress { + -fx-background-radius: 0 0 0 0; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .thumb { + -fx-padding: 4px 8px 4px 8px; +} +.slider.small:vertical > .track { + -fx-padding: 0 8px 0 8px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.large:vertical > .thumb { + -fx-padding: 4px 14px 4px 14px; +} +.slider.large:vertical > .track { + -fx-padding: 0 14px 0 14px; + -fx-background-insets: 0, 0 2px 0 2px; +} +.slider.large:vertical > .progress { + -fx-padding: 0 14px 0 14px; + -fx-background-insets: 0, 0 2px 0 2px; +} + +.toggle-switch { + -fx-thumb-move-animation-time: 200; +} +.toggle-switch > .label-container > .label { + -fx-font-size: 1em; + -fx-text-fill: -color-fg-default; + -fx-padding: 2px 6px 2px 0; +} +.toggle-switch > .thumb { + -fx-background-color: -color-border-default, -color-fg-emphasis; + -fx-background-insets: 0, 3px; + -fx-background-radius: 1px; + -fx-padding: 0.8em; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-opacity: 0.6; +} +.toggle-switch > .thumb-area { + -fx-background-radius: 1px; + -fx-background-color: -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 1px; + -fx-padding: 0.8em 1.6em 0.8em 1.6em; +} +.toggle-switch:selected > .thumb { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; + -fx-opacity: 1; +} +.toggle-switch:selected > .thumb-area { + -fx-background-color: -color-accent-emphasis; + -fx-background-insets: 0; +} +.toggle-switch:disabled { + -fx-opacity: 0.6; +} + +.accordion > .titled-pane.first-titled-pane > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 1 1 0 0; +} +.accordion > .titled-pane > .title { + -fx-background-insets: 0, 0 1px 1px 1px; + -fx-background-radius: 0; +} + +.bread-crumb-bar > .button.flat { + -fx-padding: 8px 2px 8px 9px; + -fx-content-display: RIGHT; +} +.bread-crumb-bar > .button.flat.first { + -fx-padding: 8px 2px 8px 12px; +} +.bread-crumb-bar > .button.flat.last { + -fx-padding: 8px 12px 8px 9px; +} +.bread-crumb-bar > .button.flat.last .font-icon, .bread-crumb-bar > .button.flat.last .ikonli-font-icon { + -fx-min-width: 0; + -fx-pref-width: 0; + -fx-max-width: 0; + visibility: hidden; +} + +.button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-1; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 8px 12px 8px 12px; +} +.button .font-icon, .button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.button:disabled { + -fx-opacity: 0.6; +} +.button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.button.button-icon { + -fx-padding: 8px; +} +.button.button-icon > .text { + visibility: hidden; +} +.button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.button.button-circle .text { + visibility: hidden; +} +.button.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.button.left-pill:hover, .button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.button.center-pill:hover, .button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.button.right-pill:hover, .button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-text-fill: -color-button-fg-hover; + -fx-opacity: 0.9; +} +.button:hover:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-hover; +} +.button:hover .font-icon, .button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; + -fx-text-fill: -color-button-fg-focused; +} +.button:focused .font-icon, .button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.button:armed, .button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.button:armed .font-icon, .button:armed .ikonli-font-icon, .button:focused:armed .font-icon, .button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.button:default, .button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button:default.button-outlined, .button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button:default.flat, .button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-5; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} +.button.flat:hover { + -fx-underline: true; +} +.button.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.button.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.button.rounded { + -fx-background-radius: 10em; +} + +.chart { + -fx-padding: 4px; +} +.chart > .chart-title { + -fx-font-size: 1.25em; +} +.chart > .chart-content { + -fx-padding: 10px; +} +.chart > .chart-content > .chart-plot-background { + -fx-background-color: -color-bg-default; +} +.chart:disabled > .chart-content { + -fx-opacity: 0.6; +} +.chart:disabled > .chart-content .label { + -fx-opacity: 1; +} +.chart > .chart-legend { + -fx-padding: 6px; +} +.chart .axis { + -fx-axis-color: -color-border-default; + -fx-tick-label-font-size: 0.8em; + -fx-tick-label-fill: -color-fg-default; +} +.chart .axis:top { + -fx-border-color: transparent transparent -fx-axis-color transparent; +} +.chart .axis:right { + -fx-border-color: transparent transparent transparent -fx-axis-color; +} +.chart .axis:bottom { + -fx-border-color: -fx-axis-color transparent transparent transparent; +} +.chart .axis:left { + -fx-border-color: transparent -fx-axis-color transparent transparent; +} +.chart .axis:top > .axis-label, .chart .axis:left > .axis-label { + -fx-padding: 0 0 4px 0; +} +.chart .axis:bottom > .axis-label, .chart .axis:right > .axis-label { + -fx-padding: 4px 0 0 0; +} +.chart .axis > .axis-tick-mark, +.chart .axis > .axis-minor-tick-mark { + -fx-fill: none; + -fx-stroke: -fx-axis-color; +} +.chart .chart-horizontal-grid-lines, +.chart .chart-vertical-grid-lines { + -fx-stroke: -color-border-muted; + -fx-stroke-dash-array: 0.25em, 0.25em; +} +.chart .chart-alternative-row-fill, +.chart .chart-alternative-column-fill { + -fx-fill: none; + -fx-stroke: none; +} +.chart .chart-vertical-zero-line, +.chart .chart-horizontal-zero-line { + -fx-stroke: -color-fg-default; +} + +.chart-symbol { + -fx-background-color: -color-chart-1; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color1.chart-symbol { + -fx-background-color: -color-chart-2; + -fx-background-radius: 0; +} + +.default-color2.chart-symbol { + -fx-background-color: -color-chart-3; + -fx-background-radius: 0; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.default-color3.chart-symbol { + -fx-background-color: -color-chart-4; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,10 L0,10 L0,8 L4,5 L0,2 L0,0 Z"; +} + +.default-color4.chart-symbol { + -fx-background-color: -color-chart-5; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M5,0 L10,8 L0,8 Z"; +} + +.default-color5.chart-symbol { + -fx-background-color: -color-chart-6, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color6.chart-symbol { + -fx-background-color: -color-chart-7, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 0; +} + +.default-color7.chart-symbol { + -fx-background-color: -color-chart-8, white; + -fx-background-radius: 0; + -fx-background-insets: 0, 2.5; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.chart-line-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.chart-series-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 3px; +} + +.default-color0.chart-line-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-line-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-line-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-line-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-line-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-line-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-line-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-line-symbol { + -fx-background-color: -color-chart-8, white; +} + +.default-color0.chart-series-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-line { + -fx-stroke: -color-chart-8; +} + +.chart-area-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-padding: 3px; +} + +.default-color0.chart-area-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-area-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-area-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-area-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-area-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-area-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-area-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-area-symbol { + -fx-background-color: -color-chart-8, white; +} + +.chart-series-area-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 1px; +} + +.default-color0.chart-series-area-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-area-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-area-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-area-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-area-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-area-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-area-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-area-line { + -fx-stroke: -color-chart-8; +} + +.chart-series-area-fill { + -fx-stroke: none; + -fx-fill: -color-chart-1-alpha20; +} + +.default-color0.chart-series-area-fill { + -fx-fill: -color-chart-1-alpha20; +} + +.default-color1.chart-series-area-fill { + -fx-fill: -color-chart-2-alpha20; +} + +.default-color2.chart-series-area-fill { + -fx-fill: -color-chart-3-alpha20; +} + +.default-color3.chart-series-area-fill { + -fx-fill: -color-chart-4-alpha20; +} + +.default-color4.chart-series-area-fill { + -fx-fill: -color-chart-5-alpha20; +} + +.default-color5.chart-series-area-fill { + -fx-fill: -color-chart-6-alpha20; +} + +.default-color6.chart-series-area-fill { + -fx-fill: -color-chart-7-alpha20; +} + +.default-color7.chart-series-area-fill { + -fx-fill: -color-chart-8-alpha20; +} + +.area-legend-symbol { + -fx-padding: 6px; + -fx-background-radius: 6px; + -fx-background-insets: 0, 3; +} + +.bubble-legend-symbol { + -fx-background-radius: 8px; + -fx-padding: 8px; +} + +.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; + -fx-background-color: radial-gradient(center 50% 50%, radius 80%, derive(-fx-bubble-fill, 20%), derive(-fx-bubble-fill, -30%)); +} + +.default-color0.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; +} + +.default-color1.chart-bubble { + -fx-bubble-fill: -color-chart-2-alpha70; +} + +.default-color2.chart-bubble { + -fx-bubble-fill: -color-chart-3-alpha70; +} + +.default-color3.chart-bubble { + -fx-bubble-fill: -color-chart-4-alpha70; +} + +.default-color4.chart-bubble { + -fx-bubble-fill: -color-chart-5-alpha70; +} + +.default-color5.chart-bubble { + -fx-bubble-fill: -color-chart-6-alpha70; +} + +.default-color6.chart-bubble { + -fx-bubble-fill: -color-chart-7-alpha70; +} + +.default-color7.chart-bubble { + -fx-bubble-fill: -color-chart-8-alpha70; +} + +.chart-bar { + -fx-bar-fill: -color-chart-1; + -fx-background-color: linear-gradient(to right, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); + -fx-background-insets: 0; +} + +.chart-bar.danger { + -fx-background-insets: 1 0 0 0; +} + +.bar-chart:horizontal .chart-bar { + -fx-background-insets: 0 0 0 1; +} + +.bar-chart:horizontal .chart-bar, +.stacked-bar-chart:horizontal .chart-bar { + -fx-background-color: linear-gradient(to bottom, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); +} + +.default-color0.chart-bar { + -fx-bar-fill: -color-chart-1; +} + +.default-color1.chart-bar { + -fx-bar-fill: -color-chart-2; +} + +.default-color2.chart-bar { + -fx-bar-fill: -color-chart-3; +} + +.default-color3.chart-bar { + -fx-bar-fill: -color-chart-4; +} + +.default-color4.chart-bar { + -fx-bar-fill: -color-chart-5; +} + +.default-color5.chart-bar { + -fx-bar-fill: -color-chart-6; +} + +.default-color6.chart-bar { + -fx-bar-fill: -color-chart-7; +} + +.default-color7.chart-bar { + -fx-bar-fill: -color-chart-8; +} + +.bar-legend-symbol { + -fx-padding: 8px; +} + +.chart-pie { + -fx-pie-color: -color-chart-1; + -fx-background-color: radial-gradient(radius 100%, derive(-fx-pie-color, 20%), derive(-fx-pie-color, -10%)); + -fx-background-insets: 1; + -fx-border-color: -color-bg-default; +} + +.chart-pie-label { + -fx-padding: 3px; + -fx-fill: -color-fg-default; +} + +.chart-pie-label-line { + -fx-stroke: derive(-color-bg-default, -20%); +} + +.default-color0.chart-pie { + -fx-pie-color: -color-chart-1; +} + +.default-color1.chart-pie { + -fx-pie-color: -color-chart-2; +} + +.default-color2.chart-pie { + -fx-pie-color: -color-chart-3; +} + +.default-color3.chart-pie { + -fx-pie-color: -color-chart-4; +} + +.default-color4.chart-pie { + -fx-pie-color: -color-chart-5; +} + +.default-color5.chart-pie { + -fx-pie-color: -color-chart-6; +} + +.default-color6.chart-pie { + -fx-pie-color: -color-chart-7; +} + +.default-color7.chart-pie { + -fx-pie-color: -color-chart-8; +} + +.danger.chart-pie { + -fx-pie-color: transparent; + -fx-background-color: white; +} + +.pie-legend-symbol.chart-pie { + -fx-background-radius: 8px; + -fx-padding: 8px; + -fx-border-color: none; +} + +.check-box { + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.check-box > .box { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-padding: 3px 4px 3px 4px; + -fx-alignment: CENTER; +} +.check-box > .box > .mark { + -fx-background-color: -color-bg-default; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.check-box:indeterminate > .box > .mark { + -fx-background-color: -color-fg-muted; + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.check-box:disabled { + -fx-opacity: 0.6; +} +.check-box:disabled > .box { + -fx-opacity: 0.6; +} +.check-box:selected > .box { + -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; +} +.check-box:selected > .box > .mark { + -fx-background-color: -color-fg-emphasis; +} +.check-box:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.color-picker > .color-picker-label { + -fx-padding: 8px 12px 8px 12px; +} +.color-picker > .color-picker-label > .label { + -fx-text-fill: -color-fg-default; +} +.color-picker > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: -color-border-default; +} +.color-picker.button > .color-picker-label { + -fx-padding: 0; +} + +.color-palette { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-spacing: 10px; + -fx-padding: 1em; +} +.color-palette > .color-picker-grid { + -fx-padding: 0.5px; + -fx-snap-to-pixel: false; +} +.color-palette > .color-picker-grid > .color-square { + -fx-background-color: transparent; + -fx-padding: 0.5px; +} + +.color-palette-region { + -fx-effect: dropshadow(gaussian, transparent, 12, 0, 0, 8); +} +.color-palette-region > .color-square.hover-square { + -fx-background-color: -color-accent-fg, -color-bg-default; + -fx-background-insets: -2, -1; + -fx-background-radius: 5, 0; + -fx-scale-x: 1.5; + -fx-scale-y: 1.5; + -fx-border-color: -color-accent-fg; + -fx-border-insets: -1, -1; +} + +.custom-color-dialog { + -fx-background-color: -color-bg-default; + -fx-padding: 1.25em; + -fx-spacing: 1.25em; +} +.custom-color-dialog > .color-rect-pane { + -fx-spacing: 1em; + -fx-pref-height: 16em; + -fx-alignment: TOP-LEFT; + -fx-fill-height: true; +} +.custom-color-dialog > .color-rect-pane > .color-rect { + -fx-min-width: 16em; + -fx-min-height: 16em; +} +.custom-color-dialog > .color-rect-pane > .color-rect .color-rect-border { + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-rect #color-rect-indicator { + -fx-background-color: none; + -fx-border-color: white; + -fx-border-radius: 0.4166667em; + -fx-pref-width: 0.833333em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.4166667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .color-rect-pane > .color-bar { + -fx-min-width: 1.666667em; + -fx-min-height: 16.666667em; + -fx-max-width: 1.666667em; + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-bar #color-bar-indicator { + -fx-border-radius: 0.333333em; + -fx-border-color: white; + -fx-pref-width: 2em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.1666667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .label { + -fx-padding: 0 0 0 2px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #current-new-color-border { + -fx-border-color: -color-border-default; + -fx-border-width: 1px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .color-rect { + -fx-min-width: 10em; + -fx-pref-width: 10em; + -fx-min-height: 1.75em; + -fx-pref-height: 1.75em; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer1 { + -fx-min-height: 5px; + -fx-pref-height: 5px; + -fx-max-height: 5px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer2 { + -fx-min-height: 1em; + -fx-pref-height: 1em; + -fx-max-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane { + -fx-hgap: 6px; + -fx-vgap: 6px; +} +.custom-color-dialog > .controls-pane #settings-pane > .customcolor-controls-background { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 13px 0 5px 0, 14px 1px 6px 1px; + -fx-background-radius: 1; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-label { + -fx-min-width: 5.75em; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-unit { + -fx-min-width: 1.5em; + -fx-pref-width: 1.5em; + -fx-max-width: 1.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > .slider { + -fx-pref-width: 10em; +} +.custom-color-dialog > .controls-pane #settings-pane > .color-input-field { + -fx-max-width: 4em; + -fx-pref-width: 4em; + -fx-min-width: 4em; + -fx-pref-column-count: 3; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-side { + -fx-min-width: 0.5em; + -fx-pref-width: 0.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-bottom { + -fx-min-height: 1em; + -fx-pref-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane > .web-field { + -fx-pref-column-count: 6; + -fx-pref-width: 8em; +} +.custom-color-dialog > .controls-pane #settings-pane > .webcolor-field:dir(rtl) > .text-field:dir(ltr) { + -fx-alignment: BASELINE_RIGHT; +} +.custom-color-dialog > .controls-pane > #buttons-hbox { + -fx-spacing: 10px; + -fx-padding: 1em 0 0 0; + -fx-alignment: BOTTOM_RIGHT; +} +.custom-color-dialog > .controls-pane .transparent-pattern { + -fx-background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCOTBEQkE1RjJFMjA2ODExOUExMUM5NDhFOTUyQzM3MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRkE3MDZERThFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRkE3MDZERDhFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk4MDExNzQwNzIwNjgxMTg3MUZDMUExNDFCMTYwNzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjkwREJBNUYyRTIwNjgxMTlBMTFDOTQ4RTk1MkMzNzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71FDCdAAAAKElEQVR42mI8c+YMAwwYGxvD2UwMOADpEoz///+Hc86ePUsLOwACDABC1ghwV8TLOQAAAABJRU5ErkJggg=="); + -fx-background-repeat: repeat; + -fx-background-size: auto; +} + +.combo-box-base { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 1; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; +} +.combo-box-base:disabled { + -fx-opacity: 0.6; +} +.combo-box-base:success, .combo-box-base:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.combo-box-base:danger, .combo-box-base:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.combo-box-base:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.combo-box-base.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.combo-box-base.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.combo-box-base.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.combo-box-base.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base > .arrow-button { + -fx-padding: 8px 12px 8px 12px; +} +.combo-box-base > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.combo-box-base > .text-field { + -fx-background-insets: 0, 1 0 1 1; + -fx-background-radius: 1 0 0 1; +} +.combo-box-base:success > .arrow-button > .arrow { + -fx-background-color: -color-success-fg; +} +.combo-box-base:danger > .arrow-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.combo-box-base.alt-icon > .arrow-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.combo-box > .list-cell { + -fx-background-color: transparent; + -fx-text-fill: -color-fg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box:success > .list-cell { + -fx-text-fill: -color-success-fg; +} +.combo-box:danger > .list-cell { + -fx-text-fill: -color-danger-fg; +} + +.combo-box-popup > .list-view { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 1; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-cell-size: 0; + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:hover { + -fx-background-color: -color-base-1; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, .combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected:hover { + -fx-background-color: -color-base-2; +} +.combo-box-popup > .list-view > .placeholder > .label { + -fx-text-fill: -color-fg-muted; +} + +.choice-box { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 1; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-padding: 8px 12px 8px 12px; +} +.choice-box:disabled { + -fx-opacity: 0.6; +} +.choice-box:success, .choice-box:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.choice-box:danger, .choice-box:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.choice-box:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.choice-box.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.choice-box.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.choice-box.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.choice-box.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box > .label { + -fx-text-fill: -color-fg-default; +} +.choice-box > .open-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.choice-box:success > .label { + -fx-text-fill: -color-success-fg; +} +.choice-box:success > .open-button > .arrow { + -fx-background-color: -color-success-fg; +} +.choice-box:danger > .label { + -fx-text-fill: -color-danger-fg; +} +.choice-box:danger > .open-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.choice-box.alt-icon > .open-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.custom-text-field:left-node-visible { + -fx-padding: 8px 12px 8px 0; +} +.custom-text-field:left-node-visible .left-pane { + -fx-padding: 0 4px 0 6px; +} +.custom-text-field:right-node-visible { + -fx-padding: 8px 0 8px 12px; +} +.custom-text-field:right-node-visible .right-pane { + -fx-padding: 0 6px 0 4px; +} +.custom-text-field:left-node-visible:right-node-visible { + -fx-padding: 8px 0 8px 0; +} +.custom-text-field:success .font-icon, .custom-text-field:success .ikonli-font-icon { + -fx-icon-color: -color-success-fg; + -fx-fill: -color-success-fg; +} +.custom-text-field:danger .font-icon, .custom-text-field:danger .ikonli-font-icon { + -fx-icon-color: -color-danger-fg; + -fx-fill: -color-danger-fg; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected { + -color-cell-fg: -color-cell-fg-selected; + -fx-background-color: -color-cell-border, -color-cell-bg-selected; +} + +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell .table-cell:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell .tree-table-cell:selected { + -fx-background-color: -color-cell-bg-selected; + -fx-background-insets: 0 0 2 0; +} + +.cell .text-input { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.cell .check-box { + -fx-padding: 0 6px 0 0; +} +.cell .choice-box { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 12px 0 0; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; +} +.cell .combo-box { + -fx-background-color: transparent; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; + -fx-background-radius: 0; +} +.cell .combo-box .cell.list-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.list-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.list-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.6; +} +.list-view > .virtual-flow:disabled { + -fx-opacity: 0.6; +} +.list-view.edge-to-edge { + -fx-border-width: 0; +} +.list-view .list-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0 0.5em 0 0.5em; + -fx-cell-size: 2.8em; + -fx-border-width: 0 0 1 0; + -fx-border-color: transparent; +} +.list-view.bordered .list-cell { + -fx-border-color: -color-cell-border; +} +.list-view.dense .list-cell { + -fx-cell-size: 2em; +} +.list-view.striped .list-cell { + -fx-border-width: 0; +} +.list-view.striped .list-cell:odd { + -fx-background-color: -color-cell-bg-odd; +} + +.table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.6; +} +.table-view > .virtual-flow:disabled { + -fx-opacity: 0.6; +} +.table-view.edge-to-edge { + -fx-border-width: 0; +} +.table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.table-view.bordered .table-row-cell > .table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.table-view.bordered .table-row-cell > .table-cell:empty { + -fx-border-color: transparent; +} +.table-view.dense .table-row-cell { + -fx-cell-size: 2em; +} +.table-view.striped .table-row-cell { + -fx-background-insets: 0; +} +.table-view.striped.bordered .table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.table-view.striped .table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.table-view .table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; +} +.table-view .table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.table-view .table-row-cell:empty > .table-cell { + -fx-border-color: transparent; +} +.table-view .table-row-cell > .table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.table-view .table-row-cell > .table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .table-row-cell > .table-cell:last-visible, +.tree-table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell > .tree-table-cell:last-visible { + -fx-border-color: transparent; +} + +.table-view .table-row-cell > .table-cell.check-box-table-cell, +.table-view .table-row-cell > .table-cell.font-icon-table-cell, +.tree-table-view .tree-table-row-cell > .tree-table-cell.check-box-tree-table-cell { + -fx-alignment: CENTER_LEFT; +} + +.tree-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.tree-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.6; +} +.tree-view > .virtual-flow:disabled { + -fx-opacity: 0.6; +} +.tree-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-view.dense .tree-cell { + -fx-padding: 0.25em 0 0.25em 0; +} + +.tree-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0.5em 0 0.5em 0; + -fx-indent: 1em; +} +.tree-cell > .tree-disclosure-node { + -fx-padding: 5px 0.5em 0 0.5em; + -fx-background-color: transparent; +} + +.tree-cell > .tree-disclosure-node > .arrow, +.tree-table-row-cell > .tree-disclosure-node > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-cell-fg; + -fx-padding: 0.333333em 0.229em 0.333333em 0.229em; +} + +.tree-cell:expanded > .tree-disclosure-node > .arrow, +.tree-table-row-cell:expanded > .tree-disclosure-node > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} + +.tree-table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.tree-table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.6; +} +.tree-table-view > .virtual-flow:disabled { + -fx-opacity: 0.6; +} +.tree-table-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.tree-table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.tree-table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.tree-table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.tree-table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.tree-table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.tree-table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.tree-table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.tree-table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.tree-table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.tree-table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell:empty { + -fx-border-color: transparent; +} +.tree-table-view.dense .tree-table-row-cell { + -fx-cell-size: 2em; +} +.tree-table-view.dense .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 0.6em 0.5em 0 0.5em; +} +.tree-table-view.striped .tree-table-row-cell { + -fx-background-insets: 0; +} +.tree-table-view.striped.bordered .tree-table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view.striped .tree-table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.tree-table-view .tree-table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; + -fx-indent: 1em; +} +.tree-table-view .tree-table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.tree-table-view .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 1em 0.5em 0 0.5em; + -fx-background-color: transparent; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.combo-box-base.date-picker > .arrow-button { + -fx-cursor: hand; +} +.combo-box-base.date-picker > .arrow-button > .arrow { + -fx-shape: "M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V10h16v11zm0-13H4V5h16v3z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-default; + -fx-padding: 0.416667em; +} + +.date-picker-popup { + -color-date-bg: -color-bg-default; + -color-date-border: -color-border-default; + -color-date-month-year-bg: -color-bg-default; + -color-date-month-year-fg: -color-fg-default; + -color-date-day-bg: -color-bg-default; + -color-date-day-bg-hover: -color-bg-subtle; + -color-date-day-bg-selected: -color-accent-emphasis; + -color-date-day-fg: -color-fg-default; + -color-date-day-fg-hover: -color-fg-default; + -color-date-day-fg-selected: -color-fg-emphasis; + -color-date-week-bg: -color-bg-default; + -color-date-week-fg: -color-accent-fg; + -color-date-today-bg: -color-accent-subtle; + -color-date-today-fg: -color-accent-fg; + -color-date-other-month-fg: -color-fg-muted; + -color-date-chrono-fg: -color-success-fg; + -fx-background-color: -color-date-border, -color-date-bg; + -fx-background-insets: 0, 1; + -fx-background-radius: 0; + -fx-alignment: CENTER; + -fx-spacing: 0; + -fx-padding: 1px; +} +.date-picker-popup > .month-year-pane { + -fx-padding: 8px 8px 8px 8px; + -fx-background-color: -color-date-month-year-bg; + -fx-background-insets: 0; +} +.date-picker-popup > .month-year-pane > .spinner { + -fx-spacing: 4px; + -fx-alignment: CENTER; + -fx-fill-height: false; + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-font-size: 1.1em; +} +.date-picker-popup > .month-year-pane > .spinner > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .label { + -fx-alignment: CENTER; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .secondary-label { + -fx-alignment: BASELINE_CENTER; + -fx-padding: 0.5em 0 0 0; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .calendar-grid { + -fx-background-color: -color-date-bg; + -fx-padding: 8px; +} +.date-picker-popup > .calendar-grid > .date-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-alignment: BASELINE_CENTER; + -fx-opacity: 1; + -fx-text-fill: -color-date-day-fg; +} +.date-picker-popup > .calendar-grid > .week-number-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-week-bg; + -fx-text-fill: -color-date-week-fg; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .day-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-day-bg; +} +.date-picker-popup > .calendar-grid > .day-cell > .secondary-text { + -fx-fill: -color-date-chrono-fg; +} +.date-picker-popup > .calendar-grid > .day-cell:disabled { + -fx-opacity: 0.6; +} +.date-picker-popup > .calendar-grid .day-name-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .hijrah-day-cell { + -fx-alignment: TOP_LEFT; + -fx-padding: 0.083333em 4px 0.083333em 0.333333em; + -fx-cell-size: 2.75em; +} +.date-picker-popup > .calendar-grid > .today { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; + -fx-font-weight: bold; +} + +.inline-date-picker { + -fx-effect: none; +} +.inline-date-picker > .top-node, +.inline-date-picker > .bottom-node { + -fx-padding: 8px 16px 8px 16px; +} +.inline-date-picker > .month-year-pane { + -fx-padding: 8px 16px 8px 16px; + -fx-alignment: CENTER_LEFT; + -fx-spacing: 6px; +} +.inline-date-picker > .month-year-pane > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.inline-date-picker > .month-year-pane > .back-button { + -fx-padding: 0 1em 0 0; +} +.inline-date-picker > .month-year-pane > .back-button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .forward-button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .label { + -fx-text-fill: -color-date-month-year-fg; + -fx-font-size: 1.1em; +} +.inline-date-picker:disabled > .calendar-grid { + -fx-opacity: 0.6; +} +.inline-date-picker:disabled > .calendar-grid > .day-cell:disabled { + -fx-opacity: 1; +} + +.date-picker-popup > .calendar-grid > .selected, +.date-picker-popup > .calendar-grid > .selected > .secondary-text, +.date-picker-popup > .calendar-grid > .previous-month.selected, +.date-picker-popup > .calendar-grid > .previous-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.selected { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; + -fx-font-weight: normal; +} + +.date-picker-popup > .calendar-grid > .day-cell:hover { + -fx-background-color: -color-date-day-bg-hover; +} + +.date-picker-popup > .calendar-grid > .today:hover { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; +} + +.date-picker-popup > .calendar-grid > .selected:hover { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; +} + +.date-picker-popup > .calendar-grid > .previous-month, +.date-picker-popup > .calendar-grid > .next-month, +.date-picker-popup > .calendar-grid > .previous-month.today, +.date-picker-popup > .calendar-grid > .next-month.today, +.date-picker-popup > .calendar-grid > .previous-month > .secondary-text, +.date-picker-popup > .calendar-grid > .next-month > .secondary-text { + -fx-text-fill: -color-date-other-month-fg; + -fx-fill: -color-date-other-month-fg; + -fx-font-weight: normal; +} + +.dialog-pane { + -fx-background-color: -color-bg-default; + -fx-padding: 0; + -fx-max-width: 600px; +} +.dialog-pane > .expandable-content { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container { + -fx-padding: 2em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container > .details-button { + -fx-padding: 0; + -fx-alignment: BASELINE_LEFT; + -fx-focus-traversable: false; + -fx-text-fill: -color-fg-default; +} +.dialog-pane > .button-bar > .container > .details-button:hover { + -fx-underline: true; +} +.dialog-pane > .content { + -fx-padding: 1em 1em 0 1em; +} +.dialog-pane > .content.label { + -fx-alignment: TOP_LEFT; +} +.dialog-pane:header > .header-panel { + -fx-padding: 1em 1em 1em 1em; + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.dialog-pane:header > .header-panel > .label { + -fx-wrap-text: true; +} +.dialog-pane:header > .header-panel > .graphic-container { + -fx-padding: 0 0 0 1em; +} +.dialog-pane:no-header > .content { + -fx-padding: 1em 1em 0 0; +} +.dialog-pane:no-header > * > .graphic-container { + -fx-padding: 1em 1em 0 1em; +} +.dialog-pane.information > .header-panel { + -fx-background-color: -color-accent-fg, -color-bg-subtle; +} +.dialog-pane.information > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.warning > .header-panel { + -fx-background-color: -color-warning-fg, -color-bg-subtle; +} +.dialog-pane.warning > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.error > .header-panel { + -fx-background-color: -color-danger-fg, -color-bg-subtle; +} +.dialog-pane.error > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} + +.alert.information.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.warning.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.error.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.confirmation.dialog-pane, +.text-input-dialog.dialog-pane, +.choice-dialog.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.html-editor { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-padding: 2px; +} +.html-editor:contains-focus { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.html-editor .tool-bar { + -fx-padding: 4px; +} +.html-editor .button, +.html-editor .toggle-button { + -fx-background-insets: 0; +} +.html-editor .toggle-button { + -color-button-bg-selected: -color-base-1; + -color-button-border-focused: transparent; +} + +.color-picker.html-editor-foreground { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-background { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-foreground > .color-picker-label > .picker-color > .picker-color-rect, .color-picker.html-editor-background > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: none; +} + +.color-picker.html-editor-foreground { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Text-Color.png"); +} + +.color-picker.html-editor-background { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Background-Color.png"); +} + +.html-editor-cut { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Cut.png"); +} + +.html-editor-copy { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Copy.png"); +} + +.html-editor-paste { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Paste.png"); +} + +.html-editor-align-left { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Left.png"); +} + +.html-editor-align-center { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Center.png"); +} + +.html-editor-align-right { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Right.png"); +} + +.html-editor-align-justify { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Justify.png"); +} + +.html-editor-outdent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent.png"); +} + +.html-editor-outdent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent-rtl.png"); +} + +.html-editor-indent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent.png"); +} + +.html-editor-indent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent-rtl.png"); +} + +.html-editor-bullets { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets.png"); +} + +.html-editor-bullets:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets-rtl.png"); +} + +.html-editor-numbers { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered.png"); +} + +.html-editor-numbers:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered-rtl.png"); +} + +.html-editor-bold { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bold.png"); +} + +.html-editor-italic { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Italic.png"); +} + +.html-editor-underline { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Underline.png"); +} + +.html-editor-strike { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Strikethrough.png"); +} + +.html-editor-hr { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Break.png"); +} + +.hyperlink { + -color-link-fg: -color-accent-fg; + -color-link-fg-visited: -color-fg-default; + -color-link-fg-armed: -color-fg-default; + -fx-cursor: hand; + -fx-underline: true; + -fx-text-fill: -color-link-fg; +} +.hyperlink:visited { + -fx-text-fill: -color-link-fg-visited; +} +.hyperlink:armed { + -fx-text-fill: -color-link-fg-armed; + -fx-underline: false; +} +.hyperlink:disabled { + -fx-opacity: 0.6; +} +.hyperlink:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-fill; +} + +.label { + -fx-text-fill: -color-fg-default; +} +.label:disabled { + -fx-opacity: 0.6; +} +.label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0 0 0 0, 0 0 1 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.menu-bar > .container > .menu-button { + -fx-background-color: transparent; + -fx-background-insets: 0 0 1px 0; + -fx-background-radius: 0; + -fx-padding: 8px 12px 8px 12px; +} +.menu-bar > .container > .menu-button > .label { + -fx-padding: 0; + -fx-text-fill: -color-fg-default; +} +.menu-bar > .container > .menu-button > .arrow-button { + -fx-padding: 0; +} +.menu-bar > .container > .menu-button > .arrow-button > .arrow { + -fx-padding: 0; + -fx-background-color: transparent; +} +.menu-bar > .container > .menu-button:hover, .menu-bar > .container > .menu-button:focused, .menu-bar > .container > .menu-button:showing { + -fx-background-color: -color-base-1, -color-base-1; +} + +.menu { + -fx-background-color: transparent; +} +.menu > .right-container > .arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} + +.menu-up-arrow { + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-down-arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-item { + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; +} +.menu-item > .graphic-container { + -fx-padding: 0 6px 0 0; +} +.menu-item > .label { + -fx-padding: 0 1em 0 0; + -fx-text-fill: -color-fg-default; +} +.menu-item > .left-container { + -fx-padding: 0 1em 0 0; +} +.menu-item > .right-container { + -fx-padding: 0 0 0 0.5em; +} +.menu-item:focused { + -fx-background-color: -color-base-1, -color-base-1; +} +.menu-item:disabled { + -fx-opacity: 0.6; + -fx-background-color: -color-bg-default; +} + +.radio-menu-item:checked > .left-container > .radio, +.check-menu-item:checked > .left-container > .check { + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-min-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-height: 0.75em; + -fx-max-width: 0.75em; +} + +.caption-menu-item { + -fx-padding: 8px 12px 8px 12px; +} +.caption-menu-item:hover, .caption-menu-item:focused, .caption-menu-item:pressed { + -fx-background-color: transparent; +} +.caption-menu-item > .label > .text { + -fx-font-weight: bold; +} + +.context-menu { + -fx-background-color: -color-border-muted, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-padding: 2px 2px 2px 2px; + -fx-background-radius: 1; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); +} +.context-menu > .scroll-arrow { + -fx-padding: 0.5em; + -fx-background-color: transparent; +} +.context-menu > .scroll-arrow:hover { + -fx-background-color: -color-base-1; + -fx-text-fill: -color-fg-default; +} +.context-menu .separator:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.context-menu .separator:horizontal .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0.5em 0 0.5em; +} + +.context-menu:show-mnemonics > .mnemonic-underline, +.menu:show-mnemonics > .mnemonic-underline, +.menu-bar:show-mnemonics > .mnemonic-underline, +.menu-item > .label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-button, +.split-menu-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-1; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 0; + -fx-alignment: CENTER_LEFT; +} +.menu-button .font-icon, .menu-button .ikonli-font-icon, +.split-menu-button .font-icon, +.split-menu-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.menu-button:disabled, +.split-menu-button:disabled { + -fx-opacity: 0.6; +} +.menu-button:show-mnemonics > .mnemonic-underline, +.split-menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 8px; +} +.menu-button.button-icon > .text, +.split-menu-button.button-icon > .text { + visibility: hidden; +} +.menu-button.button-circle, +.split-menu-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.menu-button.button-circle .text, +.split-menu-button.button-circle .text { + visibility: hidden; +} +.menu-button.left-pill, +.split-menu-button.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.menu-button.left-pill:hover, .menu-button.left-pill:focused, +.split-menu-button.left-pill:hover, +.split-menu-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.center-pill, +.split-menu-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.menu-button.center-pill:hover, .menu-button.center-pill:focused, +.split-menu-button.center-pill:hover, +.split-menu-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.right-pill, +.split-menu-button.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.menu-button.right-pill:hover, .menu-button.right-pill:focused, +.split-menu-button.right-pill:hover, +.split-menu-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button > .label, +.split-menu-button > .label { + -fx-padding: 8px 12px 8px 12px; + -fx-text-fill: -color-button-fg; +} +.menu-button > .arrow-button, +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 0; +} +.menu-button > .arrow-button > .arrow, +.split-menu-button > .arrow-button > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-button-fg; + -fx-min-width: 0.5em; +} +.menu-button:openvertically > .arrow-button > .arrow, +.split-menu-button:openvertically > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.menu-button:show-mnemonics > .label > .mnemonic-underline, +.split-menu-button:show-mnemonics > .label > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 0; +} +.menu-button:hover, +.split-menu-button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-opacity: 0.9; +} +.menu-button:hover > .label, +.split-menu-button:hover > .label { + -fx-text-fill: -color-button-fg-hover; +} +.menu-button:hover > .arrow-button > .arrow, +.split-menu-button:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-hover; +} +.menu-button:hover .font-icon, .menu-button:hover .ikonli-font-icon, +.split-menu-button:hover .font-icon, +.split-menu-button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.menu-button:focused, +.split-menu-button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; +} +.menu-button:focused > .label, +.split-menu-button:focused > .label { + -fx-text-fill: -color-button-fg-focused; +} +.menu-button:focused > .arrow-button > .arrow, +.split-menu-button:focused > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-focused; +} +.menu-button:focused .font-icon, .menu-button:focused .ikonli-font-icon, +.split-menu-button:focused .font-icon, +.split-menu-button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.menu-button:armed, .menu-button:focused:armed, +.split-menu-button:armed, +.split-menu-button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .label, .menu-button:focused:armed > .label, +.split-menu-button:armed > .label, +.split-menu-button:focused:armed > .label { + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .arrow-button > .arrow, .menu-button:focused:armed > .arrow-button > .arrow, +.split-menu-button:armed > .arrow-button > .arrow, +.split-menu-button:focused:armed > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-pressed; +} +.menu-button:armed .font-icon, .menu-button:armed .ikonli-font-icon, .menu-button:focused:armed .font-icon, .menu-button:focused:armed .ikonli-font-icon, +.split-menu-button:armed .font-icon, +.split-menu-button:armed .ikonli-font-icon, +.split-menu-button:focused:armed .font-icon, +.split-menu-button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.menu-button.accent, +.split-menu-button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.accent.button-outlined, +.split-menu-button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.accent.flat, +.split-menu-button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.menu-button.success, +.split-menu-button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-5; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.success.button-outlined, +.split-menu-button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.success.flat, +.split-menu-button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.menu-button.danger, +.split-menu-button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.danger.button-outlined, +.split-menu-button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.danger.flat, +.split-menu-button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.menu-button.flat, +.split-menu-button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} + +.menu-button.no-arrow > .arrow-button { + -fx-padding: 0; +} +.menu-button.no-arrow > .arrow-button > .arrow { + -fx-shape: none; + -fx-scale-shape: false; + -fx-min-width: -1; +} + +.split-menu-button > .label { + -fx-padding: 8px 6px 8px 12px; +} +.split-menu-button:hover > .arrow-button, .split-menu-button:focused:hover > .arrow-button { + -fx-background-color: -color-neutral-emphasis-plus; + -fx-background-insets: 1px; + -fx-background-radius: 1; + -fx-border-color: transparent; + -fx-opacity: 0.75; +} +.split-menu-button:hover > .arrow-button > .arrow, .split-menu-button:focused:hover > .arrow-button > .arrow { + -fx-background-color: -color-fg-emphasis; + -fx-opacity: 1; +} +.split-menu-button:default:hover > .arrow-button, .split-menu-button.accent:hover > .arrow-button, .split-menu-button.success:hover > .arrow-button, .split-menu-button.danger:hover > .arrow-button { + -fx-background-color: -color-fg-emphasis; +} +.split-menu-button:default:hover > .arrow-button > .arrow, .split-menu-button.accent:hover > .arrow-button > .arrow, .split-menu-button.success:hover > .arrow-button > .arrow, .split-menu-button.danger:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-bg-hover; +} +.split-menu-button.button-outlined:hover > .arrow-button, .split-menu-button.button-outlined:focused > .arrow-button { + -color-button-fg: -color-fg-emphasis; +} +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 12px; + -fx-background-radius: 0 1 1 0; + -fx-border-color: -color-button-fg; + -fx-border-width: 0 0 0 0.75px; + -fx-border-insets: 7px 0 7px 0; +} + +.popover { + -fx-background-color: -color-bg-overlay; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); +} +.popover > .border { + -fx-stroke: -color-border-default; + -fx-stroke-width: 1px; +} +.popover > .content { + -fx-padding: 10px 10px 10px 10px; +} +.popover > .content > .title { + -fx-padding: 0 0 1em 0; +} +.popover > .content > .title > .text { + -fx-text-fill: -color-fg-default; + -fx-font-size: 1.25em; + -fx-alignment: CENTER_LEFT; +} +.popover > .content > .title > .icon > .graphics > .circle { + -fx-fill: transparent; +} +.popover > .content > .title > .icon > .graphics > .line { + -fx-stroke: -color-fg-default; + -fx-stroke-width: 1px; +} + +.progress-bar { + -color-progress-bar-track: -color-bg-subtle; + -color-progress-bar-fill: -color-accent-emphasis; + -fx-indeterminate-bar-length: 60; + -fx-indeterminate-bar-escape: true; + -fx-indeterminate-bar-flip: true; + -fx-indeterminate-bar-animation-time: 2; +} +.progress-bar > .track { + -fx-background-color: -color-progress-bar-track; + -fx-background-insets: 0; + -fx-background-radius: 1; +} +.progress-bar > .bar { + -fx-background-color: -color-progress-bar-fill; + -fx-background-insets: 0; + -fx-background-radius: 1; + -fx-padding: 0.4em; +} +.progress-bar.small > .bar { + -fx-padding: 2px; +} +.progress-bar.medium > .bar { + -fx-padding: 0.4em; +} +.progress-bar.large > .bar { + -fx-padding: 0.8em; +} +.progress-bar:disabled { + -fx-opacity: 0.6; +} + +.progress-indicator { + -fx-indeterminate-segment-count: 12; + -fx-spin-enabled: true; +} +.progress-indicator > .determinate-indicator > .indicator { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; +} +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0.6em; +} +.progress-indicator > .determinate-indicator > .tick { + -fx-background-color: -color-fg-emphasis; + -fx-background-insets: 0; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; +} +.progress-indicator > .determinate-indicator > .percentage { + -fx-font-size: 0.8em; + -fx-fill: -color-fg-default; +} +.progress-indicator > .determinate-indicator:disabled { + -fx-opacity: 0.6; +} +.progress-indicator:indeterminate > .spinner { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-border-color: transparent; + -fx-border-width: 0; + -fx-border-radius: 0; + -fx-padding: 0; +} +.progress-indicator:indeterminate .segment { + -fx-background-color: -color-accent-emphasis; +} +.progress-indicator:indeterminate .segment0 { + -fx-shape: "M41.98 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment1 { + -fx-shape: "M33.75 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment2 { + -fx-shape: "M22.49 3.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment3 { + -fx-shape: "M11.24 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment4 { + -fx-shape: "M3.01 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment5 { + -fx-shape: "M0.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment6 { + -fx-shape: "M3.01 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment7 { + -fx-shape: "M11.25 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment8 { + -fx-shape: "M22.5 48.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment9 { + -fx-shape: "M33.75 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment10 { + -fx-shape: "M41.98 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment11 { + -fx-shape: "M45.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} + +.radio-button { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.radio-button > .radio { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-padding: 3px; + -fx-alignment: CENTER; +} +.radio-button > .radio > .dot { + -fx-background-color: transparent, transparent; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.radio-button:disabled { + -fx-opacity: 0.6; +} +.radio-button:disabled > .radio { + -fx-opacity: 0.6; +} +.radio-button:selected > .radio { + -fx-background-color: -color-accent-emphasis; +} +.radio-button:selected > .radio > .dot { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; +} +.radio-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.scroll-bar { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-bar > .thumb { + -fx-background-color: -color-fg-muted; + -fx-background-radius: 1; +} +.scroll-bar > .track { + -fx-background-color: transparent; + -fx-border-radius: 0; +} +.scroll-bar > .increment-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .increment-button > .increment-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar > .decrement-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .decrement-button > .decrement-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar:horizontal { + -fx-pref-height: 8px; +} +.scroll-bar:vertical { + -fx-pref-width: 8px; +} +.scroll-bar:hover, .scroll-bar:pressed, .scroll-bar:focused { + -fx-opacity: 1; +} + +.scroll-pane { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.scroll-pane > .viewport { + -fx-background-color: transparent; +} +.scroll-pane > .corner { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-pane:disabled > .scroll-bar { + -fx-opacity: 0.25; +} + +.separator:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator:horizontal > .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0 0 0; +} +.separator:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator:vertical > .line { + -fx-border-color: transparent transparent transparent -color-border-muted; + -fx-border-insets: 0 0 0 1px; +} +.separator.small:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.separator.small:vertical { + -fx-padding: 0 0.25em 0 0.25em; +} +.separator.medium:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator.medium:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator.large:horizontal { + -fx-padding: 1.5em 0 1.5em 0; +} +.separator.large:vertical { + -fx-padding: 0 1.5em 0 1.5em; +} + +.spinner { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default; + -fx-border-radius: 1; + -fx-border-width: 1px; +} +.spinner > .text-field { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0; + -fx-padding: 7px 11px 7px 11px; +} +.spinner > .increment-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: 0; + -fx-background-radius: 0 1 0 0; + -fx-padding: 10px; +} +.spinner > .increment-arrow-button:hover { + -fx-background-color: -color-base-2; +} +.spinner > .increment-arrow-button > .increment-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: false; +} +.spinner > .decrement-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: -1 0 0 0; + -fx-background-radius: 0 0 1 0; + -fx-padding: 10px; +} +.spinner > .decrement-arrow-button:hover { + -fx-background-color: -color-base-2; +} +.spinner > .decrement-arrow-button > .decrement-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.spinner:disabled { + -fx-opacity: 0.6; +} +.spinner:focused:focused, .spinner:contains-focus:focused { + -fx-border-color: -color-accent-emphasis; +} +.spinner.arrows-on-left-vertical > .text-field { + -fx-background-radius: 0 1 1 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-vertical > .increment-arrow-button { + -fx-background-radius: 1 0 0 0; +} +.spinner.arrows-on-left-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 0 1; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .text-field { + -fx-background-radius: 0 1 1 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-horizontal > .increment-arrow-button { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0 -1 0 0; +} +.spinner.split-arrows-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-vertical > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-vertical > .increment-arrow-button { + -fx-background-radius: 1 1 0 0; + -fx-background-insets: 0; +} +.spinner.split-arrows-vertical > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 1 1; + -fx-background-insets: 0 0 -1 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} + +.split-pane { + -color-split-divider: -color-border-subtle; + -color-split-divider-pressed: -color-accent-emphasis; + -color-split-grabber: -color-fg-muted; + -color-split-grabber-pressed: -color-accent-emphasis; + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-padding: 0; +} +.split-pane > .split-pane-divider { + -fx-background-color: -color-split-divider; + -fx-padding: 0 2px 0 2px; + -fx-opacity: 0.5; +} +.split-pane > .split-pane-divider > .horizontal-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 10px 2px 10px 2px; +} +.split-pane > .split-pane-divider > .vertical-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 2px 10px 2px 10px; +} +.split-pane > .split-pane-divider:pressed { + -fx-background-color: -color-split-divider-pressed; +} +.split-pane > .split-pane-divider:pressed > .horizontal-grabber, +.split-pane > .split-pane-divider:pressed > .vertical-grabber { + -fx-background-color: -color-split-grabber-pressed; +} +.split-pane > .split-pane-divider:hover { + -fx-opacity: 1; +} +.split-pane > .split-pane-divider:disabled { + -fx-opacity: 0.25; +} + +.tab-pane > .tab-header-area { + -fx-background-insets: 0; + -fx-background-color: -color-bg-default; + -fx-alignment: CENTER; +} +.tab-pane > .tab-header-area > .tab-header-background { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: transparent, transparent; + -fx-padding: 0.3em 0.6em 0.3em 0.6em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-alignment: CENTER; + -fx-text-fill: -color-fg-default; + -fx-padding: 0.4em 0.4em 0.4em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; + -fx-shape: "M 0,0 H1 L 4,3 7,0 H8 V1 L 5,4 8,7 V8 H7 L 4,5 1,8 H0 V7 L 3,4 0,1 Z"; + -fx-scale-shape: false; +} +.tab-pane > .tab-header-area > .headers-region > .tab:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label { + -fx-fill: -color-fg-default; + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label > *, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled { + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled > .tab-container { + -fx-opacity: 0.6; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right > .tab-container > .tab-label { + -fx-padding: 0.2em 0.4em 0.2em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected { + -fx-background-color: -color-border-default, -color-base-1; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:disabled, .tab-pane > .tab-header-area > .headers-region > .tab:right:disabled { + -fx-background-color: transparent; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button { + -fx-padding: 1em; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button:disabled { + -fx-opacity: 0.6; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tab-pane.floating > .tab-header-area { + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0; + -fx-background-color: transparent; + -fx-padding: 0.3em 0 0.3em 3px; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 1; + -fx-border-radius: 1; + -fx-border-width: 1px, 0 3px 0 0; + -fx-border-color: transparent, transparent; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-padding: 0.55em 0.55em 0.55em 0.55em; + -fx-min-width: 150px; + -fx-pref-width: 150px; + -fx-alignment: CENTER_LEFT; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab:hover > .tab-container, .tab-pane.floating > .tab-header-area > .headers-region > .tab:selected > .tab-container { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default, transparent; +} + +.text-input { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-fg-default; + -color-input-border: -color-border-default; + -color-input-bg-focused: -color-bg-default; + -color-input-border-focused: -color-accent-emphasis; + -color-input-bg-highlight: -color-accent-subtle; + -color-input-fg-highlight: -color-fg-default; + -fx-background-color: -color-input-border, -color-input-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-text-fill: -color-input-fg; + -fx-highlight-fill: -color-input-bg-highlight; + -fx-highlight-text-fill: -color-input-fg-highlight; + -fx-prompt-text-fill: -color-fg-subtle; + -fx-padding: 8px 12px 8px 12px; + -fx-cursor: text; +} +.text-input:focused { + -fx-background-color: -color-input-border-focused, -color-input-bg-focused; + -fx-prompt-text-fill: transparent; +} +.text-input:disabled { + -fx-opacity: 0.6; +} +.text-input:disabled > .scroll-pane { + -fx-opacity: 1; +} +.text-input:success { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-success-fg; + -color-input-border: -color-success-emphasis; + -color-input-border-focused: -color-success-emphasis; +} +.text-input:danger { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-danger-fg; + -color-input-border: -color-danger-emphasis; + -color-input-border-focused: -color-danger-emphasis; +} +.text-input.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.text-input.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.text-input.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.text-input.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.text-field.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.text-field.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.text-field.rounded { + -fx-background-radius: 10em; +} + +.text-area { + -fx-padding: 2px; + -fx-cursor: default; +} +.text-area .content { + -fx-cursor: text; + -fx-padding: 8px 12px 8px 12px; +} + +.password-field { + -fx-text-fill: -color-fg-muted; +} + +.titled-pane { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-effect: none; +} +.titled-pane.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} +.titled-pane.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} +.titled-pane.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} +.titled-pane > .title { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-padding: 10px 20px 10px 20px; +} +.titled-pane > .title > .text { + -fx-font-size: 1.25em; +} +.titled-pane > .title > .arrow-button { + -fx-background-color: none; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 10px 0 0; +} +.titled-pane > .title > .arrow-button > .arrow { + -fx-shape: "M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; + -fx-padding: 4px 5px 4px 5px; +} +.titled-pane > .content { + -fx-border-color: -color-border-default; + -fx-border-width: 0 1px 1px 1px; + -fx-border-radius: 0 0 1 1; + -fx-background-radius: 0 0 1 1; + -fx-background-color: -color-bg-default; + -fx-padding: 20px 20px 10px 20px; + -fx-alignment: TOP_LEFT; +} +.titled-pane:disabled > .title > *, +.titled-pane:disabled > .content > * { + -fx-opacity: 0.6; +} +.titled-pane:expanded > .title { + -fx-background-radius: 1 1 0 0; + -fx-background-insets: 0, 1px 1px 0 1px; +} +.titled-pane:collapsed > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; +} +.titled-pane.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-1; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -color-button-bg-selected: -color-accent-emphasis; + -color-button-fg-selected: -color-fg-emphasis; + -fx-padding: 8px 12px 8px 12px; +} +.toggle-button .font-icon, .toggle-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.toggle-button:disabled { + -fx-opacity: 0.6; +} +.toggle-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.toggle-button.button-icon { + -fx-padding: 8px; +} +.toggle-button.button-icon > .text { + visibility: hidden; +} +.toggle-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.toggle-button.button-circle .text { + visibility: hidden; +} +.toggle-button.left-pill { + -fx-background-radius: 1 0 0 1; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.toggle-button.left-pill:hover, .toggle-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.toggle-button.center-pill:hover, .toggle-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.right-pill { + -fx-background-radius: 0 1 1 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.toggle-button.right-pill:hover, .toggle-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected, .toggle-button:selected:focused { + -fx-background-color: -color-button-bg-selected; + -fx-text-fill: -color-button-fg-selected; + -fx-background-insets: 0; +} +.toggle-button:selected .font-icon, .toggle-button:selected .ikonli-font-icon, .toggle-button:selected:focused .font-icon, .toggle-button:selected:focused .ikonli-font-icon { + -fx-fill: -color-button-fg-selected; + -fx-icon-color: -color-button-fg-selected; +} +.toggle-button:show-mnemonics:selected > .mnemonic-underline { + -fx-stroke: -color-button-fg-selected; +} +.toggle-button:selected.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.tool-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0, 0 0 1px 0; + -fx-padding: 4px 0.3em 4px 0.3em; + -fx-spacing: 4px; + -fx-alignment: CENTER_LEFT; +} +.tool-bar > .container > .button, +.tool-bar > .container > .menu-button, +.tool-bar > .container > .split-menu-button { + -color-button-bg: -color-bg-subtle; + -fx-background-insets: 0; +} +.tool-bar > .container .toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-bg-selected: -color-base-2; + -color-button-fg-selected: -color-fg-default; + -fx-background-insets: 0; +} +.tool-bar > .container > .separator { + -fx-orientation: vertical; +} +.tool-bar > .tool-bar-overflow-button { + -fx-padding: 0 0.3em 0 4px; +} +.tool-bar > .tool-bar-overflow-button > .arrow { + -fx-shape: "M5.06 5 4 6.06 7.94 10 4 13.94 5.06 15l5-5z M11 5 9.94 6.06 13.88 10l-3.94 3.94L11 15l5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tool-bar:vertical { + -fx-background-insets: 0, 0 1px 0 0; + -fx-padding: 0.3em 4px 0.3em 4px; + -fx-alignment: TOP_LEFT; +} +.tool-bar:vertical > .container > .separator { + -fx-orientation: horizontal; +} +.tool-bar:vertical > .tool-bar-overflow-button { + -fx-padding: 4px 0 0.3em 0; +} +.tool-bar:vertical.right { + -fx-background-insets: 0, 0 0 0 1px; +} +.tool-bar.bottom { + -fx-background-insets: 0, 1px 0 0 0; +} + +.tooltip { + -fx-background-color: -color-border-default, -color-bg-overlay; + -fx-background-insets: 0, 1px; + -fx-text-fill: -color-fg-default; + -fx-background-radius: 1; + -fx-padding: 8px 12px 8px 12px; + -fx-opacity: 0.85; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); +} diff --git a/src/Resources/css/pamDefaultDialogCSS.css b/src/Resources/css/pamDefaultDialogCSS.css index bc43fa64..a237c4c9 100644 --- a/src/Resources/css/pamDefaultDialogCSS.css +++ b/src/Resources/css/pamDefaultDialogCSS.css @@ -561,3 +561,15 @@ -fx-icon-color: black; } + +/******************************************** +* * +* Spinner * +* * +*********************************************/ + + +.spinner { + -fx-pref-width: 100px; +} + diff --git a/src/Resources/css/pamSettingsCSS.css b/src/Resources/css/pamSettingsCSS.css index d635ea5b..66d99081 100644 --- a/src/Resources/css/pamSettingsCSS.css +++ b/src/Resources/css/pamSettingsCSS.css @@ -977,4 +977,13 @@ -fx-icon-color: black; } +/******************************************** +* * +* Spinner * +* * +*********************************************/ + +.spinner { + -fx-pref-width: 100px; +} diff --git a/src/Resources/css/primer-dark.css b/src/Resources/css/primer-dark.css new file mode 100644 index 00000000..ca9a4708 --- /dev/null +++ b/src/Resources/css/primer-dark.css @@ -0,0 +1,3706 @@ +.root { + -color-dark: #010409; + -color-light: #ffffff; + -color-base-0: #f0f6fc; + -color-base-1: #c9d1d9; + -color-base-2: #b1bac4; + -color-base-3: #8b949e; + -color-base-4: #6e7681; + -color-base-5: #484f58; + -color-base-6: #30363d; + -color-base-7: #21262d; + -color-base-8: #161b22; + -color-base-9: #0d1117; + -color-accent-0: #cae8ff; + -color-accent-1: #a5d6ff; + -color-accent-2: #79c0ff; + -color-accent-3: #58a6ff; + -color-accent-4: #388bfd; + -color-accent-5: #1f6feb; + -color-accent-6: #1158c7; + -color-accent-7: #0d419d; + -color-accent-8: #0c2d6b; + -color-accent-9: #051d4d; + -color-success-0: #aff5b4; + -color-success-1: #7ee787; + -color-success-2: #56d364; + -color-success-3: #3fb950; + -color-success-4: #2ea043; + -color-success-5: #238636; + -color-success-6: #196c2e; + -color-success-7: #0f5323; + -color-success-8: #033a16; + -color-success-9: #04260f; + -color-warning-0: #f8e3a1; + -color-warning-1: #f2cc60; + -color-warning-2: #e3b341; + -color-warning-3: #d29922; + -color-warning-4: #bb8009; + -color-warning-5: #9e6a03; + -color-warning-6: #845306; + -color-warning-7: #693e00; + -color-warning-8: #4b2900; + -color-warning-9: #341a00; + -color-danger-0: #ffdcd7; + -color-danger-1: #ffc1ba; + -color-danger-2: #ffa198; + -color-danger-3: #ff7b72; + -color-danger-4: #f85149; + -color-danger-5: #da3633; + -color-danger-6: #b62324; + -color-danger-7: #8e1519; + -color-danger-8: #67060c; + -color-danger-9: #490202; + -color-fg-default: #c9d1d9; + -color-fg-muted: #8b949e; + -color-fg-subtle: #6e7681; + -color-fg-emphasis: #ffffff; + -color-bg-default: #0d1117; + -color-bg-overlay: #0d1117; + -color-bg-subtle: #161b22; + -color-bg-inset: #010409; + -color-border-default: #30363d; + -color-border-muted: #21262d; + -color-border-subtle: rgba(240, 246, 252, 0.1); + -color-shadow-default: #010409; + -color-neutral-emphasis-plus: #6e7681; + -color-neutral-emphasis: #6e7681; + -color-neutral-muted: rgba(110, 118, 129, 0.4); + -color-neutral-subtle: rgba(110, 118, 129, 0.1); + -color-accent-fg: #58a6ff; + -color-accent-emphasis: #1f6feb; + -color-accent-muted: rgba(56, 139, 253, 0.4); + -color-accent-subtle: rgba(56, 139, 253, 0.15); + -color-warning-fg: #d29922; + -color-warning-emphasis: #9e6a03; + -color-warning-muted: rgba(187, 128, 9, 0.4); + -color-warning-subtle: rgba(187, 128, 9, 0.15); + -color-success-fg: #3fb950; + -color-success-emphasis: #238636; + -color-success-muted: rgba(46, 160, 67, 0.4); + -color-success-subtle: rgba(46, 160, 67, 0.15); + -color-danger-fg: #f85149; + -color-danger-emphasis: #da3633; + -color-danger-muted: rgba(248, 81, 73, 0.4); + -color-danger-subtle: rgba(248, 81, 73, 0.15); + -color-chart-1: #f3622d; + -color-chart-2: #fba71b; + -color-chart-3: #57b757; + -color-chart-4: #41a9c9; + -color-chart-5: #4258c9; + -color-chart-6: #9a42c8; + -color-chart-7: #c84164; + -color-chart-8: #888888; + -color-chart-1-alpha70: rgba(243, 98, 45, 0.7); + -color-chart-2-alpha70: rgba(251, 167, 27, 0.7); + -color-chart-3-alpha70: rgba(87, 183, 87, 0.7); + -color-chart-4-alpha70: rgba(65, 169, 201, 0.7); + -color-chart-5-alpha70: rgba(66, 88, 201, 0.7); + -color-chart-6-alpha70: rgba(154, 66, 200, 0.7); + -color-chart-7-alpha70: rgba(200, 65, 100, 0.7); + -color-chart-8-alpha70: rgba(136, 136, 136, 0.7); + -color-chart-1-alpha20: rgba(243, 98, 45, 0.2); + -color-chart-2-alpha20: rgba(251, 167, 27, 0.2); + -color-chart-3-alpha20: rgba(87, 183, 87, 0.2); + -color-chart-4-alpha20: rgba(65, 169, 201, 0.2); + -color-chart-5-alpha20: rgba(66, 88, 201, 0.2); + -color-chart-6-alpha20: rgba(154, 66, 200, 0.2); + -color-chart-7-alpha20: rgba(200, 65, 100, 0.2); + -color-chart-8-alpha20: rgba(136, 136, 136, 0.2); + -fx-background-color: -color-bg-default; + -fx-font-size: 14px; + -fx-background-radius: inherit; + -fx-background-insets: inherit; + -fx-padding: inherit; +} + +.root.popup { + -fx-background-color: transparent; +} + +.ikonli-font-icon { + -fx-icon-color: -color-fg-default; + -fx-fill: -color-fg-default; + -fx-icon-size: 18px; +} + +.mnemonic-underline { + -fx-stroke: transparent; +} + +.text { + -fx-font-smoothing-type: lcd; + -fx-bounds-type: logical_vertical_center; +} + +Text { + -fx-fill: -color-fg-default; +} + +.title-1 { + -fx-font-size: 2em; + -fx-font-weight: bolder; +} + +.title-2 { + -fx-font-size: 1.75em; + -fx-font-weight: bolder; +} + +.title-3 { + -fx-font-size: 1.5em; + -fx-font-weight: bolder; +} + +.title-4 { + -fx-font-size: 1.25em; + -fx-font-weight: normal; +} + +.text-caption { + -fx-font-size: 1em; + -fx-font-weight: bold; +} + +.text-small { + -fx-font-size: 0.8em; +} + +.text.accent { + -fx-fill: -color-accent-fg; +} + +.label.accent { + -fx-text-fill: -color-accent-fg; +} + +.text.success { + -fx-fill: -color-success-fg; +} + +.label.success { + -fx-text-fill: -color-success-fg; +} + +.text.warning { + -fx-fill: -color-warning-fg; +} + +.label.warning { + -fx-text-fill: -color-warning-fg; +} + +.text.danger { + -fx-fill: -color-danger-fg; +} + +.label.danger { + -fx-text-fill: -color-danger-fg; +} + +.text-bold { + -fx-font-weight: bold; +} + +.text-bolder { + -fx-font-weight: bolder; +} + +.text-normal { + -fx-font-weight: normal; +} + +.text-lighter { + -fx-font-weight: lighter; +} + +.text-italic { + -fx-font-style: italic; +} + +.text-oblique { + -fx-font-style: oblique; +} + +.text-underlined { + -fx-underline: true; +} + +.text-strikethrough { + -fx-strikethrough: true; +} + +.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} + +.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} + +.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} + +.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.accordion > .titled-pane.first-titled-pane > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px 4px 0 0; +} +.accordion > .titled-pane > .title { + -fx-background-insets: 0, 0 1px 1px 1px; + -fx-background-radius: 0; +} + +.bread-crumb-bar > .button.flat { + -fx-padding: 8px 2px 8px 9px; + -fx-content-display: RIGHT; +} +.bread-crumb-bar > .button.flat.first { + -fx-padding: 8px 2px 8px 12px; +} +.bread-crumb-bar > .button.flat.last { + -fx-padding: 8px 12px 8px 9px; +} +.bread-crumb-bar > .button.flat.last .font-icon, .bread-crumb-bar > .button.flat.last .ikonli-font-icon { + -fx-min-width: 0; + -fx-pref-width: 0; + -fx-max-width: 0; + visibility: hidden; +} + +.button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-6; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 8px 12px 8px 12px; +} +.button .font-icon, .button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.button:disabled { + -fx-opacity: 0.4; +} +.button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.button.button-icon { + -fx-padding: 8px; +} +.button.button-icon > .text { + visibility: hidden; +} +.button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.button.button-circle .text { + visibility: hidden; +} +.button.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.button.left-pill:hover, .button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.button.center-pill:hover, .button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.button.right-pill:hover, .button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-text-fill: -color-button-fg-hover; + -fx-opacity: 0.9; +} +.button:hover:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-hover; +} +.button:hover .font-icon, .button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; + -fx-text-fill: -color-button-fg-focused; +} +.button:focused .font-icon, .button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.button:armed, .button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.button:armed .font-icon, .button:armed .ikonli-font-icon, .button:focused:armed .font-icon, .button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.button:default, .button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button:default.button-outlined, .button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button:default.flat, .button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} +.button.flat:hover { + -fx-underline: true; +} +.button.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.button.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.button.rounded { + -fx-background-radius: 10em; +} + +.chart { + -fx-padding: 4px; +} +.chart > .chart-title { + -fx-font-size: 1.25em; +} +.chart > .chart-content { + -fx-padding: 10px; +} +.chart > .chart-content > .chart-plot-background { + -fx-background-color: -color-bg-default; +} +.chart:disabled > .chart-content { + -fx-opacity: 0.4; +} +.chart:disabled > .chart-content .label { + -fx-opacity: 1; +} +.chart > .chart-legend { + -fx-padding: 6px; +} +.chart .axis { + -fx-axis-color: -color-border-default; + -fx-tick-label-font-size: 0.8em; + -fx-tick-label-fill: -color-fg-default; +} +.chart .axis:top { + -fx-border-color: transparent transparent -fx-axis-color transparent; +} +.chart .axis:right { + -fx-border-color: transparent transparent transparent -fx-axis-color; +} +.chart .axis:bottom { + -fx-border-color: -fx-axis-color transparent transparent transparent; +} +.chart .axis:left { + -fx-border-color: transparent -fx-axis-color transparent transparent; +} +.chart .axis:top > .axis-label, .chart .axis:left > .axis-label { + -fx-padding: 0 0 4px 0; +} +.chart .axis:bottom > .axis-label, .chart .axis:right > .axis-label { + -fx-padding: 4px 0 0 0; +} +.chart .axis > .axis-tick-mark, +.chart .axis > .axis-minor-tick-mark { + -fx-fill: none; + -fx-stroke: -fx-axis-color; +} +.chart .chart-horizontal-grid-lines, +.chart .chart-vertical-grid-lines { + -fx-stroke: -color-border-muted; + -fx-stroke-dash-array: 0.25em, 0.25em; +} +.chart .chart-alternative-row-fill, +.chart .chart-alternative-column-fill { + -fx-fill: none; + -fx-stroke: none; +} +.chart .chart-vertical-zero-line, +.chart .chart-horizontal-zero-line { + -fx-stroke: -color-fg-default; +} + +.chart-symbol { + -fx-background-color: -color-chart-1; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color1.chart-symbol { + -fx-background-color: -color-chart-2; + -fx-background-radius: 0; +} + +.default-color2.chart-symbol { + -fx-background-color: -color-chart-3; + -fx-background-radius: 0; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.default-color3.chart-symbol { + -fx-background-color: -color-chart-4; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,10 L0,10 L0,8 L4,5 L0,2 L0,0 Z"; +} + +.default-color4.chart-symbol { + -fx-background-color: -color-chart-5; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M5,0 L10,8 L0,8 Z"; +} + +.default-color5.chart-symbol { + -fx-background-color: -color-chart-6, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color6.chart-symbol { + -fx-background-color: -color-chart-7, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 0; +} + +.default-color7.chart-symbol { + -fx-background-color: -color-chart-8, white; + -fx-background-radius: 0; + -fx-background-insets: 0, 2.5; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.chart-line-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.chart-series-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 3px; +} + +.default-color0.chart-line-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-line-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-line-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-line-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-line-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-line-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-line-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-line-symbol { + -fx-background-color: -color-chart-8, white; +} + +.default-color0.chart-series-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-line { + -fx-stroke: -color-chart-8; +} + +.chart-area-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-padding: 3px; +} + +.default-color0.chart-area-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-area-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-area-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-area-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-area-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-area-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-area-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-area-symbol { + -fx-background-color: -color-chart-8, white; +} + +.chart-series-area-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 1px; +} + +.default-color0.chart-series-area-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-area-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-area-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-area-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-area-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-area-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-area-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-area-line { + -fx-stroke: -color-chart-8; +} + +.chart-series-area-fill { + -fx-stroke: none; + -fx-fill: -color-chart-1-alpha20; +} + +.default-color0.chart-series-area-fill { + -fx-fill: -color-chart-1-alpha20; +} + +.default-color1.chart-series-area-fill { + -fx-fill: -color-chart-2-alpha20; +} + +.default-color2.chart-series-area-fill { + -fx-fill: -color-chart-3-alpha20; +} + +.default-color3.chart-series-area-fill { + -fx-fill: -color-chart-4-alpha20; +} + +.default-color4.chart-series-area-fill { + -fx-fill: -color-chart-5-alpha20; +} + +.default-color5.chart-series-area-fill { + -fx-fill: -color-chart-6-alpha20; +} + +.default-color6.chart-series-area-fill { + -fx-fill: -color-chart-7-alpha20; +} + +.default-color7.chart-series-area-fill { + -fx-fill: -color-chart-8-alpha20; +} + +.area-legend-symbol { + -fx-padding: 6px; + -fx-background-radius: 6px; + -fx-background-insets: 0, 3; +} + +.bubble-legend-symbol { + -fx-background-radius: 8px; + -fx-padding: 8px; +} + +.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; + -fx-background-color: radial-gradient(center 50% 50%, radius 80%, derive(-fx-bubble-fill, 20%), derive(-fx-bubble-fill, -30%)); +} + +.default-color0.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; +} + +.default-color1.chart-bubble { + -fx-bubble-fill: -color-chart-2-alpha70; +} + +.default-color2.chart-bubble { + -fx-bubble-fill: -color-chart-3-alpha70; +} + +.default-color3.chart-bubble { + -fx-bubble-fill: -color-chart-4-alpha70; +} + +.default-color4.chart-bubble { + -fx-bubble-fill: -color-chart-5-alpha70; +} + +.default-color5.chart-bubble { + -fx-bubble-fill: -color-chart-6-alpha70; +} + +.default-color6.chart-bubble { + -fx-bubble-fill: -color-chart-7-alpha70; +} + +.default-color7.chart-bubble { + -fx-bubble-fill: -color-chart-8-alpha70; +} + +.chart-bar { + -fx-bar-fill: -color-chart-1; + -fx-background-color: linear-gradient(to right, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); + -fx-background-insets: 0; +} + +.chart-bar.danger { + -fx-background-insets: 1 0 0 0; +} + +.bar-chart:horizontal .chart-bar { + -fx-background-insets: 0 0 0 1; +} + +.bar-chart:horizontal .chart-bar, +.stacked-bar-chart:horizontal .chart-bar { + -fx-background-color: linear-gradient(to bottom, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); +} + +.default-color0.chart-bar { + -fx-bar-fill: -color-chart-1; +} + +.default-color1.chart-bar { + -fx-bar-fill: -color-chart-2; +} + +.default-color2.chart-bar { + -fx-bar-fill: -color-chart-3; +} + +.default-color3.chart-bar { + -fx-bar-fill: -color-chart-4; +} + +.default-color4.chart-bar { + -fx-bar-fill: -color-chart-5; +} + +.default-color5.chart-bar { + -fx-bar-fill: -color-chart-6; +} + +.default-color6.chart-bar { + -fx-bar-fill: -color-chart-7; +} + +.default-color7.chart-bar { + -fx-bar-fill: -color-chart-8; +} + +.bar-legend-symbol { + -fx-padding: 8px; +} + +.chart-pie { + -fx-pie-color: -color-chart-1; + -fx-background-color: radial-gradient(radius 100%, derive(-fx-pie-color, 20%), derive(-fx-pie-color, -10%)); + -fx-background-insets: 1; + -fx-border-color: -color-bg-default; +} + +.chart-pie-label { + -fx-padding: 3px; + -fx-fill: -color-fg-default; +} + +.chart-pie-label-line { + -fx-stroke: derive(-color-bg-default, -20%); +} + +.default-color0.chart-pie { + -fx-pie-color: -color-chart-1; +} + +.default-color1.chart-pie { + -fx-pie-color: -color-chart-2; +} + +.default-color2.chart-pie { + -fx-pie-color: -color-chart-3; +} + +.default-color3.chart-pie { + -fx-pie-color: -color-chart-4; +} + +.default-color4.chart-pie { + -fx-pie-color: -color-chart-5; +} + +.default-color5.chart-pie { + -fx-pie-color: -color-chart-6; +} + +.default-color6.chart-pie { + -fx-pie-color: -color-chart-7; +} + +.default-color7.chart-pie { + -fx-pie-color: -color-chart-8; +} + +.danger.chart-pie { + -fx-pie-color: transparent; + -fx-background-color: white; +} + +.pie-legend-symbol.chart-pie { + -fx-background-radius: 8px; + -fx-padding: 8px; + -fx-border-color: none; +} + +.check-box { + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.check-box > .box { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-padding: 3px 4px 3px 4px; + -fx-alignment: CENTER; +} +.check-box > .box > .mark { + -fx-background-color: -color-bg-default; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.check-box:indeterminate > .box > .mark { + -fx-background-color: -color-fg-muted; + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.check-box:disabled { + -fx-opacity: 0.4; +} +.check-box:disabled > .box { + -fx-opacity: 0.4; +} +.check-box:selected > .box { + -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; +} +.check-box:selected > .box > .mark { + -fx-background-color: -color-fg-emphasis; +} +.check-box:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.color-picker > .color-picker-label { + -fx-padding: 8px 12px 8px 12px; +} +.color-picker > .color-picker-label > .label { + -fx-text-fill: -color-fg-default; +} +.color-picker > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: -color-border-default; +} +.color-picker.button > .color-picker-label { + -fx-padding: 0; +} + +.color-palette { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-spacing: 10px; + -fx-padding: 1em; +} +.color-palette > .color-picker-grid { + -fx-padding: 0.5px; + -fx-snap-to-pixel: false; +} +.color-palette > .color-picker-grid > .color-square { + -fx-background-color: transparent; + -fx-padding: 0.5px; +} + +.color-palette-region { + -fx-effect: dropshadow(gaussian, transparent, 12, 0, 0, 8); +} +.color-palette-region > .color-square.hover-square { + -fx-background-color: -color-accent-fg, -color-bg-default; + -fx-background-insets: -2, -1; + -fx-background-radius: 5, 0; + -fx-scale-x: 1.5; + -fx-scale-y: 1.5; + -fx-border-color: -color-accent-fg; + -fx-border-insets: -1, -1; +} + +.custom-color-dialog { + -fx-background-color: -color-bg-default; + -fx-padding: 1.25em; + -fx-spacing: 1.25em; +} +.custom-color-dialog > .color-rect-pane { + -fx-spacing: 1em; + -fx-pref-height: 16em; + -fx-alignment: TOP-LEFT; + -fx-fill-height: true; +} +.custom-color-dialog > .color-rect-pane > .color-rect { + -fx-min-width: 16em; + -fx-min-height: 16em; +} +.custom-color-dialog > .color-rect-pane > .color-rect .color-rect-border { + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-rect #color-rect-indicator { + -fx-background-color: none; + -fx-border-color: white; + -fx-border-radius: 0.4166667em; + -fx-pref-width: 0.833333em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.4166667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .color-rect-pane > .color-bar { + -fx-min-width: 1.666667em; + -fx-min-height: 16.666667em; + -fx-max-width: 1.666667em; + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-bar #color-bar-indicator { + -fx-border-radius: 0.333333em; + -fx-border-color: white; + -fx-pref-width: 2em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.1666667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .label { + -fx-padding: 0 0 0 2px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #current-new-color-border { + -fx-border-color: -color-border-default; + -fx-border-width: 1px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .color-rect { + -fx-min-width: 10em; + -fx-pref-width: 10em; + -fx-min-height: 1.75em; + -fx-pref-height: 1.75em; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer1 { + -fx-min-height: 5px; + -fx-pref-height: 5px; + -fx-max-height: 5px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer2 { + -fx-min-height: 1em; + -fx-pref-height: 1em; + -fx-max-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane { + -fx-hgap: 6px; + -fx-vgap: 6px; +} +.custom-color-dialog > .controls-pane #settings-pane > .customcolor-controls-background { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 13px 0 5px 0, 14px 1px 6px 1px; + -fx-background-radius: 4px; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-label { + -fx-min-width: 5.75em; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-unit { + -fx-min-width: 1.5em; + -fx-pref-width: 1.5em; + -fx-max-width: 1.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > .slider { + -fx-pref-width: 10em; +} +.custom-color-dialog > .controls-pane #settings-pane > .color-input-field { + -fx-max-width: 4em; + -fx-pref-width: 4em; + -fx-min-width: 4em; + -fx-pref-column-count: 3; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-side { + -fx-min-width: 0.5em; + -fx-pref-width: 0.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-bottom { + -fx-min-height: 1em; + -fx-pref-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane > .web-field { + -fx-pref-column-count: 6; + -fx-pref-width: 8em; +} +.custom-color-dialog > .controls-pane #settings-pane > .webcolor-field:dir(rtl) > .text-field:dir(ltr) { + -fx-alignment: BASELINE_RIGHT; +} +.custom-color-dialog > .controls-pane > #buttons-hbox { + -fx-spacing: 10px; + -fx-padding: 1em 0 0 0; + -fx-alignment: BOTTOM_RIGHT; +} +.custom-color-dialog > .controls-pane .transparent-pattern { + -fx-background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCOTBEQkE1RjJFMjA2ODExOUExMUM5NDhFOTUyQzM3MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRkE3MDZERThFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRkE3MDZERDhFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk4MDExNzQwNzIwNjgxMTg3MUZDMUExNDFCMTYwNzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjkwREJBNUYyRTIwNjgxMTlBMTFDOTQ4RTk1MkMzNzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71FDCdAAAAKElEQVR42mI8c+YMAwwYGxvD2UwMOADpEoz///+Hc86ePUsLOwACDABC1ghwV8TLOQAAAABJRU5ErkJggg=="); + -fx-background-repeat: repeat; + -fx-background-size: auto; +} + +.combo-box-base { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; +} +.combo-box-base:disabled { + -fx-opacity: 0.4; +} +.combo-box-base:success, .combo-box-base:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.combo-box-base:danger, .combo-box-base:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.combo-box-base:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.combo-box-base.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.combo-box-base.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.combo-box-base.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.combo-box-base.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base > .arrow-button { + -fx-padding: 8px 12px 8px 12px; +} +.combo-box-base > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.combo-box-base > .text-field { + -fx-background-insets: 0, 1 0 1 1; + -fx-background-radius: 4px 0 0 4px; +} +.combo-box-base:success > .arrow-button > .arrow { + -fx-background-color: -color-success-fg; +} +.combo-box-base:danger > .arrow-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.combo-box-base.alt-icon > .arrow-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.combo-box > .list-cell { + -fx-background-color: transparent; + -fx-text-fill: -color-fg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box:success > .list-cell { + -fx-text-fill: -color-success-fg; +} +.combo-box:danger > .list-cell { + -fx-text-fill: -color-danger-fg; +} + +.combo-box-popup > .list-view { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-cell-size: 0; + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:hover { + -fx-background-color: -color-base-7; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, .combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected:hover { + -fx-background-color: -color-base-6; +} +.combo-box-popup > .list-view > .placeholder > .label { + -fx-text-fill: -color-fg-muted; +} + +.choice-box { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-padding: 8px 12px 8px 12px; +} +.choice-box:disabled { + -fx-opacity: 0.4; +} +.choice-box:success, .choice-box:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.choice-box:danger, .choice-box:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.choice-box:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.choice-box.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.choice-box.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.choice-box.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.choice-box.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box > .label { + -fx-text-fill: -color-fg-default; +} +.choice-box > .open-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.choice-box:success > .label { + -fx-text-fill: -color-success-fg; +} +.choice-box:success > .open-button > .arrow { + -fx-background-color: -color-success-fg; +} +.choice-box:danger > .label { + -fx-text-fill: -color-danger-fg; +} +.choice-box:danger > .open-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.choice-box.alt-icon > .open-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.custom-text-field:left-node-visible { + -fx-padding: 8px 12px 8px 0; +} +.custom-text-field:left-node-visible .left-pane { + -fx-padding: 0 4px 0 6px; +} +.custom-text-field:right-node-visible { + -fx-padding: 8px 0 8px 12px; +} +.custom-text-field:right-node-visible .right-pane { + -fx-padding: 0 6px 0 4px; +} +.custom-text-field:left-node-visible:right-node-visible { + -fx-padding: 8px 0 8px 0; +} +.custom-text-field:success .font-icon, .custom-text-field:success .ikonli-font-icon { + -fx-icon-color: -color-success-fg; + -fx-fill: -color-success-fg; +} +.custom-text-field:danger .font-icon, .custom-text-field:danger .ikonli-font-icon { + -fx-icon-color: -color-danger-fg; + -fx-fill: -color-danger-fg; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected { + -color-cell-fg: -color-cell-fg-selected; + -fx-background-color: -color-cell-border, -color-cell-bg-selected; +} + +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell .table-cell:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell .tree-table-cell:selected { + -fx-background-color: -color-cell-bg-selected; + -fx-background-insets: 0 0 2 0; +} + +.cell .text-input { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.cell .check-box { + -fx-padding: 0 6px 0 0; +} +.cell .choice-box { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 12px 0 0; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; +} +.cell .combo-box { + -fx-background-color: transparent; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; + -fx-background-radius: 0; +} +.cell .combo-box .cell.list-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.list-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.list-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.list-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.list-view.edge-to-edge { + -fx-border-width: 0; +} +.list-view .list-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0 0.5em 0 0.5em; + -fx-cell-size: 2.8em; + -fx-border-width: 0 0 1 0; + -fx-border-color: transparent; +} +.list-view.bordered .list-cell { + -fx-border-color: -color-cell-border; +} +.list-view.dense .list-cell { + -fx-cell-size: 2em; +} +.list-view.striped .list-cell { + -fx-border-width: 0; +} +.list-view.striped .list-cell:odd { + -fx-background-color: -color-cell-bg-odd; +} + +.table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.table-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.table-view.edge-to-edge { + -fx-border-width: 0; +} +.table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.table-view.bordered .table-row-cell > .table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.table-view.bordered .table-row-cell > .table-cell:empty { + -fx-border-color: transparent; +} +.table-view.dense .table-row-cell { + -fx-cell-size: 2em; +} +.table-view.striped .table-row-cell { + -fx-background-insets: 0; +} +.table-view.striped.bordered .table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.table-view.striped .table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.table-view .table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; +} +.table-view .table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.table-view .table-row-cell:empty > .table-cell { + -fx-border-color: transparent; +} +.table-view .table-row-cell > .table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.table-view .table-row-cell > .table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .table-row-cell > .table-cell:last-visible, +.tree-table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell > .tree-table-cell:last-visible { + -fx-border-color: transparent; +} + +.table-view .table-row-cell > .table-cell.check-box-table-cell, +.table-view .table-row-cell > .table-cell.font-icon-table-cell, +.tree-table-view .tree-table-row-cell > .tree-table-cell.check-box-tree-table-cell { + -fx-alignment: CENTER_LEFT; +} + +.tree-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.tree-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.tree-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.tree-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-view.dense .tree-cell { + -fx-padding: 0.25em 0 0.25em 0; +} + +.tree-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0.5em 0 0.5em 0; + -fx-indent: 1em; +} +.tree-cell > .tree-disclosure-node { + -fx-padding: 5px 0.5em 0 0.5em; + -fx-background-color: transparent; +} + +.tree-cell > .tree-disclosure-node > .arrow, +.tree-table-row-cell > .tree-disclosure-node > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-cell-fg; + -fx-padding: 0.333333em 0.229em 0.333333em 0.229em; +} + +.tree-cell:expanded > .tree-disclosure-node > .arrow, +.tree-table-row-cell:expanded > .tree-disclosure-node > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} + +.tree-table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.tree-table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.tree-table-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.tree-table-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.tree-table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.tree-table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.tree-table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.tree-table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.tree-table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.tree-table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.tree-table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.tree-table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.tree-table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.tree-table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell:empty { + -fx-border-color: transparent; +} +.tree-table-view.dense .tree-table-row-cell { + -fx-cell-size: 2em; +} +.tree-table-view.dense .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 0.6em 0.5em 0 0.5em; +} +.tree-table-view.striped .tree-table-row-cell { + -fx-background-insets: 0; +} +.tree-table-view.striped.bordered .tree-table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view.striped .tree-table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.tree-table-view .tree-table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; + -fx-indent: 1em; +} +.tree-table-view .tree-table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.tree-table-view .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 1em 0.5em 0 0.5em; + -fx-background-color: transparent; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.combo-box-base.date-picker > .arrow-button { + -fx-cursor: hand; +} +.combo-box-base.date-picker > .arrow-button > .arrow { + -fx-shape: "M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V10h16v11zm0-13H4V5h16v3z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-default; + -fx-padding: 0.416667em; +} + +.date-picker-popup { + -color-date-bg: -color-bg-default; + -color-date-border: -color-border-default; + -color-date-month-year-bg: -color-bg-default; + -color-date-month-year-fg: -color-fg-default; + -color-date-day-bg: -color-bg-default; + -color-date-day-bg-hover: -color-bg-subtle; + -color-date-day-bg-selected: -color-accent-emphasis; + -color-date-day-fg: -color-fg-default; + -color-date-day-fg-hover: -color-fg-default; + -color-date-day-fg-selected: -color-fg-emphasis; + -color-date-week-bg: -color-bg-default; + -color-date-week-fg: -color-accent-fg; + -color-date-today-bg: -color-accent-subtle; + -color-date-today-fg: -color-accent-fg; + -color-date-other-month-fg: -color-fg-muted; + -color-date-chrono-fg: -color-success-fg; + -fx-background-color: -color-date-border, -color-date-bg; + -fx-background-insets: 0, 1; + -fx-background-radius: 0; + -fx-alignment: CENTER; + -fx-spacing: 0; + -fx-padding: 1px; +} +.date-picker-popup > .month-year-pane { + -fx-padding: 8px 8px 8px 8px; + -fx-background-color: -color-date-month-year-bg; + -fx-background-insets: 0; +} +.date-picker-popup > .month-year-pane > .spinner { + -fx-spacing: 4px; + -fx-alignment: CENTER; + -fx-fill-height: false; + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-font-size: 1.1em; +} +.date-picker-popup > .month-year-pane > .spinner > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .label { + -fx-alignment: CENTER; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .secondary-label { + -fx-alignment: BASELINE_CENTER; + -fx-padding: 0.5em 0 0 0; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .calendar-grid { + -fx-background-color: -color-date-bg; + -fx-padding: 8px; +} +.date-picker-popup > .calendar-grid > .date-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-alignment: BASELINE_CENTER; + -fx-opacity: 1; + -fx-text-fill: -color-date-day-fg; +} +.date-picker-popup > .calendar-grid > .week-number-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-week-bg; + -fx-text-fill: -color-date-week-fg; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .day-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-day-bg; +} +.date-picker-popup > .calendar-grid > .day-cell > .secondary-text { + -fx-fill: -color-date-chrono-fg; +} +.date-picker-popup > .calendar-grid > .day-cell:disabled { + -fx-opacity: 0.4; +} +.date-picker-popup > .calendar-grid .day-name-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .hijrah-day-cell { + -fx-alignment: TOP_LEFT; + -fx-padding: 0.083333em 4px 0.083333em 0.333333em; + -fx-cell-size: 2.75em; +} +.date-picker-popup > .calendar-grid > .today { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; + -fx-font-weight: bold; +} + +.inline-date-picker { + -fx-effect: none; +} +.inline-date-picker > .top-node, +.inline-date-picker > .bottom-node { + -fx-padding: 8px 16px 8px 16px; +} +.inline-date-picker > .month-year-pane { + -fx-padding: 8px 16px 8px 16px; + -fx-alignment: CENTER_LEFT; + -fx-spacing: 6px; +} +.inline-date-picker > .month-year-pane > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.inline-date-picker > .month-year-pane > .back-button { + -fx-padding: 0 1em 0 0; +} +.inline-date-picker > .month-year-pane > .back-button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .forward-button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .label { + -fx-text-fill: -color-date-month-year-fg; + -fx-font-size: 1.1em; +} +.inline-date-picker:disabled > .calendar-grid { + -fx-opacity: 0.4; +} +.inline-date-picker:disabled > .calendar-grid > .day-cell:disabled { + -fx-opacity: 1; +} + +.date-picker-popup > .calendar-grid > .selected, +.date-picker-popup > .calendar-grid > .selected > .secondary-text, +.date-picker-popup > .calendar-grid > .previous-month.selected, +.date-picker-popup > .calendar-grid > .previous-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.selected { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; + -fx-font-weight: normal; +} + +.date-picker-popup > .calendar-grid > .day-cell:hover { + -fx-background-color: -color-date-day-bg-hover; +} + +.date-picker-popup > .calendar-grid > .today:hover { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; +} + +.date-picker-popup > .calendar-grid > .selected:hover { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; +} + +.date-picker-popup > .calendar-grid > .previous-month, +.date-picker-popup > .calendar-grid > .next-month, +.date-picker-popup > .calendar-grid > .previous-month.today, +.date-picker-popup > .calendar-grid > .next-month.today, +.date-picker-popup > .calendar-grid > .previous-month > .secondary-text, +.date-picker-popup > .calendar-grid > .next-month > .secondary-text { + -fx-text-fill: -color-date-other-month-fg; + -fx-fill: -color-date-other-month-fg; + -fx-font-weight: normal; +} + +.dialog-pane { + -fx-background-color: -color-bg-default; + -fx-padding: 0; + -fx-max-width: 600px; +} +.dialog-pane > .expandable-content { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container { + -fx-padding: 2em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container > .details-button { + -fx-padding: 0; + -fx-alignment: BASELINE_LEFT; + -fx-focus-traversable: false; + -fx-text-fill: -color-fg-default; +} +.dialog-pane > .button-bar > .container > .details-button:hover { + -fx-underline: true; +} +.dialog-pane > .content { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane > .content.label { + -fx-alignment: TOP_LEFT; +} +.dialog-pane:header > .header-panel { + -fx-padding: 1em 1em 1em 1em; + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.dialog-pane:header > .header-panel > .label { + -fx-wrap-text: true; +} +.dialog-pane:header > .header-panel > .graphic-container { + -fx-padding: 0 0 0 1em; +} +.dialog-pane:no-header > .content { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane:no-header > * > .graphic-container { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane.information > .header-panel { + -fx-background-color: -color-accent-fg, -color-bg-subtle; +} +.dialog-pane.information > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.warning > .header-panel { + -fx-background-color: -color-warning-fg, -color-bg-subtle; +} +.dialog-pane.warning > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.error > .header-panel { + -fx-background-color: -color-danger-fg, -color-bg-subtle; +} +.dialog-pane.error > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} + +.alert.information.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.warning.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.error.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.confirmation.dialog-pane, +.text-input-dialog.dialog-pane, +.choice-dialog.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.html-editor { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-padding: 2px; +} +.html-editor:contains-focus { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.html-editor .tool-bar { + -fx-padding: 4px; +} +.html-editor .button, +.html-editor .toggle-button { + -fx-background-insets: 0; +} +.html-editor .toggle-button { + -color-button-bg-selected: -color-base-6; + -color-button-border-focused: transparent; +} + +.color-picker.html-editor-foreground { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-background { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-foreground > .color-picker-label > .picker-color > .picker-color-rect, .color-picker.html-editor-background > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: none; +} + +.color-picker.html-editor-foreground { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Text-Color.png"); +} + +.color-picker.html-editor-background { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Background-Color.png"); +} + +.html-editor-cut { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Cut.png"); +} + +.html-editor-copy { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Copy.png"); +} + +.html-editor-paste { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Paste.png"); +} + +.html-editor-align-left { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Left.png"); +} + +.html-editor-align-center { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Center.png"); +} + +.html-editor-align-right { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Right.png"); +} + +.html-editor-align-justify { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Justify.png"); +} + +.html-editor-outdent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent.png"); +} + +.html-editor-outdent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent-rtl.png"); +} + +.html-editor-indent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent.png"); +} + +.html-editor-indent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent-rtl.png"); +} + +.html-editor-bullets { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets.png"); +} + +.html-editor-bullets:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets-rtl.png"); +} + +.html-editor-numbers { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered.png"); +} + +.html-editor-numbers:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered-rtl.png"); +} + +.html-editor-bold { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bold.png"); +} + +.html-editor-italic { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Italic.png"); +} + +.html-editor-underline { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Underline.png"); +} + +.html-editor-strike { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Strikethrough.png"); +} + +.html-editor-hr { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Break.png"); +} + +.hyperlink { + -color-link-fg: -color-accent-fg; + -color-link-fg-visited: -color-fg-default; + -color-link-fg-armed: -color-fg-default; + -fx-cursor: hand; + -fx-underline: true; + -fx-text-fill: -color-link-fg; +} +.hyperlink:visited { + -fx-text-fill: -color-link-fg-visited; +} +.hyperlink:armed { + -fx-text-fill: -color-link-fg-armed; + -fx-underline: false; +} +.hyperlink:disabled { + -fx-opacity: 0.4; +} +.hyperlink:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-fill; +} + +.label { + -fx-text-fill: -color-fg-default; +} +.label:disabled { + -fx-opacity: 0.4; +} +.label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0 0 0 0, 0 0 1 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.menu-bar > .container > .menu-button { + -fx-background-color: transparent; + -fx-background-insets: 0 0 1px 0; + -fx-background-radius: 0; + -fx-padding: 8px 12px 8px 12px; +} +.menu-bar > .container > .menu-button > .label { + -fx-padding: 0; + -fx-text-fill: -color-fg-default; +} +.menu-bar > .container > .menu-button > .arrow-button { + -fx-padding: 0; +} +.menu-bar > .container > .menu-button > .arrow-button > .arrow { + -fx-padding: 0; + -fx-background-color: transparent; +} +.menu-bar > .container > .menu-button:hover, .menu-bar > .container > .menu-button:focused, .menu-bar > .container > .menu-button:showing { + -fx-background-color: -color-base-6, -color-base-6; +} + +.menu { + -fx-background-color: transparent; +} +.menu > .right-container > .arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} + +.menu-up-arrow { + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-down-arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-item { + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; +} +.menu-item > .graphic-container { + -fx-padding: 0 6px 0 0; +} +.menu-item > .label { + -fx-padding: 0 1em 0 0; + -fx-text-fill: -color-fg-default; +} +.menu-item > .left-container { + -fx-padding: 0 1em 0 0; +} +.menu-item > .right-container { + -fx-padding: 0 0 0 0.5em; +} +.menu-item:focused { + -fx-background-color: -color-base-7, -color-base-7; +} +.menu-item:disabled { + -fx-opacity: 0.4; + -fx-background-color: -color-bg-default; +} + +.radio-menu-item:checked > .left-container > .radio, +.check-menu-item:checked > .left-container > .check { + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-min-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-height: 0.75em; + -fx-max-width: 0.75em; +} + +.caption-menu-item { + -fx-padding: 8px 12px 8px 12px; +} +.caption-menu-item:hover, .caption-menu-item:focused, .caption-menu-item:pressed { + -fx-background-color: transparent; +} +.caption-menu-item > .label > .text { + -fx-font-weight: bold; +} + +.context-menu { + -fx-background-color: -color-border-muted, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-padding: 2px 2px 2px 2px; + -fx-background-radius: 4px; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); +} +.context-menu > .scroll-arrow { + -fx-padding: 0.5em; + -fx-background-color: transparent; +} +.context-menu > .scroll-arrow:hover { + -fx-background-color: -color-base-7; + -fx-text-fill: -color-fg-default; +} +.context-menu .separator:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.context-menu .separator:horizontal .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0.5em 0 0.5em; +} + +.context-menu:show-mnemonics > .mnemonic-underline, +.menu:show-mnemonics > .mnemonic-underline, +.menu-bar:show-mnemonics > .mnemonic-underline, +.menu-item > .label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-button, +.split-menu-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-6; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 0; + -fx-alignment: CENTER_LEFT; +} +.menu-button .font-icon, .menu-button .ikonli-font-icon, +.split-menu-button .font-icon, +.split-menu-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.menu-button:disabled, +.split-menu-button:disabled { + -fx-opacity: 0.4; +} +.menu-button:show-mnemonics > .mnemonic-underline, +.split-menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 8px; +} +.menu-button.button-icon > .text, +.split-menu-button.button-icon > .text { + visibility: hidden; +} +.menu-button.button-circle, +.split-menu-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.menu-button.button-circle .text, +.split-menu-button.button-circle .text { + visibility: hidden; +} +.menu-button.left-pill, +.split-menu-button.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.menu-button.left-pill:hover, .menu-button.left-pill:focused, +.split-menu-button.left-pill:hover, +.split-menu-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.center-pill, +.split-menu-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.menu-button.center-pill:hover, .menu-button.center-pill:focused, +.split-menu-button.center-pill:hover, +.split-menu-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.right-pill, +.split-menu-button.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.menu-button.right-pill:hover, .menu-button.right-pill:focused, +.split-menu-button.right-pill:hover, +.split-menu-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button > .label, +.split-menu-button > .label { + -fx-padding: 8px 12px 8px 12px; + -fx-text-fill: -color-button-fg; +} +.menu-button > .arrow-button, +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 0; +} +.menu-button > .arrow-button > .arrow, +.split-menu-button > .arrow-button > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-button-fg; + -fx-min-width: 0.5em; +} +.menu-button:openvertically > .arrow-button > .arrow, +.split-menu-button:openvertically > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.menu-button:show-mnemonics > .label > .mnemonic-underline, +.split-menu-button:show-mnemonics > .label > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 0; +} +.menu-button:hover, +.split-menu-button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-opacity: 0.9; +} +.menu-button:hover > .label, +.split-menu-button:hover > .label { + -fx-text-fill: -color-button-fg-hover; +} +.menu-button:hover > .arrow-button > .arrow, +.split-menu-button:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-hover; +} +.menu-button:hover .font-icon, .menu-button:hover .ikonli-font-icon, +.split-menu-button:hover .font-icon, +.split-menu-button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.menu-button:focused, +.split-menu-button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; +} +.menu-button:focused > .label, +.split-menu-button:focused > .label { + -fx-text-fill: -color-button-fg-focused; +} +.menu-button:focused > .arrow-button > .arrow, +.split-menu-button:focused > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-focused; +} +.menu-button:focused .font-icon, .menu-button:focused .ikonli-font-icon, +.split-menu-button:focused .font-icon, +.split-menu-button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.menu-button:armed, .menu-button:focused:armed, +.split-menu-button:armed, +.split-menu-button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .label, .menu-button:focused:armed > .label, +.split-menu-button:armed > .label, +.split-menu-button:focused:armed > .label { + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .arrow-button > .arrow, .menu-button:focused:armed > .arrow-button > .arrow, +.split-menu-button:armed > .arrow-button > .arrow, +.split-menu-button:focused:armed > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-pressed; +} +.menu-button:armed .font-icon, .menu-button:armed .ikonli-font-icon, .menu-button:focused:armed .font-icon, .menu-button:focused:armed .ikonli-font-icon, +.split-menu-button:armed .font-icon, +.split-menu-button:armed .ikonli-font-icon, +.split-menu-button:focused:armed .font-icon, +.split-menu-button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.menu-button.accent, +.split-menu-button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.accent.button-outlined, +.split-menu-button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.accent.flat, +.split-menu-button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.menu-button.success, +.split-menu-button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.success.button-outlined, +.split-menu-button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.success.flat, +.split-menu-button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.menu-button.danger, +.split-menu-button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.danger.button-outlined, +.split-menu-button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.danger.flat, +.split-menu-button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.menu-button.flat, +.split-menu-button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} + +.menu-button.no-arrow > .arrow-button { + -fx-padding: 0; +} +.menu-button.no-arrow > .arrow-button > .arrow { + -fx-shape: none; + -fx-scale-shape: false; + -fx-min-width: -1; +} + +.split-menu-button > .label { + -fx-padding: 8px 6px 8px 12px; +} +.split-menu-button:hover > .arrow-button, .split-menu-button:focused:hover > .arrow-button { + -fx-background-color: -color-neutral-emphasis-plus; + -fx-background-insets: 1px; + -fx-background-radius: 4px; + -fx-border-color: transparent; + -fx-opacity: 0.75; +} +.split-menu-button:hover > .arrow-button > .arrow, .split-menu-button:focused:hover > .arrow-button > .arrow { + -fx-background-color: -color-fg-emphasis; + -fx-opacity: 1; +} +.split-menu-button:default:hover > .arrow-button, .split-menu-button.accent:hover > .arrow-button, .split-menu-button.success:hover > .arrow-button, .split-menu-button.danger:hover > .arrow-button { + -fx-background-color: -color-fg-emphasis; +} +.split-menu-button:default:hover > .arrow-button > .arrow, .split-menu-button.accent:hover > .arrow-button > .arrow, .split-menu-button.success:hover > .arrow-button > .arrow, .split-menu-button.danger:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-bg-hover; +} +.split-menu-button.button-outlined:hover > .arrow-button, .split-menu-button.button-outlined:focused > .arrow-button { + -color-button-fg: -color-fg-emphasis; +} +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 12px; + -fx-background-radius: 0 4px 4px 0; + -fx-border-color: -color-button-fg; + -fx-border-width: 0 0 0 0.75px; + -fx-border-insets: 7px 0 7px 0; +} + +.pagination { + -fx-padding: 0; + -fx-arrow-button-gap: 4; + -fx-arrows-visible: true; + -fx-tooltip-visible: false; + -fx-page-information-visible: true; + -fx-page-information-alignment: bottom; +} +.pagination > .page { + -fx-background-color: transparent; +} +.pagination > .pagination-control { + -fx-background-color: transparent; + -fx-font-size: 1em; +} +.pagination > .pagination-control > .control-box { + -fx-padding: 2em 0 0 0; + -fx-spacing: 2; + -fx-alignment: CENTER; +} +.pagination > .pagination-control > .control-box .number-button { + -fx-padding: 0; +} +.pagination > .pagination-control > .control-box > .left-arrow-button > .left-arrow { + -fx-shape: "M14 7l-5 5 5 5V7z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .control-box > .right-arrow-button > .right-arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .page-information { + -fx-padding: 0.5em 0 0 0; +} +.pagination.bullet > .pagination-control > .control-box { + -fx-spacing: 0; +} +.pagination.bullet > .pagination-control > .control-box > .left-arrow-button { + -fx-background-radius: 10em; + -fx-padding: 0 0.25em 0 0.083em; +} +.pagination.bullet > .pagination-control > .control-box > .right-arrow-button { + -fx-background-radius: 10em; + -fx-padding: 0 0.083em 0 0.25em; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button { + -fx-background-radius: 0, 10em, 10em; + -fx-background-color: transparent, -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 5, 6; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: transparent, -color-accent-emphasis; +} + +.popover { + -fx-background-color: -color-bg-overlay; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); +} +.popover > .border { + -fx-stroke: -color-border-default; + -fx-stroke-width: 1px; +} +.popover > .content { + -fx-padding: 10px 10px 10px 10px; +} +.popover > .content > .title { + -fx-padding: 0 0 1em 0; +} +.popover > .content > .title > .text { + -fx-text-fill: -color-fg-default; + -fx-font-size: 1.25em; + -fx-alignment: CENTER_LEFT; +} +.popover > .content > .title > .icon > .graphics > .circle { + -fx-fill: transparent; +} +.popover > .content > .title > .icon > .graphics > .line { + -fx-stroke: -color-fg-default; + -fx-stroke-width: 1px; +} + +.progress-bar { + -color-progress-bar-track: -color-bg-subtle; + -color-progress-bar-fill: -color-accent-emphasis; + -fx-indeterminate-bar-length: 60; + -fx-indeterminate-bar-escape: true; + -fx-indeterminate-bar-flip: true; + -fx-indeterminate-bar-animation-time: 2; +} +.progress-bar > .track { + -fx-background-color: -color-progress-bar-track; + -fx-background-insets: 0; + -fx-background-radius: 4px; +} +.progress-bar > .bar { + -fx-background-color: -color-progress-bar-fill; + -fx-background-insets: 0; + -fx-background-radius: 4px; + -fx-padding: 0.4em; +} +.progress-bar.small > .bar { + -fx-padding: 2px; +} +.progress-bar.medium > .bar { + -fx-padding: 0.4em; +} +.progress-bar.large > .bar { + -fx-padding: 0.8em; +} +.progress-bar:disabled { + -fx-opacity: 0.4; +} + +.progress-indicator { + -fx-indeterminate-segment-count: 12; + -fx-spin-enabled: true; +} +.progress-indicator > .determinate-indicator > .indicator { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; +} +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0.6em; +} +.progress-indicator > .determinate-indicator > .tick { + -fx-background-color: -color-fg-emphasis; + -fx-background-insets: 0; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; +} +.progress-indicator > .determinate-indicator > .percentage { + -fx-font-size: 0.8em; + -fx-fill: -color-fg-default; +} +.progress-indicator > .determinate-indicator:disabled { + -fx-opacity: 0.4; +} +.progress-indicator:indeterminate > .spinner { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-border-color: transparent; + -fx-border-width: 0; + -fx-border-radius: 0; + -fx-padding: 0; +} +.progress-indicator:indeterminate .segment { + -fx-background-color: -color-accent-emphasis; +} +.progress-indicator:indeterminate .segment0 { + -fx-shape: "M41.98 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment1 { + -fx-shape: "M33.75 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment2 { + -fx-shape: "M22.49 3.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment3 { + -fx-shape: "M11.24 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment4 { + -fx-shape: "M3.01 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment5 { + -fx-shape: "M0.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment6 { + -fx-shape: "M3.01 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment7 { + -fx-shape: "M11.25 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment8 { + -fx-shape: "M22.5 48.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment9 { + -fx-shape: "M33.75 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment10 { + -fx-shape: "M41.98 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment11 { + -fx-shape: "M45.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} + +.radio-button { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.radio-button > .radio { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-padding: 3px; + -fx-alignment: CENTER; +} +.radio-button > .radio > .dot { + -fx-background-color: transparent, transparent; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.radio-button:disabled { + -fx-opacity: 0.4; +} +.radio-button:disabled > .radio { + -fx-opacity: 0.4; +} +.radio-button:selected > .radio { + -fx-background-color: -color-accent-emphasis; +} +.radio-button:selected > .radio > .dot { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; +} +.radio-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.scroll-bar { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-bar > .thumb { + -fx-background-color: -color-fg-muted; + -fx-background-radius: 4px; +} +.scroll-bar > .track { + -fx-background-color: transparent; + -fx-border-radius: 0; +} +.scroll-bar > .increment-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .increment-button > .increment-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar > .decrement-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .decrement-button > .decrement-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar:horizontal { + -fx-pref-height: 8px; +} +.scroll-bar:vertical { + -fx-pref-width: 8px; +} +.scroll-bar:hover, .scroll-bar:pressed, .scroll-bar:focused { + -fx-opacity: 1; +} + +.scroll-pane { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.scroll-pane > .viewport { + -fx-background-color: transparent; +} +.scroll-pane > .corner { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-pane:disabled > .scroll-bar { + -fx-opacity: 0.25; +} + +.separator:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator:horizontal > .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0 0 0; +} +.separator:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator:vertical > .line { + -fx-border-color: transparent transparent transparent -color-border-muted; + -fx-border-insets: 0 0 0 1px; +} +.separator.small:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.separator.small:vertical { + -fx-padding: 0 0.25em 0 0.25em; +} +.separator.medium:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator.medium:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator.large:horizontal { + -fx-padding: 1.5em 0 1.5em 0; +} +.separator.large:vertical { + -fx-padding: 0 1.5em 0 1.5em; +} + +.slider { + -color-slider-thumb: -color-fg-default; + -color-slider-thumb-border: -color-fg-default; + -color-slider-track: -color-border-muted; + -color-slider-track-progress: -color-accent-emphasis; + -color-slider-tick: -color-fg-muted; +} +.slider.large { + -color-slider-thumb: -color-fg-default; + -color-slider-thumb-border: -color-fg-default; +} +.slider > .thumb { + -fx-background-color: -color-slider-thumb-border, -color-slider-thumb; + -fx-background-insets: 0, 2px; + -fx-background-radius: 10em; +} +.slider > .track { + -fx-background-color: transparent, -color-slider-track; + -fx-background-radius: 4px; +} +.slider > .progress { + -fx-background-color: transparent, -color-slider-track-progress; +} +.slider > .axis { + -fx-tick-label-fill: -color-slider-tick; + -fx-tick-length: 5px; + -fx-minor-tick-length: 3px; +} +.slider > .axis > .axis-tick-mark, +.slider > .axis > .axis-minor-tick-mark { + -fx-stroke: -color-slider-tick; +} +.slider:disabled { + -fx-opacity: 0.4; +} +.slider:horizontal > .thumb { + -fx-padding: 10px 10px 10px 10px; +} +.slider:horizontal > .track { + -fx-padding: 10px 0 10px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider:horizontal > .progress { + -fx-background-radius: 4px; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .thumb { + -fx-padding: 8px 8px 8px 8px; +} +.slider.small:horizontal > .track { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.large:horizontal > .thumb { + -fx-padding: 12px 12px 12px; +} +.slider.large:horizontal > .track { + -fx-padding: 12px 0 12px 0; + -fx-background-insets: 0, 0px 0 0px 0; +} +.slider.large:horizontal > .progress { + -fx-padding: 12px 0 12px 0; + -fx-background-insets: 0, 0px 0 0px 0; +} +.slider:vertical > .thumb { + -fx-padding: 10px 10px 10px 10px; +} +.slider:vertical > .track { + -fx-padding: 0 10px 0 10px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider:vertical > .progress { + -fx-background-radius: 10em 10em 4px 4px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .thumb { + -fx-padding: 8px 8px 8px 8px; +} +.slider.small:vertical > .track { + -fx-padding: 0 8px 0 8px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.large:vertical > .thumb { + -fx-padding: 12px 12px 12px 12px; +} +.slider.large:vertical > .track { + -fx-padding: 0 12px 0 12px; + -fx-background-insets: 0, 0 0px 0 0px; +} +.slider.large:vertical > .progress { + -fx-padding: 0 12px 0 12px; + -fx-background-insets: 0, 0 0px 0 0px; +} + +.spinner { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default; + -fx-border-radius: 4px; + -fx-border-width: 1px; +} +.spinner > .text-field { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0; + -fx-padding: 7px 11px 7px 11px; +} +.spinner > .increment-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: 0; + -fx-background-radius: 0 4px 0 0; + -fx-padding: 10px; +} +.spinner > .increment-arrow-button:hover { + -fx-background-color: -color-base-6; +} +.spinner > .increment-arrow-button > .increment-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: false; +} +.spinner > .decrement-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: -1 0 0 0; + -fx-background-radius: 0 0 4px 0; + -fx-padding: 10px; +} +.spinner > .decrement-arrow-button:hover { + -fx-background-color: -color-base-6; +} +.spinner > .decrement-arrow-button > .decrement-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.spinner:disabled { + -fx-opacity: 0.4; +} +.spinner:focused:focused, .spinner:contains-focus:focused { + -fx-border-color: -color-accent-emphasis; +} +.spinner.arrows-on-left-vertical > .text-field { + -fx-background-radius: 0 4px 4px 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-vertical > .increment-arrow-button { + -fx-background-radius: 4px 0 0 0; +} +.spinner.arrows-on-left-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 0 4px; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .text-field { + -fx-background-radius: 0 4px 4px 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-horizontal > .increment-arrow-button { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0 -1 0 0; +} +.spinner.split-arrows-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-vertical > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-vertical > .increment-arrow-button { + -fx-background-radius: 4px 4px 0 0; + -fx-background-insets: 0; +} +.spinner.split-arrows-vertical > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 4px 4px; + -fx-background-insets: 0 0 -1 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} + +.split-pane { + -color-split-divider: -color-border-subtle; + -color-split-divider-pressed: -color-accent-emphasis; + -color-split-grabber: -color-fg-muted; + -color-split-grabber-pressed: -color-accent-emphasis; + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-padding: 0; +} +.split-pane > .split-pane-divider { + -fx-background-color: -color-split-divider; + -fx-padding: 0 2px 0 2px; + -fx-opacity: 0.5; +} +.split-pane > .split-pane-divider > .horizontal-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 10px 2px 10px 2px; +} +.split-pane > .split-pane-divider > .vertical-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 2px 10px 2px 10px; +} +.split-pane > .split-pane-divider:pressed { + -fx-background-color: -color-split-divider-pressed; +} +.split-pane > .split-pane-divider:pressed > .horizontal-grabber, +.split-pane > .split-pane-divider:pressed > .vertical-grabber { + -fx-background-color: -color-split-grabber-pressed; +} +.split-pane > .split-pane-divider:hover { + -fx-opacity: 1; +} +.split-pane > .split-pane-divider:disabled { + -fx-opacity: 0.25; +} + +.tab-pane > .tab-header-area { + -fx-background-insets: 0; + -fx-background-color: -color-bg-default; + -fx-alignment: CENTER; +} +.tab-pane > .tab-header-area > .tab-header-background { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: transparent, transparent; + -fx-padding: 0.3em 0.6em 0.3em 0.6em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-alignment: CENTER; + -fx-text-fill: -color-fg-default; + -fx-padding: 0.4em 0.4em 0.4em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; + -fx-shape: "M 0,0 H1 L 4,3 7,0 H8 V1 L 5,4 8,7 V8 H7 L 4,5 1,8 H0 V7 L 3,4 0,1 Z"; + -fx-scale-shape: false; +} +.tab-pane > .tab-header-area > .headers-region > .tab:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label { + -fx-fill: -color-fg-default; + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label > *, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled { + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled > .tab-container { + -fx-opacity: 0.4; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right > .tab-container > .tab-label { + -fx-padding: 0.2em 0.4em 0.2em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected { + -fx-background-color: -color-border-default, -color-base-7; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:disabled, .tab-pane > .tab-header-area > .headers-region > .tab:right:disabled { + -fx-background-color: transparent; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button { + -fx-padding: 1em; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button:disabled { + -fx-opacity: 0.4; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tab-pane.floating > .tab-header-area { + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0; + -fx-background-color: transparent; + -fx-padding: 0.3em 0 0.3em 3px; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 4px; + -fx-border-radius: 4px; + -fx-border-width: 1px, 0 3px 0 0; + -fx-border-color: transparent, transparent; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-padding: 0.55em 0.55em 0.55em 0.55em; + -fx-min-width: 150px; + -fx-pref-width: 150px; + -fx-alignment: CENTER_LEFT; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab:hover > .tab-container, .tab-pane.floating > .tab-header-area > .headers-region > .tab:selected > .tab-container { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default, transparent; +} + +.text-input { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-fg-default; + -color-input-border: -color-border-default; + -color-input-bg-focused: -color-bg-default; + -color-input-border-focused: -color-accent-emphasis; + -color-input-bg-highlight: -color-accent-subtle; + -color-input-fg-highlight: -color-fg-default; + -fx-background-color: -color-input-border, -color-input-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-text-fill: -color-input-fg; + -fx-highlight-fill: -color-input-bg-highlight; + -fx-highlight-text-fill: -color-input-fg-highlight; + -fx-prompt-text-fill: -color-fg-subtle; + -fx-padding: 8px 12px 8px 12px; + -fx-cursor: text; +} +.text-input:focused { + -fx-background-color: -color-input-border-focused, -color-input-bg-focused; + -fx-prompt-text-fill: transparent; +} +.text-input:disabled { + -fx-opacity: 0.4; +} +.text-input:disabled > .scroll-pane { + -fx-opacity: 1; +} +.text-input:success { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-success-fg; + -color-input-border: -color-success-emphasis; + -color-input-border-focused: -color-success-emphasis; +} +.text-input:danger { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-danger-fg; + -color-input-border: -color-danger-emphasis; + -color-input-border-focused: -color-danger-emphasis; +} +.text-input.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.text-input.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.text-input.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.text-input.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.text-field.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.text-field.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.text-field.rounded { + -fx-background-radius: 10em; +} + +.text-area { + -fx-padding: 2px; + -fx-cursor: default; +} +.text-area .content { + -fx-cursor: text; + -fx-padding: 8px 12px 8px 12px; +} + +.password-field { + -fx-text-fill: -color-fg-muted; +} + +.titled-pane { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-effect: none; +} +.titled-pane.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} +.titled-pane.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} +.titled-pane.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} +.titled-pane > .title { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-padding: 10px 20px 10px 20px; +} +.titled-pane > .title > .text { + -fx-font-size: 1.25em; +} +.titled-pane > .title > .arrow-button { + -fx-background-color: none; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 10px 0 0; +} +.titled-pane > .title > .arrow-button > .arrow { + -fx-shape: "M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; + -fx-padding: 4px 5px 4px 5px; +} +.titled-pane > .content { + -fx-border-color: -color-border-default; + -fx-border-width: 0 1px 1px 1px; + -fx-border-radius: 0 0 4px 4px; + -fx-background-radius: 0 0 4px 4px; + -fx-background-color: -color-bg-default; + -fx-padding: 20px 20px 10px 20px; + -fx-alignment: TOP_LEFT; +} +.titled-pane:disabled > .title > *, +.titled-pane:disabled > .content > * { + -fx-opacity: 0.4; +} +.titled-pane:expanded > .title { + -fx-background-radius: 4px 4px 0 0; + -fx-background-insets: 0, 1px 1px 0 1px; +} +.titled-pane:collapsed > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; +} +.titled-pane.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-6; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -color-button-bg-selected: -color-accent-emphasis; + -color-button-fg-selected: -color-fg-emphasis; + -fx-padding: 8px 12px 8px 12px; +} +.toggle-button .font-icon, .toggle-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.toggle-button:disabled { + -fx-opacity: 0.4; +} +.toggle-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.toggle-button.button-icon { + -fx-padding: 8px; +} +.toggle-button.button-icon > .text { + visibility: hidden; +} +.toggle-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.toggle-button.button-circle .text { + visibility: hidden; +} +.toggle-button.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.toggle-button.left-pill:hover, .toggle-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.toggle-button.center-pill:hover, .toggle-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.toggle-button.right-pill:hover, .toggle-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected, .toggle-button:selected:focused { + -fx-background-color: -color-button-bg-selected; + -fx-text-fill: -color-button-fg-selected; + -fx-background-insets: 0; +} +.toggle-button:selected .font-icon, .toggle-button:selected .ikonli-font-icon, .toggle-button:selected:focused .font-icon, .toggle-button:selected:focused .ikonli-font-icon { + -fx-fill: -color-button-fg-selected; + -fx-icon-color: -color-button-fg-selected; +} +.toggle-button:show-mnemonics:selected > .mnemonic-underline { + -fx-stroke: -color-button-fg-selected; +} +.toggle-button:selected.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.toggle-switch { + -fx-thumb-move-animation-time: 200; +} +.toggle-switch > .label-container > .label { + -fx-font-size: 1em; + -fx-text-fill: -color-fg-default; + -fx-padding: 2px 6px 2px 0; +} +.toggle-switch > .thumb { + -fx-background-color: -color-border-default, -color-fg-emphasis; + -fx-background-insets: 0, 2px; + -fx-background-radius: 10em; + -fx-padding: 0.85em; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-opacity: 0.8; +} +.toggle-switch > .thumb-area { + -fx-background-radius: 1em; + -fx-background-color: -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 1px; + -fx-padding: 0.85em 1.4em 0.85em 1.4em; +} +.toggle-switch:selected > .thumb { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; + -fx-opacity: 1; +} +.toggle-switch:selected > .thumb-area { + -fx-background-color: -color-accent-emphasis; + -fx-background-insets: 0; +} +.toggle-switch:disabled { + -fx-opacity: 0.4; +} + +.tool-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0, 0 0 1px 0; + -fx-padding: 4px 0.3em 4px 0.3em; + -fx-spacing: 4px; + -fx-alignment: CENTER_LEFT; +} +.tool-bar > .container > .button, +.tool-bar > .container > .menu-button, +.tool-bar > .container > .split-menu-button { + -color-button-bg: -color-bg-subtle; + -fx-background-insets: 0; +} +.tool-bar > .container .toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-bg-selected: -color-base-6; + -color-button-fg-selected: -color-fg-default; + -fx-background-insets: 0; +} +.tool-bar > .container > .separator { + -fx-orientation: vertical; +} +.tool-bar > .tool-bar-overflow-button { + -fx-padding: 0 0.3em 0 4px; +} +.tool-bar > .tool-bar-overflow-button > .arrow { + -fx-shape: "M5.06 5 4 6.06 7.94 10 4 13.94 5.06 15l5-5z M11 5 9.94 6.06 13.88 10l-3.94 3.94L11 15l5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tool-bar:vertical { + -fx-background-insets: 0, 0 1px 0 0; + -fx-padding: 0.3em 4px 0.3em 4px; + -fx-alignment: TOP_LEFT; +} +.tool-bar:vertical > .container > .separator { + -fx-orientation: horizontal; +} +.tool-bar:vertical > .tool-bar-overflow-button { + -fx-padding: 4px 0 0.3em 0; +} +.tool-bar:vertical.right { + -fx-background-insets: 0, 0 0 0 1px; +} +.tool-bar.bottom { + -fx-background-insets: 0, 1px 0 0 0; +} + +.tooltip { + -fx-background-color: -color-border-default, -color-bg-overlay; + -fx-background-insets: 0, 1px; + -fx-text-fill: -color-fg-default; + -fx-background-radius: 4px; + -fx-padding: 8px 12px 8px 12px; + -fx-opacity: 0.85; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.6, 0, 2); +} + + +/******************************************** +* * +* Spinner * +* * +*********************************************/ + + +.spinner { + -fx-pref-width: 120px; +} + + +/******************************************** +* * +* Chart * +* * +*********************************************/ + + + +.thin-chart .chart-series-line { + -fx-stroke-width: 1px; +} + + +/******************************************************************************* + * * + * Label * + * * + ******************************************************************************/ + + +#label-title1 { + -fx-font: bold 16pt -fx-font-family; +} + +#label-title2 { + -fx-font: bold 13pt -fx-font-family; +} diff --git a/src/Resources/css/primer-light.css b/src/Resources/css/primer-light.css new file mode 100644 index 00000000..f887da2c --- /dev/null +++ b/src/Resources/css/primer-light.css @@ -0,0 +1,3664 @@ +.root { + -color-dark: #1b1f24; + -color-light: #ffffff; + -color-base-0: #f6f8fa; + -color-base-1: #eaeef2; + -color-base-2: #d0d7de; + -color-base-3: #afb8c1; + -color-base-4: #8c959f; + -color-base-5: #6e7781; + -color-base-6: #57606a; + -color-base-7: #424a53; + -color-base-8: #32383f; + -color-base-9: #24292f; + -color-accent-0: #ddf4ff; + -color-accent-1: #b6e3ff; + -color-accent-2: #80ccff; + -color-accent-3: #54aeff; + -color-accent-4: #218bff; + -color-accent-5: #0969da; + -color-accent-6: #0550ae; + -color-accent-7: #033d8b; + -color-accent-8: #0a3069; + -color-accent-9: #002155; + -color-success-0: #dafbe1; + -color-success-1: #aceebb; + -color-success-2: #6fdd8b; + -color-success-3: #4ac26b; + -color-success-4: #2da44e; + -color-success-5: #1a7f37; + -color-success-6: #116329; + -color-success-7: #044f1e; + -color-success-8: #003d16; + -color-success-9: #002d11; + -color-warning-0: #fff8c5; + -color-warning-1: #fae17d; + -color-warning-2: #eac54f; + -color-warning-3: #d4a72c; + -color-warning-4: #bf8700; + -color-warning-5: #9a6700; + -color-warning-6: #7d4e00; + -color-warning-7: #633c01; + -color-warning-8: #4d2d00; + -color-warning-9: #3b2300; + -color-danger-0: #ffebe9; + -color-danger-1: #ffcecb; + -color-danger-2: #ffaba8; + -color-danger-3: #ff8182; + -color-danger-4: #fa4549; + -color-danger-5: #cf222e; + -color-danger-6: #a40e26; + -color-danger-7: #82071e; + -color-danger-8: #660018; + -color-danger-9: #4c0014; + -color-fg-default: #24292f; + -color-fg-muted: #57606a; + -color-fg-subtle: #6e7781; + -color-fg-emphasis: #ffffff; + -color-bg-default: #ffffff; + -color-bg-overlay: #ffffff; + -color-bg-subtle: #f6f8fa; + -color-bg-inset: #f6f8fa; + -color-border-default: #d0d7de; + -color-border-muted: #d0d7de; + -color-border-subtle: rgba(27, 31, 36, 0.15); + -color-shadow-default: #d0d7de; + -color-neutral-emphasis-plus: #24292f; + -color-neutral-emphasis: #6e7781; + -color-neutral-muted: rgba(175, 184, 193, 0.2); + -color-neutral-subtle: rgba(234, 238, 242, 0.5); + -color-accent-fg: #0969da; + -color-accent-emphasis: #0969da; + -color-accent-muted: rgba(84, 174, 255, 0.4); + -color-accent-subtle: #ddf4ff; + -color-warning-fg: #9a6700; + -color-warning-emphasis: #bf8700; + -color-warning-muted: rgba(212, 167, 44, 0.4); + -color-warning-subtle: #fff8c5; + -color-success-fg: #1a7f37; + -color-success-emphasis: #2da44e; + -color-success-muted: rgba(74, 194, 107, 0.4); + -color-success-subtle: #dafbe1; + -color-danger-fg: #cf222e; + -color-danger-emphasis: #cf222e; + -color-danger-muted: rgba(255, 129, 130, 0.4); + -color-danger-subtle: #ffebe9; + -color-chart-1: #f3622d; + -color-chart-2: #fba71b; + -color-chart-3: #57b757; + -color-chart-4: #41a9c9; + -color-chart-5: #4258c9; + -color-chart-6: #9a42c8; + -color-chart-7: #c84164; + -color-chart-8: #888888; + -color-chart-1-alpha70: rgba(243, 98, 45, 0.7); + -color-chart-2-alpha70: rgba(251, 167, 27, 0.7); + -color-chart-3-alpha70: rgba(87, 183, 87, 0.7); + -color-chart-4-alpha70: rgba(65, 169, 201, 0.7); + -color-chart-5-alpha70: rgba(66, 88, 201, 0.7); + -color-chart-6-alpha70: rgba(154, 66, 200, 0.7); + -color-chart-7-alpha70: rgba(200, 65, 100, 0.7); + -color-chart-8-alpha70: rgba(136, 136, 136, 0.7); + -color-chart-1-alpha20: rgba(243, 98, 45, 0.2); + -color-chart-2-alpha20: rgba(251, 167, 27, 0.2); + -color-chart-3-alpha20: rgba(87, 183, 87, 0.2); + -color-chart-4-alpha20: rgba(65, 169, 201, 0.2); + -color-chart-5-alpha20: rgba(66, 88, 201, 0.2); + -color-chart-6-alpha20: rgba(154, 66, 200, 0.2); + -color-chart-7-alpha20: rgba(200, 65, 100, 0.2); + -color-chart-8-alpha20: rgba(136, 136, 136, 0.2); + -fx-background-color: -color-bg-default; + -fx-font-size: 14px; + -fx-background-radius: inherit; + -fx-background-insets: inherit; + -fx-padding: inherit; +} +.root.popup { + -fx-background-color: transparent; +} + +.ikonli-font-icon { + -fx-icon-color: -color-fg-default; + -fx-fill: -color-fg-default; + -fx-icon-size: 18px; +} + +.mnemonic-underline { + -fx-stroke: transparent; +} + +.text { + -fx-font-smoothing-type: lcd; + -fx-bounds-type: logical_vertical_center; +} + +Text { + -fx-fill: -color-fg-default; +} + +.title-1 { + -fx-font-size: 2em; + -fx-font-weight: bolder; +} + +.title-2 { + -fx-font-size: 1.75em; + -fx-font-weight: bolder; +} + +.title-3 { + -fx-font-size: 1.5em; + -fx-font-weight: bolder; +} + +.title-4 { + -fx-font-size: 1.25em; + -fx-font-weight: normal; +} + +.text-caption { + -fx-font-size: 1em; + -fx-font-weight: bold; +} + +.text-small { + -fx-font-size: 0.8em; +} + +.text.accent { + -fx-fill: -color-accent-fg; +} + +.label.accent { + -fx-text-fill: -color-accent-fg; +} + +.text.success { + -fx-fill: -color-success-fg; +} + +.label.success { + -fx-text-fill: -color-success-fg; +} + +.text.warning { + -fx-fill: -color-warning-fg; +} + +.label.warning { + -fx-text-fill: -color-warning-fg; +} + +.text.danger { + -fx-fill: -color-danger-fg; +} + +.label.danger { + -fx-text-fill: -color-danger-fg; +} + +.text-bold { + -fx-font-weight: bold; +} + +.text-bolder { + -fx-font-weight: bolder; +} + +.text-normal { + -fx-font-weight: normal; +} + +.text-lighter { + -fx-font-weight: lighter; +} + +.text-italic { + -fx-font-style: italic; +} + +.text-oblique { + -fx-font-style: oblique; +} + +.text-underlined { + -fx-underline: true; +} + +.text-strikethrough { + -fx-strikethrough: true; +} + +.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} + +.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} + +.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} + +.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} + +.accordion > .titled-pane.first-titled-pane > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px 4px 0 0; +} +.accordion > .titled-pane > .title { + -fx-background-insets: 0, 0 1px 1px 1px; + -fx-background-radius: 0; +} + +.bread-crumb-bar > .button.flat { + -fx-padding: 8px 2px 8px 9px; + -fx-content-display: RIGHT; +} +.bread-crumb-bar > .button.flat.first { + -fx-padding: 8px 2px 8px 12px; +} +.bread-crumb-bar > .button.flat.last { + -fx-padding: 8px 12px 8px 9px; +} +.bread-crumb-bar > .button.flat.last .font-icon, .bread-crumb-bar > .button.flat.last .ikonli-font-icon { + -fx-min-width: 0; + -fx-pref-width: 0; + -fx-max-width: 0; + visibility: hidden; +} + +.button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-1; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 8px 12px 8px 12px; +} +.button .font-icon, .button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.button:disabled { + -fx-opacity: 0.4; +} +.button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.button.button-icon { + -fx-padding: 8px; +} +.button.button-icon > .text { + visibility: hidden; +} +.button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.button.button-circle .text { + visibility: hidden; +} +.button.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.button.left-pill:hover, .button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.button.center-pill:hover, .button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.button.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.button.right-pill:hover, .button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-text-fill: -color-button-fg-hover; + -fx-opacity: 0.9; +} +.button:hover:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-hover; +} +.button:hover .font-icon, .button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; + -fx-text-fill: -color-button-fg-focused; +} +.button:focused .font-icon, .button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.button:armed, .button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.button:armed .font-icon, .button:armed .ikonli-font-icon, .button:focused:armed .font-icon, .button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.button:default, .button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button:default.button-outlined, .button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button:default.flat, .button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-5; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} +.button.flat:hover { + -fx-underline: true; +} +.button.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.button.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.button.rounded { + -fx-background-radius: 10em; +} + +.chart { + -fx-padding: 4px; +} +.chart > .chart-title { + -fx-font-size: 1.25em; +} +.chart > .chart-content { + -fx-padding: 10px; +} +.chart > .chart-content > .chart-plot-background { + -fx-background-color: -color-bg-default; +} +.chart:disabled > .chart-content { + -fx-opacity: 0.4; +} +.chart:disabled > .chart-content .label { + -fx-opacity: 1; +} +.chart > .chart-legend { + -fx-padding: 6px; +} +.chart .axis { + -fx-axis-color: -color-border-default; + -fx-tick-label-font-size: 0.8em; + -fx-tick-label-fill: -color-fg-default; +} +.chart .axis:top { + -fx-border-color: transparent transparent -fx-axis-color transparent; +} +.chart .axis:right { + -fx-border-color: transparent transparent transparent -fx-axis-color; +} +.chart .axis:bottom { + -fx-border-color: -fx-axis-color transparent transparent transparent; +} +.chart .axis:left { + -fx-border-color: transparent -fx-axis-color transparent transparent; +} +.chart .axis:top > .axis-label, .chart .axis:left > .axis-label { + -fx-padding: 0 0 4px 0; +} +.chart .axis:bottom > .axis-label, .chart .axis:right > .axis-label { + -fx-padding: 4px 0 0 0; +} +.chart .axis > .axis-tick-mark, +.chart .axis > .axis-minor-tick-mark { + -fx-fill: none; + -fx-stroke: -fx-axis-color; +} +.chart .chart-horizontal-grid-lines, +.chart .chart-vertical-grid-lines { + -fx-stroke: -color-border-muted; + -fx-stroke-dash-array: 0.25em, 0.25em; +} +.chart .chart-alternative-row-fill, +.chart .chart-alternative-column-fill { + -fx-fill: none; + -fx-stroke: none; +} +.chart .chart-vertical-zero-line, +.chart .chart-horizontal-zero-line { + -fx-stroke: -color-fg-default; +} + +.chart-symbol { + -fx-background-color: -color-chart-1; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color1.chart-symbol { + -fx-background-color: -color-chart-2; + -fx-background-radius: 0; +} + +.default-color2.chart-symbol { + -fx-background-color: -color-chart-3; + -fx-background-radius: 0; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.default-color3.chart-symbol { + -fx-background-color: -color-chart-4; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,10 L0,10 L0,8 L4,5 L0,2 L0,0 Z"; +} + +.default-color4.chart-symbol { + -fx-background-color: -color-chart-5; + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-shape: "M5,0 L10,8 L0,8 Z"; +} + +.default-color5.chart-symbol { + -fx-background-color: -color-chart-6, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.default-color6.chart-symbol { + -fx-background-color: -color-chart-7, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 0; +} + +.default-color7.chart-symbol { + -fx-background-color: -color-chart-8, white; + -fx-background-radius: 0; + -fx-background-insets: 0, 2.5; + -fx-padding: 7px 5px 7px 5px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +.chart-line-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 2; + -fx-background-radius: 5px; + -fx-padding: 5px; +} + +.chart-series-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 3px; +} + +.default-color0.chart-line-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-line-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-line-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-line-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-line-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-line-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-line-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-line-symbol { + -fx-background-color: -color-chart-8, white; +} + +.default-color0.chart-series-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-line { + -fx-stroke: -color-chart-8; +} + +.chart-area-symbol { + -fx-background-color: -color-chart-1, white; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-padding: 3px; +} + +.default-color0.chart-area-symbol { + -fx-background-color: -color-chart-1, white; +} + +.default-color1.chart-area-symbol { + -fx-background-color: -color-chart-2, white; +} + +.default-color2.chart-area-symbol { + -fx-background-color: -color-chart-3, white; +} + +.default-color3.chart-area-symbol { + -fx-background-color: -color-chart-4, white; +} + +.default-color4.chart-area-symbol { + -fx-background-color: -color-chart-5, white; +} + +.default-color5.chart-area-symbol { + -fx-background-color: -color-chart-6, white; +} + +.default-color6.chart-area-symbol { + -fx-background-color: -color-chart-7, white; +} + +.default-color7.chart-area-symbol { + -fx-background-color: -color-chart-8, white; +} + +.chart-series-area-line { + -fx-stroke: -color-chart-1; + -fx-stroke-width: 1px; +} + +.default-color0.chart-series-area-line { + -fx-stroke: -color-chart-1; +} + +.default-color1.chart-series-area-line { + -fx-stroke: -color-chart-2; +} + +.default-color2.chart-series-area-line { + -fx-stroke: -color-chart-3; +} + +.default-color3.chart-series-area-line { + -fx-stroke: -color-chart-4; +} + +.default-color4.chart-series-area-line { + -fx-stroke: -color-chart-5; +} + +.default-color5.chart-series-area-line { + -fx-stroke: -color-chart-6; +} + +.default-color6.chart-series-area-line { + -fx-stroke: -color-chart-7; +} + +.default-color7.chart-series-area-line { + -fx-stroke: -color-chart-8; +} + +.chart-series-area-fill { + -fx-stroke: none; + -fx-fill: -color-chart-1-alpha20; +} + +.default-color0.chart-series-area-fill { + -fx-fill: -color-chart-1-alpha20; +} + +.default-color1.chart-series-area-fill { + -fx-fill: -color-chart-2-alpha20; +} + +.default-color2.chart-series-area-fill { + -fx-fill: -color-chart-3-alpha20; +} + +.default-color3.chart-series-area-fill { + -fx-fill: -color-chart-4-alpha20; +} + +.default-color4.chart-series-area-fill { + -fx-fill: -color-chart-5-alpha20; +} + +.default-color5.chart-series-area-fill { + -fx-fill: -color-chart-6-alpha20; +} + +.default-color6.chart-series-area-fill { + -fx-fill: -color-chart-7-alpha20; +} + +.default-color7.chart-series-area-fill { + -fx-fill: -color-chart-8-alpha20; +} + +.area-legend-symbol { + -fx-padding: 6px; + -fx-background-radius: 6px; + -fx-background-insets: 0, 3; +} + +.bubble-legend-symbol { + -fx-background-radius: 8px; + -fx-padding: 8px; +} + +.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; + -fx-background-color: radial-gradient(center 50% 50%, radius 80%, derive(-fx-bubble-fill, 20%), derive(-fx-bubble-fill, -30%)); +} + +.default-color0.chart-bubble { + -fx-bubble-fill: -color-chart-1-alpha70; +} + +.default-color1.chart-bubble { + -fx-bubble-fill: -color-chart-2-alpha70; +} + +.default-color2.chart-bubble { + -fx-bubble-fill: -color-chart-3-alpha70; +} + +.default-color3.chart-bubble { + -fx-bubble-fill: -color-chart-4-alpha70; +} + +.default-color4.chart-bubble { + -fx-bubble-fill: -color-chart-5-alpha70; +} + +.default-color5.chart-bubble { + -fx-bubble-fill: -color-chart-6-alpha70; +} + +.default-color6.chart-bubble { + -fx-bubble-fill: -color-chart-7-alpha70; +} + +.default-color7.chart-bubble { + -fx-bubble-fill: -color-chart-8-alpha70; +} + +.chart-bar { + -fx-bar-fill: -color-chart-1; + -fx-background-color: linear-gradient(to right, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); + -fx-background-insets: 0; +} + +.chart-bar.danger { + -fx-background-insets: 1 0 0 0; +} + +.bar-chart:horizontal .chart-bar { + -fx-background-insets: 0 0 0 1; +} + +.bar-chart:horizontal .chart-bar, +.stacked-bar-chart:horizontal .chart-bar { + -fx-background-color: linear-gradient(to bottom, derive(-fx-bar-fill, -4%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, 0%), derive(-fx-bar-fill, -1%), derive(-fx-bar-fill, -6%)); +} + +.default-color0.chart-bar { + -fx-bar-fill: -color-chart-1; +} + +.default-color1.chart-bar { + -fx-bar-fill: -color-chart-2; +} + +.default-color2.chart-bar { + -fx-bar-fill: -color-chart-3; +} + +.default-color3.chart-bar { + -fx-bar-fill: -color-chart-4; +} + +.default-color4.chart-bar { + -fx-bar-fill: -color-chart-5; +} + +.default-color5.chart-bar { + -fx-bar-fill: -color-chart-6; +} + +.default-color6.chart-bar { + -fx-bar-fill: -color-chart-7; +} + +.default-color7.chart-bar { + -fx-bar-fill: -color-chart-8; +} + +.bar-legend-symbol { + -fx-padding: 8px; +} + +.chart-pie { + -fx-pie-color: -color-chart-1; + -fx-background-color: radial-gradient(radius 100%, derive(-fx-pie-color, 20%), derive(-fx-pie-color, -10%)); + -fx-background-insets: 1; + -fx-border-color: -color-bg-default; +} + +.chart-pie-label { + -fx-padding: 3px; + -fx-fill: -color-fg-default; +} + +.chart-pie-label-line { + -fx-stroke: derive(-color-bg-default, -20%); +} + +.default-color0.chart-pie { + -fx-pie-color: -color-chart-1; +} + +.default-color1.chart-pie { + -fx-pie-color: -color-chart-2; +} + +.default-color2.chart-pie { + -fx-pie-color: -color-chart-3; +} + +.default-color3.chart-pie { + -fx-pie-color: -color-chart-4; +} + +.default-color4.chart-pie { + -fx-pie-color: -color-chart-5; +} + +.default-color5.chart-pie { + -fx-pie-color: -color-chart-6; +} + +.default-color6.chart-pie { + -fx-pie-color: -color-chart-7; +} + +.default-color7.chart-pie { + -fx-pie-color: -color-chart-8; +} + +.danger.chart-pie { + -fx-pie-color: transparent; + -fx-background-color: white; +} + +.pie-legend-symbol.chart-pie { + -fx-background-radius: 8px; + -fx-padding: 8px; + -fx-border-color: none; +} + +.check-box { + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.check-box > .box { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-padding: 3px 4px 3px 4px; + -fx-alignment: CENTER; +} +.check-box > .box > .mark { + -fx-background-color: -color-bg-default; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.check-box:indeterminate > .box > .mark { + -fx-background-color: -color-fg-muted; + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.check-box:disabled { + -fx-opacity: 0.4; +} +.check-box:disabled > .box { + -fx-opacity: 0.4; +} +.check-box:selected > .box { + -fx-background-color: -color-accent-emphasis, -color-accent-emphasis; +} +.check-box:selected > .box > .mark { + -fx-background-color: -color-fg-emphasis; +} +.check-box:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.color-picker > .color-picker-label { + -fx-padding: 8px 12px 8px 12px; +} +.color-picker > .color-picker-label > .label { + -fx-text-fill: -color-fg-default; +} +.color-picker > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: -color-border-default; +} +.color-picker.button > .color-picker-label { + -fx-padding: 0; +} + +.color-palette { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-spacing: 10px; + -fx-padding: 1em; +} +.color-palette > .color-picker-grid { + -fx-padding: 0.5px; + -fx-snap-to-pixel: false; +} +.color-palette > .color-picker-grid > .color-square { + -fx-background-color: transparent; + -fx-padding: 0.5px; +} + +.color-palette-region { + -fx-effect: dropshadow(gaussian, transparent, 12, 0, 0, 8); +} +.color-palette-region > .color-square.hover-square { + -fx-background-color: -color-accent-fg, -color-bg-default; + -fx-background-insets: -2, -1; + -fx-background-radius: 5, 0; + -fx-scale-x: 1.5; + -fx-scale-y: 1.5; + -fx-border-color: -color-accent-fg; + -fx-border-insets: -1, -1; +} + +.custom-color-dialog { + -fx-background-color: -color-bg-default; + -fx-padding: 1.25em; + -fx-spacing: 1.25em; +} +.custom-color-dialog > .color-rect-pane { + -fx-spacing: 1em; + -fx-pref-height: 16em; + -fx-alignment: TOP-LEFT; + -fx-fill-height: true; +} +.custom-color-dialog > .color-rect-pane > .color-rect { + -fx-min-width: 16em; + -fx-min-height: 16em; +} +.custom-color-dialog > .color-rect-pane > .color-rect .color-rect-border { + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-rect #color-rect-indicator { + -fx-background-color: none; + -fx-border-color: white; + -fx-border-radius: 0.4166667em; + -fx-pref-width: 0.833333em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.4166667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .color-rect-pane > .color-bar { + -fx-min-width: 1.666667em; + -fx-min-height: 16.666667em; + -fx-max-width: 1.666667em; + -fx-border-color: -color-border-default; +} +.custom-color-dialog > .color-rect-pane > .color-bar #color-bar-indicator { + -fx-border-radius: 0.333333em; + -fx-border-color: white; + -fx-pref-width: 2em; + -fx-pref-height: 0.833333em; + -fx-translate-x: -0.1666667em; + -fx-translate-y: -0.4166667em; + -fx-effect: dropshadow(three-pass-box, black, 2, 0, 0, 1); +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .label { + -fx-padding: 0 0 0 2px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #current-new-color-border { + -fx-border-color: -color-border-default; + -fx-border-width: 1px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > .color-rect { + -fx-min-width: 10em; + -fx-pref-width: 10em; + -fx-min-height: 1.75em; + -fx-pref-height: 1.75em; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer1 { + -fx-min-height: 5px; + -fx-pref-height: 5px; + -fx-max-height: 5px; +} +.custom-color-dialog > .controls-pane > .current-new-color-grid > #spacer2 { + -fx-min-height: 1em; + -fx-pref-height: 1em; + -fx-max-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane { + -fx-hgap: 6px; + -fx-vgap: 6px; +} +.custom-color-dialog > .controls-pane #settings-pane > .customcolor-controls-background { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 13px 0 5px 0, 14px 1px 6px 1px; + -fx-background-radius: 4px; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-label { + -fx-min-width: 5.75em; +} +.custom-color-dialog > .controls-pane #settings-pane > .settings-unit { + -fx-min-width: 1.5em; + -fx-pref-width: 1.5em; + -fx-max-width: 1.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > .slider { + -fx-pref-width: 10em; +} +.custom-color-dialog > .controls-pane #settings-pane > .color-input-field { + -fx-max-width: 4em; + -fx-pref-width: 4em; + -fx-min-width: 4em; + -fx-pref-column-count: 3; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-side { + -fx-min-width: 0.5em; + -fx-pref-width: 0.5em; +} +.custom-color-dialog > .controls-pane #settings-pane > #spacer-bottom { + -fx-min-height: 1em; + -fx-pref-height: 1em; +} +.custom-color-dialog > .controls-pane #settings-pane > .web-field { + -fx-pref-column-count: 6; + -fx-pref-width: 8em; +} +.custom-color-dialog > .controls-pane #settings-pane > .webcolor-field:dir(rtl) > .text-field:dir(ltr) { + -fx-alignment: BASELINE_RIGHT; +} +.custom-color-dialog > .controls-pane > #buttons-hbox { + -fx-spacing: 10px; + -fx-padding: 1em 0 0 0; + -fx-alignment: BOTTOM_RIGHT; +} +.custom-color-dialog > .controls-pane .transparent-pattern { + -fx-background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCOTBEQkE1RjJFMjA2ODExOUExMUM5NDhFOTUyQzM3MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRkE3MDZERThFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRkE3MDZERDhFNUYxMUUxQjU5RUNFQTE3OTA1RDFFMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk4MDExNzQwNzIwNjgxMTg3MUZDMUExNDFCMTYwNzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjkwREJBNUYyRTIwNjgxMTlBMTFDOTQ4RTk1MkMzNzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71FDCdAAAAKElEQVR42mI8c+YMAwwYGxvD2UwMOADpEoz///+Hc86ePUsLOwACDABC1ghwV8TLOQAAAABJRU5ErkJggg=="); + -fx-background-repeat: repeat; + -fx-background-size: auto; +} + +.combo-box-base { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; +} +.combo-box-base:disabled { + -fx-opacity: 0.4; +} +.combo-box-base:success, .combo-box-base:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.combo-box-base:danger, .combo-box-base:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.combo-box-base:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.combo-box-base.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.combo-box-base.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.combo-box-base.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.combo-box-base.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.combo-box-base > .arrow-button { + -fx-padding: 8px 12px 8px 12px; +} +.combo-box-base > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.combo-box-base > .text-field { + -fx-background-insets: 0, 1 0 1 1; + -fx-background-radius: 4px 0 0 4px; +} +.combo-box-base:success > .arrow-button > .arrow { + -fx-background-color: -color-success-fg; +} +.combo-box-base:danger > .arrow-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.combo-box-base.alt-icon > .arrow-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.combo-box > .list-cell { + -fx-background-color: transparent; + -fx-text-fill: -color-fg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box:success > .list-cell { + -fx-text-fill: -color-success-fg; +} +.combo-box:danger > .list-cell { + -fx-text-fill: -color-danger-fg; +} + +.combo-box-popup > .list-view { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-cell-size: 0; + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; + -fx-graphic-text-gap: 6px; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:hover { + -fx-background-color: -color-base-1; +} +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, .combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected:hover { + -fx-background-color: -color-base-2; +} +.combo-box-popup > .list-view > .placeholder > .label { + -fx-text-fill: -color-fg-muted; +} + +.choice-box { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-background-radius: 4px; + -fx-text-fill: -color-fg-default; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-padding: 8px 12px 8px 12px; +} +.choice-box:disabled { + -fx-opacity: 0.4; +} +.choice-box:success, .choice-box:success:focused { + -fx-background-color: -color-success-emphasis, -color-bg-default; +} +.choice-box:danger, .choice-box:danger:focused { + -fx-background-color: -color-danger-emphasis, -color-bg-default; +} +.choice-box:focused { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.choice-box.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.choice-box.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.choice-box.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.choice-box.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.choice-box > .label { + -fx-text-fill: -color-fg-default; +} +.choice-box > .open-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} +.choice-box:success > .label { + -fx-text-fill: -color-success-fg; +} +.choice-box:success > .open-button > .arrow { + -fx-background-color: -color-success-fg; +} +.choice-box:danger > .label { + -fx-text-fill: -color-danger-fg; +} +.choice-box:danger > .open-button > .arrow { + -fx-background-color: -color-danger-fg; +} +.choice-box.alt-icon > .open-button > .arrow { + -fx-shape: "M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"; + -fx-scale-shape: false; +} + +.custom-text-field:left-node-visible { + -fx-padding: 8px 12px 8px 0; +} +.custom-text-field:left-node-visible .left-pane { + -fx-padding: 0 4px 0 6px; +} +.custom-text-field:right-node-visible { + -fx-padding: 8px 0 8px 12px; +} +.custom-text-field:right-node-visible .right-pane { + -fx-padding: 0 6px 0 4px; +} +.custom-text-field:left-node-visible:right-node-visible { + -fx-padding: 8px 0 8px 0; +} +.custom-text-field:success .font-icon, .custom-text-field:success .ikonli-font-icon { + -fx-icon-color: -color-success-fg; + -fx-fill: -color-success-fg; +} +.custom-text-field:danger .font-icon, .custom-text-field:danger .ikonli-font-icon { + -fx-icon-color: -color-danger-fg; + -fx-fill: -color-danger-fg; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected { + -color-cell-fg: -color-cell-fg-selected; + -fx-background-color: -color-cell-border, -color-cell-bg-selected; +} + +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell .table-cell:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell .tree-table-cell:selected { + -fx-background-color: -color-cell-bg-selected; + -fx-background-insets: 0 0 2 0; +} + +.cell .text-input { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.cell .check-box { + -fx-padding: 0 6px 0 0; +} +.cell .choice-box { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 12px 0 0; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; +} +.cell .combo-box { + -fx-background-color: transparent; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; + -fx-background-radius: 0; +} +.cell .combo-box .cell.list-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.list-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.list-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.list-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.list-view.edge-to-edge { + -fx-border-width: 0; +} +.list-view .list-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0 0.5em 0 0.5em; + -fx-cell-size: 2.8em; + -fx-border-width: 0 0 1 0; + -fx-border-color: transparent; +} +.list-view.bordered .list-cell { + -fx-border-color: -color-cell-border; +} +.list-view.dense .list-cell { + -fx-cell-size: 2em; +} +.list-view.striped .list-cell { + -fx-border-width: 0; +} +.list-view.striped .list-cell:odd { + -fx-background-color: -color-cell-bg-odd; +} + +.table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.table-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.table-view.edge-to-edge { + -fx-border-width: 0; +} +.table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.table-view.bordered .table-row-cell > .table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.table-view.bordered .table-row-cell > .table-cell:empty { + -fx-border-color: transparent; +} +.table-view.dense .table-row-cell { + -fx-cell-size: 2em; +} +.table-view.striped .table-row-cell { + -fx-background-insets: 0; +} +.table-view.striped.bordered .table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.table-view.striped .table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.table-view .table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; +} +.table-view .table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.table-view .table-row-cell:empty > .table-cell { + -fx-border-color: transparent; +} +.table-view .table-row-cell > .table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.table-view .table-row-cell > .table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.table-view .table-row-cell > .table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .table-row-cell > .table-cell:last-visible, +.tree-table-view:constrained-resize > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell > .tree-table-cell:last-visible { + -fx-border-color: transparent; +} + +.table-view .table-row-cell > .table-cell.check-box-table-cell, +.table-view .table-row-cell > .table-cell.font-icon-table-cell, +.tree-table-view .tree-table-row-cell > .tree-table-cell.check-box-tree-table-cell { + -fx-alignment: CENTER_LEFT; +} + +.tree-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} +.tree-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.tree-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.tree-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-view.dense .tree-cell { + -fx-padding: 0.25em 0 0.25em 0; +} + +.tree-cell { + -fx-background-color: -color-cell-bg; + -fx-text-fill: -color-cell-fg; + -fx-padding: 0.5em 0 0.5em 0; + -fx-indent: 1em; +} +.tree-cell > .tree-disclosure-node { + -fx-padding: 5px 0.5em 0 0.5em; + -fx-background-color: transparent; +} + +.tree-cell > .tree-disclosure-node > .arrow, +.tree-table-row-cell > .tree-disclosure-node > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-cell-fg; + -fx-padding: 0.333333em 0.229em 0.333333em 0.229em; +} + +.tree-cell:expanded > .tree-disclosure-node > .arrow, +.tree-table-row-cell:expanded > .tree-disclosure-node > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} + +.tree-table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-1; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} +.tree-table-view > .virtual-flow > .corner { + -fx-background-color: -color-cell-border; + -fx-opacity: 0.4; +} +.tree-table-view > .virtual-flow:disabled { + -fx-opacity: 0.4; +} +.tree-table-view.edge-to-edge { + -fx-border-width: 0; +} +.tree-table-view.bordered > .column-header-background .column-header { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 1 0 0; +} +.tree-table-view > .column-header-background { + -fx-background-color: -color-cell-border, -color-header-bg; + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view > .column-header-background .column-header { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-size: 2.2em; + -fx-padding: 0; + -fx-font-weight: bold; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 1 1 0; +} +.tree-table-view > .column-header-background .column-header .label { + -fx-text-fill: -color-header-fg; + -fx-alignment: CENTER_LEFT; + -fx-padding: 0 0.5em 0 0.5em; +} +.tree-table-view > .column-header-background .column-header GridPane { + -fx-padding: 0 4px 0 0; +} +.tree-table-view > .column-header-background .column-header .arrow { + -fx-background-color: -color-header-fg; + -fx-padding: 3px 4px 3px 4px; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container { + -fx-padding: 2px 0 2px 0; +} +.tree-table-view > .column-header-background .column-header .sort-order-dots-container > .sort-order-dot { + -fx-background-color: -color-header-fg; + -fx-padding: 0.115em; + -fx-background-radius: 0.115em; +} +.tree-table-view > .column-header-background .column-header .sort-order { + -fx-padding: 0 0 0 2px; +} +.tree-table-view > .column-header-background > .filler { + -fx-background-color: transparent; + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; +} +.tree-table-view > .column-header-background > .show-hide-columns-button { + -fx-border-color: -color-cell-border; + -fx-border-width: 0 0 1 0; + -fx-cursor: hand; +} +.tree-table-view > .column-header-background > .show-hide-columns-button > .show-hide-column-image { + -fx-background-color: -color-header-fg; + -fx-shape: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"; + -fx-scale-shape: true; + -fx-padding: 0.4em 0.115em 0.4em 0.115em; +} +.tree-table-view .column-resize-line { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0 1 0 1; +} +.tree-table-view .column-drag-header { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .column-overlay { + -fx-background-color: -color-accent-muted; +} +.tree-table-view .placeholder > .label { + -fx-font-size: 1.25em; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell { + -fx-border-color: transparent -color-cell-border transparent transparent; +} +.tree-table-view.bordered .tree-table-row-cell > .tree-table-cell:empty { + -fx-border-color: transparent; +} +.tree-table-view.dense .tree-table-row-cell { + -fx-cell-size: 2em; +} +.tree-table-view.dense .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 0.6em 0.5em 0 0.5em; +} +.tree-table-view.striped .tree-table-row-cell { + -fx-background-insets: 0; +} +.tree-table-view.striped.bordered .tree-table-row-cell { + -fx-background-insets: 0, 0 0 1 0; +} +.tree-table-view.striped .tree-table-row-cell:filled:odd { + -fx-background-color: -color-cell-border, -color-cell-bg-odd; +} +.tree-table-view .tree-table-row-cell { + -fx-background-color: -color-cell-border, -color-cell-bg; + -fx-background-insets: 0, 0 0 1 0; + -fx-padding: 0; + -fx-cell-size: 2.8em; + -fx-indent: 1em; +} +.tree-table-view .tree-table-row-cell:empty { + -fx-background-color: transparent; + -fx-background-insets: 0; +} +.tree-table-view .tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 1em 0.5em 0 0.5em; + -fx-background-color: transparent; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell { + -fx-padding: 0 0.5em 0 0.5em; + -fx-text-fill: -color-cell-fg; + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-left { + -fx-alignment: CENTER_LEFT; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-center { + -fx-alignment: CENTER; +} +.tree-table-view .tree-table-row-cell > .tree-table-cell.table-column.align-right { + -fx-alignment: CENTER-RIGHT; +} + +.combo-box-base.date-picker > .arrow-button { + -fx-cursor: hand; +} +.combo-box-base.date-picker > .arrow-button > .arrow { + -fx-shape: "M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V10h16v11zm0-13H4V5h16v3z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-default; + -fx-padding: 0.416667em; +} + +.date-picker-popup { + -color-date-bg: -color-bg-default; + -color-date-border: -color-border-default; + -color-date-month-year-bg: -color-bg-default; + -color-date-month-year-fg: -color-fg-default; + -color-date-day-bg: -color-bg-default; + -color-date-day-bg-hover: -color-bg-subtle; + -color-date-day-bg-selected: -color-accent-emphasis; + -color-date-day-fg: -color-fg-default; + -color-date-day-fg-hover: -color-fg-default; + -color-date-day-fg-selected: -color-fg-emphasis; + -color-date-week-bg: -color-bg-default; + -color-date-week-fg: -color-accent-fg; + -color-date-today-bg: -color-accent-subtle; + -color-date-today-fg: -color-accent-fg; + -color-date-other-month-fg: -color-fg-muted; + -color-date-chrono-fg: -color-success-fg; + -fx-background-color: -color-date-border, -color-date-bg; + -fx-background-insets: 0, 1; + -fx-background-radius: 0; + -fx-alignment: CENTER; + -fx-spacing: 0; + -fx-padding: 1px; +} +.date-picker-popup > .month-year-pane { + -fx-padding: 8px 8px 8px 8px; + -fx-background-color: -color-date-month-year-bg; + -fx-background-insets: 0; +} +.date-picker-popup > .month-year-pane > .spinner { + -fx-spacing: 4px; + -fx-alignment: CENTER; + -fx-fill-height: false; + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-font-size: 1.1em; +} +.date-picker-popup > .month-year-pane > .spinner > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .spinner > .label { + -fx-alignment: CENTER; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .month-year-pane > .secondary-label { + -fx-alignment: BASELINE_CENTER; + -fx-padding: 0.5em 0 0 0; + -fx-text-fill: -color-date-month-year-fg; +} +.date-picker-popup > .calendar-grid { + -fx-background-color: -color-date-bg; + -fx-padding: 8px; +} +.date-picker-popup > .calendar-grid > .date-cell { + -fx-background-color: transparent; + -fx-padding: 0; + -fx-alignment: BASELINE_CENTER; + -fx-opacity: 1; + -fx-text-fill: -color-date-day-fg; +} +.date-picker-popup > .calendar-grid > .week-number-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-week-bg; + -fx-text-fill: -color-date-week-fg; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .day-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-background-color: -color-date-day-bg; +} +.date-picker-popup > .calendar-grid > .day-cell > .secondary-text { + -fx-fill: -color-date-chrono-fg; +} +.date-picker-popup > .calendar-grid > .day-cell:disabled { + -fx-opacity: 0.4; +} +.date-picker-popup > .calendar-grid .day-name-cell { + -fx-padding: 8px 4px 8px 4px; + -fx-font-size: 0.9em; +} +.date-picker-popup > .calendar-grid > .hijrah-day-cell { + -fx-alignment: TOP_LEFT; + -fx-padding: 0.083333em 4px 0.083333em 0.333333em; + -fx-cell-size: 2.75em; +} +.date-picker-popup > .calendar-grid > .today { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; + -fx-font-weight: bold; +} + +.inline-date-picker { + -fx-effect: none; +} +.inline-date-picker > .top-node, +.inline-date-picker > .bottom-node { + -fx-padding: 8px 16px 8px 16px; +} +.inline-date-picker > .month-year-pane { + -fx-padding: 8px 16px 8px 16px; + -fx-alignment: CENTER_LEFT; + -fx-spacing: 6px; +} +.inline-date-picker > .month-year-pane > .button { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-cursor: hand; +} +.inline-date-picker > .month-year-pane > .back-button { + -fx-padding: 0 1em 0 0; +} +.inline-date-picker > .month-year-pane > .back-button > .left-arrow { + -fx-shape: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .forward-button > .right-arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-date-month-year-fg; +} +.inline-date-picker > .month-year-pane > .label { + -fx-text-fill: -color-date-month-year-fg; + -fx-font-size: 1.1em; +} +.inline-date-picker:disabled > .calendar-grid { + -fx-opacity: 0.4; +} +.inline-date-picker:disabled > .calendar-grid > .day-cell:disabled { + -fx-opacity: 1; +} + +.date-picker-popup > .calendar-grid > .selected, +.date-picker-popup > .calendar-grid > .selected > .secondary-text, +.date-picker-popup > .calendar-grid > .previous-month.selected, +.date-picker-popup > .calendar-grid > .previous-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.today.selected, +.date-picker-popup > .calendar-grid > .next-month.selected { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; + -fx-font-weight: normal; +} + +.date-picker-popup > .calendar-grid > .day-cell:hover { + -fx-background-color: -color-date-day-bg-hover; +} + +.date-picker-popup > .calendar-grid > .today:hover { + -fx-background-color: -color-date-today-bg; + -fx-text-fill: -color-date-today-fg; +} + +.date-picker-popup > .calendar-grid > .selected:hover { + -fx-background-color: -color-date-day-bg-selected; + -fx-text-fill: -color-date-day-fg-selected; + -fx-fill: -color-date-day-fg-selected; +} + +.date-picker-popup > .calendar-grid > .previous-month, +.date-picker-popup > .calendar-grid > .next-month, +.date-picker-popup > .calendar-grid > .previous-month.today, +.date-picker-popup > .calendar-grid > .next-month.today, +.date-picker-popup > .calendar-grid > .previous-month > .secondary-text, +.date-picker-popup > .calendar-grid > .next-month > .secondary-text { + -fx-text-fill: -color-date-other-month-fg; + -fx-fill: -color-date-other-month-fg; + -fx-font-weight: normal; +} + +.dialog-pane { + -fx-background-color: -color-bg-default; + -fx-padding: 0; + -fx-max-width: 600px; +} +.dialog-pane > .expandable-content { + -fx-padding: 1em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container { + -fx-padding: 2em 1em 1em 1em; +} +.dialog-pane > .button-bar > .container > .details-button { + -fx-padding: 0; + -fx-alignment: BASELINE_LEFT; + -fx-focus-traversable: false; + -fx-text-fill: -color-fg-default; +} +.dialog-pane > .button-bar > .container > .details-button:hover { + -fx-underline: true; +} +.dialog-pane > .content { + -fx-padding: 1em 1em 0 1em; +} +.dialog-pane > .content.label { + -fx-alignment: TOP_LEFT; +} +.dialog-pane:header > .header-panel { + -fx-padding: 1em 1em 1em 1em; + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.dialog-pane:header > .header-panel > .label { + -fx-wrap-text: true; +} +.dialog-pane:header > .header-panel > .graphic-container { + -fx-padding: 0 0 0 1em; +} +.dialog-pane:no-header > .content { + -fx-padding: 1em 1em 0 0; +} +.dialog-pane:no-header > * > .graphic-container { + -fx-padding: 1em 1em 0 1em; +} +.dialog-pane.information > .header-panel { + -fx-background-color: -color-accent-fg, -color-bg-subtle; +} +.dialog-pane.information > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.warning > .header-panel { + -fx-background-color: -color-warning-fg, -color-bg-subtle; +} +.dialog-pane.warning > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} +.dialog-pane.error > .header-panel { + -fx-background-color: -color-danger-fg, -color-bg-subtle; +} +.dialog-pane.error > .header-panel > .label { + -fx-text-fill: -color-fg-default; +} + +.alert.information.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.warning.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.error.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.alert.confirmation.dialog-pane, +.text-input-dialog.dialog-pane, +.choice-dialog.dialog-pane { + -fx-graphic: url("data:image/png;base64,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"); +} + +.html-editor { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-padding: 2px; +} +.html-editor:contains-focus { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.html-editor .tool-bar { + -fx-padding: 4px; +} +.html-editor .button, +.html-editor .toggle-button { + -fx-background-insets: 0; +} +.html-editor .toggle-button { + -color-button-bg-selected: -color-base-1; + -color-button-border-focused: transparent; +} + +.color-picker.html-editor-foreground { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-background { + -fx-color-rect-x: 0; + -fx-color-rect-y: -4px; + -fx-color-rect-width: 8px; + -fx-color-rect-height: 8px; + -fx-color-label-visible: false; +} +.color-picker.html-editor-foreground > .color-picker-label > .picker-color > .picker-color-rect, .color-picker.html-editor-background > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: none; +} + +.color-picker.html-editor-foreground { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Text-Color.png"); +} + +.color-picker.html-editor-background { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Background-Color.png"); +} + +.html-editor-cut { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Cut.png"); +} + +.html-editor-copy { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Copy.png"); +} + +.html-editor-paste { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Paste.png"); +} + +.html-editor-align-left { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Left.png"); +} + +.html-editor-align-center { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Center.png"); +} + +.html-editor-align-right { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Right.png"); +} + +.html-editor-align-justify { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Justify.png"); +} + +.html-editor-outdent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent.png"); +} + +.html-editor-outdent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Outdent-rtl.png"); +} + +.html-editor-indent { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent.png"); +} + +.html-editor-indent:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Indent-rtl.png"); +} + +.html-editor-bullets { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets.png"); +} + +.html-editor-bullets:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bullets-rtl.png"); +} + +.html-editor-numbers { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered.png"); +} + +.html-editor-numbers:dir(rtl) { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Numbered-rtl.png"); +} + +.html-editor-bold { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Bold.png"); +} + +.html-editor-italic { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Italic.png"); +} + +.html-editor-underline { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Underline.png"); +} + +.html-editor-strike { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Strikethrough.png"); +} + +.html-editor-hr { + -fx-graphic: url("/com/sun/javafx/scene/control/skin/modena/HTMLEditor-Break.png"); +} + +.hyperlink { + -color-link-fg: -color-accent-fg; + -color-link-fg-visited: -color-fg-default; + -color-link-fg-armed: -color-fg-default; + -fx-cursor: hand; + -fx-underline: true; + -fx-text-fill: -color-link-fg; +} +.hyperlink:visited { + -fx-text-fill: -color-link-fg-visited; +} +.hyperlink:armed { + -fx-text-fill: -color-link-fg-armed; + -fx-underline: false; +} +.hyperlink:disabled { + -fx-opacity: 0.4; +} +.hyperlink:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-fill; +} + +.label { + -fx-text-fill: -color-fg-default; +} +.label:disabled { + -fx-opacity: 0.4; +} +.label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0 0 0 0, 0 0 1 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.menu-bar > .container > .menu-button { + -fx-background-color: transparent; + -fx-background-insets: 0 0 1px 0; + -fx-background-radius: 0; + -fx-padding: 8px 12px 8px 12px; +} +.menu-bar > .container > .menu-button > .label { + -fx-padding: 0; + -fx-text-fill: -color-fg-default; +} +.menu-bar > .container > .menu-button > .arrow-button { + -fx-padding: 0; +} +.menu-bar > .container > .menu-button > .arrow-button > .arrow { + -fx-padding: 0; + -fx-background-color: transparent; +} +.menu-bar > .container > .menu-button:hover, .menu-bar > .container > .menu-button:focused, .menu-bar > .container > .menu-button:showing { + -fx-background-color: -color-base-1, -color-base-1; +} + +.menu { + -fx-background-color: transparent; +} +.menu > .right-container > .arrow { + -fx-shape: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-muted; +} + +.menu-up-arrow { + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-down-arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-padding: 3px 4px 3px 4px; +} + +.menu-item { + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; +} +.menu-item > .graphic-container { + -fx-padding: 0 6px 0 0; +} +.menu-item > .label { + -fx-padding: 0 1em 0 0; + -fx-text-fill: -color-fg-default; +} +.menu-item > .left-container { + -fx-padding: 0 1em 0 0; +} +.menu-item > .right-container { + -fx-padding: 0 0 0 0.5em; +} +.menu-item:focused { + -fx-background-color: -color-base-1, -color-base-1; +} +.menu-item:disabled { + -fx-opacity: 0.4; + -fx-background-color: -color-bg-default; +} + +.radio-menu-item:checked > .left-container > .radio, +.check-menu-item:checked > .left-container > .check { + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; + -fx-background-color: -color-fg-muted; + -fx-min-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-height: 0.75em; + -fx-max-width: 0.75em; +} + +.caption-menu-item { + -fx-padding: 8px 12px 8px 12px; +} +.caption-menu-item:hover, .caption-menu-item:focused, .caption-menu-item:pressed { + -fx-background-color: transparent; +} +.caption-menu-item > .label > .text { + -fx-font-weight: bold; +} + +.context-menu { + -fx-background-color: -color-border-muted, -color-bg-default; + -fx-background-insets: 0, 1; + -fx-padding: 2px 2px 2px 2px; + -fx-background-radius: 4px; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); +} +.context-menu > .scroll-arrow { + -fx-padding: 0.5em; + -fx-background-color: transparent; +} +.context-menu > .scroll-arrow:hover { + -fx-background-color: -color-base-1; + -fx-text-fill: -color-fg-default; +} +.context-menu .separator:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.context-menu .separator:horizontal .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0.5em 0 0.5em; +} + +.context-menu:show-mnemonics > .mnemonic-underline, +.menu:show-mnemonics > .mnemonic-underline, +.menu-bar:show-mnemonics > .mnemonic-underline, +.menu-item > .label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.menu-button, +.split-menu-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-1; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 0; + -fx-alignment: CENTER_LEFT; +} +.menu-button .font-icon, .menu-button .ikonli-font-icon, +.split-menu-button .font-icon, +.split-menu-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.menu-button:disabled, +.split-menu-button:disabled { + -fx-opacity: 0.4; +} +.menu-button:show-mnemonics > .mnemonic-underline, +.split-menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 8px; +} +.menu-button.button-icon > .text, +.split-menu-button.button-icon > .text { + visibility: hidden; +} +.menu-button.button-circle, +.split-menu-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.menu-button.button-circle .text, +.split-menu-button.button-circle .text { + visibility: hidden; +} +.menu-button.left-pill, +.split-menu-button.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.menu-button.left-pill:hover, .menu-button.left-pill:focused, +.split-menu-button.left-pill:hover, +.split-menu-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.center-pill, +.split-menu-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.menu-button.center-pill:hover, .menu-button.center-pill:focused, +.split-menu-button.center-pill:hover, +.split-menu-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button.right-pill, +.split-menu-button.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.menu-button.right-pill:hover, .menu-button.right-pill:focused, +.split-menu-button.right-pill:hover, +.split-menu-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.menu-button > .label, +.split-menu-button > .label { + -fx-padding: 8px 12px 8px 12px; + -fx-text-fill: -color-button-fg; +} +.menu-button > .arrow-button, +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 0; +} +.menu-button > .arrow-button > .arrow, +.split-menu-button > .arrow-button > .arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-button-fg; + -fx-min-width: 0.5em; +} +.menu-button:openvertically > .arrow-button > .arrow, +.split-menu-button:openvertically > .arrow-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.menu-button:show-mnemonics > .label > .mnemonic-underline, +.split-menu-button:show-mnemonics > .label > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.menu-button.button-icon, +.split-menu-button.button-icon { + -fx-padding: 0; +} +.menu-button:hover, +.split-menu-button:hover { + -fx-background-color: -color-button-border-hover, -color-button-bg-hover; + -fx-opacity: 0.9; +} +.menu-button:hover > .label, +.split-menu-button:hover > .label { + -fx-text-fill: -color-button-fg-hover; +} +.menu-button:hover > .arrow-button > .arrow, +.split-menu-button:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-hover; +} +.menu-button:hover .font-icon, .menu-button:hover .ikonli-font-icon, +.split-menu-button:hover .font-icon, +.split-menu-button:hover .ikonli-font-icon { + -fx-icon-color: -color-button-fg-hover; + -fx-fill: -color-button-fg-hover; +} +.menu-button:focused, +.split-menu-button:focused { + -fx-background-color: -color-button-border-focused, -color-button-bg-focused; +} +.menu-button:focused > .label, +.split-menu-button:focused > .label { + -fx-text-fill: -color-button-fg-focused; +} +.menu-button:focused > .arrow-button > .arrow, +.split-menu-button:focused > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-focused; +} +.menu-button:focused .font-icon, .menu-button:focused .ikonli-font-icon, +.split-menu-button:focused .font-icon, +.split-menu-button:focused .ikonli-font-icon { + -fx-icon-color: -color-button-fg-focused; + -fx-fill: -color-button-fg-focused; +} +.menu-button:armed, .menu-button:focused:armed, +.split-menu-button:armed, +.split-menu-button:focused:armed { + -fx-background-color: -color-button-border-pressed, -color-button-bg-pressed; + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .label, .menu-button:focused:armed > .label, +.split-menu-button:armed > .label, +.split-menu-button:focused:armed > .label { + -fx-text-fill: -color-button-fg-pressed; +} +.menu-button:armed > .arrow-button > .arrow, .menu-button:focused:armed > .arrow-button > .arrow, +.split-menu-button:armed > .arrow-button > .arrow, +.split-menu-button:focused:armed > .arrow-button > .arrow { + -fx-background-color: -color-button-fg-pressed; +} +.menu-button:armed .font-icon, .menu-button:armed .ikonli-font-icon, .menu-button:focused:armed .font-icon, .menu-button:focused:armed .ikonli-font-icon, +.split-menu-button:armed .font-icon, +.split-menu-button:armed .ikonli-font-icon, +.split-menu-button:focused:armed .font-icon, +.split-menu-button:focused:armed .ikonli-font-icon { + -fx-icon-color: -color-button-fg-pressed; + -fx-fill: -color-button-fg-pressed; +} +.menu-button.accent, +.split-menu-button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.accent.button-outlined, +.split-menu-button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.accent.flat, +.split-menu-button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.menu-button.success, +.split-menu-button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-5; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.success.button-outlined, +.split-menu-button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.success.flat, +.split-menu-button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.menu-button.danger, +.split-menu-button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.danger.button-outlined, +.split-menu-button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.danger.flat, +.split-menu-button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.menu-button.flat, +.split-menu-button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} + +.menu-button.no-arrow > .arrow-button { + -fx-padding: 0; +} +.menu-button.no-arrow > .arrow-button > .arrow { + -fx-shape: none; + -fx-scale-shape: false; + -fx-min-width: -1; +} + +.split-menu-button > .label { + -fx-padding: 8px 6px 8px 12px; +} +.split-menu-button:hover > .arrow-button, .split-menu-button:focused:hover > .arrow-button { + -fx-background-color: -color-neutral-emphasis-plus; + -fx-background-insets: 1px; + -fx-background-radius: 4px; + -fx-border-color: transparent; + -fx-opacity: 0.75; +} +.split-menu-button:hover > .arrow-button > .arrow, .split-menu-button:focused:hover > .arrow-button > .arrow { + -fx-background-color: -color-fg-emphasis; + -fx-opacity: 1; +} +.split-menu-button:default:hover > .arrow-button, .split-menu-button.accent:hover > .arrow-button, .split-menu-button.success:hover > .arrow-button, .split-menu-button.danger:hover > .arrow-button { + -fx-background-color: -color-fg-emphasis; +} +.split-menu-button:default:hover > .arrow-button > .arrow, .split-menu-button.accent:hover > .arrow-button > .arrow, .split-menu-button.success:hover > .arrow-button > .arrow, .split-menu-button.danger:hover > .arrow-button > .arrow { + -fx-background-color: -color-button-bg-hover; +} +.split-menu-button.button-outlined:hover > .arrow-button, .split-menu-button.button-outlined:focused > .arrow-button { + -color-button-fg: -color-fg-emphasis; +} +.split-menu-button > .arrow-button { + -fx-padding: 8px 12px 8px 12px; + -fx-background-radius: 0 4px 4px 0; + -fx-border-color: -color-button-fg; + -fx-border-width: 0 0 0 0.75px; + -fx-border-insets: 7px 0 7px 0; +} + +.pagination { + -fx-padding: 0; + -fx-arrow-button-gap: 4; + -fx-arrows-visible: true; + -fx-tooltip-visible: false; + -fx-page-information-visible: true; + -fx-page-information-alignment: bottom; +} +.pagination > .page { + -fx-background-color: transparent; +} +.pagination > .pagination-control { + -fx-background-color: transparent; + -fx-font-size: 1em; +} +.pagination > .pagination-control > .control-box { + -fx-padding: 2em 0 0 0; + -fx-spacing: 2; + -fx-alignment: CENTER; +} +.pagination > .pagination-control > .control-box .number-button { + -fx-padding: 0; +} +.pagination > .pagination-control > .control-box > .left-arrow-button > .left-arrow { + -fx-shape: "M14 7l-5 5 5 5V7z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .control-box > .right-arrow-button > .right-arrow { + -fx-shape: "M10 17l5-5-5-5v10z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.pagination > .pagination-control > .page-information { + -fx-padding: 0.5em 0 0 0; +} +.pagination.bullet > .pagination-control > .control-box { + -fx-spacing: 0; +} +.pagination.bullet > .pagination-control > .control-box > .left-arrow-button { + -fx-background-radius: 10em; + -fx-padding: 0 0.25em 0 0.083em; +} +.pagination.bullet > .pagination-control > .control-box > .right-arrow-button { + -fx-background-radius: 10em; + -fx-padding: 0 0.083em 0 0.25em; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button { + -fx-background-radius: 0, 10em, 10em; + -fx-background-color: transparent, -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 5, 6; +} +.pagination.bullet > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: transparent, -color-accent-emphasis; +} + +.popover { + -fx-background-color: -color-bg-overlay; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); +} +.popover > .border { + -fx-stroke: -color-border-default; + -fx-stroke-width: 1px; +} +.popover > .content { + -fx-padding: 10px 10px 10px 10px; +} +.popover > .content > .title { + -fx-padding: 0 0 1em 0; +} +.popover > .content > .title > .text { + -fx-text-fill: -color-fg-default; + -fx-font-size: 1.25em; + -fx-alignment: CENTER_LEFT; +} +.popover > .content > .title > .icon > .graphics > .circle { + -fx-fill: transparent; +} +.popover > .content > .title > .icon > .graphics > .line { + -fx-stroke: -color-fg-default; + -fx-stroke-width: 1px; +} + +.progress-bar { + -color-progress-bar-track: -color-bg-subtle; + -color-progress-bar-fill: -color-accent-emphasis; + -fx-indeterminate-bar-length: 60; + -fx-indeterminate-bar-escape: true; + -fx-indeterminate-bar-flip: true; + -fx-indeterminate-bar-animation-time: 2; +} +.progress-bar > .track { + -fx-background-color: -color-progress-bar-track; + -fx-background-insets: 0; + -fx-background-radius: 4px; +} +.progress-bar > .bar { + -fx-background-color: -color-progress-bar-fill; + -fx-background-insets: 0; + -fx-background-radius: 4px; + -fx-padding: 0.4em; +} +.progress-bar.small > .bar { + -fx-padding: 2px; +} +.progress-bar.medium > .bar { + -fx-padding: 0.4em; +} +.progress-bar.large > .bar { + -fx-padding: 0.8em; +} +.progress-bar:disabled { + -fx-opacity: 0.4; +} + +.progress-indicator { + -fx-indeterminate-segment-count: 12; + -fx-spin-enabled: true; +} +.progress-indicator > .determinate-indicator > .indicator { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-background-insets: 0, 1; +} +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: -color-accent-emphasis; + -fx-padding: 0.6em; +} +.progress-indicator > .determinate-indicator > .tick { + -fx-background-color: -color-fg-emphasis; + -fx-background-insets: 0; + -fx-shape: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"; + -fx-scale-shape: true; +} +.progress-indicator > .determinate-indicator > .percentage { + -fx-font-size: 0.8em; + -fx-fill: -color-fg-default; +} +.progress-indicator > .determinate-indicator:disabled { + -fx-opacity: 0.4; +} +.progress-indicator:indeterminate > .spinner { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-border-color: transparent; + -fx-border-width: 0; + -fx-border-radius: 0; + -fx-padding: 0; +} +.progress-indicator:indeterminate .segment { + -fx-background-color: -color-accent-emphasis; +} +.progress-indicator:indeterminate .segment0 { + -fx-shape: "M41.98 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment1 { + -fx-shape: "M33.75 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment2 { + -fx-shape: "M22.49 3.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment3 { + -fx-shape: "M11.24 6.51 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment4 { + -fx-shape: "M3.01 14.74 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment5 { + -fx-shape: "M0.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment6 { + -fx-shape: "M3.01 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment7 { + -fx-shape: "M11.25 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment8 { + -fx-shape: "M22.5 48.5 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment9 { + -fx-shape: "M33.75 45.48 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment10 { + -fx-shape: "M41.98 37.25 a3.5,3.5 0 1,1 0,1 Z"; +} +.progress-indicator:indeterminate .segment11 { + -fx-shape: "M45.0 26.0 a3.5,3.5 0 1,1 0,1 Z"; +} + +.radio-button { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-label-padding: 2px 2px 0 6px; +} +.radio-button > .radio { + -fx-background-color: -color-fg-default, -color-bg-default; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-padding: 3px; + -fx-alignment: CENTER; +} +.radio-button > .radio > .dot { + -fx-background-color: transparent, transparent; + -fx-background-insets: 0, 1px; + -fx-background-radius: 1em; + -fx-min-height: 0.75em; + -fx-max-height: 0.75em; + -fx-min-width: 0.75em; + -fx-max-width: 0.75em; +} +.radio-button:disabled { + -fx-opacity: 0.4; +} +.radio-button:disabled > .radio { + -fx-opacity: 0.4; +} +.radio-button:selected > .radio { + -fx-background-color: -color-accent-emphasis; +} +.radio-button:selected > .radio > .dot { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; +} +.radio-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.scroll-bar { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-bar > .thumb { + -fx-background-color: -color-fg-muted; + -fx-background-radius: 4px; +} +.scroll-bar > .track { + -fx-background-color: transparent; + -fx-border-radius: 0; +} +.scroll-bar > .increment-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .increment-button > .increment-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar > .decrement-button { + visibility: hidden; + -fx-managed: false; +} +.scroll-bar > .decrement-button > .decrement-arrow { + -fx-shape: " "; + -fx-padding: 0; +} +.scroll-bar:horizontal { + -fx-pref-height: 8px; +} +.scroll-bar:vertical { + -fx-pref-width: 8px; +} +.scroll-bar:hover, .scroll-bar:pressed, .scroll-bar:focused { + -fx-opacity: 1; +} + +.scroll-pane { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0; +} +.scroll-pane > .viewport { + -fx-background-color: transparent; +} +.scroll-pane > .corner { + -fx-background-color: -color-border-subtle; + -fx-opacity: 0.5; +} +.scroll-pane:disabled > .scroll-bar { + -fx-opacity: 0.25; +} + +.separator:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator:horizontal > .line { + -fx-border-color: -color-border-muted transparent transparent transparent; + -fx-border-insets: 1px 0 0 0; +} +.separator:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator:vertical > .line { + -fx-border-color: transparent transparent transparent -color-border-muted; + -fx-border-insets: 0 0 0 1px; +} +.separator.small:horizontal { + -fx-padding: 0.25em 0 0.25em 0; +} +.separator.small:vertical { + -fx-padding: 0 0.25em 0 0.25em; +} +.separator.medium:horizontal { + -fx-padding: 0.75em 0 0.75em 0; +} +.separator.medium:vertical { + -fx-padding: 0 0.75em 0 0.75em; +} +.separator.large:horizontal { + -fx-padding: 1.5em 0 1.5em 0; +} +.separator.large:vertical { + -fx-padding: 0 1.5em 0 1.5em; +} + +.slider { + -color-slider-thumb: -color-accent-emphasis; + -color-slider-thumb-border: -color-accent-emphasis; + -color-slider-track: -color-border-muted; + -color-slider-track-progress: -color-accent-emphasis; + -color-slider-tick: -color-fg-muted; +} +.slider.large { + -color-slider-thumb: -color-fg-emphasis; + -color-slider-thumb-border: -color-accent-emphasis; +} +.slider > .thumb { + -fx-background-color: -color-slider-thumb-border, -color-slider-thumb; + -fx-background-insets: 0, 2px; + -fx-background-radius: 10em; +} +.slider > .track { + -fx-background-color: transparent, -color-slider-track; + -fx-background-radius: 4px; +} +.slider > .progress { + -fx-background-color: transparent, -color-slider-track-progress; +} +.slider > .axis { + -fx-tick-label-fill: -color-slider-tick; + -fx-tick-length: 5px; + -fx-minor-tick-length: 3px; +} +.slider > .axis > .axis-tick-mark, +.slider > .axis > .axis-minor-tick-mark { + -fx-stroke: -color-slider-tick; +} +.slider:disabled { + -fx-opacity: 0.4; +} +.slider:horizontal > .thumb { + -fx-padding: 10px 10px 10px 10px; +} +.slider:horizontal > .track { + -fx-padding: 10px 0 10px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider:horizontal > .progress { + -fx-background-radius: 4px; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .thumb { + -fx-padding: 8px 8px 8px 8px; +} +.slider.small:horizontal > .track { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.small:horizontal > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 6px 0 6px 0; +} +.slider.large:horizontal > .thumb { + -fx-padding: 12px 12px 12px; +} +.slider.large:horizontal > .track { + -fx-padding: 12px 0 12px 0; + -fx-background-insets: 0, 0px 0 0px 0; +} +.slider.large:horizontal > .progress { + -fx-padding: 12px 0 12px 0; + -fx-background-insets: 0, 0px 0 0px 0; +} +.slider:vertical > .thumb { + -fx-padding: 10px 10px 10px 10px; +} +.slider:vertical > .track { + -fx-padding: 0 10px 0 10px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider:vertical > .progress { + -fx-background-radius: 10em 10em 4px 4px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .thumb { + -fx-padding: 8px 8px 8px 8px; +} +.slider.small:vertical > .track { + -fx-padding: 0 8px 0 8px; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.small:vertical > .progress { + -fx-padding: 8px 0 8px 0; + -fx-background-insets: 0, 0 6px 0 6px; +} +.slider.large:vertical > .thumb { + -fx-padding: 12px 12px 12px 12px; +} +.slider.large:vertical > .track { + -fx-padding: 0 12px 0 12px; + -fx-background-insets: 0, 0 0px 0 0px; +} +.slider.large:vertical > .progress { + -fx-padding: 0 12px 0 12px; + -fx-background-insets: 0, 0 0px 0 0px; +} + +.spinner { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default; + -fx-border-radius: 4px; + -fx-border-width: 1px; +} +.spinner > .text-field { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0; + -fx-padding: 7px 11px 7px 11px; +} +.spinner > .increment-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: 0; + -fx-background-radius: 0 4px 0 0; + -fx-padding: 10px; +} +.spinner > .increment-arrow-button:hover { + -fx-background-color: -color-base-2; +} +.spinner > .increment-arrow-button > .increment-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 14l5-5 5 5z"; + -fx-scale-shape: false; +} +.spinner > .decrement-arrow-button { + -fx-background-color: -color-bg-subtle; + -fx-background-insets: -1 0 0 0; + -fx-background-radius: 0 0 4px 0; + -fx-padding: 10px; +} +.spinner > .decrement-arrow-button:hover { + -fx-background-color: -color-base-2; +} +.spinner > .decrement-arrow-button > .decrement-arrow { + -fx-background-color: -color-fg-default; + -fx-background-insets: 0; + -fx-padding: 0 0.25em 0 0.25em; + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; +} +.spinner:disabled { + -fx-opacity: 0.4; +} +.spinner:focused:focused, .spinner:contains-focus:focused { + -fx-border-color: -color-accent-emphasis; +} +.spinner.arrows-on-left-vertical > .text-field { + -fx-background-radius: 0 4px 4px 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-vertical > .increment-arrow-button { + -fx-background-radius: 4px 0 0 0; +} +.spinner.arrows-on-left-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 0 4px; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-right-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .text-field { + -fx-background-radius: 0 4px 4px 0; + -fx-alignment: CENTER_RIGHT; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button { + -fx-background-radius: 0; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0; +} +.spinner.arrows-on-left-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-horizontal > .increment-arrow-button { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0 -1 0 0; +} +.spinner.split-arrows-horizontal > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0; +} +.spinner.split-arrows-horizontal > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; +} +.spinner.split-arrows-vertical > .text-field { + -fx-background-radius: 0; + -fx-alignment: CENTER; +} +.spinner.split-arrows-vertical > .increment-arrow-button { + -fx-background-radius: 4px 4px 0 0; + -fx-background-insets: 0; +} +.spinner.split-arrows-vertical > .increment-arrow-button > .increment-arrow { + -fx-shape: "M 18,12.857142 H 12.857142 V 18 H 11.142858 V 12.857142 H 6 v -1.714284 h 5.142858 V 6 h 1.714284 v 5.142858 H 18 Z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button { + -fx-background-radius: 0 0 4px 4px; + -fx-background-insets: 0 0 -1 0; +} +.spinner.split-arrows-vertical > .decrement-arrow-button > .decrement-arrow { + -fx-shape: "M 17,13 H 7 v -2 h 10 z"; + -fx-scale-shape: false; + -fx-padding: 0.25em 0 0.25em 0; +} + +.split-pane { + -color-split-divider: -color-border-subtle; + -color-split-divider-pressed: -color-accent-emphasis; + -color-split-grabber: -color-fg-muted; + -color-split-grabber-pressed: -color-accent-emphasis; + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-padding: 0; +} +.split-pane > .split-pane-divider { + -fx-background-color: -color-split-divider; + -fx-padding: 0 2px 0 2px; + -fx-opacity: 0.5; +} +.split-pane > .split-pane-divider > .horizontal-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 10px 2px 10px 2px; +} +.split-pane > .split-pane-divider > .vertical-grabber { + -fx-background-color: -color-split-grabber; + -fx-padding: 2px 10px 2px 10px; +} +.split-pane > .split-pane-divider:pressed { + -fx-background-color: -color-split-divider-pressed; +} +.split-pane > .split-pane-divider:pressed > .horizontal-grabber, +.split-pane > .split-pane-divider:pressed > .vertical-grabber { + -fx-background-color: -color-split-grabber-pressed; +} +.split-pane > .split-pane-divider:hover { + -fx-opacity: 1; +} +.split-pane > .split-pane-divider:disabled { + -fx-opacity: 0.25; +} + +.tab-pane > .tab-header-area { + -fx-background-insets: 0; + -fx-background-color: -color-bg-default; + -fx-alignment: CENTER; +} +.tab-pane > .tab-header-area > .tab-header-background { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0 0 0 0, 0 0 2px 0; + -fx-background-color: transparent, transparent; + -fx-padding: 0.3em 0.6em 0.3em 0.6em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-alignment: CENTER; + -fx-text-fill: -color-fg-default; + -fx-padding: 0.4em 0.4em 0.4em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; + -fx-shape: "M 0,0 H1 L 4,3 7,0 H8 V1 L 5,4 8,7 V8 H7 L 4,5 1,8 H0 V7 L 3,4 0,1 Z"; + -fx-scale-shape: false; +} +.tab-pane > .tab-header-area > .headers-region > .tab:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected { + -fx-background-color: -color-accent-emphasis, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label { + -fx-fill: -color-fg-default; + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-label > *, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-label > * { + -fx-fill: -color-fg-default; + -fx-icon-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:top:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:bottom:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled { + -fx-background-color: -color-border-default, -color-bg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:disabled > .tab-container { + -fx-opacity: 0.4; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right > .tab-container > .tab-label { + -fx-padding: 0.2em 0.4em 0.2em 0.4em; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover { + -fx-background-color: -color-border-default, -color-bg-subtle; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:hover > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:hover > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected { + -fx-background-color: -color-border-default, -color-base-1; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-label, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-label { + -fx-text-fill: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:selected > .tab-container > .tab-close-button, .tab-pane > .tab-header-area > .headers-region > .tab:right:selected > .tab-container > .tab-close-button { + -fx-background-color: -color-fg-default; +} +.tab-pane > .tab-header-area > .headers-region > .tab:left:disabled, .tab-pane > .tab-header-area > .headers-region > .tab:right:disabled { + -fx-background-color: transparent; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button { + -fx-padding: 1em; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button:disabled { + -fx-opacity: 0.4; +} +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button > .arrow { + -fx-shape: "M7 10l5 5 5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tab-pane.floating > .tab-header-area { + -fx-background-color: -color-border-default, -color-bg-inset; + -fx-background-insets: 0, 0 0 1px 0; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab { + -fx-background-insets: 0; + -fx-background-color: transparent; + -fx-padding: 0.3em 0 0.3em 3px; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 4px; + -fx-border-radius: 4px; + -fx-border-width: 1px, 0 3px 0 0; + -fx-border-color: transparent, transparent; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-padding: 0.55em 0.55em 0.55em 0.55em; + -fx-min-width: 150px; + -fx-pref-width: 150px; + -fx-alignment: CENTER_LEFT; +} +.tab-pane.floating > .tab-header-area > .headers-region > .tab:hover > .tab-container, .tab-pane.floating > .tab-header-area > .headers-region > .tab:selected > .tab-container { + -fx-background-color: -color-bg-default; + -fx-border-color: -color-border-default, transparent; +} + +.text-input { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-fg-default; + -color-input-border: -color-border-default; + -color-input-bg-focused: -color-bg-default; + -color-input-border-focused: -color-accent-emphasis; + -color-input-bg-highlight: -color-accent-subtle; + -color-input-fg-highlight: -color-fg-default; + -fx-background-color: -color-input-border, -color-input-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-text-fill: -color-input-fg; + -fx-highlight-fill: -color-input-bg-highlight; + -fx-highlight-text-fill: -color-input-fg-highlight; + -fx-prompt-text-fill: -color-fg-subtle; + -fx-padding: 8px 12px 8px 12px; + -fx-cursor: text; +} +.text-input:focused { + -fx-background-color: -color-input-border-focused, -color-input-bg-focused; + -fx-prompt-text-fill: transparent; +} +.text-input:disabled { + -fx-opacity: 0.4; +} +.text-input:disabled > .scroll-pane { + -fx-opacity: 1; +} +.text-input:success { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-success-fg; + -color-input-border: -color-success-emphasis; + -color-input-border-focused: -color-success-emphasis; +} +.text-input:danger { + -color-input-bg: -color-bg-default; + -color-input-fg: -color-danger-fg; + -color-input-border: -color-danger-emphasis; + -color-input-border-focused: -color-danger-emphasis; +} +.text-input.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.text-input.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.text-input.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.text-input.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.text-input.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.text-field.small { + -fx-padding: 5.7142857143px 8.5714285714px 5.7142857143px 8.5714285714px; + -fx-font-size: 0.8em; +} +.text-field.large { + -fx-padding: 11.2px 16.8px 11.2px 16.8px; + -fx-font-size: 1.25em; +} +.text-field.rounded { + -fx-background-radius: 10em; +} + +.text-area { + -fx-padding: 2px; + -fx-cursor: default; +} +.text-area .content { + -fx-cursor: text; + -fx-padding: 8px 12px 8px 12px; +} + +.password-field { + -fx-text-fill: -color-fg-muted; +} + +.titled-pane { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-effect: none; +} +.titled-pane.elevated-1 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 2px, 0.5, 0, 2); +} +.titled-pane.elevated-2 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane.elevated-3 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 16px, 0.5, 0, 2); +} +.titled-pane.elevated-4 { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 20px, 0.5, 0, 2); +} +.titled-pane > .title { + -fx-background-color: -color-border-default, -color-bg-default; + -fx-padding: 10px 20px 10px 20px; +} +.titled-pane > .title > .text { + -fx-font-size: 1.25em; +} +.titled-pane > .title > .arrow-button { + -fx-background-color: none; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0 10px 0 0; +} +.titled-pane > .title > .arrow-button > .arrow { + -fx-shape: "M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; + -fx-padding: 4px 5px 4px 5px; +} +.titled-pane > .content { + -fx-border-color: -color-border-default; + -fx-border-width: 0 1px 1px 1px; + -fx-border-radius: 0 0 4px 4px; + -fx-background-radius: 0 0 4px 4px; + -fx-background-color: -color-bg-default; + -fx-padding: 20px 20px 10px 20px; + -fx-alignment: TOP_LEFT; +} +.titled-pane:disabled > .title > *, +.titled-pane:disabled > .content > * { + -fx-opacity: 0.4; +} +.titled-pane:expanded > .title { + -fx-background-radius: 4px 4px 0 0; + -fx-background-insets: 0, 1px 1px 0 1px; +} +.titled-pane:collapsed > .title { + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; +} +.titled-pane.interactive:hover { + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 8px, 0.5, 0, 2); +} +.titled-pane:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-fg-default; +} + +.toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-1; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -color-button-bg-selected: -color-accent-emphasis; + -color-button-fg-selected: -color-fg-emphasis; + -fx-padding: 8px 12px 8px 12px; +} +.toggle-button .font-icon, .toggle-button .ikonli-font-icon { + -fx-icon-color: -color-button-fg; + -fx-fill: -color-button-fg; +} +.toggle-button:disabled { + -fx-opacity: 0.4; +} +.toggle-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -color-button-fg; +} +.toggle-button.button-icon { + -fx-padding: 8px; +} +.toggle-button.button-icon > .text { + visibility: hidden; +} +.toggle-button.button-circle { + -fx-background-radius: 50; + -fx-padding: 6px 8px 6px 8px; +} +.toggle-button.button-circle .text { + visibility: hidden; +} +.toggle-button.left-pill { + -fx-background-radius: 4px 0 0 4px; + -fx-background-insets: 0, 1px 0 1px 1px; +} +.toggle-button.left-pill:hover, .toggle-button.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.center-pill { + -fx-background-radius: 0; + -fx-background-insets: 0, 1px 0 1px 0; +} +.toggle-button.center-pill:hover, .toggle-button.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button.right-pill { + -fx-background-radius: 0 4px 4px 0; + -fx-background-insets: 0, 1px 1px 1px 0; +} +.toggle-button.right-pill:hover, .toggle-button.right-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected, .toggle-button:selected:focused { + -fx-background-color: -color-button-bg-selected; + -fx-text-fill: -color-button-fg-selected; + -fx-background-insets: 0; +} +.toggle-button:selected .font-icon, .toggle-button:selected .ikonli-font-icon, .toggle-button:selected:focused .font-icon, .toggle-button:selected:focused .ikonli-font-icon { + -fx-fill: -color-button-fg-selected; + -fx-icon-color: -color-button-fg-selected; +} +.toggle-button:show-mnemonics:selected > .mnemonic-underline { + -fx-stroke: -color-button-fg-selected; +} +.toggle-button:selected.left-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.center-pill:focused { + -fx-background-insets: 0, 1px; +} +.toggle-button:selected.right-pill:focused { + -fx-background-insets: 0, 1px; +} + +.toggle-switch { + -fx-thumb-move-animation-time: 200; +} +.toggle-switch > .label-container > .label { + -fx-font-size: 1em; + -fx-text-fill: -color-fg-default; + -fx-padding: 2px 6px 2px 0; +} +.toggle-switch > .thumb { + -fx-background-color: -color-border-default, -color-fg-emphasis; + -fx-background-insets: 0, 2px; + -fx-background-radius: 10em; + -fx-padding: 0.85em; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + -fx-opacity: 0.8; +} +.toggle-switch > .thumb-area { + -fx-background-radius: 1em; + -fx-background-color: -color-border-default, -color-bg-subtle; + -fx-background-insets: 0, 1px; + -fx-padding: 0.85em 1.4em 0.85em 1.4em; +} +.toggle-switch:selected > .thumb { + -fx-background-color: -color-accent-emphasis, -color-fg-emphasis; + -fx-opacity: 1; +} +.toggle-switch:selected > .thumb-area { + -fx-background-color: -color-accent-emphasis; + -fx-background-insets: 0; +} +.toggle-switch:disabled { + -fx-opacity: 0.4; +} + +.tool-bar { + -fx-background-color: -color-border-muted, -color-bg-subtle; + -fx-background-insets: 0, 0 0 1px 0; + -fx-padding: 4px 0.3em 4px 0.3em; + -fx-spacing: 4px; + -fx-alignment: CENTER_LEFT; +} +.tool-bar > .container > .button, +.tool-bar > .container > .menu-button, +.tool-bar > .container > .split-menu-button { + -color-button-bg: -color-bg-subtle; + -fx-background-insets: 0; +} +.tool-bar > .container .toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-bg-selected: -color-base-2; + -color-button-fg-selected: -color-fg-default; + -fx-background-insets: 0; +} +.tool-bar > .container > .separator { + -fx-orientation: vertical; +} +.tool-bar > .tool-bar-overflow-button { + -fx-padding: 0 0.3em 0 4px; +} +.tool-bar > .tool-bar-overflow-button > .arrow { + -fx-shape: "M5.06 5 4 6.06 7.94 10 4 13.94 5.06 15l5-5z M11 5 9.94 6.06 13.88 10l-3.94 3.94L11 15l5-5z"; + -fx-scale-shape: false; + -fx-background-color: -color-fg-default; +} +.tool-bar:vertical { + -fx-background-insets: 0, 0 1px 0 0; + -fx-padding: 0.3em 4px 0.3em 4px; + -fx-alignment: TOP_LEFT; +} +.tool-bar:vertical > .container > .separator { + -fx-orientation: horizontal; +} +.tool-bar:vertical > .tool-bar-overflow-button { + -fx-padding: 4px 0 0.3em 0; +} +.tool-bar:vertical.right { + -fx-background-insets: 0, 0 0 0 1px; +} +.tool-bar.bottom { + -fx-background-insets: 0, 1px 0 0 0; +} + +.tooltip { + -fx-background-color: -color-border-default, -color-bg-overlay; + -fx-background-insets: 0, 1px; + -fx-text-fill: -color-fg-default; + -fx-background-radius: 4px; + -fx-padding: 8px 12px 8px 12px; + -fx-opacity: 0.85; + -fx-effect: dropshadow(three-pass-box, -color-shadow-default, 6px, 0.3, 0, 2); +} diff --git a/src/Resources/css/primer-pamguard.css b/src/Resources/css/primer-pamguard.css new file mode 100644 index 00000000..1e28539e --- /dev/null +++ b/src/Resources/css/primer-pamguard.css @@ -0,0 +1,779 @@ + + +{ + -color-dark: #010409; + -color-light: #ffffff; + -color-base-0: #f0f6fc; + -color-base-1: #c9d1d9; + -color-base-2: #b1bac4; + -color-base-3: #8b949e; + -color-base-4: #6e7681; + -color-base-5: #484f58; + -color-base-6: #30363d; + -color-base-7: #21262d; + -color-base-8: #161b22; + -color-base-9: #0d1117; + -color-accent-0: #cae8ff; + -color-accent-1: #a5d6ff; + -color-accent-2: #79c0ff; + -color-accent-3: #58a6ff; + -color-accent-4: #388bfd; + -color-accent-5: #1f6feb; + -color-accent-6: #1158c7; + -color-accent-7: #0d419d; + -color-accent-8: #0c2d6b; + -color-accent-9: #051d4d; + -color-success-0: #aff5b4; + -color-success-1: #7ee787; + -color-success-2: #56d364; + -color-success-3: #3fb950; + -color-success-4: #2ea043; + -color-success-5: #238636; + -color-success-6: #196c2e; + -color-success-7: #0f5323; + -color-success-8: #033a16; + -color-success-9: #04260f; + -color-warning-0: #f8e3a1; + -color-warning-1: #f2cc60; + -color-warning-2: #e3b341; + -color-warning-3: #d29922; + -color-warning-4: #bb8009; + -color-warning-5: #9e6a03; + -color-warning-6: #845306; + -color-warning-7: #693e00; + -color-warning-8: #4b2900; + -color-warning-9: #341a00; + -color-danger-0: #ffdcd7; + -color-danger-1: #ffc1ba; + -color-danger-2: #ffa198; + -color-danger-3: #ff7b72; + -color-danger-4: #f85149; + -color-danger-5: #da3633; + -color-danger-6: #b62324; + -color-danger-7: #8e1519; + -color-danger-8: #67060c; + -color-danger-9: #490202; + -color-fg-default: #c9d1d9; + -color-fg-muted: #8b949e; + -color-fg-subtle: #6e7681; + -color-fg-emphasis: #ffffff; + -color-bg-default: #0d1117; + -color-bg-overlay: #0d1117; + -color-bg-subtle: #161b22; + -color-bg-inset: #010409; + -color-border-default: #30363d; + -color-border-muted: #21262d; + -color-border-subtle: rgba(240, 246, 252, 0.1); + -color-shadow-default: #010409; + -color-neutral-emphasis-plus: #6e7681; + -color-neutral-emphasis: #6e7681; + -color-neutral-muted: rgba(110, 118, 129, 0.4); + -color-neutral-subtle: rgba(110, 118, 129, 0.1); + -color-accent-fg: #58a6ff; + -color-accent-emphasis: #1f6feb; + -color-accent-muted: rgba(56, 139, 253, 0.4); + -color-accent-subtle: rgba(56, 139, 253, 0.15); + -color-warning-fg: #d29922; + -color-warning-emphasis: #9e6a03; + -color-warning-muted: rgba(187, 128, 9, 0.4); + -color-warning-subtle: rgba(187, 128, 9, 0.15); + -color-success-fg: #3fb950; + -color-success-emphasis: #238636; + -color-success-muted: rgba(46, 160, 67, 0.4); + -color-success-subtle: rgba(46, 160, 67, 0.15); + -color-danger-fg: #f85149; + -color-danger-emphasis: #da3633; + -color-danger-muted: rgba(248, 81, 73, 0.4); + -color-danger-subtle: rgba(248, 81, 73, 0.15); + -color-chart-1: #f3622d; + -color-chart-2: #fba71b; + -color-chart-3: #57b757; + -color-chart-4: #41a9c9; + -color-chart-5: #4258c9; + -color-chart-6: #9a42c8; + -color-chart-7: #c84164; + -color-chart-8: #888888; + -color-chart-1-alpha70: rgba(243, 98, 45, 0.7); + -color-chart-2-alpha70: rgba(251, 167, 27, 0.7); + -color-chart-3-alpha70: rgba(87, 183, 87, 0.7); + -color-chart-4-alpha70: rgba(65, 169, 201, 0.7); + -color-chart-5-alpha70: rgba(66, 88, 201, 0.7); + -color-chart-6-alpha70: rgba(154, 66, 200, 0.7); + -color-chart-7-alpha70: rgba(200, 65, 100, 0.7); + -color-chart-8-alpha70: rgba(136, 136, 136, 0.7); + -color-chart-1-alpha20: rgba(243, 98, 45, 0.2); + -color-chart-2-alpha20: rgba(251, 167, 27, 0.2); + -color-chart-3-alpha20: rgba(87, 183, 87, 0.2); + -color-chart-4-alpha20: rgba(65, 169, 201, 0.2); + -color-chart-5-alpha20: rgba(66, 88, 201, 0.2); + -color-chart-6-alpha20: rgba(154, 66, 200, 0.2); + -color-chart-7-alpha20: rgba(200, 65, 100, 0.2); + -color-chart-8-alpha20: rgba(136, 136, 136, 0.2); + + -fx-pambackground: rgba(238,238,238); + -fx-darkbackground: -color-bg-default; + -fx-darkbackground-trans: rgba(13, 17, 23,0.90); + -fx-highlight: -color-base-6; + -fx-highlight_border: -color-button-fg; + -fx-text: -color-fg-default; + -fx-border_col: -color-border-default; + -fx-icon_col: -color-fg-default; +} + +.root { + -fx-background-color:-fx-darkbackground; + -fx-font-size: 12px; + -fx-background-radius: inherit; + -fx-background-insets: inherit; + -fx-padding: 5px 5px 5px 5px; +} + +/******************************************************************************* + * * + * Panes * + * * + ******************************************************************************/ + +.pane { + -fx-background-color: -fx-darkbackground; +} + +.pane-trans{ + -fx-background-color: -fx-darkbackground-trans; +} + +.pane-opaque { + -fx-background-color: -fx-pambackground; +} + +/*for plot panes*/ +.pane-plot { + -fx-background-color: -fx-plotbackground; +} + + +.button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-6; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 8px 12px 8px 12px; +} + +.menu-button, +.split-menu-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-6; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -fx-padding: 0; + -fx-alignment: CENTER_LEFT; +} + +.menu-button.accent, +.split-menu-button.accent { + -color-button-bg: -color-accent-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-accent-emphasis; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-accent-emphasis; + -color-button-bg-focused: -color-accent-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-accent-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.accent.button-outlined, +.split-menu-button.accent.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.accent.flat, +.split-menu-button.accent.flat { + -color-button-fg: -color-accent-fg; + -color-button-bg-hover: -color-accent-subtle; +} +.menu-button.success, +.split-menu-button.success { + -color-button-bg: -color-success-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-success-emphasis; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-success-emphasis; + -color-button-bg-focused: -color-success-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-success-emphasis; + -color-button-bg-pressed: -color-success-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.success.button-outlined, +.split-menu-button.success.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.success.flat, +.split-menu-button.success.flat { + -color-button-fg: -color-success-fg; + -color-button-bg-hover: -color-success-subtle; +} +.menu-button.danger, +.split-menu-button.danger { + -color-button-bg: -color-danger-emphasis; + -color-button-fg: -color-fg-emphasis; + -color-button-border: -color-danger-emphasis; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; + -color-button-border-hover: -color-danger-emphasis; + -color-button-bg-focused: -color-danger-6; + -color-button-fg-focused: -color-fg-emphasis; + -color-button-border-focused: -color-danger-emphasis; + -color-button-bg-pressed: -color-danger-emphasis; + -color-button-fg-pressed: -color-fg-emphasis; + -color-button-border-pressed: transparent; +} +.menu-button.danger.button-outlined, +.split-menu-button.danger.button-outlined { + -color-button-bg: -color-bg-default; + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-emphasis; + -color-button-fg-hover: -color-fg-emphasis; +} +.menu-button.danger.flat, +.split-menu-button.danger.flat { + -color-button-fg: -color-danger-fg; + -color-button-bg-hover: -color-danger-subtle; +} +.menu-button.flat, +.split-menu-button.flat { + -color-button-bg: transparent; + -color-button-fg: -color-fg-default; + -color-button-border: transparent; + -color-button-bg-hover: -color-bg-subtle; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-bg-subtle; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; +} + + +.toggle-button { + -color-button-bg: -color-bg-subtle; + -color-button-fg: -color-fg-default; + -color-button-border: -color-border-default; + -color-button-bg-hover: -color-base-6; + -color-button-fg-hover: -color-button-fg; + -color-button-border-hover: -color-button-border; + -color-button-bg-focused: -color-button-bg; + -color-button-fg-focused: -color-button-fg; + -color-button-border-focused: -color-accent-emphasis; + -color-button-bg-pressed: -color-bg-subtle; + -color-button-fg-pressed: -color-button-fg; + -color-button-border-pressed: transparent; + -fx-background-color: -color-button-border, -color-button-bg; + -fx-background-insets: 0, 1px; + -fx-background-radius: 4px; + -fx-graphic-text-gap: 6px; + -fx-text-fill: -color-button-fg; + -fx-alignment: CENTER; + -color-button-bg-selected: -color-accent-emphasis; + -color-button-fg-selected: -color-fg-emphasis; + -fx-padding: 8px 12px 8px 12px; +} + + +.list-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} + +.table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} + +.titled-pane > .title > .text { + -fx-font-size: 1em; +} + +.tree-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; +} + +.tree-table-view { + -color-cell-bg: -color-bg-default; + -color-cell-fg: -color-fg-default; + -color-cell-bg-selected: -color-base-6; + -color-cell-fg-selected: -color-fg-default; + -color-cell-bg-odd: -color-bg-subtle; + -color-cell-border: -color-border-default; + -fx-border-color: -color-cell-border; + -fx-border-width: 1px; + -fx-border-radius: 0; + -color-header-bg: -color-bg-subtle; + -color-header-fg: -color-fg-default; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected { + -color-cell-fg: -color-cell-fg-selected; + -fx-background-color: -color-cell-border, -color-cell-bg-selected; +} + +/******************************************************************************* + * * + * ikonli icons * + * * + ******************************************************************************/ + +#module-pane .ikonli-font-icon { + -fx-icon-color: black; +} + + +.titled-pane { + -fx-background-color: -color-bg-default; + -fx-text-fill: -color-fg-default; + -fx-effect: none; +} + + +/**************************************************************** + + ScrollPane + +****************************************************************/ +.scroll-pane { + -fx-background: #0d1117; + -fx-background-color: transparent; +} + +.scroll-pane > .viewport { + -fx-background-color: transparent; +} + +.scroll-pane-dark { + -fx-background: -fx-darkbackground; + -fx-background-color: -fx-darkbackground; +} + + +/******************************************************************************* + * * + * Hiding Tab * + * * + ******************************************************************************/ + #hide-tab { + -fx-background-color: transparent; + -fx-border-radius: 5 5 0 0; + -fx-background-radius: 5 5 0 0; + -fx-border-color: -fx-border_col; +} + + #show-tab { + -fx-background-color: transparent; + -fx-border-radius: 5 5 0 0; + -fx-background-radius: 5 5 0 0; + -fx-border-color: -fx-border_col; +} + + #hide-tab-highlight { + -fx-background-color: -fx-highlight; + -fx-border-radius: 5 5 0 0; + -fx-background-radius: 5 5 0 0; + -fx-border-color: -fx-highlight_border; +} + + + +/******************************************************************************* + * * + * Button * + * * + ******************************************************************************/ + +/*.button{ + -fx-text-fill: white; + -fx-background-color: -fx-darkbackground; + -fx-border-color: -fx-border_col; + -fx-border-radius: 5; + -fx-background-radius:6; + -fx-padding: 3 6 6 6; +}*/ + +/*.button:hover{ + -fx-background-color: -fx-highlight; + -fx-border-color: -fx-highlight_border; +} + +.button:selected{ + -fx-border-color: -fx-highlight; +} +*/ +/** + * Button for closing a hiding panel. Right indicates bottoms points towards the right, closing a hiding panel + * on the right hand side of the screen. These buttons have a transparent background and rounded corners. + */ + /** top-left, top-right, bottom-right, and bottom-left corners, in that order. */ +.close-button-right{ + -fx-background-color: transparent; + -fx-background-radius: 0 10 10 0; + -fx-border-color: transparent; + -fx-border-radius: 0 10 10 0; +} + + +.close-button-left{ + -fx-background-color: transparent; + -fx-background-radius: 10 0 0 10; + -fx-border-color: transparent; + -fx-border-radius: 10 0 0 10; +} + + +.close-button-top{ + -fx-background-color: transparent; + -fx-background-radius: 10 10 0 0; +-fx-border-color: transparent; + -fx-border-radius: 10 10 0 0; +} + + +.close-button-bottom{ + -fx-background-color: transparent; + -fx-background-radius: 0 0 10 10; + -fx-border-color: transparent; + -fx-border-radius: 0 0 10 10; +} + + +.close-button-bottom-trans{ + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 0 0 10 10; + -fx-border-radius: 0 0 10 10; +} + +.close-button-left-trans{ + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 10 0 0 10; + -fx-border-radius: 10 0 0 10; +} + +.close-button-right-trans{ + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 0 10 10 0; + -fx-border-radius: 0 10 10 0; +} + +.square-button{ + -fx-background-radius: 0 0 0 0; + -fx-border-radius: 0 0 0 0; +} + +.square-button-trans{ + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-background-radius: 0 0 0 0; + -fx-border-radius: 0 0 0 0; +} + +.module-hide-top{ + -fx-border-color: transparent; + -fx-background-radius: 5 5 0 0; + -fx-border-radius: 5 5 0 0; +} + +.module-hide-bottom{ + -fx-border-color: transparent; + -fx-background-radius: 0 0 5 5; + -fx-border-radius: 0 0 5 5; +} + +.delete-button:hover{ + -fx-background-color: rgba(1,0,0,0.7); +} + + +/******************************************************************************* + * * + * Pop over * + * * + ******************************************************************************/ + +.popover { + -fx-background-color: -fx-darkbackground; + -fx-background-radius: 5; + -fx-border-radius: 5; +} + +.popover > .content { + -fx-background-color: -fx-darkbackground; + -fx-background-radius: 5; + -fx-border-radius: 5; +} + +.popover > .arrow { + -fx-background-color: -fx-darkbackground; + -fx-background-radius: 5; + -fx-border-radius: 5; +} + +/*weird way to do it but need this to colour the arrow*/ +.popover > .border { + /*-fx-stroke: linear-gradient(to bottom, rgba(0,0,0, .3), rgba(0, 0, 0, .7)) ;*/ + -fx-stroke-width: 0.5; + -fx-fill: -fx-darkbackground; /* instead -fx-background-color */ +} + +/******************************************************************************* + * * + * SplitMenuButton * + * * + ******************************************************************************/ + +.split-menu-button{ + -fx-text-fill: -fx-text; + -fx-background-color: -fx-darkbackground; + -fx-border-color: -fx-border_col; + -fx-border-radius: 5; +} + + +.split-menu-button:hover{ + /*-fx-border-color: -fx-highlight_border;*/ +} + + +.split-menu-button .label { + -fx-text-fill: white; + -fx-background-color: -fx-darkbackground; + -fx-border-radius: 5; +} + + +.split-menu-button .label:hover { + -fx-background-color: -fx-highlight; +} + + +.split-menu-button .arrow-button { + -fx-text-fill: -fx-text; + -fx-background-color: -fx-darkbackground; + -fx-border-radius: 5; +} + + +.split-menu-button .arrow-button:hover { + -fx-background-color: -fx-highlight; +} + + +/**********/ + + +.menu-item { + -fx-background-color: -color-bg-default; + -fx-padding: 8px 12px 8px 12px; +} +.menu-item > .graphic-container { + -fx-padding: 0 6px 0 0; +} +.menu-item > .label { + -fx-padding: 0 1em 0 0; + -fx-text-fill: -color-fg-default; +} +.menu-item > .left-container { + -fx-padding: 0 1em 0 0; +} +.menu-item > .right-container { + -fx-padding: 0 0 0 0.5em; +} +.menu-item:focused { + -fx-background-color: -color-base-7, -color-base-7; +} +.menu-item:disabled { + -fx-opacity: 0.4; + -fx-background-color: -color-bg-default; +} + + + +/******************************************** +* * +* Spinner * +* * +*********************************************/ + + +.spinner { + -fx-pref-width: 120px; +} + +.dialog-pane > .content { + -fx-padding: 1em 1em 1em 1em; +} + + + +/******************************************************************************* + * * + * Hiding Pane * + * * + ******************************************************************************/ + + +/** + * Button for closing a hiding panel. Right indicates bottoms points towards the right, closing a hiding panel + * on the right hand side of the screen. These buttons have a transparent background and rounded corners. + */ + /** top-left, top-right, bottom-right, and bottom-left corners, in that order. */ +.close-button-right{ + -fx-background-color: transparent; + -fx-background-radius: 0 10 10 0; + -fx-border-radius: 0 10 10 0; +} + +.close-button-right:hover { + -fx-background-color: -fx-highlight; +} + + +.close-button-left{ + -fx-background-color: transparent; + -fx-background-radius: 10 0 0 10; + -fx-border-radius: 10 0 0 10; +} + +.close-button-left:hover { + -fx-background-color: -fx-highlight; +} + + +.close-button-top{ + -fx-background-color: transparent; + -fx-background-radius: 10 10 0 0; + -fx-border-radius: 10 10 0 0; +} + + +.close-button-bottom { + -fx-background-color: transparent; + -fx-background-radius: 0 0 10 10; + -fx-border-radius: 0 0 10 10; +} + +.close-button-bottom:hover { + -fx-background-color: -fx-highlight; +} + + +.close-button-bottom-grey{ +-fx-border-color: transparent; + -fx-background-radius: 0 0 10 10; + -fx-border-radius: 0 0 10 10; +} + +.close-button-left-trans{ + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 10 0 0 10; + -fx-border-radius: 10 0 0 10; +} + +.close-button-left-trans:focused { + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 10 0 0 10; + -fx-border-radius: 10 0 0 10; +} + +.close-button-right-trans{ + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 0 10 10 0; + -fx-border-radius: 0 10 10 0; +} + +.close-button-right-trans:focused { + -fx-border-color: transparent; + -fx-background-color: transparent; + -fx-background-radius: 0 10 10 0; + -fx-border-radius: 0 10 10 0; +} + + +.menu-square-button { +-fx-border-color: -fx_border_col; + -fx-background-color: transparent; + -fx-background-radius: 0 0 0 0; + -fx-border-radius: 0 0 0 0; +} + diff --git a/src/audioMoth/AudioMothControl.java b/src/audioMoth/AudioMothControl.java new file mode 100644 index 00000000..793616e3 --- /dev/null +++ b/src/audioMoth/AudioMothControl.java @@ -0,0 +1,12 @@ +package audioMoth; + +import PamController.PamControlledUnit; + +public class AudioMothControl extends PamControlledUnit { + + public AudioMothControl(String unitType, String unitName) { + super(unitType, unitName); + // TODO Auto-generated constructor stub + } + +} diff --git a/src/backupmanager/stream/TestFileDates.java b/src/backupmanager/stream/TestFileDates.java index 0eacf04d..1043cd34 100644 --- a/src/backupmanager/stream/TestFileDates.java +++ b/src/backupmanager/stream/TestFileDates.java @@ -6,7 +6,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.attribute.BasicFileAttributes; -import PamUtils.PamAudioFileFilter; +import Acquisition.pamAudio.PamAudioFileFilter; import PamUtils.PamCalendar; public class TestFileDates { diff --git a/src/clickDetector/BTDisplayParameters.java b/src/clickDetector/BTDisplayParameters.java index ff1cf50b..143b3eab 100644 --- a/src/clickDetector/BTDisplayParameters.java +++ b/src/clickDetector/BTDisplayParameters.java @@ -28,11 +28,11 @@ public class BTDisplayParameters implements Serializable, Cloneable, ManagedPara public static final String[] angleTypeNames = {"Relative to array", "Relative to vessel", "Relative to north"}; /** - * Rotation options for angles. + * Rotation options for angles. These should match the above angleTypeNames. */ static public final int ROTATE_TOARRAY = 0; // no rotation, raw angles relative to the array - static public final int ROTATE_PITCHROLL = 1; // fix pitch and roll, but leave the heading relative to the array - static public final int ROTATE_HEADPITCHROLL = 2; // rotate by heading pitch and roll. + static public final int ROTATE_TOVESSEL = 1; // fix pitch and roll, but leave the heading relative to the array + static public final int ROTATE_TONORTH = 2; // rotate by heading pitch and roll. // main BT display diff --git a/src/clickDetector/ClickBTDisplay.java b/src/clickDetector/ClickBTDisplay.java index 9d12e744..b56104e2 100644 --- a/src/clickDetector/ClickBTDisplay.java +++ b/src/clickDetector/ClickBTDisplay.java @@ -1642,16 +1642,26 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett double[] rotAngles = new double[3]; rotAngles[1] = Math.toRadians(oll.getPitch()); rotAngles[2] = Math.toRadians(oll.getRoll()); - if (rType == BTDisplayParameters.ROTATE_HEADPITCHROLL) { + if (rType == BTDisplayParameters.ROTATE_TOVESSEL) { // use head as well as pitch and roll. - rotAngles[0] = Math.toRadians(oll.getHeading()); + PamVector[] vr = loc.getWorldVectors(); + if (vr != null && vr.length > 0) { + return vr[0]; + } +// rotAngles[0] = Math.toRadians(oll.getHeading()); } - if (rotAngles[0] == 0 && rotAngles[1] == 0 && rotAngles[2] == 0) { - return v; + else if (rType == BTDisplayParameters.ROTATE_TONORTH) { + PamVector[] vr = loc.getRealWorldVectors(); + if (vr != null && vr.length > 0) { + return vr[0]; + } } - PamQuaternion pq = new PamQuaternion(rotAngles[0], rotAngles[1], rotAngles[2]); - PamVector v2 = PamVector.rotateVector(v, pq); - return v2; +// if (rotAngles[0] == 0 && rotAngles[1] == 0 && rotAngles[2] == 0) { +// return v; +// } +// PamQuaternion pq = new PamQuaternion(rotAngles[0], rotAngles[1], rotAngles[2]); +// PamVector v2 = PamVector.rotateVector(v, pq); + return v; } private double angleFromYPos(int yPos) { diff --git a/src/clickDetector/ClickClassifiers/basicSweep/SweepClassifier.java b/src/clickDetector/ClickClassifiers/basicSweep/SweepClassifier.java index dfb742d1..5b814962 100644 --- a/src/clickDetector/ClickClassifiers/basicSweep/SweepClassifier.java +++ b/src/clickDetector/ClickClassifiers/basicSweep/SweepClassifier.java @@ -226,7 +226,7 @@ public class SweepClassifier implements ClickIdentifier , PamSettings { return clickDetector; } - protected int getNextFreeCode(int currCode) { + public int getNextFreeCode(int currCode) { int newCode = currCode; while (codeTaken(++newCode)); return newCode; @@ -277,7 +277,7 @@ public class SweepClassifier implements ClickIdentifier , PamSettings { * Set the params for the sweep classifier. * @params the sweep classifier params to set. */ - public void setSeepClassifierParams(SweepClassifierParameters sweepClassifierParameters) { + public void setSweepClassifierParams(SweepClassifierParameters sweepClassifierParameters) { this.sweepClassifierParameters=sweepClassifierParameters; } diff --git a/src/clickDetector/ClickParameters.java b/src/clickDetector/ClickParameters.java index 369f950d..3146b0e4 100644 --- a/src/clickDetector/ClickParameters.java +++ b/src/clickDetector/ClickParameters.java @@ -106,7 +106,10 @@ public class ClickParameters implements Serializable, Cloneable, ManagedParamete */ public int backgroundIntervalMillis = 5000; - public int clickClassifierType = ClickClassifierManager.CLASSIFY_BASIC; + /** + * The type of classifier to use - CLASSIFY_SWEEP is the default. + */ + public int clickClassifierType = ClickClassifierManager.CLASSIFY_BETTER; public boolean runEchoOnline = false; diff --git a/src/clickDetector/layoutFX/ClickSettingsPane.java b/src/clickDetector/layoutFX/ClickSettingsPane.java index f50da155..197bd958 100644 --- a/src/clickDetector/layoutFX/ClickSettingsPane.java +++ b/src/clickDetector/layoutFX/ClickSettingsPane.java @@ -6,6 +6,7 @@ import java.text.ParseException; import clickDetector.ClickControl; import clickDetector.ClickParameters; import clickDetector.layoutFX.clickClassifiers.ClickClassifyPaneFX; +import javafx.geometry.HPos; import javafx.geometry.Orientation; import javafx.geometry.Pos; import javafx.scene.Node; @@ -14,12 +15,14 @@ import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; +import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.layout.Priority; import javafx.scene.paint.Color; import javafx.scene.shape.Line; import javafx.util.StringConverter; +import net.synedra.validatorfx.Validator; import PamController.PamController; import PamController.SettingsPane; import PamDetection.RawDataUnit; @@ -43,8 +46,8 @@ import pamViewFX.fxNodes.utilityPanes.GroupedSourcePaneFX; * @author Jamie Macaulay */ public class ClickSettingsPane extends SettingsPane{ - - public static double PREF_SPINNER_WIDTH = 100; + + public static double PREF_SPINNER_WIDTH = 140; /** * Group source pane for the click settings pane. @@ -160,25 +163,35 @@ public class ClickSettingsPane extends SettingsPane{ private Tab tdoaTab; /** - * The default pane width + * The main holder pane. */ - public static double paneWidth=500; + private PamBorderPane mainPane; /** * The default pane height. */ - public static double paneHeigt=800; + public static double PREF_PANE_HEIGHT=850; /** - * The main holder pane. + * The default pane width */ - private PamBorderPane mainPane; + public static double PREF_PANE_WIDTH=550; + + + /** + * Validator which checks for errors + */ + private Validator clickValidator; + + public ClickSettingsPane(ClickControl clickControl){ super(null); this.clickControl=clickControl; mainPane= new PamBorderPane(); + clickValidator = new Validator(); + pamTabbedPane=new PamTabPane(); pamTabbedPane.setAddTabButton(false); pamTabbedPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE); @@ -187,49 +200,49 @@ public class ClickSettingsPane extends SettingsPane{ PamVBox detectionPane=new PamVBox(); detectionPane.setSpacing(20); detectionPane.getChildren().add(createClickDetectionPane()); - - + + PamHBox holder=new PamHBox(); holder.setSpacing(20); holder.getChildren().addAll(createClickLengthPane(), createClickTriggerPane()); detectionPane.getChildren().add(holder); - + detectionPane.getChildren().add(createTriggerGraph()); //add everything to tabs. pamTabbedPane.getTabs().add(new Tab("Click Detection", detectionPane)); clickDelayPane=createDelayPane(); - pamTabbedPane.getTabs().add(tdoaTab=new Tab("Click TDOA", clickDelayPane.getContentNode())); + pamTabbedPane.getTabs().add(tdoaTab=new Tab("TDOA and Echoes", clickDelayPane.getContentNode())); tdoaTab.setOnSelectionChanged((event)->{ if (pamTabbedPane.getSelectionModel().getSelectedItem()==tdoaTab){ - System.out.println("clickDelayPane: "+clickDelayPane); + //System.out.println("clickDelayPane: "+clickDelayPane); //need to update the tab with a copy of the current click params. clickDelayPane.setParams(clickClassificationPane.getParams(clickParameters.clone())); } }); - - + + //pre filter pane. preFilter=new FilterPaneFX(Orientation.VERTICAL); pamTabbedPane.getTabs().add(new Tab("Pre Filter", preFilter.getContentNode())); - + //trigger pane triggerFilter=new FilterPaneFX(Orientation.VERTICAL); pamTabbedPane.getTabs().add(new Tab("Trigger Filter", triggerFilter.getContentNode())); - - //echo detection pane. - echoDetection= new ClickEchoPane(clickControl); - pamTabbedPane.getTabs().add(new Tab("Echo Detection", echoDetection.getContentNode())); - + + // //echo detection pane. + // echoDetection= new ClickEchoPane(clickControl); + // pamTabbedPane.getTabs().add(new Tab("Echo Detection", echoDetection.getContentNode())); + /***Note: FX does not implment click train detection in click detector****/ //classifiaction pane. - pamTabbedPane.getTabs().add(new Tab("Click Classification", clickClassificationPane=new ClickClassifyPaneFX(clickControl))); + pamTabbedPane.getTabs().add(new Tab("Classification", clickClassificationPane=new ClickClassifyPaneFX(clickControl))); //want a slightly bigger pane as a lot going on in this dialog. //Note JavaFX 8u61 + has auto DPI scaling so this is really the size of a dialog on a standard HD monitor of //reasonable size, rather than actual pixels - mainPane.setPrefSize(paneWidth, paneHeigt); + mainPane.setPrefSize(PREF_PANE_WIDTH, PREF_PANE_HEIGHT); //addTabListeners(); mainPane.setCenter(new PamBorderPane(pamTabbedPane)); @@ -267,16 +280,17 @@ public class ClickSettingsPane extends SettingsPane{ //channels, groups and trigger are all in one pane to make it easy not to make mistakes sourcePane=createClickSourcePane(); //create the source pane. - - - GridPane.setColumnSpan(sourcePane.getDataBlockBox(), 4); + + + GridPane.setColumnSpan(sourcePane.getDataBlockBox(), 2); //now create trigger pane. The trigger pane is added to the source pane. Label triggerLabel = new Label("Trigger Channels"); PamGuiManagerFX.titleFont2style(triggerLabel); sourcePane.getSourcePane().add(triggerLabel,1,2); - + triggerChannels=new Pane(); sourcePane.getSourcePane().add(triggerChannels,1,3); + GridPane.setHalignment(triggerChannels, HPos.RIGHT); createTriggerChannels(); //sourcePane.getSourcePane().add(createClickTriggerPane(), 2, 3); @@ -285,7 +299,18 @@ public class ClickSettingsPane extends SettingsPane{ // pamTabbedPane.getTabs().add(new Tab("Click Echoes", createEchoPane())); // pamTabbedPane.getTabs().add(new Tab("Click Delays", createDelayPane())); - sourcePane.setPrefWidth(paneWidth); + ColumnConstraints col1 = new ColumnConstraints(); + col1.setHgrow(Priority.ALWAYS); + + ColumnConstraints col2 = new ColumnConstraints(); + col2.setHgrow(Priority.SOMETIMES); + col2.setHalignment(HPos.RIGHT); + sourcePane.getSourcePane().getColumnConstraints().addAll(col1, col2); + + PamHBox.setHgrow(sourcePane.getChannelPane(), Priority.NEVER); + + //sourcePane.setMinWidth(PREF_PANE_WIDTH); + sourcePane.getSourcePane().setPrefWidth(PREF_PANE_WIDTH); return sourcePane; } @@ -317,7 +342,7 @@ public class ClickSettingsPane extends SettingsPane{ maxClickLength.setEditable(true); maxClickLength.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); maxClickLength.setPrefWidth(PREF_SPINNER_WIDTH); - + lengthPane.add(maxClickLength,1,1); lengthPane.add(new Label("samples"),2,1); @@ -326,7 +351,7 @@ public class ClickSettingsPane extends SettingsPane{ preSampleSpinner=new PamSpinner(0, 10000000, 100, 20); preSampleSpinner.setEditable(true); preSampleSpinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); - preSampleSpinner.setPrefWidth(PREF_SPINNER_WIDTH); + //preSampleSpinner.setPrefWidth(PREF_SPINNER_WIDTH); lengthPane.add(preSampleSpinner,1,2); lengthPane.add(new Label("samples"),2,2); @@ -336,7 +361,8 @@ public class ClickSettingsPane extends SettingsPane{ postSampleSpinner=new PamSpinner(0, 10000000, 100, 20); postSampleSpinner.setEditable(true); postSampleSpinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); - postSampleSpinner.setPrefWidth(PREF_SPINNER_WIDTH); + //postSampleSpinner.setPrefWidth(PREF_SPINNER_WIDTH); + lengthPane.add(postSampleSpinner,1,3); lengthPane.add(new Label("samples"),2,3); @@ -360,13 +386,24 @@ public class ClickSettingsPane extends SettingsPane{ else selectNoChannels(); }); - //create a list of trigger boxes + //create a list of trigger boxesc for (int i=0; i{ selectionChanged(n); + clickValidator.validate(); //make sure all nodes are resrt when one channel is ticked. }); + clickValidator.createCheck() + .dependsOn(("trigger " + n), triggerBoxes[i].selectedProperty()) + .withMethod(c -> { + if (!isATriggerSelected() ) { + c.error("At least one trigger channel needs to be selected for the module to work"); + } + }) + .decorates(triggerBoxes[n]) + .immediate(); + } populateTriggerPane(); @@ -406,7 +443,7 @@ public class ClickSettingsPane extends SettingsPane{ threshold.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); threshold.getValueFactory().valueProperty().addListener((obs, before, after)->{ clickParameters.dbThreshold=after; - clickTriggerGraph.updateWaveformGraph(this.clickParameters); + clickTriggerGraph.updateGraphFilter(); }); triggerBox.add(threshold,1,0); triggerBox.add(new Label("dB"),2,0); @@ -420,7 +457,7 @@ public class ClickSettingsPane extends SettingsPane{ longFilter.getValueFactory().valueProperty().addListener((obs, before, after)->{ clickParameters.longFilter=after; clickTriggerGraph.setLongFilter(clickParameters.longFilter); - clickTriggerGraph.updateWaveformGraph(this.clickParameters); + clickTriggerGraph.updateGraphFilter(); }); triggerBox.add(longFilter,1,1); longFilter.setPrefWidth(PREF_SPINNER_WIDTH); @@ -444,11 +481,14 @@ public class ClickSettingsPane extends SettingsPane{ shortFilter.getValueFactory().valueProperty().addListener((obs, before, after)->{ clickParameters.shortFilter=after; clickTriggerGraph.setShortFilter(clickParameters.shortFilter); - clickTriggerGraph.updateWaveformGraph(this.clickParameters); + clickTriggerGraph.updateGraphFilter(); }); shortFilter.setPrefWidth(PREF_SPINNER_WIDTH); triggerBox.add(shortFilter,1,3); + //forces the grid pane to be larger - grid panes can be a little funny. + shortFilter.setMinWidth(PREF_SPINNER_WIDTH); + triggerPane.add(triggerBox,0,1); //triggerPane.setGridLinesVisible(true); @@ -456,7 +496,7 @@ public class ClickSettingsPane extends SettingsPane{ return triggerPane; } - + private Pane createTriggerGraph() { //trigger graph Label graphLabel = new Label("Filter Graph"); @@ -469,9 +509,9 @@ public class ClickSettingsPane extends SettingsPane{ PamVBox triggerGraph = new PamVBox(); triggerGraph.setSpacing(5); triggerGraph.getChildren().addAll(graphLabel, clickTriggerGraph); - + return triggerGraph; - + } /** @@ -525,7 +565,7 @@ public class ClickSettingsPane extends SettingsPane{ } /** - * Get the current channle bitmap. + * Get the current channels bitmap. * @return integer channel bitmap */ private int getChannels(){ @@ -538,6 +578,32 @@ public class ClickSettingsPane extends SettingsPane{ } return channels; } + + + /** + * Get the number of selected trigger channels. + * @return the number of selected trigger channels. + */ + private int getNSelectedTrigger() { + int channels=getChannels(); + int n=0; + //now add correct trigger children again + for (int i = 0; i < Math.min(PamConstants.MAX_CHANNELS, triggerBoxes.length); i++) { + if ((channels & 1<0; + } + /** * Create trigger channels @@ -555,6 +621,8 @@ public class ClickSettingsPane extends SettingsPane{ triggerChannels.getChildren().add(selectAll); for (int i = 0; i < Math.min(PamConstants.MAX_CHANNELS, triggerBoxes.length); i++) { if ((channels & 1<{ return null; } -// clickParameters.rawDataSource = rawDataBlock.toString(); -// clickParameters.channelBitmap = sourcePane.getChannelList(); -// clickParameters.channelGroups = sourcePane.getChannelGroups(); -// clickParameters.groupingType = sourcePane.getGrouping(); - + // clickParameters.rawDataSource = rawDataBlock.toString(); + // clickParameters.channelBitmap = sourcePane.getChannelList(); + // clickParameters.channelGroups = sourcePane.getChannelGroups(); + // clickParameters.groupingType = sourcePane.getGrouping(); + //sets the params for source pane. sourcePane.getParams(clickParameters.getGroupedSourceParameters()); - + // if (sourcePanel.getParams() == false) return false; try { clickParameters.dbThreshold = Double.valueOf(threshold.getValue()); @@ -669,6 +737,8 @@ public class ClickSettingsPane extends SettingsPane{ return null; } } + + clickParameters = clickClassificationPane.getParams(clickParameters); } catch (Exception e){ @@ -696,12 +766,12 @@ public class ClickSettingsPane extends SettingsPane{ else { sourcePane.setSourceIndex(0); } - + sourcePane.setParams(clickParameters.getGroupedSourceParameters()); - -// sourcePane.setGrouping(clickParameters.groupingType); -// sourcePane.setChannelGroups(clickParameters.channelGroups); -// sourcePane.setChannelList(clickParameters.channelBitmap); + + // sourcePane.setGrouping(clickParameters.groupingType); + // sourcePane.setChannelGroups(clickParameters.channelGroups); + // sourcePane.setChannelList(clickParameters.channelBitmap); //click length pane minClickSep.getValueFactory().setValue(clickParameters.minSep); diff --git a/src/clickDetector/layoutFX/ClickTriggerGraph.java b/src/clickDetector/layoutFX/ClickTriggerGraph.java index f1e0b5ed..2f7b0ecf 100644 --- a/src/clickDetector/layoutFX/ClickTriggerGraph.java +++ b/src/clickDetector/layoutFX/ClickTriggerGraph.java @@ -1,15 +1,25 @@ package clickDetector.layoutFX; -import clickDetector.ClickParameters; +import java.util.ArrayList; + +import PamUtils.PamArrayUtils; +import javafx.concurrent.Task; +import javafx.geometry.Pos; import javafx.scene.chart.LineChart; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.XYChart.Data; import javafx.scene.chart.XYChart.Series; +import javafx.scene.control.ChoiceBox; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; import pamViewFX.fxNodes.PamBorderPane; +import pamViewFX.fxNodes.PamStackPane; import pamViewFX.fxNodes.pamChart.PamLineChart; -import simulatedAcquisition.sounds.ClickSound; -import simulatedAcquisition.sounds.ClickSound.WINDOWTYPE; -import simulatedAcquisition.sounds.SimSignal; +import rawDeepLearningClassifier.layoutFX.exampleSounds.ExampleSound; +import rawDeepLearningClassifier.layoutFX.exampleSounds.ExampleSoundFactory; +import rawDeepLearningClassifier.layoutFX.exampleSounds.ExampleSoundFactory.ExampleSoundCategory; +import rawDeepLearningClassifier.layoutFX.exampleSounds.ExampleSoundFactory.ExampleSoundType; +import javafx.application.Platform; /** * Graph which shows a click and associated trigger functions @@ -17,28 +27,22 @@ import simulatedAcquisition.sounds.SimSignal; * */ public class ClickTriggerGraph extends PamBorderPane { - - public final static int PORPOISE_CLICK=0; - - public final static int SPERM_WHALE=1; - private int currentClick=PORPOISE_CLICK; - private NumberAxis xAxis; private NumberAxis yAxis; - + /** * The long filter */ private double longFilter=0.00001; - + /** * The short filter */ private double shortFilter=0.01; - + /* * Random noise added to the click and surrounding snippet. */ @@ -48,48 +52,33 @@ public class ClickTriggerGraph extends PamBorderPane { private int freq2; + public static final int PREF_GRAPH_WIDTH = 400; + + /** + * The example sound factory. + */ + private ExampleSoundFactory exampleSoundFactory; + + private Series signalLevelSeries; + + private Series noiseLevelSeries; + + Task task; + private double[] waveform; - + + public ClickTriggerGraph(){ + this.exampleSoundFactory = new ExampleSoundFactory(); this.setCenter(createWaveformGraph()); this.setPrefWidth(400); //FIXME - seems to a resize bug in high DPI displays. Seems fixed in 8u60. - this.waveform=generateClickWaveform(currentClick, noise); + generateClickWaveform(ExampleSoundType.PORPOISE_CLICK, noise); } - - /** - * Update graph. Delete current data series and create new one. - */ - public void updateWaveformGraph(ClickParameters clickParameters){ - -// System.out.println(" Graph width: xAxis: "+xAxis.widthProperty().get()); -// System.out.println(" Graph width: this: "+this.widthProperty().get()); -// System.out.println(" Graph width: plotChart: "+plotChart.widthProperty().get()); -// System.out.println(" xAxisLayout:: "+xAxis.layoutXProperty().get()); -// System.out.println(" plotLayout:: "+plotChart.layoutXProperty().get()); - - Series waveformSeries = new Series(); - Series signalLevelSeries = new Series(); - Series noiseLevelSeries = new Series(); - - double[] signalLevel=calcFilter(waveform, shortFilter); - double[] noiseLevel=calcFilter(waveform, longFilter); - - for (int i=0; i(i, waveform[i])); - signalLevelSeries.getData().add(new Data(i, signalLevel[i])); - noiseLevelSeries.getData().add(new Data(i, noiseLevel[i])); - } - - plotChart.getData().removeAll(plotChart.getData()); - plotChart.getData().addAll(waveformSeries,signalLevelSeries,noiseLevelSeries); - } - - public double[] calcFilter(double[] waveform, double alpha){ double[] filterVals=new double[waveform.length]; for (int i=0; inNoiseSamples && n createWaveformGraph(){ - + + + public Pane createWaveformGraph(){ + + StackPane stackPane = new PamStackPane(); + + xAxis=new NumberAxis(); xAxis.setMaxWidth(Double.MAX_VALUE); xAxis.setLabel("Sample"); @@ -154,20 +103,39 @@ public class ClickTriggerGraph extends PamBorderPane { yAxis=new NumberAxis(-1,1,0.2); yAxis.setLabel("Amplitude"); yAxis.setAutoRanging(false); - + plotChart=new PamLineChart(xAxis, yAxis); plotChart.setMaxWidth(Double.MAX_VALUE); plotChart.setAnimated(false); plotChart.setLegendVisible(false); plotChart.setCreateSymbols(false); - plotChart.getStyleClass().add("thin-chart"); //plotChart.getXAxis().setSide(Side.BOTTOM); - return plotChart; + + ChoiceBox waveformChoice = new ChoiceBox(); + ArrayList exampleSounds = exampleSoundFactory.getExampleSoundTypes(ExampleSoundCategory.ODONTOCETES_CLICKS, ExampleSoundCategory.BAT); + + for (int i=0; i{ + generateClickWaveform(waveformChoice.getSelectionModel().getSelectedItem(), noise); + updateGraphWaveform() ; + updateGraphFilter(); + }); + waveformChoice.getSelectionModel().select(ExampleSoundType.PORPOISE_CLICK); + waveformChoice.setPrefWidth(180); + + StackPane.setAlignment(waveformChoice, Pos.TOP_RIGHT); + + + stackPane.getChildren().addAll(plotChart, waveformChoice); + + return stackPane; } - + public double getLongFilter() { return longFilter; } @@ -176,6 +144,131 @@ public class ClickTriggerGraph extends PamBorderPane { this.longFilter = longFilter; } + + /** + * Update the waveform of the species. + */ + public synchronized void updateGraphWaveform() { + plotChart.getData().clear(); + + + Series waveformSeries = new Series(); + for (int i=0; i(i, waveform[i])); + } + + plotChart.getData().add(waveformSeries); + } + /** + * Update graph. Delete current data series and create new one. + */ + public synchronized void updateGraphFilter(){ + + if (waveform.length<500) { + if (task!=null) { + task.cancel(true); + } + + //no need to do on separate thread. + plotChart.getData().remove(signalLevelSeries); + plotChart.getData().remove(noiseLevelSeries); + + plotChart.getData().add(signalLevelSeries = calcSeries(waveform, shortFilter)); + plotChart.getData().add(noiseLevelSeries = calcSeries(waveform, longFilter)); + } + else { + if (task!=null) { + if (task.isRunning()) { + return; + } + } + + /*** + * FIXME + * This is a little ridiculous but there are two bugs in JavaFX + * 1) The line chart is super slow + * 2) If you get a freeze in the FX application thread then your trigger the spinner button multiple times. + * + * Doing this on a thread gets rid of the issue but is not a particular nice solution. + */ + + task = new Task() { + @Override protected Integer call() throws Exception { + + Series signalLevelSeries1 = calcSeries(waveform, shortFilter); + Series noiseLevelSeries2 = calcSeries(waveform, longFilter); + + Platform.runLater(()->{ + // if (shortFilter!=shortFilter1 || forceChange) { + plotChart.getData().remove(signalLevelSeries); + plotChart.getData().add(signalLevelSeries1); + signalLevelSeries = signalLevelSeries1; + // } + + // if (shortFilter!=shortFilter1 || forceChange) { + plotChart.getData().remove(noiseLevelSeries); + plotChart.getData().add(noiseLevelSeries2); + noiseLevelSeries = noiseLevelSeries2; + // } + + }); + + return 0; + } + }; + + Thread th = new Thread(task); + th.setDaemon(true); + th.start(); + } + } + + private Series calcSeries(double[] waveform, double alpha){ + Series signalLevelSeries1 = new Series(); + double[] signalLevel=calcFilter(waveform, alpha); + + for (int i=0; i(i, signalLevel[i])); + } + + return signalLevelSeries1; + + } + + /** + * Generate a click waveform with some added noise. + * @param type - the type of click e.g. ClickTriggerGraph.PORPOISE_CLICK. + * @param noise. 0 to 1. 1 means max noise amplitude will be same as maximum click amplitude. + * @return click and noise waveform. + */ + private void generateClickWaveform(ExampleSoundType selectedItem, double noise) { + + ExampleSound sound = this.exampleSoundFactory.getExampleSound(selectedItem); + + double sR = sound.getSampleRate(); + + //System.out.println("Waveform: " + sound.getWave().length + " " + selectedItem); + + double[] clickWave = PamArrayUtils.divide( sound.getWave(), PamArrayUtils.max( sound.getWave())); + //now need to work out how many noise samples to add. Use the length of the click + int nNoiseSamples=Math.min((int) (clickWave.length), sound.getWave().length >2000? 0 : 100); + double[] waveform=new double[2*nNoiseSamples + clickWave.length]; + int n=0; + double[] signal=clickWave; + for (int i=0; inNoiseSamples && n + * Note that this is a copy...ish of the swing frameowrk - wouldn't od things this way usually. * @author Jamie Macaulay * */ @@ -43,7 +46,7 @@ public class ClickClassifyPaneFX extends PamStackPane { private ClickControl clickControl; - private CheckBox runOnlineCheckBox; + private PamToggleSwitch runOnlineCheckBox; private CheckBox discardClicksCheckBox; @@ -120,16 +123,16 @@ public class ClickClassifyPaneFX extends PamStackPane { classifierComboBox.getItems().add(clickControl.getClassifierManager().getClassifierName(i)); classifierComboBox.setOnAction((action)->{ //get the current click identifier. - System.out.println("ClickClassifyPaneFX:setOnAction: " +classifierComboBox.getSelectionModel().getSelectedIndex()); + //System.out.println("ClickClassifyPaneFX:setOnAction: " +classifierComboBox.getSelectionModel().getSelectedIndex()); currentClickIdentifier=clickControl.getClassifierManager(). - getClassifier(classifierComboBox.getSelectionModel().getSelectedIndex()); + getClassifier(classifierComboBox.getSelectionModel().getSelectedIndex()); //change the centre pane to classifier specific pane setCenterPane(); }); } - runOnlineCheckBox=new CheckBox("Run Classifier"); - discardClicksCheckBox=new CheckBox("Discdard Classified Clicks"); + runOnlineCheckBox=new PamToggleSwitch("Run Classifier"); + //discardClicksCheckBox=new CheckBox("Discdard Classified Clicks"); PamHBox pamHBox=new PamHBox(); pamHBox.setAlignment(Pos.CENTER); @@ -168,6 +171,9 @@ public class ClickClassifyPaneFX extends PamStackPane { //System.out.println("ClickClassifyPaneFX:setParams(): " +classifierComboBox.getSelectionModel().getSelectedIndex()); classifierComboBox.getSelectionModel().select(clickParameters.clickClassifierType); + + //System.out.println("ClickClassifyPaneFX: setParams: get selected classifier is: " + clickParameters.clickClassifierType); + //set classifier parameters if (currentClickIdentifier!=null && currentClickIdentifier.getClassifierPane()!=null) { this.currentClickIdentifier.getClassifierPane().setParams(); @@ -180,6 +186,8 @@ public class ClickClassifyPaneFX extends PamStackPane { //System.out.println("ClickClassifyPaneFX:getParams(): " +classifierComboBox.getSelectionModel().getSelectedIndex()); clickParameters.clickClassifierType=classifierComboBox.getSelectionModel().getSelectedIndex(); + + //System.out.println("ClickClassifyPaneFX: getParams: get selected classifier is: " + clickParameters.clickClassifierType); if (currentClickIdentifier != null && currentClickIdentifier.getClassifierPane() != null) { currentClickIdentifier.getClassifierPane().getParams(); } diff --git a/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierPaneFX.java b/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierPaneFX.java index 44544234..e9a0979b 100644 --- a/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierPaneFX.java +++ b/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierPaneFX.java @@ -38,6 +38,14 @@ public class SweepClassifierPaneFX extends BasicIdentifierPaneFX { @Override public void setClassifierPane(ClickTypeProperty clickTypeProperty){ SweepClassifierSetPaneFX sweepPane=new SweepClassifierSetPaneFX(sweepClickClassifier); + + + //make it so the title of the pane is the same as the name as the classifier + getFlipPane().getAdvLabel().textProperty().unbind(); + getFlipPane().getAdvLabel().textProperty().bind( sweepPane.getNameTextProperty()); + + sweepPane.classifierItemRow = sweepClickClassifier.getSweepClassifierParams().getSetRow((SweepClassifierSet) clickTypeProperty.getClickType()); + sweepPane.setParams(clickTypeProperty); super.getClickTypeHolder().setCenter(sweepPane.getContentNode()); @@ -52,14 +60,20 @@ public class SweepClassifierPaneFX extends BasicIdentifierPaneFX { @Override public void setParams() { + sweepIdParameters = sweepClickClassifier.getSweepClassifierParams().clone(); + + //change the table tableDataChanged(); } @Override public boolean getParams() { - sweepClickClassifier.setSeepClassifierParams(sweepIdParameters); +// System.out.println("Sweep classifier getParams: " + sweepIdParameters); + if (sweepIdParameters==null) sweepIdParameters = new SweepClassifierParameters(); + + sweepClickClassifier.setSweepClassifierParams(sweepIdParameters); //remove all classifiers and add whatever is in the table. sweepClickClassifier.getSweepClassifierParams().removeAll(); diff --git a/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierSetPaneFX.java b/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierSetPaneFX.java index 8120c7ed..d5e1cbc8 100644 --- a/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierSetPaneFX.java +++ b/src/clickDetector/layoutFX/clickClassifiers/SweepClassifierSetPaneFX.java @@ -3,6 +3,7 @@ package clickDetector.layoutFX.clickClassifiers; import fftFilter.FFTFilterParams; import fftManager.FFTLengthModeled; +import javafx.beans.property.StringProperty; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Orientation; @@ -30,9 +31,13 @@ import pamViewFX.fxNodes.picker.SymbolPicker; import pamViewFX.fxNodes.utilityPanes.FreqBandPane; import pamViewFX.fxNodes.utilityPanes.PamToggleSwitch; import pamViewFX.fxNodes.utilityPanes.SimpleFilterPaneFX; +import pamViewFX.fxNodes.utilsFX.PamUtilsFX; import pamViewFX.PamGuiManagerFX; +import net.synedra.validatorfx.Validator; import PamController.SettingsPane; +import PamView.PamSymbol; +import PamView.symbol.SymbolData; import clickDetector.ClickClassifiers.basicSweep.CodeHost; import clickDetector.ClickClassifiers.basicSweep.SweepClassifier; import clickDetector.ClickClassifiers.basicSweep.SweepClassifierSet; @@ -95,7 +100,11 @@ public class SweepClassifierSetPaneFX extends SettingsPane { */ private AmplitudeBlock amplitudeBlock; - PamBorderPane mainPane = new PamBorderPane(); + private PamBorderPane mainPane = new PamBorderPane(); + + private Validator validator = new Validator(); + + public int classifierItemRow; public SweepClassifierSetPaneFX(SweepClassifier sweepClassifier){ super(null); @@ -325,6 +334,14 @@ public class SweepClassifierSetPaneFX extends SettingsPane { */ private Label lengthMS; + private ComboBox lengthTypeBox; + + private CheckBox restrictLength; + + private ColorPicker lineColourPicker; + + private ColorPicker fillColourPicker; + OptionsBox() { super("General Options", false); this.getHolderPane().setCenter(createOptionsPane()); @@ -334,6 +351,7 @@ public class SweepClassifierSetPaneFX extends SettingsPane { //create the general options private Node createOptionsPane(){ + PamGridPane pamGridPane=new PamGridPane(); pamGridPane.setHgap(5); pamGridPane.setVgap(5); @@ -343,25 +361,54 @@ public class SweepClassifierSetPaneFX extends SettingsPane { nameField=new TextField(); nameField.setPrefColumnCount(10); - pamGridPane.add(nameField, 0, 0); - PamGridPane.setColumnSpan(nameField, 2); - + pamGridPane.add(nameField, 1, 0); + PamGridPane.setColumnSpan(nameField, 8); + PamGridPane.setHgrow(nameField, Priority.ALWAYS); - pamGridPane.add(new Label("Code"), 3, 0); + validator.createCheck() + .dependsOn("speciesname", nameField.textProperty()) + .withMethod(c -> { + String userName = c.get("speciesname"); + if (userName == null || userName.length()<=0) { + c.error("The classifier must have a name"); + } + }) + .decorates(nameField) + .immediate(); + ; + + + pamGridPane.add(new Label("Code"), 0, 1); - codeSpinner=new PamSpinner (0, 500, 0, 1); + codeSpinner=new PamSpinner (1, 500, 0, 1); codeSpinner.setEditable(true); //codeSpinner.setPrefWidth(150); codeSpinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); - pamGridPane.add(codeSpinner, 1, 0); + pamGridPane.add(codeSpinner, 1, 1); // pamGridPane.add(new Label("Symbol"), 0,1); //create colour picker to allow users to change symbol colour. symbolPicker=new SymbolPicker(); - pamGridPane.add(symbolPicker, 2, 0); + pamGridPane.add(symbolPicker, 3,1); - pamGridPane.add(new Label("Symbol"), 3,0); + pamGridPane.add(new Label("Symbol"), 2,1); + + lineColourPicker = new ColorPicker(); + lineColourPicker.setStyle("-fx-color-label-visible: false ;"); + lineColourPicker.setOnAction((action)->{ + symbolPicker.setLineColour(lineColourPicker.getValue()); + }); + pamGridPane.add(lineColourPicker, 4, 1); + + + fillColourPicker = new ColorPicker(); + fillColourPicker.setStyle("-fx-color-label-visible: false ;"); + fillColourPicker.setOnAction((action)->{ + symbolPicker.setFillColour(fillColourPicker.getValue()); + }); + pamGridPane.add(fillColourPicker, 5, 1); + // //create a button to allow users to change symbol shape. // symbolColour=new ColorPicker(); @@ -371,35 +418,46 @@ public class SweepClassifierSetPaneFX extends SettingsPane { // }); //channel options - pamGridPane.add(new Label("Channels"), 0,1); + pamGridPane.add(new Label("Channels"), 0,2); channelsBox = new ComboBox(); for (int i = 0; i < 3; i++) { channelsBox.getItems().add(SweepClassifierSet.getChannelOptionsName(i)); } - pamGridPane.add(channelsBox, 1,1); + pamGridPane.add(channelsBox, 1,2); - PamGridPane.setColumnSpan(channelsBox, 7); + PamGridPane.setColumnSpan(channelsBox,8 ); //restrict parameter to click centre PamHBox clickCenterBox=new PamHBox(); clickCenterBox.setSpacing(5); - clickCenterBox.getChildren().add(new CheckBox("Analyse click ")); + clickCenterBox.getChildren().add(restrictLength = new CheckBox("Trim click")); clickLengthSpinner=new PamSpinner(4,102400,128,32); clickLengthSpinner.setEditable(true); //clickLengthSpinner.setPrefWidth(150); clickLengthSpinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); + clickLengthSpinner.valueProperty().addListener((obsVal, oldVal, newVal)->{ + setLengthLabel(); + }); clickCenterBox.getChildren().add(clickLengthSpinner); - clickCenterBox.getChildren().add(new Label("samples")); + Label samplesLabel =new Label("samples"); + clickCenterBox.getChildren().add(samplesLabel); clickCenterBox.getChildren().add(lengthMS=new Label("()")); - clickCenterBox.getChildren().add(new Label("around click center.")); + clickCenterBox.getChildren().add(lengthTypeBox = new ComboBox()); + lengthTypeBox.getItems().add("around click center"); + lengthTypeBox.getItems().add("from start of click"); clickCenterBox.setAlignment(Pos.CENTER_LEFT); - PamGridPane.setColumnSpan(clickCenterBox, 4); - PamGridPane.setHgrow(clickCenterBox, Priority.ALWAYS); - pamGridPane.add(clickCenterBox, 0,2); + + restrictLength.setOnAction((action)->{ + lengthTypeBox.setDisable(!restrictLength.isSelected()); + clickLengthSpinner.setDisable(!restrictLength.isSelected()); + samplesLabel.setDisable(!restrictLength.isSelected()); + lengthMS.setDisable(!restrictLength.isSelected()); + }); + // //column constraints // ColumnConstraints col1 = new ColumnConstraints(); @@ -414,14 +472,16 @@ public class SweepClassifierSetPaneFX extends SettingsPane { // col4.setPercentWidth(35); // // pamGridPane.getColumnConstraints().addAll(col1, col2, col3,col4); - - return pamGridPane; - + + PamVBox holder = new PamVBox(); + holder.setSpacing(5); + holder.getChildren().addAll(pamGridPane,clickCenterBox); + + return holder; } @Override public int getCode() { - // TODO Auto-generated method stub return codeSpinner.getValue(); } @@ -441,29 +501,99 @@ public class SweepClassifierSetPaneFX extends SettingsPane { float sr = sweepClassifier.getClickDetector().getSampleRate(); lengthMS.setText(String.format("(%.2f ms)", fftLength * 1000 / sr)); } + + /** + * Set the length in seconds. + */ + private void setLengthLabel() { + float sr = sweepClassifier.getClickDetector().getSampleRate(); + lengthMS.setText(String.format("(%.2f ms)", clickLengthSpinner.getValue() * 1000 / sr)); + } @Override protected void setParams() { - nameField.setText(sweepClassifierSet.getName()); - codeSpinner.getValueFactory().setValue(sweepClassifierSet.getSpeciesCode()); + + if (sweepClassifierSet == null) { + //symbolViewer.setSymbol(null); + symbolPicker.getSelectionModel().select(0); + nameField.setText(""); + setCode(sweepClassifier.getNextFreeCode(0)); + } + else { + symbolPicker.setSymbol(sweepClassifierSet.symbol == null? null : sweepClassifierSet.symbol.getSymbol()); + nameField.setText(sweepClassifierSet.getName()); + setCode(sweepClassifierSet.getSpeciesCode()); + } + + if (sweepClassifierSet == null) { + return; + } + + lengthTypeBox.getSelectionModel().select(sweepClassifierSet.restrictedBinstype); + channelsBox.getSelectionModel().select(sweepClassifierSet.channelChoices); - clickLengthSpinner.getValueFactory().setValue(sweepClassifierSet.restrictedBins); + restrictLength.setSelected(sweepClassifierSet.restrictLength); + setFFTLength(sweepClassifierSet.restrictedBins); + + +// nameField.setText(sweepClassifierSet.getName()); +// codeSpinner.getValueFactory().setValue(sweepClassifierSet.getSpeciesCode()); +// channelsBox.getSelectionModel().select(sweepClassifierSet.channelChoices); +// +// //length stuff +// clickLengthSpinner.getValueFactory().setValue(sweepClassifierSet.restrictedBins); + } @Override protected boolean getParams() { sweepClassifierSet.setName(nameField.getText()); - sweepClassifierSet.setSpeciesCode(codeSpinner.getValue()); - sweepClassifierSet.channelChoices=channelsBox.getSelectionModel().getSelectedIndex(); - sweepClassifierSet.restrictedBins=clickLengthSpinner.getValue(); + + if (this.symbolPicker.getValue()==null) { + return showWarning("You must pick a symbol"); + } + + SymbolData symbolData = new SymbolData(this.symbolPicker.getValue().getSymbol(), 10,10,true, + PamUtilsFX.fxToAWTColor(this.lineColourPicker.getValue()), PamUtilsFX.fxToAWTColor(this.fillColourPicker.getValue())); + sweepClassifierSet.symbol= new PamSymbol(symbolData); + if (sweepClassifierSet.getName().length() <= 0) { + return showWarning("You must enter a name for this type of click"); + } + sweepClassifierSet.setSpeciesCode(getCode()); + if (sweepClassifier.codeDuplicated(sweepClassifierSet, classifierItemRow) || + sweepClassifierSet.getSpeciesCode() <= 0){ + return showWarning("You must enter a unique positive integer species code"); + } + if (sweepClassifierSet.symbol == null) { + return showWarning("You must select a symbol"); + } + sweepClassifierSet.channelChoices = channelsBox.getSelectionModel().getSelectedIndex(); + sweepClassifierSet.restrictLength = restrictLength.isSelected(); + + sweepClassifierSet.restrictedBinstype = lengthTypeBox.getSelectionModel().getSelectedIndex(); + + try { + sweepClassifierSet.restrictedBins = clickLengthSpinner.getValue(); + } + catch (NumberFormatException e) { + return showWarning("Invalid Restricted length value"); + } return true; +// sweepClassifierSet.setName(nameField.getText()); +// sweepClassifierSet.setSpeciesCode(codeSpinner.getValue()); +// sweepClassifierSet.channelChoices=channelsBox.getSelectionModel().getSelectedIndex(); +// sweepClassifierSet.restrictedBins=clickLengthSpinner.getValue(); } @Override protected void disbleControls(boolean enable) { // TODO Auto-generated method stub } + + public TextField getNameLabel() { + return this.nameField; + } } @@ -1111,4 +1241,15 @@ public class SweepClassifierSetPaneFX extends SettingsPane { } + + public StringProperty getNameTextProperty() { + return optionBox.getNameLabel().textProperty(); + } + + private boolean showWarning(String string) { + PamDialogFX.showWarning(string); + return false; + } + + } diff --git a/src/clickTrainDetector/classification/standardClassifier/StandardClassifier.java b/src/clickTrainDetector/classification/standardClassifier/StandardClassifier.java index c86c2ae4..f323855a 100644 --- a/src/clickTrainDetector/classification/standardClassifier/StandardClassifier.java +++ b/src/clickTrainDetector/classification/standardClassifier/StandardClassifier.java @@ -9,10 +9,7 @@ import clickTrainDetector.classification.CTClassifier; import clickTrainDetector.classification.CTClassifierParams; import clickTrainDetector.classification.CTClassifierType; import clickTrainDetector.classification.bearingClassifier.BearingClassifier; -import clickTrainDetector.classification.bearingClassifier.BearingClassifierParams; -import clickTrainDetector.classification.idiClassifier.IDIClassification; import clickTrainDetector.classification.idiClassifier.IDIClassifier; -import clickTrainDetector.classification.simplechi2classifier.Chi2CTClassification; import clickTrainDetector.classification.simplechi2classifier.Chi2ThresholdClassifier; import clickTrainDetector.classification.templateClassifier.CTTemplateClassifier; import clickTrainDetector.layout.classification.CTClassifierGraphics; diff --git a/src/dataMap/filemaps/OfflineFileServer.java b/src/dataMap/filemaps/OfflineFileServer.java index 52f4b13b..2249eb4e 100644 --- a/src/dataMap/filemaps/OfflineFileServer.java +++ b/src/dataMap/filemaps/OfflineFileServer.java @@ -342,7 +342,7 @@ public abstract class OfflineFileServer impl return "Sound Files"; } - protected TmapPoint findFirstMapPoint(Iterator mapIterator, long startMillis, long endMillis) { + public TmapPoint findFirstMapPoint(Iterator mapIterator, long startMillis, long endMillis) { TmapPoint mapPoint, prevMapPoint = null; while (mapIterator.hasNext()) { mapPoint = mapIterator.next(); diff --git a/src/dataModelFX/DataModelModulePane.java b/src/dataModelFX/DataModelModulePane.java index 10a0ab91..5c6d4d62 100644 --- a/src/dataModelFX/DataModelModulePane.java +++ b/src/dataModelFX/DataModelModulePane.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import PamController.PamController; import PamModel.PamModuleInfo; +import atlantafx.base.theme.PrimerDark; import dataModelFX.ConnectionNodeParams.PAMConnectionNodeType; import dataModelFX.connectionNodes.ModuleIconFactory; import javafx.beans.property.ObjectProperty; @@ -12,6 +13,7 @@ import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.SnapshotParameters; +import javafx.scene.control.Button; import javafx.scene.control.Tooltip; import javafx.scene.image.ImageView; import javafx.scene.input.ClipboardContent; @@ -72,7 +74,9 @@ public class DataModelModulePane extends PamBorderPane { private PamScrollPane createPane(){ moduleSelectPane=new PamScrollPane(); - moduleSelectPane.getStylesheets().add(PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getSlidingDialogCSS()); + + moduleSelectPane.getStylesheets().add(PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getSlidingDialogCSS()); + moduleSelectPane.setPrefWidth(250); moduleSelectPane.getStyleClass().add("scroll-pane-dark"); diff --git a/src/dataModelFX/DataModelPaneFX.java b/src/dataModelFX/DataModelPaneFX.java index 384c7536..91b4aa20 100644 --- a/src/dataModelFX/DataModelPaneFX.java +++ b/src/dataModelFX/DataModelPaneFX.java @@ -16,6 +16,7 @@ import pamViewFX.fxNodes.connectionPane.StandardConnectionNode; import pamViewFX.fxNodes.connectionPane.StandardConnectionPlug; import pamViewFX.fxNodes.connectionPane.structures.ConnectionGroupStructure; import pamViewFX.fxNodes.connectionPane.structures.ConnectionStructure; +import pamViewFX.fxStyles.PamStylesManagerFX; import javafx.beans.property.ObjectProperty; import javafx.geometry.Orientation; import javafx.scene.control.SplitPane; diff --git a/src/dataModelFX/connectionNodes/ModuleProcessDiagram.java b/src/dataModelFX/connectionNodes/ModuleProcessDiagram.java index fde19f77..7134e542 100644 --- a/src/dataModelFX/connectionNodes/ModuleProcessDiagram.java +++ b/src/dataModelFX/connectionNodes/ModuleProcessDiagram.java @@ -71,7 +71,7 @@ public class ModuleProcessDiagram extends PamBorderPane { public ModuleProcessDiagram (PamControlledUnit pamControlledUnit){ - this.getStylesheets().add(PamController.getInstance().getGuiManagerFX().getPamSettingsCSS()); + //this.getStylesheets().add(PamController.getInstance().getGuiManagerFX().getPamSettingsCSS()); this.pamControlledUnit=pamControlledUnit; createUpdateTimer(); createControlDataModel(); @@ -81,7 +81,7 @@ public class ModuleProcessDiagram extends PamBorderPane { private void createControlDataModel(){ this.setMinWidth(100); this.setPrefWidth(USE_COMPUTED_SIZE); - this.setStyle("-fx-background-color: -fx-darkbackground"); + //this.setStyle("-fx-background-color: -fx-darkbackground"); this.populateDataModel(); } diff --git a/src/dataPlotsFX/layout/TDDisplayFX.java b/src/dataPlotsFX/layout/TDDisplayFX.java index cc2da642..9c6fc66c 100644 --- a/src/dataPlotsFX/layout/TDDisplayFX.java +++ b/src/dataPlotsFX/layout/TDDisplayFX.java @@ -158,7 +158,7 @@ public class TDDisplayFX extends PamBorderPane { /** * The height of the control pane. */ - final static double controlPaneHeight=63; + final static double CONTROL_PANE_HEIGHT=80; /** @@ -238,7 +238,7 @@ public class TDDisplayFX extends PamBorderPane { //create top hiding panel. controlPane=new TDControlPaneFX(tdControl,this); controlPane.setParams(tdParametersFX); - controlPane.setPrefHeight(controlPaneHeight); + controlPane.setPrefHeight(CONTROL_PANE_HEIGHT); hidingControlPane=new HidingPane(Side.TOP, controlPane, this, false ); hidingControlPane.showHidePane(tdParametersFX.showControl); diff --git a/src/dataPlotsFX/layout/TDGraphFX.java b/src/dataPlotsFX/layout/TDGraphFX.java index e1767960..661e4fc2 100644 --- a/src/dataPlotsFX/layout/TDGraphFX.java +++ b/src/dataPlotsFX/layout/TDGraphFX.java @@ -272,7 +272,7 @@ public class TDGraphFX extends PamBorderPane { * blocks. */ tdAxisSelPane = new TDDataSelPaneFX(this); - tdAxisSelPane.setPrefWidth(250); + tdAxisSelPane.setPrefWidth(280); // put pane inside a scroll pane for graph resizing PamScrollPane scrollPane = new PamScrollPane(tdAxisSelPane); // scrollPane.setFitToWidth(true); diff --git a/src/help/detectors/ClickTrainDetector/docs/ClickTrainDetector.html b/src/help/detectors/ClickTrainDetector/docs/ClickTrainDetector.html index 6c080887..9be1f7ec 100644 --- a/src/help/detectors/ClickTrainDetector/docs/ClickTrainDetector.html +++ b/src/help/detectors/ClickTrainDetector/docs/ClickTrainDetector.html @@ -498,7 +498,7 @@ plotted on the time-based display by adding Click detections to the display and then using the right

- +

diff --git a/src/matchedTemplateClassifer/MTClassifierControl.java b/src/matchedTemplateClassifer/MTClassifierControl.java index f93022b9..dc8ef4b8 100644 --- a/src/matchedTemplateClassifer/MTClassifierControl.java +++ b/src/matchedTemplateClassifer/MTClassifierControl.java @@ -7,11 +7,14 @@ import java.util.ArrayList; import javax.swing.JMenu; import javax.swing.JMenuItem; import PamController.PamControlledUnit; +import PamController.PamControlledUnitGUI; import PamController.PamControlledUnitSettings; import PamController.PamControllerInterface; +import PamController.PamGUIManager; import PamController.PamSettingManager; import PamController.PamSettings; import PamController.SettingsPane; +import PamView.WrapperControlledGUISwing; import PamView.symbol.SymbolData; import PamguardMVC.PamDataBlock; import clickDetector.ClickClassifiers.ClickTypeProvider; @@ -66,6 +69,17 @@ public class MTClassifierControl extends PamControlledUnit implements PamSetting * The offline process. */ private MTOfflineProcess mtOfflineProcess; + + /** + * The JavaFX graphics + */ + private MTControlGUI matchedClickGUIFX; + + /** + * The swing graphics - in this case the graphics are JavaFX so this calls a swing wrapper + * to hold the JavaFX graphics. + */ + private PamControlledUnitGUI matchedClickGUIGUISwing; public MTClassifierControl(String unitName) { @@ -379,6 +393,33 @@ public class MTClassifierControl extends PamControlledUnit implements PamSetting return mtOfflineProcess; } + public void setMTParams(MatchedTemplateParams newParams) { + this.matchedTemplateParams = newParams; + + } + + /** + * Get the GUI for the PAMControlled unit. This has multiple GUI options which + * are instantiated depending on the view type. + * + * @param flag. The GUI type flag defined in PAMGuiManager. + * @return the GUI for the PamControlledUnit unit. + */ + public PamControlledUnitGUI getGUI(int flag) { + if (flag == PamGUIManager.FX) { + if (matchedClickGUIFX == null) { + matchedClickGUIFX = new MTControlGUI(this); + } + return matchedClickGUIFX; + } + if (flag == PamGUIManager.SWING) { + if (matchedClickGUIGUISwing == null) { + matchedClickGUIGUISwing = new WrapperControlledGUISwing(this); + } + return matchedClickGUIGUISwing; + } + return null; + } diff --git a/src/matchedTemplateClassifer/MTControlGUI.java b/src/matchedTemplateClassifer/MTControlGUI.java new file mode 100644 index 00000000..c1bef1ef --- /dev/null +++ b/src/matchedTemplateClassifer/MTControlGUI.java @@ -0,0 +1,74 @@ +package matchedTemplateClassifer; + +import PamController.PamControlledUnitGUI; +import PamController.PamController; +import PamController.PamControllerInterface; +import PamController.PamGUIManager; +import PamController.SettingsPane; +import PamView.WrapperControlledGUISwing; +import pamViewFX.PamControlledGUIFX; +import rawDeepLearningClassifier.DLControl; +import rawDeepLearningClassifier.DLControlGUI; +import rawDeepLearningClassifier.RawDLParams; + +/** + * The JavaFX GUI for the Matched click classifier control... + * @author Jamie Macaulay + * + */ +public class MTControlGUI extends PamControlledGUIFX { + + /** + * The dl control. + */ + private MTClassifierControl mtControl; + + + public MTControlGUI(MTClassifierControl dlcontrol) { + this.mtControl = dlcontrol; + } + + /** + * The settings pane contains ALL possible setting for the module in one placed. + * Settings panes can be divided into tabs for more space etc. + * + * @param + * @return a Pane containing controls to change settings for module. + */ + public SettingsPane getSettingsPane(){ + mtControl.getSettingsPane().setParams(mtControl.getMTParams()); + return mtControl.getSettingsPane(); + } + + + @Override + public void updateParams() { + MatchedTemplateParams newParams=mtControl.getSettingsPane().getParams(mtControl.getMTParams()); + if (newParams!=null) { + mtControl.setMTParams(newParams); + } + //setup the controlled unit. + mtControl.setupControlledUnit(); + } + + @Override + public void notifyGUIChange(int changeType) { + switch (changeType) { + case PamController.INITIALIZATION_COMPLETE: + break; + case PamControllerInterface.CHANGED_PROCESS_SETTINGS: + //data source may have potentially changed. e.g. by a datamodelfx Need to set in params. + //System.out.println("FFTControl: CHANGED_PROCESS_SETTINGS : " +fftProcess.getParentDataBlock()); + if (mtControl.getParentDataBlock()!=null){ + mtControl.getMTParams().dataSourceName = mtControl.getParentDataBlock().getDataName(); + } + else mtControl.getMTParams().dataSourceName = ""; + break; + } + } + + + + +} + diff --git a/src/matchedTemplateClassifer/MTProcess.java b/src/matchedTemplateClassifer/MTProcess.java index 07c4316e..32c46040 100644 --- a/src/matchedTemplateClassifer/MTProcess.java +++ b/src/matchedTemplateClassifer/MTProcess.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import PamController.PamController; +import PamDetection.RawDataUnit; import PamUtils.complex.ComplexArray; import PamView.symbol.PamSymbolManager; import PamguardMVC.PamDataBlock; @@ -12,8 +13,10 @@ import PamguardMVC.PamInstantProcess; import PamguardMVC.PamObservable; import PamguardMVC.RawDataHolder; import Spectrogram.WindowFunction; +import clickDetector.ClickDetection; import clickDetector.ClickLength; import clickDetector.ClickClassifiers.basicSweep.SweepClassifierSet; +import clipgenerator.ClipDataUnit; import fftManager.FastFFT; import matchedTemplateClassifer.annotation.MatchedClickAnnotation; import matchedTemplateClassifer.annotation.MatchedClickAnnotationType; @@ -485,6 +488,21 @@ public class MTProcess extends PamInstantProcess { public BeskopeClassifierManager getBespokeClassifierManager() { return bespokeClassifierManager; } + + /** + * A list of data block class types which are compatible as parent data blocks + * for the PamProcess. This can return null, e.g. in the case of Acquisition + * process. + * + * @return a list of PamDataBlock sub class types which can be used as parent + * data blocks for the process. + */ + @Override + public ArrayList getCompatibleDataUnits(){ + return new ArrayList>(Arrays.asList(ClickDetection.class)); + } + + // /** // * Get the parent click data block. diff --git a/src/nidaqdev/networkdaq/NINetworkDaq.java b/src/nidaqdev/networkdaq/NINetworkDaq.java index b436663f..c7c52b19 100644 --- a/src/nidaqdev/networkdaq/NINetworkDaq.java +++ b/src/nidaqdev/networkdaq/NINetworkDaq.java @@ -9,9 +9,10 @@ import java.net.Socket; import javax.swing.JComponent; import javax.swing.Timer; -import x3.CRC16; -import x3.X3FrameDecode; -import x3.X3FrameHeader; +import org.pamguard.x3.x3.CRC16; +import org.pamguard.x3.x3.X3FrameDecode; +import org.pamguard.x3.x3.X3FrameHeader; + import networkTransfer.NetworkObject; import networkTransfer.receive.BuoyStatusDataUnit; import networkTransfer.receive.NetworkDataUser; diff --git a/src/pamViewFX/PamGuiManagerFX.java b/src/pamViewFX/PamGuiManagerFX.java index 37512661..f3de8029 100644 --- a/src/pamViewFX/PamGuiManagerFX.java +++ b/src/pamViewFX/PamGuiManagerFX.java @@ -13,12 +13,15 @@ import pamViewFX.fxNodes.PamVBox; import pamViewFX.fxNodes.internalNode.PamInternalPane; import pamViewFX.fxNodes.pamDialogFX.PamDialogFX; import pamViewFX.fxNodes.pamDialogFX.PamSettingsDialogFX; +import pamViewFX.fxStyles.PamAtlantaStyle; import pamViewFX.fxStyles.PamStylesManagerFX; import pamViewFX.pamTask.PamTaskUpdate; import userDisplayFX.UserDisplayNodeFX; import PamModel.PamModel; import PamModel.PamModuleInfo; import PamView.PamViewInterface; +import atlantafx.base.theme.PrimerDark; +import atlantafx.base.theme.PrimerLight; import dataMap.layoutFX.DataMapPaneFX; import PamController.PAMControllerGUI; import PamController.PamControlledUnit; @@ -28,6 +31,7 @@ import PamController.PamGUIManager; import PamController.PamSettingManager; import PamController.PamSettings; import dataModelFX.DataModelPaneFX; +import javafx.application.Application; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.geometry.Insets; @@ -134,11 +138,11 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { public PamGuiManagerFX(PamController pamController, Object stage) { - + this.pamController=pamController; pamGuiSettings= new PAMGuiFXSettings(); - + primaryStage= (Stage) stage; primaryStage.setOnCloseRequest(e->{ @@ -159,19 +163,22 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { */ private void start(Stage primaryStage) { + PamStylesManagerFX.getPamStylesManagerFX().setCurStyle(new PamAtlantaStyle()); + //add stage stages.add(primaryView = new PamGuiFX(primaryStage, this)); //create new data model. dataModelFX=stages.get(0).addDataModelTab(); scene = new Scene(stages.get(0)); + scene.getStylesheets().add(getPamCSS()); + +// Application.setUserAgentStylesheet(new PrimerDark().getUserAgentStylesheet()); // stages.get(0).prefWidthProperty().bind(scene.widthProperty()); // stages.get(0).prefHeightProperty().bind(scene.heightProperty()); primaryStage.setScene(scene); - // scene.getStylesheets().add(pamCSS); - scene.getStylesheets().add(getPamCSS()); //need to add this for material design icons and fontawesome icons // scene.getStylesheets().addAll(GlyphsStyle.DEFAULT.getStylePath()); @@ -458,7 +465,7 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { TabSelectionPane tabSelectionPane=new TabSelectionPane(stages.get(0)); PamSettingsDialogFX settingsDialog=new PamSettingsDialogFX(tabSelectionPane); - settingsDialog.getDialogPane().getStylesheets().add(PamController.getInstance().getGuiManagerFX().getPamSettingsCSS()); + settingsDialog.getDialogPane().getStylesheets().add(PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getDialogCSS()); settingsDialog.initStyle(StageStyle.UNDECORATED); // ChoiceDialog dialog = new ChoiceDialog<>(tabStrings.get(1), tabStrings); @@ -485,7 +492,7 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { * Get CSS for PAMGUARD setting 'look and feel' for sliding dialogs * @return the CSS for settings feels. */ - public String getPamSettingsCSS() { + public String getPamSettingsCSS() {//return new PrimerDark().getUserAgentStylesheet(); // return getClass().getResource("/Resources/css/pamSettingsCSS.css").toExternalForm(); return PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getSlidingDialogCSS(); } @@ -495,6 +502,7 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { * @return the standard CSS fro PAMGUARD. */ public String getPamCSS() { + //return new PrimerLight().getUserAgentStylesheet(); // return getClass().getResource("/Resources/css/pamCSS.css").toExternalForm(); return PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getGUICSS(); } @@ -503,8 +511,9 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { * Get CSS for PAMGUARD GUI standard 'look and feel' for regular dialogs * @return the standard CSS fro PAMGUARD. */ - public String getPamDialogCSS() { - return PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getSlidingDialogCSS(); + public String getPamDialogCSS() {//return new PrimerDark().getUserAgentStylesheet(); + + return PamStylesManagerFX.getPamStylesManagerFX().getCurStyle().getDialogCSS(); } @@ -644,7 +653,7 @@ public class PamGuiManagerFX implements PAMControllerGUI, PamSettings { mainPane.getChildren().addAll(title, namePane); dialog.getDialogPane().setContent(mainPane); - dialog.getDialogPane().getStylesheets().add(PamController.getInstance().getGuiManagerFX().getPamSettingsCSS()); + dialog.getDialogPane().getStylesheets().add(this.getPamDialogCSS()); //add listener to prevent close request if the dialog final Button btOk = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK); diff --git a/src/pamViewFX/PamGuiTabFX.java b/src/pamViewFX/PamGuiTabFX.java index 569d1084..cf03e5d2 100644 --- a/src/pamViewFX/PamGuiTabFX.java +++ b/src/pamViewFX/PamGuiTabFX.java @@ -166,6 +166,8 @@ public class PamGuiTabFX extends PamTabFX { //create a new GUI frame. PamGuiFX pamGUIFX=new PamGuiFX(tabPane, newStage, pamGui.getPamGuiManagerFX()); pamGUIFX.getStylesheets().add(pamGui.getPamGuiManagerFX().getPamCSS()); + + //need to add PamGUIFX to list in PamGUIManagerFX. pamGui.getPamGuiManagerFX().getPamGuiFXList().add(pamGUIFX); newStage.setOnCloseRequest(e->{ diff --git a/src/pamViewFX/fxNodes/PamSpinner.java b/src/pamViewFX/fxNodes/PamSpinner.java index bf0b1c6c..2335237c 100644 --- a/src/pamViewFX/fxNodes/PamSpinner.java +++ b/src/pamViewFX/fxNodes/PamSpinner.java @@ -18,50 +18,50 @@ public class PamSpinner extends Spinner{ * Default widths are way off in JavaFX for spinners. */ // private static final double PAMSPINNER_PREF_WIDTH = USE_COMPUTED_SIZE; - private static final double PAMSPINNER_PREF_WIDTH = 100; + //private static final double PAMSPINNER_PREF_WIDTH = 100; public PamSpinner() { super(); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); // TODO Auto-generated constructor stub } public PamSpinner(double min, double max, double initialValue, double amountToStepBy) { super(min, max, initialValue, amountToStepBy); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); addDefocusConverter(); } public PamSpinner(double min, double max, double initialValue) { super(min, max, initialValue); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); addDefocusConverter(); } public PamSpinner(int min, int max, int initialValue, int amountToStepBy) { super(min, max, initialValue, amountToStepBy); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); addDefocusConverter(); } public PamSpinner(int min, int max, int initialValue) { super(min, max, initialValue); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); addDefocusConverter(); } public PamSpinner(ObservableList arg0) { super(arg0); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); addDefocusConverter(); } public PamSpinner(SpinnerValueFactory arg0) { super(arg0); addDefocusConverter(); - this.setPrefWidth(PAMSPINNER_PREF_WIDTH); + //this.setPrefWidth(PAMSPINNER_PREF_WIDTH); } /** diff --git a/src/pamViewFX/fxNodes/hidingPane/pamSettingsCSS.css b/src/pamViewFX/fxNodes/hidingPane/pamSettingsCSS.css deleted file mode 100644 index cad4c7c4..00000000 --- a/src/pamViewFX/fxNodes/hidingPane/pamSettingsCSS.css +++ /dev/null @@ -1,492 +0,0 @@ -/** -* CSS for PAMGUARD settings panels. These are dark with clean white buttons and a cyan highlight them. -* -* Author: Jamie Macaulay; -**/ -/******************************************************************************* - * * - * Declare colour variables * - * * - ******************************************************************************/ -* { - -fx-darkbackground: rgba(60,60,60,.90); - -fx-highlight: rgba(0,204,204,.75); - -fx-highlight_border: rgba(0,204,204,1); - -fx-text: white; - -fx-border_col: white; -} - -/******************************************************************************* - * * - * Panes * - * * - ******************************************************************************/ - -.root { - -fx-background-color: -fx-darkbackground; - -fx-padding: 10; -} - -.pane { - -fx-background-color: -fx-darkbackground; -} - -.border{ - -fx-background-color: -fx-darkbackground; -} - -.grid { - -fx-background-color: -fx-darkbackground; -} - -.hBox { - -fx-background-color: -fx-darkbackground; -} - -/******************************************************************************* - * * - * Hiding Tab * - * * - ******************************************************************************/ - #hide-tab { - -fx-background-color: transparent; - -fx-border-radius: 5 5 0 0; - -fx-background-radius: 5 5 0 0; - -fx-border-color: -fx-border_col; -} - - #show-tab { - -fx-background-color: transparent; - -fx-border-radius: 5 5 0 0; - -fx-background-radius: 5 5 0 0; - -fx-border-color: -fx-border_col; -} - - #hide-tab-highlight { - -fx-background-color: -fx-highlight; - -fx-border-radius: 5 5 0 0; - -fx-background-radius: 5 5 0 0; - -fx-border-color: -fx-highlight_border; -} - -/******************************************************************************* - * * - * Label * - * * - ******************************************************************************/ - -.label{ - -fx-text-fill: -fx-text; -} - - -/******************************************************************************* - * * - * Slider * - * * - ******************************************************************************/ - - - .slider .axis { - -fx-fill: -fx-text; - -fx-stroke: -fx-text; - -fx-tick-label-fill: -fx-text; - -fx-text-fill: -fx-text; - -fx-tick-mark-stroke: -fx-text; -} - -/******************************************************************************* - * * - * Dialog Pane * - * * - ******************************************************************************/ - - .dialog-pane { - -fx-background-color: -fx-darkbackground; -} - -/******************************************************************************* - * * - * Button * - * * - ******************************************************************************/ - -.button{ - -fx-text-fill: white; - -fx-background-color: -fx-darkbackground; - -fx-border-color: -fx-border_col; - -fx-border-radius: 5; - -fx-background-radius:6; - -fx-padding: 3 6 6 6; -} - -.button:hover{ - -fx-background-color: -fx-highlight; - -fx-border-color: -fx-highlight_border; -} - -.button:selected{ - -fx-border-color: -fx-highlight; -} - -/** - * Button for closing a hiding panel. Right indicates bottoms points towards the right, closing a hiding panel - * on the right hand side of the screen. These buttons have a transparent background and rounded corners. - */ - /** top-left, top-right, bottom-right, and bottom-left corners, in that order. */ -.close-button-right{ - -fx-background-color: transparent; - -fx-background-radius: 0 10 10 0; - -fx-border-radius: 0 10 10 0; -} - - -.close-button-left{ - -fx-background-color: transparent; - -fx-background-radius: 10 0 0 10; - -fx-border-radius: 10 0 0 10; -} - - -.close-button-top{ - -fx-background-color: transparent; - -fx-background-radius: 10 10 0 0; - -fx-border-radius: 10 10 0 0; -} - - -.close-button-bottom{ - -fx-background-color: transparent; - -fx-background-radius: 0 0 10 10; - -fx-border-radius: 0 0 10 10; -} - - -.close-button-bottom-grey{ --fx-border-color: transparent; - -fx-background-radius: 0 0 10 10; - -fx-border-radius: 0 0 10 10; -} - -.close-button-left-trans{ - -fx-border-color: transparent; - -fx-background-color: transparent; - -fx-background-radius: 10 0 0 10; - -fx-border-radius: 10 0 0 10; -} - -.close-button-right-trans{ - -fx-border-color: transparent; - -fx-background-color: transparent; - -fx-background-radius: 0 10 10 0; - -fx-border-radius: 0 10 10 0; -} - -/******************************************************************************* - * * - * TextField * - * * - ******************************************************************************/ - -.text-field { - -fx-border-color: transparent; - -fx-background-color: transparent; - -fx-border-color: -fx-border_col; - -fx-border-radius: 5; - -fx-text-fill: -fx-text; -} - -.text-field:selected{ - -fx-border-color: -fx-highlight; -} - -.text-field:focused{ - -fx-border-color: -fx-highlight; -} - - -/******************************************************************************* - * * - * MenuButton * - * * - ******************************************************************************/ - -.menu-button{ - -fx-text-fill: -fx-text; - -fx-background-color: -fx-darkbackground; - -fx-border-color: rgb(255, 255, 255); - -fx-border-radius: 5; - -fx-padding: 3 6 6 6; -} - - -/******************************************************************************* - * * - * SplitMenuButton * - * * - ******************************************************************************/ - -.split-menu-button{ - -fx-text-fill: -fx-text; - -fx-background-color: -fx-darkbackground; - -fx-border-color: -fx-border_col; - -fx-border-radius: 5; -} - - -.split-menu-button:hover{ - -fx-border-color: -fx-highlight_border; -} - - -.split-menu-button .label { - -fx-text-fill: white; - -fx-background-color: -fx-darkbackground; - -fx-border-radius: 5; -} - - -.split-menu-button .label:hover { - -fx-background-color: -fx-highlight; -} - - -.split-menu-button .arrow-button { - -fx-text-fill: -fx-text; - -fx-background-color: -fx-darkbackground; - -fx-border-radius: 5; -} - - -.split-menu-button .arrow-button:hover { - -fx-background-color: -fx-highlight; -} - - -/******************************************************************************* - * * - * Radio Button * - * * - ******************************************************************************/ -.radio-button { - /* -fx-text-fill: rgb(255, 255, 255, 0.4);*/ - -fx-text-fill: -fx-text; - /* -fx-effect: dropshadow(one-pass-box , rgba(0, 0, 0, 0.6), 0, 0.0 , 0 , 1 );*/ - -fx-border-width: 0px; -} - -/******************************************************************************* - * * - * Check Box * - * * - ******************************************************************************/ - - .check-box { - /* -fx-text-fill: rgb(255, 255, 255, 0.4);*/ - -fx-text-fill: -fx-text; - /* -fx-effect: dropshadow(one-pass-box , rgba(0, 0, 0, 0.6), 0, 0.0 , 0 , 1 );*/ - -fx-border-width: 0px; -} - -/******************************************************************************* - * * - * ComboBox * - * * - ******************************************************************************/ - - -.combo-box-base{ - -fx-background-color: -fx-darkbackground; - -fx-border-color: -fx-border_col; - -fx-border-radius: 5; - -fx-padding: 3 6 6 6; -} - -.choice-box{ - -fx-background-color: -fx-darkbackground; - -fx-border-color: -fx-border_col; - -fx-border-radius: 5; - -fx-padding: 3 6 6 6; -} - - -/******************************************************************************* - * * - * MenuItem * - * * - ******************************************************************************/ - - -.menu-item .label { - -fx-text-fill: -fx-text; - /*Must be transpernt so that semi transparent colour is not added to smei transparent*/ - -fx-background-color: transparent; -} - - -.menu-item:focused { - -fx-background-color: -fx-highlight; -} - -.menu-item:focused .label { - -fx-text-fill: -fx-text; -/*Weird fix-must make transparent for correct colour to show*/ - -fx-background-color: rgba(0,204,204,0); -} - -.context-menu { - -fx-skin: "com.sun.javafx.scene.control.skin.ContextMenuSkin"; - -fx-background-color: -fx-darkbackground; - -fx-background-insets: 0, 1, 2; - -fx-background-radius: 0 6 6 6, 0 5 5 5, 0 4 4 4; -/* -fx-padding: 0.666667em 0.083333em 0.666667em 0.083333em; 8 1 8 1 */ - -fx-padding: 0.333333em 0.083333em 0.666667em 0.083333em; /* 4 1 8 1 */ -} - -/**************************************************************** - - ScrollPane - -****************************************************************/ -.scroll-pane { - -fx-background: transparent; - -fx-background-color: transparent; -} - - -/**************************************************************** - - ScrollBar - -****************************************************************/ -.scroll-bar { - -fx-background-color: -fx-darkbackground; - -fx-background-radius: 2em; -} -.scroll-bar:horizontal .track, -.scroll-bar:vertical .track { - -fx-background-color: transparent; - -fx-border-color:transparent; - -fx-background-radius: 2em; -} -.scroll-bar:vertical .track-background, -.scroll-bar:horizontal .track-background { - -fx-background-color: transparent; - -fx-background-insets: 0; - -fx-background-radius: 2em; -} -.scroll-bar:horizontal .thumb { - -fx-background-color: rgb(211,211,211); - -fx-background-insets: 4 0 4 0; - -fx-background-radius: 2em; -} -.scroll-bar:vertical .thumb { - -fx-background-color: rgb(211,211,211); - -fx-background-insets: 0 4 0 4; - -fx-background-radius: 2em; -} -.scroll-bar:horizontal .thumb:hover, -.scroll-bar:vertical .thumb:hover { - -fx-background-color: rgb(231,231,231); -} -.scroll-bar:horizontal .thumb:pressed, -.scroll-bar:vertical .thumb:pressed { - -fx-background-color: rgb(255,255,255); -} -.scroll-bar:vertical .increment-button, .scroll-bar:vertical .decrement-button { - -fx-background-color:transparent; - -fx-background-radius: 2em; - -fx-padding: 5; -} -.scroll-bar:horizontal .increment-button, .scroll-bar:horizontal .decrement-button { - -fx-background-color:transparent; - -fx-background-radius: 2em; - -fx-padding: 5; -} -.scroll-bar:horizontal .increment-arrow { - -fx-shape: "M 0 0 L 4 8 L 8 0 Z"; - -fx-background-color: rgb(211,211,211); - -fx-padding: 0.25em; - -fx-rotate: -90; -} -.scroll-bar:vertical .increment-arrow { - -fx-background-color: rgb(211,211,211); - -fx-shape: "M 0 0 L 4 8 L 8 0 Z"; - -fx-padding: 0.25em; - -fx-rotate: 0; -} -.scroll-bar:horizontal .decrement-arrow { - -fx-background-color: rgb(211,211,211); - -fx-shape: "M 0 0 L 4 8 L 8 0 Z"; - -fx-padding: 0.25em; - -fx-rotate: 90; -} -.scroll-bar:vertical .decrement-arrow { - -fx-background-color: rgb(211,211,211); - -fx-shape: "M 0 0 L 4 8 L 8 0 Z"; - -fx-padding: 0.25em; - -fx-rotate: -180; -} -.scroll-bar:vertical:focused, -.scroll-bar:horizontal:focused { - -fx-background-color: transparent,rgb(96,96,96),rgb(96,96,96); -} - -/**************************************************************** - - Spinner - -****************************************************************/ - -.spinner { - -fx-background: -fx-darkbackground; - -fx-background-color: -fx-darkbackground; - -fx-background-radius: 10; - -fx-border-radius: 10; - -fx-border-color: transparent; -} - -.spinner .text-field { - -fx-background: -fx-darkbackground; - -fx-background-color: -fx-darkbackground; - -fx-border-radius: 0 0 0 0; - -fx-padding: 7 0 7 0; - -fx-border-color: transparent; -} - -.spinner .increment-arrow-button { - -fx-text-fill: white; - -fx-background-color: -fx-darkbackground; - -fx-border-color: -fx-border_col; - -fx-border-radius: 5 5 0 0; - -fx-padding: 7 0 7 0; -} - -.spinner .increment-arrow { - -fx-background-color: white; -} - -.spinner .increment-arrow-button:hover { - -fx-background-color: -fx-highlight; - -fx-border-color: -fx-highlight_border; - -fx-background-radius: 6 6 0 0; - -fx-border-radius: 6 6 0 0; -} - -.spinner .decrement-arrow-button { - -fx-text-fill: white; - -fx-background-color: -fx-darkbackground; - -fx-border-color: -fx-border_col; - -fx-border-radius: 0 0 6 6 -} - -.spinner .decrement-arrow { - -fx-background-color: white; -} - -.spinner .decrement-arrow-button:hover { - -fx-background-color: -fx-highlight; - -fx-border-color: -fx-highlight_border; - -fx-background-radius: 0 0 6 6; - -fx-border-radius: 0 0 6 6; -} \ No newline at end of file diff --git a/src/pamViewFX/fxNodes/pamDialogFX/PamSettingsDialogFX.java b/src/pamViewFX/fxNodes/pamDialogFX/PamSettingsDialogFX.java index 694ac9cd..57fc5839 100644 --- a/src/pamViewFX/fxNodes/pamDialogFX/PamSettingsDialogFX.java +++ b/src/pamViewFX/fxNodes/pamDialogFX/PamSettingsDialogFX.java @@ -2,6 +2,7 @@ package pamViewFX.fxNodes.pamDialogFX; import java.util.Optional; +import javafx.geometry.Insets; import javafx.stage.Stage; import javafx.stage.StageStyle; import pamViewFX.fxStyles.PamStylesManagerFX; @@ -25,11 +26,13 @@ public class PamSettingsDialogFX extends PamDialogFX { this.settingsPane=settingsPane; this.setTitle(settingsPane.getName()); this.setContent(settingsPane.getContentNode()); + + // if (PamController.getInstance().getGuiManagerFX()!=null){ // this.getDialogPane().getStylesheets().add(PamController.getInstance().getGuiManagerFX().getPamSettingsCSS()); // } PamStylesManagerFX stylesManager = PamStylesManagerFX.getPamStylesManagerFX(); - this.getDialogPane().getStylesheets().add(stylesManager.getCurStyle().getSlidingDialogCSS()); + this.getDialogPane().getStylesheets().add(stylesManager.getCurStyle().getDialogCSS()); this.setOnShown((value)->{ settingsPane.paneInitialized(); }); diff --git a/src/pamViewFX/fxNodes/picker/SymbolPicker.java b/src/pamViewFX/fxNodes/picker/SymbolPicker.java index 1daea57b..f29ada23 100644 --- a/src/pamViewFX/fxNodes/picker/SymbolPicker.java +++ b/src/pamViewFX/fxNodes/picker/SymbolPicker.java @@ -1,5 +1,6 @@ package pamViewFX.fxNodes.picker; +import PamView.PamSymbol; import PamView.PamSymbolType; import javafx.geometry.Point2D; import javafx.scene.canvas.Canvas; @@ -127,7 +128,7 @@ public class SymbolPicker extends ComboBox { /** * Set the symbol with a symbol type. - * @param symbol + * @param symbol - the symbol type. */ public void setValue(PamSymbolType symbol) { for (int i=0; i { } } + /** + * Set the symbol with a symbol type. Note, replicates setValue for convenience. + * @param symbol - the symbol type. + */ + public void setSymbol(PamSymbolType symbol) { + setValue(symbol); + + } + + + } diff --git a/src/pamViewFX/fxNodes/utilityPanes/GroupedSourcePaneFX.java b/src/pamViewFX/fxNodes/utilityPanes/GroupedSourcePaneFX.java index ce8d7bf7..c8a3ebbe 100644 --- a/src/pamViewFX/fxNodes/utilityPanes/GroupedSourcePaneFX.java +++ b/src/pamViewFX/fxNodes/utilityPanes/GroupedSourcePaneFX.java @@ -3,13 +3,16 @@ package pamViewFX.fxNodes.utilityPanes; import javafx.event.ActionEvent; import javafx.event.EventHandler; +import javafx.geometry.Pos; import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.GridPane; +import javafx.scene.layout.Pane; import javafx.scene.layout.Priority; +import net.synedra.validatorfx.Validator; import pamViewFX.PamGuiManagerFX; import pamViewFX.fxNodes.PamGridPane; import pamViewFX.fxNodes.PamHBox; @@ -50,6 +53,15 @@ public class GroupedSourcePaneFX extends SourcePaneFX { */ private PamGridPane sourcePane; + /** + * Holds channels and group settings. + */ + private PamVBox channelPanel; + + /** + * Validator for channels + */ + private Validator channelValidator; public GroupedSourcePaneFX(Class sourceType, boolean hasChannels, boolean includeSubClasses, boolean autoGrouping) { @@ -64,6 +76,8 @@ public class GroupedSourcePaneFX extends SourcePaneFX { @Override protected void createPanel() { + channelValidator = new Validator(); + sourcePane=new PamGridPane(); sourcePane.setVgap(5); sourcePane.setHgap(5); @@ -90,7 +104,7 @@ public class GroupedSourcePaneFX extends SourcePaneFX { sourcePane.setMaxWidth(Double.MAX_VALUE); //create pane to hold channels. - PamVBox channelPanel=new PamVBox(); + channelPanel=new PamVBox(); channelPanel.setSpacing(5); Label channelLabel = new Label("Channels"); @@ -124,15 +138,39 @@ public class GroupedSourcePaneFX extends SourcePaneFX { selectAll.setOnAction((action)->{ if (selectAll.isSelected()) selectAllChannels(); else selectNoChannels(); + channelValidator.validate(); //makes sure any error signs are removed }); + + //create check to show at least some check boxes need to be selected. + channelValidator.createCheck() + .dependsOn(("select all"), selectAll.selectedProperty()) + .withMethod(c -> { + if (!isAChannelSelected() ) { + c.error("At least one channel needs to be selected for the module to work"); + } + }) + .decorates(selectAll) + .immediate(); + ; //create a list of channels and combo boxes for groups. if (isHasChannels()){ for (int i = 0; i < PamConstants.MAX_CHANNELS; i++){ channelBoxes[i] = new CheckBox("Channel " + i); + channelValidator.createCheck() + .dependsOn(("channel " + i), channelBoxes[i].selectedProperty()) + .withMethod(c -> { + if (!isAChannelSelected() ) { + c.error("At least one channel needs to be selected for the module to work"); + } + }) + .decorates(channelBoxes[i]) + .immediate(); + ; //channelPanel.getChildren().add(channelBoxes[i]); final int n=i; channelBoxes[i].setOnAction((action)->{ selectionChanged(n); + channelValidator.validate(); //makes sure any error signs are removed. }); groupList[i]=new ComboBox(); //System.out.println("SourcePanel.java creatPanel"+i); @@ -149,82 +187,43 @@ public class GroupedSourcePaneFX extends SourcePaneFX { PamHBox channelGroupPane=new PamHBox(); channelGroupPane.setSpacing(15); channelGroupPane.getChildren().addAll(channelPanel, autoGroupPane); + channelGroupPane.setAlignment(Pos.TOP_LEFT); sourcePane.add(channelGroupPane,0,3); //create source comboBox. this.setCenter(sourcePane); - -// //old swing layout panels -// panel = new JPanel(); -// JPanel sourcePanel = new JPanel(); -// sourcePanel.setLayout(new BorderLayout()); -// // add stuff to the panel. -// if (borderTitle != null) { -// sourcePanel.setBorder(new TitledBorder(borderTitle)); -// } -// panel.setLayout(new BorderLayout()); -//// panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); -// sourcePanel.add(BorderLayout.CENTER, sourceList = new JComboBox()); -// panel.add(BorderLayout.NORTH, sourcePanel); -// sourceList.addActionListener(this); -// if (hasChannels) { -// JPanel channelGroupPanel = new JPanel(); -// channelGroupPanel.setLayout(new BorderLayout()); -// channelGroupPanel.setBorder(new TitledBorder("Channel list and grouping")); -// JPanel channelPanel = new JPanel(); -// JPanel autoGroupPanel = new JPanel(); -// autoGroupPanel.setLayout(new BoxLayout(autoGroupPanel, BoxLayout.Y_AXIS)); -// autoGroupPanel.add(new JLabel("Auto Grouping")); -// autoGroupPanel.add(allSingles = new JRadioButton("No grouping")); -// autoGroupPanel.add(allTogether = new JRadioButton("One group")); -// autoGroupPanel.add(userGrouped = new JRadioButton("User groups")); -// allSingles.addActionListener(new GroupAction(GROUP_SINGLES)); -// allTogether.addActionListener(new GroupAction(GROUP_ALL)); -// userGrouped.addActionListener(new GroupAction(GROUP_USER)); -// ButtonGroup bg = new ButtonGroup(); -// bg.add(allSingles); -// bg.add(allTogether); -// bg.add(userGrouped); -//// channelPanel.setLayout(new BoxLayout(channelPanel, BoxLayout.Y_AXIS)); -// GridBagLayout layout; -//// channelPanel.setBorder(new TitledBorder("Channel list and grouping")); -// channelPanel.setLayout(layout = new GridBagLayout()); -// GridBagConstraints c = new GridBagConstraints(); -// c.gridwidth = 2; -// c.anchor = GridBagConstraints.WEST; -// c.gridx = c.gridy = 0; -// addComponent(channelPanel, autoGroupPanel, c); -//// addComponent(channelPanel, new JLabel("Channel list ..."), c); -// c.gridwidth = 1; -// c.insets = new Insets(0,5,0,5); -// c.gridy++; -// c.gridx = 0; -// addComponent(channelPanel, new JLabel("Channel"), c); -// c.gridx++; -// addComponent(channelPanel, new JLabel("Group"), c); -// groupList = new JComboBox[PamConstants.MAX_CHANNELS]; -// channelBoxes = new JCheckBox[PamConstants.MAX_CHANNELS]; -// for (int i = 0; i < PamConstants.MAX_CHANNELS; i++){ -// channelBoxes[i] = new JCheckBox("Channel " + i); -// groupList[i] = new JComboBox(); -// c.gridy ++; -// c.gridx = 0; -// addComponent(channelPanel, channelBoxes[i], c); -// c.gridx ++; -// addComponent(channelPanel, groupList[i], c); -//// channelPanel.add(channelBoxes[i]); -// channelBoxes[i].setVisible(false); -// groupList[i].setVisible(false); -// channelBoxes[i].addActionListener(new SelectionListener(i)); -// } -// channelGroupPanel.add(BorderLayout.WEST, autoGroupPanel); -// channelGroupPanel.add(BorderLayout.CENTER, channelPanel); -// panel.add(BorderLayout.CENTER, channelGroupPanel); -// } } + /** + * Get the validator for the channel. This can identify errors + * in + * @return + */ + public Validator getChannelValidator() { + return channelValidator; + } + + /** + * Check if + * @return + */ + private boolean isAChannelSelected() { + int channels = 0; + PamDataBlock sb = getSource(); + if (sb != null) { + // channels = sb.getChannelMap(); + channels = sb.getSequenceMap(); + } + int n=0; + //remove all channels from vertical box pane. + for (int i = 0; i < Math.min(PamConstants.MAX_CHANNELS, channelBoxes.length); i++) { + if ((channels & 1< { browseButton.setOnAction((action)->{ browseFile(false); }); + browseButton.prefHeightProperty().bind(fileBox.heightProperty()); + + PamButton browseSaveButton = new PamButton(); // browseSaveButton.setGraphic(PamGlyphDude.createPamGlyph(MaterialDesignIcon.PLUS, Color.WHITE, PamGuiManagerFX.iconSize)); browseSaveButton.setGraphic(PamGlyphDude.createPamIcon("mdi2p-plus", Color.WHITE, PamGuiManagerFX.iconSize)); @@ -82,6 +85,9 @@ public class SettingsFilePane extends SettingsPane { folderSelectPane.getChildren().addAll(fileBox, browseSaveButton, browseButton); vBox.getChildren().add(folderSelectPane); + browseSaveButton.prefHeightProperty().bind(fileBox.heightProperty()); + + fileBox.prefHeightProperty().bind(browseButton.heightProperty()); // //option to show on start up. diff --git a/src/pamViewFX/fxSettingsPanes/StorageOptionsPane.java b/src/pamViewFX/fxSettingsPanes/StorageOptionsPane.java index e94a73c2..1be42eae 100644 --- a/src/pamViewFX/fxSettingsPanes/StorageOptionsPane.java +++ b/src/pamViewFX/fxSettingsPanes/StorageOptionsPane.java @@ -10,6 +10,7 @@ import binaryFileStorage.BinaryStore; import pamViewFX.fxNodes.PamBorderPane; import pamViewFX.fxNodes.PamGridPane; import pamViewFX.fxNodes.pamDialogFX.PamDialogFX; +import pamViewFX.fxStyles.PamStylesManagerFX; import javafx.geometry.HPos; import javafx.geometry.Pos; import javafx.scene.Node; @@ -56,6 +57,8 @@ public class StorageOptionsPane extends SettingsPane{ PamGridPane gridPane=new PamGridPane(); + + Label l = new Label(" Binary Store "); l.setTextAlignment(TextAlignment.CENTER); diff --git a/src/pamViewFX/fxStyles/PamAtlantaStyle.java b/src/pamViewFX/fxStyles/PamAtlantaStyle.java new file mode 100644 index 00000000..d0c7182a --- /dev/null +++ b/src/pamViewFX/fxStyles/PamAtlantaStyle.java @@ -0,0 +1,68 @@ +package pamViewFX.fxStyles; + +/* + * PAMGUARD - Passive Acoustic Monitoring GUARDianship. + * To assist in the Detection Classification and Localisation + * of marine mammals (cetaceans). + * + * Copyright (C) 2006 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * Class defining the default CSS Style sheets to use for JavaFX displays. This class can be extended and one or more methods overridden to + * specify new CSS styles. Style sheets can be specified for 3 different categories: sliding dialogs, regular dialogs, and all other components + * (incl. displays, etc). In addition, each category can have a style sheet to use for daytime mode and one to use for nighttime mode. The + * relative URI paths to the individual style sheets are specified as private fields, and accessed through public methods. The day/night switch + * is based on the name of the current PamColors colour scheme being used. + * + * @author Jamie Macaulay + * + */ +public class PamAtlantaStyle extends PamDefaultStyle { + + /** + * Relative location of the CSS style sheet to be used for the Pamguard GUI (but not dialogs) + */ + //private String guiCSS = "/Resources/css/pamCSS.css"; + //private String guiCSS = new NordDark().getUserAgentStylesheet(); + protected String primerGuiCSS = "/Resources/css/primer-light.css"; + + + /** + * Relative location of the CSS style sheet to be used for the Pamguard standard dialogs + */ + //private String dialogCSS = "/Resources/css/pamSettingsCSS.css"; + //private String dialogCSS = new PrimerDark().getUserAgentStylesheet(); + protected String primerDialogCSS = "/Resources/css/primer-dark.css"; + + + /** + * Relative location of the CSS style sheet to be used for the Pamguard sliding dialogs + */ + //private String slidingDialogCSS = "/Resources/css/pamCSS.css"; + //private String slidingDialogCSS = new PrimerDark().getUserAgentStylesheet(); + protected String primerSlidingDialogCSS = "/Resources/css/primer-pamguard.css"; + + public PamAtlantaStyle() { + super.guiCSS = primerGuiCSS; + super.dialogCSS = primerDialogCSS; + super.slidingDialogCSS = primerSlidingDialogCSS; + + } + + +} diff --git a/src/pamViewFX/fxStyles/PamDefaultStyle.java b/src/pamViewFX/fxStyles/PamDefaultStyle.java index e0b79367..d05fe023 100644 --- a/src/pamViewFX/fxStyles/PamDefaultStyle.java +++ b/src/pamViewFX/fxStyles/PamDefaultStyle.java @@ -42,35 +42,35 @@ public class PamDefaultStyle { /** * Relative location of the CSS style sheet to be used for the Pamguard GUI (but not dialogs) */ - private String guiCSS = "/Resources/css/pamCSS.css"; + protected String guiCSS = "/Resources/css/pamCSS.css"; /** * Relative location of the CSS style sheet to be used for the Pamguard GUI when in night mode. If there * is not a style sheet specific to night mode, set it to null or point back to the guiCSS field. */ - private String guiCSSNightMode = guiCSS; + protected String guiCSSNightMode = guiCSS; /** * Relative location of the CSS style sheet to be used for the Pamguard standard dialogs */ - private String dialogCSS = "/Resources/css/pamDefaultDialogCSS.css"; + protected String dialogCSS = "/Resources/css/pamDefaultDialogCSS.css"; /** * Relative location of the CSS style sheet to be used for the Pamguard std dialogs when in night mode. If there * is not a style sheet specific to night mode, set it to null or point back to the dialogCSS field. */ - private String dialogCSSNightMode = dialogCSS; + protected String dialogCSSNightMode = dialogCSS; /** * Relative location of the CSS style sheet to be used for the Pamguard sliding dialogs */ - private String slidingDialogCSS = "/Resources/css/pamSettingsCSS.css"; + protected String slidingDialogCSS = "/Resources/css/pamSettingsCSS.css"; /** * Relative location of the CSS style sheet to be used for the Pamguard sliding dialogs when in night mode. If there * is not a style sheet specific to night mode, set it to null or point back to the slidingDialogCSS field. */ - private String slidingDialogCSSNightMode = slidingDialogCSS; + protected String slidingDialogCSSNightMode = slidingDialogCSS; /** *

Return the CSS Style sheet to be used for the Pamguard GUI (displays and such) but not the dialogs.

diff --git a/src/rawDeepLearningClassifier/layoutFX/RawDLSettingsPane.java b/src/rawDeepLearningClassifier/layoutFX/RawDLSettingsPane.java index 27ebed52..c867654d 100644 --- a/src/rawDeepLearningClassifier/layoutFX/RawDLSettingsPane.java +++ b/src/rawDeepLearningClassifier/layoutFX/RawDLSettingsPane.java @@ -50,7 +50,7 @@ import warnings.PamWarning; public class RawDLSettingsPane extends SettingsPane{ - public static double MAX_WIDTH = 250; + public static double MAX_WIDTH = 270; /** * The source for the FFT data source. @@ -181,7 +181,6 @@ public class RawDLSettingsPane extends SettingsPane{ vBox.getChildren().add(label); windowLength = new PamSpinner(0, Integer.MAX_VALUE, 10, 10000); - windowLength.setPrefWidth(100); windowLength.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); windowLength.setEditable(true); windowLength.valueProperty().addListener((obsVal, oldVal, newVal)->{ @@ -189,7 +188,6 @@ public class RawDLSettingsPane extends SettingsPane{ }); hopLength = new PamSpinner(0, Integer.MAX_VALUE, 10, 10000); - hopLength.setPrefWidth(100); hopLength.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); hopLength.setEditable(true); hopLength.valueProperty().addListener((obsVal, oldVal, newVal)->{ @@ -197,7 +195,6 @@ public class RawDLSettingsPane extends SettingsPane{ }); reMergeSeg = new PamSpinner(0, Integer.MAX_VALUE, 1, 1); - reMergeSeg.setPrefWidth(100); reMergeSeg.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL); reMergeSeg.setEditable(true); diff --git a/src/rawDeepLearningClassifier/layoutFX/exampleSounds/ExampleSoundFactory.java b/src/rawDeepLearningClassifier/layoutFX/exampleSounds/ExampleSoundFactory.java index 020339f5..b324bbc9 100644 --- a/src/rawDeepLearningClassifier/layoutFX/exampleSounds/ExampleSoundFactory.java +++ b/src/rawDeepLearningClassifier/layoutFX/exampleSounds/ExampleSoundFactory.java @@ -1,6 +1,12 @@ package rawDeepLearningClassifier.layoutFX.exampleSounds; import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import simulatedAcquisition.sounds.SimSignal; /** * The example sound factory @@ -9,6 +15,8 @@ import java.net.URL; */ public class ExampleSoundFactory { + + /** * An example sound type. * @author Jamie macaulay @@ -16,21 +24,32 @@ public class ExampleSoundFactory { */ public enum ExampleSoundType { - BAT_CALL("Bat Call (Myotis daubentonii)"), + PORPOISE_CLICK("Harbour Porpoise (Phocoena phocoena)", ExampleSoundCategory.ODONTOCETES_CLICKS), + + SPERM_WHALE("Sperm Whale (Physeter macrocephalus)", ExampleSoundCategory.ODONTOCETES_CLICKS), + + DOLPHIN("Dolphin (Delphinid)", ExampleSoundCategory.ODONTOCETES_CLICKS), + + BEAKED_WHALE("Beaked Whale (Ziphiidae)", ExampleSoundCategory.ODONTOCETES_CLICKS), - RIGHT_WHALE("Southern Right Whale (Eubalaena australis)"), + BAT_CALL("Bat Call (Myotis daubentonii)", ExampleSoundCategory.BAT), - MINKE_WHALE("Minke Whale (Balaenoptera spp.)"), + RIGHT_WHALE("Southern Right Whale (Eubalaena australis)", ExampleSoundCategory.MYSTICETES), + + MINKE_WHALE("Minke Whale (Balaenoptera spp.)", ExampleSoundCategory.MYSTICETES), - HUMPBACK_WHALE("Humpback whale (Megaptera novaeangliae) "); + HUMPBACK_WHALE("Humpback whale (Megaptera novaeangliae) ", ExampleSoundCategory.MYSTICETES); private final String text; + + private final ExampleSoundCategory soundCategory; /** * @param text */ - ExampleSoundType(final String text) { + ExampleSoundType(final String text, final ExampleSoundCategory soundCategory) { this.text = text; + this.soundCategory = soundCategory; } /* (non-Javadoc) @@ -40,8 +59,173 @@ public class ExampleSoundFactory { public String toString() { return text; } + + /** + * Get category of the example sound. + * @return the example sound category. + */ + public ExampleSoundCategory getCategory() { + return soundCategory; + } } + public enum ExampleSoundCategory {MYSTICETES, ODONTOCETES_CLICKS, OCONTOCETES_TONAL, BAT} + + /** + * Get all the example sounds for a particular category. + * @param - the category of sund to extract. + * @return the example sounds for a category. + */ + private List getAnExampleSoundTypes(ExampleSoundCategory category) { + + List exampleSounds = Arrays.asList(ExampleSoundType.values()); + + List resultSet = + exampleSounds.stream() + .filter(c -> c.getCategory().equals(category)) + .collect(Collectors.toList()); + + return resultSet; + + } + + /** + * Get all the example sounds for a set of categories. + * @param - the categories to use. + * @return the example sounds for a category. + */ + public ArrayList getExampleSoundTypes(ExampleSoundCategory... cateogry) { + + + ArrayList resultSet = new ArrayList(); + + for (int i=0; inNoiseSamples && n exampleSounds = Arrays.asList(ExampleSoundType.values()); + + List resultSet = + exampleSounds.stream() + .filter(c -> c.getCategory().equals(category)) + .collect(Collectors.toList()); + + return (ExampleSoundType[]) resultSet.toArray(); + + } } diff --git a/src/rawDeepLearningClassifier/layoutFX/exampleSounds/SimpleExampleSound.java b/src/rawDeepLearningClassifier/layoutFX/exampleSounds/SimpleExampleSound.java index d9217b50..0325b747 100644 --- a/src/rawDeepLearningClassifier/layoutFX/exampleSounds/SimpleExampleSound.java +++ b/src/rawDeepLearningClassifier/layoutFX/exampleSounds/SimpleExampleSound.java @@ -39,6 +39,21 @@ public class SimpleExampleSound implements ExampleSound{ e.printStackTrace(); } } + + + public SimpleExampleSound(URL path, int start, int end) { + try { + data = DLUtils.loadWavFile(path); + } catch (IOException | UnsupportedAudioFileException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + data = data.trim(start, end); + } + + public SimpleExampleSound(double[] wave, float sampleRate) { + this.data = new AudioData(wave, sampleRate); + } @Override public double[] getWave() { @@ -50,4 +65,5 @@ public class SimpleExampleSound implements ExampleSound{ return data.getSampleRate(); } + } diff --git a/src/zipUnpacker/ZipUnpacker.java b/src/zipUnpacker/ZipUnpacker.java index 2156e228..720b2116 100644 --- a/src/zipUnpacker/ZipUnpacker.java +++ b/src/zipUnpacker/ZipUnpacker.java @@ -16,8 +16,8 @@ import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.utils.IOUtils; +import org.pamguard.x3.x3.X3JNIEncoder; -import x3.X3JNIEncoder; import PamController.PamControlledUnitSettings; import PamController.PamController; import PamController.PamSettingManager; @@ -37,7 +37,7 @@ public class ZipUnpacker implements PamSettings { private ZipSettings zipSettings = new ZipSettings(); - private x3.X3JNIEncoder x3Encoder; + private X3JNIEncoder x3Encoder; public ZipUnpacker(PamController pamController) { super();